CMakeUserFindWix
From KitwarePublic
Jump to navigationJump to search
# - Try to find Windows Installer XML # See http://wix.sourceforge.net # # The follwoing variables are optionally searched for defaults # WIX_ROOT_DIR: Base directory of WIX2 tree to use. # # The following are set after configuration is done: # WIX_FOUND # WIX_ROOT_DIR # WIX_CANDLE # WIX_LIGHT # # 2009/02 Petr Pytelka (pyta at lightcomp.cz) # MACRO(DBG_MSG _MSG) # MESSAGE(STATUS "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}):\n ${_MSG}") ENDMACRO(DBG_MSG) # typical root dirs of installations, exactly one of them is used SET (WIX_POSSIBLE_ROOT_DIRS "${WIX_ROOT_DIR}" "$ENV{WIX_ROOT_DIR}" "$ENV{ProgramFiles}/Windows Installer XML" ) #DBG_MSG("DBG (WIX_POSSIBLE_ROOT_DIRS=${WIX_POSSIBLE_ROOT_DIRS}") # # select exactly ONE WIX base directory/tree # to avoid mixing different version headers and libs # FIND_PATH(WIX_ROOT_DIR NAMES bin/candle.exe bin/light.exe PATHS ${WIX_POSSIBLE_ROOT_DIRS}) DBG_MSG("WIX_ROOT_DIR=${WIX_ROOT_DIR}") # # Logic selecting required libs and headers # SET(WIX_FOUND OFF) IF(WIX_ROOT_DIR) SET(WIX_FOUND ON) ENDIF(WIX_ROOT_DIR) # display help message IF(NOT WIX_FOUND) # make FIND_PACKAGE friendly IF(NOT WIX_FIND_QUIETLY) IF(WIX_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Windows Installer XML required but some files not found. Please specify it's location with WIX_ROOT_DIR env. variable.") ELSE(WIX_FIND_REQUIRED) MESSAGE(STATUS "ERROR: Windows Installer XML was not found.") ENDIF(WIX_FIND_REQUIRED) ENDIF(NOT WIX_FIND_QUIETLY) ELSE(NOT WIX_FOUND) SET(WIX_CANDLE ${WIX_ROOT_DIR}/bin/candle.exe) SET(WIX_LIGHT ${WIX_ROOT_DIR}/bin/light.exe) # MESSAGE(STATUS "Windows Installer XML found.") ENDIF(NOT WIX_FOUND) MARK_AS_ADVANCED( WIX_ROOT_DIR WIX_CANDLE WIX_LIGHT ) # # Call wix compiler # # Parameters: # _sources - name of list with sources # _obj - name of list for target objects # MACRO(WIX_COMPILE _sources _objs _extra_dep) DBG_MSG("WIX compile: ${${_sources}}") FOREACH (_current_FILE ${${_sources}}) GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE) GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE) SET (SOURCE_WIX_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${_current_FILE} ) DBG_MSG("WIX source file: ${SOURCE_WIX_FILE}") # Check whether source exists IF(EXISTS ${SOURCE_WIX_FILE}) ELSE(EXISTS ${SOURCE_WIX_FILE}) MESSAGE(FATAL_ERROR "Path not exists: ${SOURCE_WIX_FILE}") ENDIF(EXISTS ${SOURCE_WIX_FILE}) SET (OUTPUT_WIXOBJ ${_basename}.wixobj ) DBG_MSG("WIX output: ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_WIXOBJ}") DBG_MSG("WIX command: ${WIX_CANDLE}") ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_WIXOBJ} COMMAND ${WIX_CANDLE} ARGS ${WIX_CANDLE_FLAGS} ${SOURCE_WIX_FILE} DEPENDS ${SOURCE_WIX_FILE} ${${_extra_dep}} COMMENT "Compiling ${SOURCE_WIX_FILE} -> ${OUTPUT_WIXOBJ}" ) SET(${_objs} ${${_objs}} ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_WIXOBJ} ) DBG_MSG("WIX compile output: ${${_objs}}") ENDFOREACH (_current_FILE) ENDMACRO(WIX_COMPILE) # # Call wix compiler # # Parameters: # _sources - name of list with sources # _obj - name of list for target objects # MACRO(WIX_COMPILE_ALL _target _sources _extra_dep) DBG_MSG("WIX compile all: ${${_sources}}, dependencies: ${${_extra_dep}}") ADD_CUSTOM_COMMAND( OUTPUT ${_target} COMMAND ${WIX_CANDLE} ARGS ${WIX_CANDLE_FLAGS} -out "${_target}" ${${_sources}} DEPENDS ${${_sources}} ${${_extra_dep}} COMMENT "Compiling ${${_sources}} -> ${_target}" ) ENDMACRO(WIX_COMPILE_ALL) # # Link MSI file # # Parameters # _target - Name of target file # _sources - Name of list with sources # MACRO(WIX_LINK _target _sources _loc_files) DBG_MSG("WIX command: ${WIX_LIGHT}\n WIX target: ${_target} objs: ${${_sources}}") SET( WIX_LINK_FLAGS_A "" ) # Add localization FOREACH (_current_FILE ${${_loc_files}}) SET( WIX_LINK_FLAGS_A ${WIX_LINK_FLAGS_A} -loc "${_current_FILE}" ) DBG_MSG("WIX link localization: ${_current_FILE}") ENDFOREACH (_current_FILE) DBG_MSG("WIX link flags: ${WIX_LINK_FLAGS_A}") ADD_CUSTOM_COMMAND( OUTPUT ${_target} COMMAND ${WIX_LIGHT} ARGS ${WIX_LINK_FLAGS_A} -out "${_target}" ${${_sources}} DEPENDS ${${_sources}} COMMENT "Linking ${${_sources}} -> ${_target}" ) ENDMACRO(WIX_LINK)