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 Apr 11, 2024
1 parent 30281d1 commit 6de855b
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 107 deletions.
7 changes: 3 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ jobs:
steps:
- name: Install dependencies
if: matrix.container == '20.04'
run: apt update -qq && apt install --no-install-recommends -y git lsb-release fakeroot build-essential devscripts debhelper pkg-config cmake libldap2-dev gettext libpcsclite-dev libssl-dev libqt5svg5-dev qttools5-dev-tools qttools5-dev lintian libflatbuffers-dev zlib1g-dev
run: apt update -qq && apt install --no-install-recommends -y git lsb-release build-essential devscripts debhelper pkg-config cmake libldap2-dev gettext libpcsclite-dev libssl-dev libqt5svg5-dev qttools5-dev-tools qttools5-dev lintian libflatbuffers-dev zlib1g-dev
- name: Install dependencies
if: matrix.container != '20.04'
run: apt update -qq && apt install --no-install-recommends -y git lsb-release fakeroot build-essential devscripts debhelper pkg-config cmake libldap2-dev gettext libpcsclite-dev libssl-dev libgl-dev libqt6svg6-dev qt6-tools-dev qt6-tools-dev-tools qt6-l10n-tools lintian libflatbuffers-dev zlib1g-dev
run: apt update -qq && apt install --no-install-recommends -y git lsb-release build-essential devscripts debhelper pkg-config cmake libldap2-dev gettext libpcsclite-dev libssl-dev libgl-dev libqt6svg6-dev qt6-tools-dev qt6-tools-dev-tools qt6-l10n-tools lintian libflatbuffers-dev zlib1g-dev
- name: Checkout
uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -190,7 +190,7 @@ jobs:
- name: Install WiX
run: |
dotnet tool install --global wix
wix extension -g add WixToolset.UI.wixext/4.0.4
wix extension -g add WixToolset.UI.wixext/4.0.5
- name: Build
run: |
md build/client
Expand All @@ -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
48 changes: 8 additions & 40 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,44 +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 "$ENV{WIX}bin\\candle.exe" -nologo -arch ${PLATFORM}
-dMSI_VERSION=${VERSION} -dShellExt=$<TARGET_FILE:EsteidShellExtension>
${CMAKE_CURRENT_SOURCE_DIR}/EsteidShellExtension.wxs
${CMAKE_MODULE_PATH}/WelcomeDlg2.wxs
${CMAKE_MODULE_PATH}/WixUI_Minimal2.wxs
COMMAND "$ENV{WIX}bin\\light.exe" -nologo -ext WixUIExtension
EsteidShellExtension.wixobj WelcomeDlg2.wixobj WixUI_Minimal2.wixobj
-dWixUIDialogBmp=${CMAKE_MODULE_PATH}/dlgbmp.bmp
-dWixUIBannerBmp=${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()
57 changes: 0 additions & 57 deletions extensions/windows/EsteidShellExtension.wxs

This file was deleted.

36 changes: 31 additions & 5 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 @@ -23,8 +29,8 @@
<MediaTemplate EmbedCab="yes" CompressionLevel="high" />
<Icon Id="qdigidoc4.ico" SourceFile="$(var.ico_path)" />
<Property Id="ARPPRODUCTICON" Value="qdigidoc4.ico" />
<Property Id="APPLICATIONNAME" Value="qdigidoc4" />
<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 All @@ -33,17 +39,17 @@
<!-- Desktop shortcut -->
<StandardDirectory Id="DesktopFolder">
<Component Id="DesktopShortcut4" Guid="7B821ED0-4838-4290-997C-AA4119F99DAD" Transitive="yes" Condition="DESKTOP_SHORTCUT = 1">
<Shortcut Id="ClientDesktopShortcut4" Name="DigiDoc4" Target="[!qdigidoc4.exe]" WorkingDirectory="APPLICATIONFOLDER" />
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[APPLICATIONNAME]" Name="DesktopShortcut4" Value="1" Type="integer" KeyPath="yes" />
<Shortcut Id="ClientDesktopShortcut4" Name="DigiDoc4" Target="[!qdigidoc4.exe]" WorkingDirectory="INSTALLFOLDER" />
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\qdigidoc4" Name="DesktopShortcut4" Value="1" Type="integer" KeyPath="yes" />
</Component>
</StandardDirectory>

<StandardDirectory Id="ProgramFiles6432Folder">
<Directory Id="APPLICATIONFOLDER" Name="DigiDoc4 Client" FileSource="$(var.libs_path)">
<Directory Id="INSTALLFOLDER" Name="!(bind.Property.ProductName)" FileSource="$(var.libs_path)">
<Component Id="Application4" Guid="316B00EB-7519-476F-BCA5-7C8C1A0DF5AB" Transitive="yes">
<File Id="qdigidoc4.exe" Source="$(var.client_path)" KeyPath="yes">
<Shortcut Id="ClientStartMenu4" Advertise="yes" Name="DigiDoc4" Icon="qdigidoc4.ico"
Directory="ProgramMenuFolder" WorkingDirectory="APPLICATIONFOLDER" />
Directory="ProgramMenuFolder" WorkingDirectory="INSTALLFOLDER" />
</File>
<ProgId Id="qdigidoc4.adoc" Description="DigiDoc signed document" Icon="qdigidoc4.exe" IconIndex="1">
<Extension Id="adoc" ContentType="application/vnd.lt.archyvai.adoc-2008">
Expand Down Expand Up @@ -162,6 +168,23 @@
<File Source="$(var.qt_path)\..\plugins\imageformats\qsvg$(var.qt_suffix).dll" />
</Component>
</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 All @@ -176,6 +199,9 @@
<ComponentRef Id="qwindowsvistastyle.dll" />
<ComponentRef Id="qopensslbackend.dll" />
<ComponentRef Id="imageformats.dll" />
<?endif?>
<?ifdef var.ShellExt ?>
<ComponentRef Id="ShellExt"/>
<?endif?>
</Feature>
</Package>
Expand Down

0 comments on commit 6de855b

Please sign in to comment.