INCLUDE(${CMAKE_BINARY_DIR}/CPackConfig) FOREACH(comp ${COMPS}) SET(CMDS ${CMDS} COMMAND set DESTDIR=testinstall/${comp} COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_CONFIG_NAME=${CMAKE_CFG_INTDIR} -DCMAKE_INSTALL_COMPONENT=${comp} -DCMAKE_INSTALL_PREFIX= -P ${CMAKE_BINARY_DIR}/cmake_install.cmake ) ENDFOREACH() SET(INC 0) MACRO(MAKE_WIX_IDENTIFIER str varname) STRING(REPLACE "/" "." ret "${str}") STRING(REPLACE "-" "_" ret "${ret}}") STRING(LENGTH l "${ret}") IF(l GREATER 65) STRING(SUBSTRING "${ret}" 0 64 ret) MATH(EXPR INC ${INC}+1) SET(ret "${ret}${INC}) ENDIF() SET(${varname} ${ret}) ENDMACRO() MACRO(GENERATE_GUID VarName) EXECUTE_PROCESS(COMMAND uuidgen -c OUTPUT_VARIABLE ${VarName} OUTPUT_STRIP_TRAILING_WHITESPACE) ENDMACRO() FUNCTION(TRAVERSE_FILES dir topdir file file_comp dir_root) FILE(GLOB all_files ${dir}/*) IF(NOT all_files) RETURN() ENDIF() FILE(RELATIVE_PATH dir_rel ${topdir} ${dir}) IF(dir_rel) MAKE_DIRECTORY(${dir_root}/${dir_rel}) MAKE_WIX_IDENTIFIER("${dir_rel}" dir_id) ELSE() FILE(APPEND ${file} "\n") ENDIF() FILE(APPEND ${file} "\n") SET(NONEXEFILES) FOREACH(f ${all_files}) IF(NOT IS_DIRECTORY ${f}) GET_FILENAME_COMPONENT(ext "${f}" EXT) FILE(TO_NATIVE_PATH ${f} f_native) FILE(RELATIVE_PATH rel ${topdir} ${f}) MAKE_WIX_IDENTIFIER("${rel}" id) IF(ext MATCHES ".dll" OR ext MATCHES ".exe") FILE(APPEND ${file} " \n") FILE(APPEND ${file} " \n") FILE(APPEND ${file} " \n") FILE(APPEND ${file_comp} " \n") ELSE() # Collect nonexe files into a single component to reduce number of components SET(NONEXEFILES "${NONEXEFILES} \n") ENDIF() ENDIF() ENDFOREACH() IF(NONEXEFILES) GENERATE_GUID(guid) FILE(APPEND ${file} " \n") ENDIF() FILE(GLOB all_files ${dir}/*) FOREACH(f ${all_files}) IF(IS_DIRECTORY ${f}) TRAVERSE_DIRECTORIES(${f} ${topdir} ${file} "${prefix} ") ENDIF() ENDFOREACH() IF(rel) FILE(APPEND ${file} "\n") ENDIF() ENDFUNCTION() GET_FILENAME_COMPONENT(abs . ABSOLUTE) FOREACH(d ${DIRS}) GET_FILENAME_COMPONENT(d ${d} ABSOLUTE) GET_FILENAME_COMPONENT(d_name ${d} NAME) FILE(WRITE ${abs}/${d_name}.wxs "\n\n") FILE(WRITE ${abs}/${d_name}_component_group.wxs "\n\n\n") TRAVERSE_FILES(${d} ${d} ${abs}/${d_name}.wxs ${abs}/${d_name}_component_group.wxs "${abs}/dirs") FILE(APPEND ${abs}/${d_name}.wxs " \n") FILE(APPEND ${abs}/${d_name}_component_group.wxs "\n\n") ENDFOREACH() FILE(WRITE directories.wxs "\n\n\n") TRAVERSE_DIRECTORIES(${abs}/dirs ${abs}/dirs directories.wxs "") FILE(APPEND directories.wxs "\n\n\n")