diff options
| author | Eduard Braun <eduard.braun2@gmx.de> | 2017-07-23 01:07:03 +0000 |
|---|---|---|
| committer | Eduard Braun <eduard.braun2@gmx.de> | 2017-07-23 01:49:14 +0000 |
| commit | ea172cdb15ba9780da806b5190c9dbb0a74231bd (patch) | |
| tree | 1e762af06944c9eaa3619f21de96515617081964 | |
| parent | cmake: Add 'dist' target to create Windows .exe installer (diff) | |
| download | inkscape-ea172cdb15ba9780da806b5190c9dbb0a74231bd.tar.gz inkscape-ea172cdb15ba9780da806b5190c9dbb0a74231bd.zip | |
cmake: Add 'dist' target to create Windows .msi installer
- 'dist-win-msi' allows to create a Windows .msi installer using WiX
- 'dist-win-msi-fast' has a no compression but is much faster
and can be used for testing purposes
| -rw-r--r-- | CMakeScripts/Dist.cmake | 47 | ||||
| -rwxr-xr-x | packaging/wix/files.py | 5 |
2 files changed, 47 insertions, 5 deletions
diff --git a/CMakeScripts/Dist.cmake b/CMakeScripts/Dist.cmake index 2d9d3835c..32e3f5a4f 100644 --- a/CMakeScripts/Dist.cmake +++ b/CMakeScripts/Dist.cmake @@ -39,7 +39,6 @@ if(WIN32) # ----------------------------------------------------------------------------- # 'dist-win-7z' - generate binary 7z archive for Windows # ----------------------------------------------------------------------------- - find_program(7z 7z PATHS "C:\\Program Files\\7-Zip" "C:\\Program Files (x86)\\7-Zip") if(NOT 7z) @@ -61,11 +60,9 @@ if(WIN32) add_dependencies(dist-win-7z install/strip) add_dependencies(dist-win-7z-fast install/strip) - # ----------------------------------------------------------------------------- # 'dist-win-exe' - generate .exe installer (NSIS) for Windows # ----------------------------------------------------------------------------- - find_program (makensis makensis PATHS "C:\\Program Files\\NSIS" "C:\\Program Files (x86)\\NSIS") if(NOT makensis) @@ -87,4 +84,48 @@ if(WIN32) add_dependencies(dist-win-exe install/strip) add_dependencies(dist-win-exe-fast install/strip) + + # ----------------------------------------------------------------------------- + # 'dist-win-msi' - generate .exe installer (NSIS) for Windows + # ----------------------------------------------------------------------------- + find_program (candle candle PATHS "C:\\Program Files\\WiX Toolset v3.10\\bin" + "C:\\Program Files (x86)\\WiX Toolset v3.10\\bin") + find_program (light light PATHS "C:\\Program Files\\WiX Toolset v3.10\\bin" + "C:\\Program Files (x86)\\WiX Toolset v3.10\\bin") + if(NOT candle) + set(candle echo "Could not find 'candle' (part of WiX Toolset). Please add it to your search path." && exit 1 &&) + endif() + if(NOT light) + set(light echo "Could not find 'light' (part of WiX Toolset). Please add it to your search path." && exit 1 &&) + endif() + + # default target with fair but slow compression + add_custom_target(dist-win-msi + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/packaging/wix ${CMAKE_BINARY_DIR}/wix + COMMAND cd wix + COMMAND ${CMAKE_COMMAND} -E env INKSCAPE_DIST_PATH=${CMAKE_INSTALL_PREFIX} + python ${CMAKE_SOURCE_DIR}/packaging/wix/files.py + COMMAND ${CMAKE_COMMAND} -E env INKSCAPE_DIST_PATH=${CMAKE_INSTALL_PREFIX} + python ${CMAKE_SOURCE_DIR}/packaging/wix/version.py + COMMAND ${candle} inkscape.wxs -ext WiXUtilExtension + COMMAND ${candle} files.wxs + COMMAND ${light} -ext WixUIExtension -ext WiXUtilExtension inkscape.wixobj files.wixobj + -o ${CMAKE_BINARY_DIR}/${INKSCAPE_DIST_PREFIX}.msi) + + # moderately fast target with no compression for testing + add_custom_target(dist-win-msi-fast + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/packaging/wix ${CMAKE_BINARY_DIR}/wix + COMMAND cd wix + COMMAND sed -i 's/CompressionLevel="high"/CompressionLevel="none"/' inkscape.wxs + COMMAND ${CMAKE_COMMAND} -E env INKSCAPE_DIST_PATH=${CMAKE_INSTALL_PREFIX} + python ${CMAKE_SOURCE_DIR}/packaging/wix/files.py + COMMAND ${CMAKE_COMMAND} -E env INKSCAPE_DIST_PATH=${CMAKE_INSTALL_PREFIX} + python ${CMAKE_SOURCE_DIR}/packaging/wix/version.py + COMMAND ${candle} inkscape.wxs -ext WiXUtilExtension + COMMAND ${candle} files.wxs + COMMAND ${light} -ext WixUIExtension -ext WiXUtilExtension inkscape.wixobj files.wixobj + -o ${CMAKE_BINARY_DIR}/${INKSCAPE_DIST_PREFIX}.msi) + + add_dependencies(dist-win-msi install/strip) + add_dependencies(dist-win-msi-fast install/strip) endif() diff --git a/packaging/wix/files.py b/packaging/wix/files.py index 70e5f29c0..dd5d72381 100755 --- a/packaging/wix/files.py +++ b/packaging/wix/files.py @@ -40,16 +40,17 @@ def directory(root, breadcrumb, level, exclude=[]): files = [ f for f in os.listdir(root) if os.path.isfile(os.path.join(root,f)) and f not in exclude] for file in files: file_key = os.path.join(root, file) + file_key = file_key.replace('/', '\\') # for usage from MSYS2 shell _id = '_%06d' % (len(file_ids.keys()) + 1) file_ids[file_key] = 'component' + _id wxs.write(indent(level)+ "<Component Id='component" + _id + "' Guid='" + str(uuid.uuid4()) + "' DiskId='1' Win64='$(var.Win64)'>\n") if file == 'inkscape.exe': - # we refenrence inkscape.exe in inkscape.wxs + # we reference inkscape.exe in inkscape.wxs _id = '_inkscape_exe' wxs.write(indent(level + 1)+ "<File Id='file" + _id + "' Name='" + file + "' DiskId='1' Source='" + file_key + "' KeyPath='yes' />\n") wxs.write(indent(level)+ "</Component>\n") - # then all directories + # then all directories dirs = [ f for f in os.listdir(root) if os.path.isdir(os.path.join(root,f)) ] for dir in dirs: directory_key = breadcrumb + '__' + dir |
