Skip to content

Commit

Permalink
Merge shell extension installer to main installer
Browse files Browse the repository at this point in the history
IB-7980

Signed-off-by: Raul Metsma <[email protected]>
  • Loading branch information
metsma committed May 7, 2024
1 parent 1e9d99e commit 9bf1ebb
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 43 deletions.
1 change: 0 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,6 @@ jobs:
-DCMAKE_TOOLCHAIN_FILE=${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake `
"-DLibDigiDocpp_ROOT=libs/PFiles64/libdigidocpp"
cmake --build build --target msi
cmake --build build --target msishellext
cmake --build build --target appx
- name: Archive artifacts
uses: actions/upload-artifact@v4
Expand Down
3 changes: 2 additions & 1 deletion client/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -230,11 +230,12 @@ elseif(WIN32)
-d libs_path=${LIBS_PATH}
-d client_path=$<TARGET_FILE:${PROJECT_NAME}>
-d qt_suffix=$<$<CONFIG:Debug>:d>
-d ShellExt=$<TARGET_FILE:EsteidShellExtension>
${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.wxs
${CMAKE_SOURCE_DIR}/cmake/modules/WelcomeDlg.wxs
${CMAKE_SOURCE_DIR}/cmake/modules/WixUI_Minimal.wxs
)
add_custom_target(msi DEPENDS ${PROJECT_NAME}
add_custom_target(msi DEPENDS ${PROJECT_NAME} EsteidShellExtension
COMMAND ${WIX_CMD} -o "${MSI_FILE}.msi"
#Build MSI with QT
COMMAND ${WIX_CMD} -d qt_path=${qtCore_install_prefix} -o "${MSI_FILE}.qt.msi"
Expand Down
49 changes: 8 additions & 41 deletions extensions/windows/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,25 +1,18 @@
cmake_minimum_required(VERSION 3.16)
project(digidocshellextension VERSION 3.13.9)

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

include( VersionInfo )
project(EsteidShellExtension VERSION 3.13.9)
include(VersionInfo)

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(MIDL_TARGET "x64")
set(PLATFORM "x64")
else()
set(MIDL_TARGET "win32")
set(PLATFORM "x86")
endif()

add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/EsteidShellExtension_i.h
${CMAKE_CURRENT_BINARY_DIR}/EsteidShellExtension_i.c
${CMAKE_CURRENT_BINARY_DIR}/EsteidShellExtension_p.c
COMMAND Midl.Exe ${CMAKE_CURRENT_SOURCE_DIR}/EsteidShellExtension.idl
/nologo /no_robust /char signed /Oicf /env ${MIDL_TARGET}
/nologo /char signed /Oicf /env ${MIDL_TARGET}
/I ${CMAKE_CURRENT_SOURCE_DIR}
/tlb EsteidShellExtension.tlb
/h EsteidShellExtension_i.h
Expand All @@ -29,7 +22,7 @@ add_custom_command(
VERBATIM
)

add_library(EsteidShellExtension SHARED
add_library(${PROJECT_NAME} SHARED
${CMAKE_CURRENT_BINARY_DIR}/EsteidShellExtension_i.c
dllmain.cpp
EsteidShellExtension.cpp
Expand All @@ -41,45 +34,19 @@ add_library(EsteidShellExtension SHARED
EsteidShlExt_x86.rgs
EsteidShlExt_x64.rgs
)
set_target_properties(EsteidShellExtension PROPERTIES
set_target_properties(${PROJECT_NAME} PROPERTIES
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
COMPILE_DEFINITIONS "_UNICODE;UNICODE;_MERGE_PROXYSTUB;_WINDLL"
COMPILE_OPTIONS "/guard:cf"
INCLUDE_DIRECTORIES ${CMAKE_CURRENT_BINARY_DIR}
INTERPROCEDURAL_OPTIMIZATION YES
COMPILE_OPTIONS "/guard:cf"
LINK_OPTIONS "/guard:cf"
LINK_LIBRARIES "uxtheme.lib"
SKIP_AUTOMOC ON
)

add_custom_target(msishellext DEPENDS EsteidShellExtension
COMMAND wix.exe build -nologo
-arch ${PLATFORM}
-d MSI_VERSION=${VERSION}
-d ShellExt=$<TARGET_FILE:EsteidShellExtension>
${CMAKE_CURRENT_SOURCE_DIR}/EsteidShellExtension.wxs
${CMAKE_MODULE_PATH}/WelcomeDlg.wxs
${CMAKE_MODULE_PATH}/WixUI_Minimal.wxs
-ext WixToolset.UI.wixext
-bv WixUIDialogBmp=${CMAKE_MODULE_PATH}/dlgbmp.bmp
-bv WixUIBannerBmp=${CMAKE_MODULE_PATH}/banner.bmp
-o Digidoc_ShellExt-${VERSION}$ENV{VER_SUFFIX}.${PLATFORM}.msi
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)

if(SIGNCERT)
if(CROSSSIGNCERT)
target_link_options(EsteidShellExtension PRIVATE "/INTEGRITYCHECK")
endif()
add_custom_command(TARGET EsteidShellExtension POST_BUILD
COMMAND signtool.exe sign /a /v /s MY /n "${SIGNCERT}" /fd SHA256 /du http://installer.id.ee
"$<$<BOOL:${CROSSSIGNCERT}>:/ph;/ac;${CROSSSIGNCERT}>"
/tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td SHA256 $<TARGET_FILE:EsteidShellExtension>
COMMAND_EXPAND_LISTS
)
add_custom_command(TARGET msishellext POST_BUILD
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND signtool.exe sign /a /v /s MY /n "${SIGNCERT}" /fd SHA256 /du http://installer.id.ee
/tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td SHA256
"${CMAKE_BINARY_DIR}/Digidoc_ShellExt-${VERSION}$ENV{VER_SUFFIX}.${PLATFORM}.msi"
/tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td SHA256 $<TARGET_FILE:${PROJECT_NAME}>
)
endif()
24 changes: 24 additions & 0 deletions qdigidoc4.wxs
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
<?if $(sys.BUILDARCH) = x64 ?>
<?define OpenSSLSuffix = "-x64" ?>
<!-- Separate upgrade code / component ID created for x64 installer because both 32-
and 64-bit shell extensions are installed on x64 machine and x64 installer
removes x86 component installed directly before it if same guids are used.
-->
<?define ShellExtId = "{5606A547-759D-43DA-AEEB-D3BF1D1E816D}" ?>
<?else?>
<?define OpenSSLSuffix = "" ?>
<?define ShellExtId = "{310AAB39-76FE-401B-8A7F-0F578C5F6AB5}" ?>
<?endif?>

<?if $(env.VisualStudioVersion) = "17.0" ?>
Expand All @@ -24,6 +30,7 @@
<Icon Id="qdigidoc4.ico" SourceFile="$(var.ico_path)" />
<Property Id="ARPPRODUCTICON" Value="qdigidoc4.ico" />
<Property Id="DESKTOP_SHORTCUT" Value="0" />
<Property Id="SHELL_EXTENSION" Value="0" />
<MajorUpgrade AllowSameVersionUpgrades="yes" Schedule="afterInstallInitialize" DowngradeErrorMessage=
"A newer version of [ProductName] is already installed. If you are trying to downgrade, please uninstall the newer version first." />
<Launch Condition="Installed OR (VersionNT &gt;= 601)" Message="[ProductName] requires Windows 7 or higher." />
Expand Down Expand Up @@ -139,6 +146,23 @@
<Directory Name="imageformats">
<File Source="$(var.qt_path)\..\plugins\imageformats\qsvg$(var.qt_suffix).dll" />
</Directory>
<?endif?>
<?ifdef var.ShellExt ?>
<Component Id="ShellExt" Guid="7adaa2cc-c3f5-4e2e-a38d-5d9c9730444e" Transitive="yes" Condition="SHELL_EXTENSION = 1">
<!--Does not work with multiple files -->
<!--RegistryValue Root="HKCR" Key="*\shell\[ProductName]" Type="string" Value="Sign with [ProductName]" />
<RegistryValue Root="HKCR" Key="*\shell\[ProductName]" Name="Icon" Type="string" Value=""[INSTALLFOLDER]qdigidoc4.exe",0" />
<RegistryValue Root="HKCR" Key="*\shell\[ProductName]\command" Type="string" Value=""[INSTALLFOLDER]qdigidoc4.exe" "%1"" /-->
<File Source="$(var.ShellExt)"/>
<RegistryKey Root="HKCR" Key="CLSID\$(var.ShellExtId)\InprocServer32">
<RegistryValue Type="string" Value="[INSTALLFOLDER]EsteidShellExtension.dll"/>
<RegistryValue Type="string" Name="ThreadingModel" Value="Apartment" />
</RegistryKey>
<RegistryValue Root="HKCR" Key="*\shellex\ContextMenuHandlers\DigiDoc4ShellExtension$(sys.BUILDARCH)"
Value="$(var.ShellExtId)" Type="string" />
<RegistryValue Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"
Name="$(var.ShellExtId)" Value="DigiDoc4 Shell Extension" Type="string" />
</Component>
<?endif?>
</Directory>
</StandardDirectory>
Expand Down

0 comments on commit 9bf1ebb

Please sign in to comment.