Introduce "generator expressions" to add_test()
[cmake.git] / Modules / InstallRequiredSystemLibraries.cmake
blob057924c9210dbf30077c31fe3294c65303a322f2
1 # By including this file, all files in the CMAKE_INSTALL_DEBUG_LIBRARIES,
2 # will be installed with INSTALL_PROGRAMS into /bin for WIN32 and /lib
3 # for non-win32. If CMAKE_SKIP_INSTALL_RULES is set to TRUE before including
4 # this file, then the INSTALL command is not called.  The use can use 
5 # the variable CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS to use a custom install 
6 # command and install them into any directory they want.
7 # If it is the MSVC compiler, then the microsoft run
8 # time libraries will be found add automatically added to the
9 # CMAKE_INSTALL_DEBUG_LIBRARIES, and installed.  
10 # If CMAKE_INSTALL_DEBUG_LIBRARIES is set and it is the MSVC
11 # compiler, then the debug libraries are installed when available.
12 # If CMAKE_INSTALL_MFC_LIBRARIES is set then the MFC run time
13 # libraries are installed as well as the CRT run time libraries.
15 IF(MSVC)
16   FILE(TO_CMAKE_PATH "$ENV{SYSTEMROOT}" SYSTEMROOT)
18   IF(MSVC70)
19     SET(__install__libs
20       "${SYSTEMROOT}/system32/msvcp70.dll"
21       "${SYSTEMROOT}/system32/msvcr70.dll"
22       )
23   ENDIF(MSVC70)
25   IF(MSVC71)
26     SET(__install__libs
27       "${SYSTEMROOT}/system32/msvcp71.dll"
28       "${SYSTEMROOT}/system32/msvcr71.dll"
29       )
30   ENDIF(MSVC71)
32   IF(CMAKE_CL_64)
33     SET(CMAKE_MSVC_ARCH amd64)
34   ELSE(CMAKE_CL_64)
35     SET(CMAKE_MSVC_ARCH x86)
36   ENDIF(CMAKE_CL_64)
38   GET_FILENAME_COMPONENT(devenv_dir "${CMAKE_MAKE_PROGRAM}" PATH)
39   GET_FILENAME_COMPONENT(base_dir "${devenv_dir}/../.." ABSOLUTE)
41   IF(MSVC80)
42     # Find the runtime library redistribution directory.
43     FIND_PATH(MSVC80_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest
44       PATHS
45         "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0;InstallDir]/../../VC/redist"
46         "${base_dir}/VC/redist"
47       )
48     MARK_AS_ADVANCED(MSVC80_REDIST_DIR)
49     SET(MSVC80_CRT_DIR "${MSVC80_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.CRT")
51     # Install the manifest that allows DLLs to be loaded from the
52     # directory containing the executable.
53     SET(__install__libs
54       "${MSVC80_CRT_DIR}/Microsoft.VC80.CRT.manifest"
55       "${MSVC80_CRT_DIR}/msvcm80.dll"
56       "${MSVC80_CRT_DIR}/msvcp80.dll"
57       "${MSVC80_CRT_DIR}/msvcr80.dll"
58       )
60     IF(CMAKE_INSTALL_DEBUG_LIBRARIES)
61       SET(MSVC80_CRT_DIR
62         "${MSVC80_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC80.DebugCRT")
63       SET(__install__libs ${__install__libs}
64         "${MSVC80_CRT_DIR}/Microsoft.VC80.DebugCRT.manifest"
65         "${MSVC80_CRT_DIR}/msvcm80d.dll"
66         "${MSVC80_CRT_DIR}/msvcp80d.dll"
67         "${MSVC80_CRT_DIR}/msvcr80d.dll"
68         )
69     ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES)
71   ENDIF(MSVC80)
73   IF(MSVC90)
74     # Find the runtime library redistribution directory.
75     FIND_PATH(MSVC90_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest
76       PATHS
77         "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0;InstallDir]/../../VC/redist"
78         "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\9.0;InstallDir]/../../VC/redist"
79         "${base_dir}/VC/redist"
80       )
81     MARK_AS_ADVANCED(MSVC90_REDIST_DIR)
82     SET(MSVC90_CRT_DIR "${MSVC90_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.CRT")
84     # Install the manifest that allows DLLs to be loaded from the
85     # directory containing the executable.
86     SET(__install__libs
87       "${MSVC90_CRT_DIR}/Microsoft.VC90.CRT.manifest"
88       "${MSVC90_CRT_DIR}/msvcm90.dll"
89       "${MSVC90_CRT_DIR}/msvcp90.dll"
90       "${MSVC90_CRT_DIR}/msvcr90.dll"
91       ) 
92     IF(CMAKE_INSTALL_DEBUG_LIBRARIES)
93       SET(MSVC90_CRT_DIR
94         "${MSVC90_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugCRT")
95       SET(__install__libs ${__install__libs}
96         "${MSVC90_CRT_DIR}/Microsoft.VC90.DebugCRT.manifest"
97         "${MSVC90_CRT_DIR}/msvcm90d.dll"
98         "${MSVC90_CRT_DIR}/msvcp90d.dll"
99         "${MSVC90_CRT_DIR}/msvcr90d.dll"
100         )
101     ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) 
102   ENDIF(MSVC90) 
104   IF(CMAKE_INSTALL_MFC_LIBRARIES)
105     IF(MSVC70)
106       SET(__install__libs ${__install__libs}
107         "${SYSTEMROOT}/system32/mfc70.dll"
108         )
109     ENDIF(MSVC70)
110     IF(MSVC71)
111       SET(__install__libs ${__install__libs}
112         "${SYSTEMROOT}/system32/mfc71.dll"
113         )
114     ENDIF(MSVC71)
115     IF(MSVC80)
116       IF(CMAKE_INSTALL_DEBUG_LIBRARIES)
117         SET(MSVC80_MFC_DIR
118           "${MSVC80_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC80.DebugMFC")
119         SET(__install__libs ${__install__libs}
120           "${MSVC80_MFC_DIR}/Microsoft.VC80.DebugMFC.manifest"
121           "${MSVC80_MFC_DIR}/mfc80d.dll"
122           "${MSVC80_MFC_DIR}/mfc80ud.dll"
123           "${MSVC80_MFC_DIR}/mfcm80d.dll"
124           "${MSVC80_MFC_DIR}/mfcm80ud.dll"
125           )
126       ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES)
127         
128       SET(MSVC80_MFC_DIR "${MSVC80_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFC")
129       # Install the manifest that allows DLLs to be loaded from the
130       # directory containing the executable.
131       SET(__install__libs ${__install__libs}
132         "${MSVC80_MFC_DIR}/Microsoft.VC80.MFC.manifest"
133         "${MSVC80_MFC_DIR}/mfc80.dll"
134         "${MSVC80_MFC_DIR}/mfc80u.dll"
135         "${MSVC80_MFC_DIR}/mfcm80.dll"
136         "${MSVC80_MFC_DIR}/mfcm80u.dll"
137         )
138       # include the language dll's for vs8 as well as the actuall dll's
139       SET(MSVC80_MFCLOC_DIR "${MSVC80_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFCLOC")
140       # Install the manifest that allows DLLs to be loaded from the
141       # directory containing the executable.
142       SET(__install__libs ${__install__libs}
143         "${MSVC80_MFCLOC_DIR}/Microsoft.VC80.MFCLOC.manifest"
144         "${MSVC80_MFCLOC_DIR}/mfc80chs.dll"
145         "${MSVC80_MFCLOC_DIR}/mfc80cht.dll"
146         "${MSVC80_MFCLOC_DIR}/mfc80enu.dll"
147         "${MSVC80_MFCLOC_DIR}/mfc80esp.dll"
148         "${MSVC80_MFCLOC_DIR}/mfc80deu.dll"
149         "${MSVC80_MFCLOC_DIR}/mfc80fra.dll"
150         "${MSVC80_MFCLOC_DIR}/mfc80ita.dll"
151         "${MSVC80_MFCLOC_DIR}/mfc80jpn.dll"
152         "${MSVC80_MFCLOC_DIR}/mfc80kor.dll"
153         )
154     ENDIF(MSVC80)
156     IF(MSVC90)
157       IF(CMAKE_INSTALL_DEBUG_LIBRARIES)
158         SET(MSVC90_MFC_DIR
159           "${MSVC90_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugMFC")
160         SET(__install__libs ${__install__libs}
161           "${MSVC90_MFC_DIR}/Microsoft.VC90.DebugMFC.manifest"
162           "${MSVC90_MFC_DIR}/mfc90d.dll"
163           "${MSVC90_MFC_DIR}/mfc90ud.dll"
164           "${MSVC90_MFC_DIR}/mfcm90d.dll"
165           "${MSVC90_MFC_DIR}/mfcm90ud.dll"
166           )
167       ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES)
168         
169       SET(MSVC90_MFC_DIR "${MSVC90_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFC")
170       # Install the manifest that allows DLLs to be loaded from the
171       # directory containing the executable.
172       SET(__install__libs ${__install__libs}
173         "${MSVC90_MFC_DIR}/Microsoft.VC90.MFC.manifest"
174         "${MSVC90_MFC_DIR}/mfc90.dll"
175         "${MSVC90_MFC_DIR}/mfc90u.dll"
176         "${MSVC90_MFC_DIR}/mfcm90.dll"
177         "${MSVC90_MFC_DIR}/mfcm90u.dll"
178         )
179       # include the language dll's for vs9 as well as the actuall dll's
180       SET(MSVC90_MFCLOC_DIR "${MSVC90_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFCLOC")
181       # Install the manifest that allows DLLs to be loaded from the
182       # directory containing the executable.
183       SET(__install__libs ${__install__libs}
184         "${MSVC90_MFCLOC_DIR}/Microsoft.VC90.MFCLOC.manifest"
185         "${MSVC90_MFCLOC_DIR}/mfc90chs.dll"
186         "${MSVC90_MFCLOC_DIR}/mfc90cht.dll"
187         "${MSVC90_MFCLOC_DIR}/mfc90enu.dll"
188         "${MSVC90_MFCLOC_DIR}/mfc90esp.dll"
189         "${MSVC90_MFCLOC_DIR}/mfc90deu.dll"
190         "${MSVC90_MFCLOC_DIR}/mfc90fra.dll"
191         "${MSVC90_MFCLOC_DIR}/mfc90ita.dll"
192         "${MSVC90_MFCLOC_DIR}/mfc90jpn.dll"
193         "${MSVC90_MFCLOC_DIR}/mfc90kor.dll"
194         )
195     ENDIF(MSVC90)
197   ENDIF(CMAKE_INSTALL_MFC_LIBRARIES)
199   FOREACH(lib
200       ${__install__libs}
201       )
202     IF(EXISTS ${lib})
203       SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
204         ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib})
205     ENDIF(EXISTS ${lib})
206   ENDFOREACH(lib)
207 ENDIF(MSVC)
209 # Include system runtime libraries in the installation if any are
210 # specified by CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS.
211 IF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)
212   IF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP)
213     IF(WIN32)
214       INSTALL_PROGRAMS(/bin ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS})
215     ELSE(WIN32)
216       INSTALL_PROGRAMS(/lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS})
217     ENDIF(WIN32)
218   ENDIF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP)
219 ENDIF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)