summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEduard Braun <eduard.braun2@gmx.de>2017-07-23 01:07:03 +0000
committerEduard Braun <eduard.braun2@gmx.de>2017-07-23 01:49:14 +0000
commitea172cdb15ba9780da806b5190c9dbb0a74231bd (patch)
tree1e762af06944c9eaa3619f21de96515617081964
parentcmake: Add 'dist' target to create Windows .exe installer (diff)
downloadinkscape-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.cmake47
-rwxr-xr-xpackaging/wix/files.py5
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