CMakeUserFindWix: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
(Add explicit preformat markup)
(Replace content with link to new CMake community wiki)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
[[CMake_User_Contributed_Macros|Back]]
{{CMake/Template/Moved}}
-----
<pre>
  # - 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}"
    "$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 ${_tmp_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)
</pre>


-----
This page has moved [https://gitlab.kitware.com/cmake/community/wikis/contrib/modules/FindWix here].
[[CMake_User_Contributed_Macros|Back]]
 
{{CMake/Template/Footer}}
[[Category:FindModules]]

Latest revision as of 15:41, 30 April 2018


The CMake community Wiki has moved to the Kitware GitLab Instance.

This page has moved here.