summaryrefslogtreecommitdiff
path: root/packaging/WiX/create_fragments.cmake
blob: 01e8a11c0cf67c5bb73a4ae9ed7b79518b8c9c44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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()

MACRO(MAKE_WIX_IDENTIFIER str varname)
  STRING(REPLACE "/" "." ${varname} "${str}")
  STRING(REPLACE "-" "_" ${varname} "${${varname}}")
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}" id)
   FILE(APPEND ${file} "<DirectoryRef Id='directory.${id}'>\n")
  ELSE()
   FILE(APPEND ${file} "<DirectoryRef Id='INSTALLDIR'>\n")
  ENDIF()
  
  FOREACH(f ${all_files})
    IF(NOT IS_DIRECTORY ${f})
      FILE(RELATIVE_PATH rel ${topdir} ${f})
      MAKE_WIX_IDENTIFIER("${rel}" id)
      FILE(TO_NATIVE_PATH ${f} f_native)
      FILE(APPEND ${file} "  <Component Id='component.${id}' Guid='*'>\n")
      FILE(APPEND ${file} "    <File Id='file.${id}' KeyPath='yes' Source='${f_native}'/>\n")
      FILE(APPEND ${file} "  </Component>\n")
      FILE(APPEND ${file_comp} "  <ComponentRef Id='component.${id}'/>\n")
    ENDIF()
  ENDFOREACH()
  FILE(APPEND ${file} "</DirectoryRef>\n")
  FOREACH(f ${all_files})
    IF(IS_DIRECTORY ${f})
      TRAVERSE_FILES(${f} ${topdir} ${file} ${file_comp} ${dir_root})
    ENDIF()
  ENDFOREACH()
ENDFUNCTION()

FUNCTION(TRAVERSE_DIRECTORIES dir topdir file prefix)
  FILE(RELATIVE_PATH rel ${topdir} ${dir})
  IF(rel)
    MAKE_WIX_IDENTIFIER("${rel}" id)
    GET_FILENAME_COMPONENT(name ${dir} NAME)
    FILE(APPEND ${file} "${prefix}<Directory Id='directory.${id}' Name='${name}'>\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} "</Directory>\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  "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>\n<Fragment>\n")
  FILE(WRITE 
  ${abs}/${d_name}_component_group.wxs  "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>\n<Fragment>\n<ComponentGroup Id='componentgroup.${d_name}'>\n")
  TRAVERSE_FILES(${d} ${d} ${abs}/${d_name}.wxs ${abs}/${d_name}_component_group.wxs "${abs}/dirs")
  FILE(APPEND  ${abs}/${d_name}.wxs   " </Fragment>\n</Wix>")
  FILE(APPEND  ${abs}/${d_name}_component_group.wxs   "</ComponentGroup>\n</Fragment>\n</Wix>") 
ENDFOREACH()
FILE(WRITE directories.wxs "<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>\n<Fragment>\n<DirectoryRef Id='INSTALLDIR'>\n")
TRAVERSE_DIRECTORIES(${abs}/dirs ${abs}/dirs directories.wxs "")
FILE(APPEND directories.wxs "</DirectoryRef>\n</Fragment>\n</Wix>\n")