MantisBT - CMake | |||||
View Issue Details | |||||
ID | Project | Category | View Status | Date Submitted | Last Update |
0014925 | CMake | CPack | public | 2014-05-22 09:19 | 2016-06-10 14:31 |
Reporter | Richard Ulrich | ||||
Assigned To | Nils Gladitz | ||||
Priority | normal | Severity | feature | Reproducibility | always |
Status | closed | Resolution | moved | ||
Platform | OS | OS Version | |||
Product Version | CMake 2.8.12.2 | ||||
Target Version | Fixed in Version | ||||
Summary | 0014925: Generate Multilanguage msi files with the WiX generator | ||||
Description | When I first saw that CPACK_WIX_CULTURES accepts a list, I assumed it would build a multilanguage package. Later I learned, that the behavior comes from WiX itself, that it builds a package for the first culture entry, and uses the others as backup if a certain string is not available for the primary culture. At first, I read on the WiX Tutorial, that msi packages are always single culture. But then I found out the procedure to make them multilanguage. It's a bit cumbersome: * build an msi for each culture * make a diff for each of them * inject the diffs into the main msi * tell the msi which cultures it supports I created a custom target that creates a multilanguage msi for me. But it would be much nicer, if this could be baked into cpack. | ||||
Steps To Reproduce | |||||
Additional Information | # build a separate msi for each of the different supported languages # generate *.mst (transform) files of the diffs # inject the transforms into the german installer # http://www.codeproject.com/Articles/103749/Creating-a-Localized-Windows-Installer-Bootstrap [^] GET_FILENAME_COMPONENT(CPACK_COMMAND ${CMAKE_COMMAND} PATH) SET(CPACK_COMMAND ${CPACK_COMMAND}/cpack.exe) FILE(WRITE ${PROJECT_BINARY_DIR}/WixMultiLang.bat "@echo off" \n) # build the english installer FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat ":: building the installer in english" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${CMAKE_COMMAND}\" -D CPACK_WIX_CULTURES:STRING=en-us \"${PointLine_MAIN_DIR}\"" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${CPACK_COMMAND}\" -G WIX -C RelWithDebInfo" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "del ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_en-us.msi" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "ren ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32.msi ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_en-us.msi" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) # build the dutch installer FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat ":: building the installer in dutch" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${CMAKE_COMMAND}\" -D CPACK_WIX_CULTURES:STRING=nl-nl \"${PointLine_MAIN_DIR}\"" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${CPACK_COMMAND}\" -G WIX -C RelWithDebInfo" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "del ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_nl-nl.msi" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "ren ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32.msi ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_nl-nl.msi" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) # build the french installer FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat ":: building the installer in french" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${CMAKE_COMMAND}\" -D CPACK_WIX_CULTURES:STRING=fr-fr \"${PointLine_MAIN_DIR}\"" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${CPACK_COMMAND}\" -G WIX -C RelWithDebInfo" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "del ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_fr-fr.msi" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "ren ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32.msi ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_fr-fr.msi" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) # build the german installer FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat ":: building the installer in german" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${CMAKE_COMMAND}\" -D CPACK_WIX_CULTURES:STRING=de-de \"${PointLine_MAIN_DIR}\"" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${CPACK_COMMAND}\" -G WIX -C RelWithDebInfo" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) # make diffs and generate the transforms FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat ":: generating the transforms from the diffs" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${WIX_TORCH}\" ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32.msi ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_en-us.msi -o ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_en-us.mst" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${WIX_TORCH}\" ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32.msi ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_nl-nl.msi -o ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_nl-nl.mst" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${WIX_TORCH}\" ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32.msi ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_fr-fr.msi -o ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_fr-fr.mst" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "@echo sucessfully generated the language transforms" \n) # inject the diffs into the german installer FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat ":: injecting the transforms into the german installer" \n) SET(MSWSWDEVKIT_CSCRIPT cscript.exe) # Windows Script Host SET(MSWSWDEVKIT_WiSubStg ${PointLine_MAIN_DIR}/Installer/WiX/WiSubStg.vbs) # From Microsoft Windows SDK for Windows FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${MSWSWDEVKIT_CSCRIPT}\" \"${MSWSWDEVKIT_WiSubStg}\" ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32.msi ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_en-us.mst 1033" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${MSWSWDEVKIT_CSCRIPT}\" \"${MSWSWDEVKIT_WiSubStg}\" ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32.msi ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_nl-nl.mst 1043" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${MSWSWDEVKIT_CSCRIPT}\" \"${MSWSWDEVKIT_WiSubStg}\" ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32.msi ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32_fr-fr.mst 1036" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "@echo sucessfully injected the language transforms" \n) # tell the installer, which localizations it contains FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat ":: tell the installer, which localizations it contains" \n) SET(MSWSWDEVKIT_WiLangId ${PointLine_MAIN_DIR}/Installer/WiX/wilangid.vbs) # From Microsoft Windows SDK for Windows FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "\"${MSWSWDEVKIT_CSCRIPT}\" \"${MSWSWDEVKIT_WiLangId}\" ${CPACK_PACKAGE_NAME}-${VERSION_STR3}-win32.msi Package 1031,1033,1043,1036" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "if %ERRORLEVEL% neq 0 goto exit" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat "@echo sucessfully injected the localization information" \n) FILE(APPEND ${PROJECT_BINARY_DIR}/WixMultiLang.bat ":exit" \n) ADD_CUSTOM_TARGET(WiX_LangTransforms COMMAND ${PROJECT_BINARY_DIR}/WixMultiLang.bat WORKING_DIRECTORY ${PROJECT_BINARY_DIR} COMMENT "build the msi for the different supported languages, and generate mst (transform) files of the diffs" ) | ||||
Tags | No tags attached. | ||||
Relationships | |||||
Attached Files | |||||
Issue History | |||||
Date Modified | Username | Field | Change | ||
2014-05-22 09:19 | Richard Ulrich | New Issue | |||
2014-05-22 09:42 | Nils Gladitz | Assigned To | => Nils Gladitz | ||
2014-05-22 09:42 | Nils Gladitz | Status | new => assigned | ||
2015-06-12 02:23 | Richard Ulrich | Note Added: 0038914 | |||
2016-06-10 14:29 | Kitware Robot | Note Added: 0042549 | |||
2016-06-10 14:29 | Kitware Robot | Status | assigned => resolved | ||
2016-06-10 14:29 | Kitware Robot | Resolution | open => moved | ||
2016-06-10 14:31 | Kitware Robot | Status | resolved => closed |
Notes | |||||
|
|||||
|
|
||||
|
|||||
|
|