]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/opentelemetry-cpp/tools/vcpkg/scripts/cmake/vcpkg_configure_make.cmake
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / tools / vcpkg / scripts / cmake / vcpkg_configure_make.cmake
CommitLineData
1e59de90
TL
1#[===[.md:\r
2# vcpkg_configure_make\r
3\r
4Configure configure for Debug and Release builds of a project.\r
5\r
6## Usage\r
7```cmake\r
8vcpkg_configure_make(\r
9 SOURCE_PATH <${SOURCE_PATH}>\r
10 [AUTOCONFIG]\r
11 [USE_WRAPPERS]\r
12 [DETERMINE_BUILD_TRIPLET]\r
13 [BUILD_TRIPLET "--host=x64 --build=i686-unknown-pc"]\r
14 [NO_ADDITIONAL_PATHS]\r
15 [CONFIG_DEPENDENT_ENVIRONMENT <SOME_VAR>...]\r
16 [CONFIGURE_ENVIRONMENT_VARIABLES <SOME_ENVVAR>...]\r
17 [ADD_BIN_TO_PATH]\r
18 [NO_DEBUG]\r
19 [SKIP_CONFIGURE]\r
20 [PROJECT_SUBPATH <${PROJ_SUBPATH}>]\r
21 [PRERUN_SHELL <${SHELL_PATH}>]\r
22 [OPTIONS <-DUSE_THIS_IN_ALL_BUILDS=1>...]\r
23 [OPTIONS_RELEASE <-DOPTIMIZE=1>...]\r
24 [OPTIONS_DEBUG <-DDEBUGGABLE=1>...]\r
25)\r
26```\r
27\r
28## Parameters\r
29### SOURCE_PATH\r
30Specifies the directory containing the `configure`/`configure.ac`.\r
31By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.\r
32\r
33### PROJECT_SUBPATH\r
34Specifies the directory containing the ``configure`/`configure.ac`.\r
35By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.\r
36\r
37### SKIP_CONFIGURE\r
38Skip configure process\r
39\r
40### USE_WRAPPERS\r
41Use autotools ar-lib and compile wrappers (only applies to windows cl and lib)\r
42\r
43### BUILD_TRIPLET\r
44Used to pass custom --build/--target/--host to configure. Can be globally overwritten by VCPKG_MAKE_BUILD_TRIPLET\r
45\r
46### DETERMINE_BUILD_TRIPLET\r
47For ports having a configure script following the autotools rules for selecting the triplet\r
48\r
49### NO_ADDITIONAL_PATHS\r
50Don't pass any additional paths except for --prefix to the configure call\r
51\r
52### AUTOCONFIG\r
53Need to use autoconfig to generate configure file.\r
54\r
55### PRERUN_SHELL\r
56Script that needs to be called before configuration (do not use for batch files which simply call autoconf or configure)\r
57\r
58### ADD_BIN_TO_PATH\r
59Adds the appropriate Release and Debug `bin\` directories to the path during configure such that executables can run against the in-tree DLLs.\r
60\r
61## DISABLE_VERBOSE_FLAGS\r
62do not pass '--disable-silent-rules --verbose' to configure\r
63\r
64### OPTIONS\r
65Additional options passed to configure during the configuration.\r
66\r
67### OPTIONS_RELEASE\r
68Additional options passed to configure during the Release configuration. These are in addition to `OPTIONS`.\r
69\r
70### OPTIONS_DEBUG\r
71Additional options passed to configure during the Debug configuration. These are in addition to `OPTIONS`.\r
72\r
73### CONFIG_DEPENDENT_ENVIRONMENT\r
74List of additional configuration dependent environment variables to set. \r
75Pass SOMEVAR to set the environment and have SOMEVAR_(DEBUG|RELEASE) set in the portfile to the appropriate values\r
76General environment variables can be set from within the portfile itself. \r
77\r
78### CONFIGURE_ENVIRONMENT_VARIABLES\r
79List of additional environment variables to pass via the configure call. \r
80\r
81## Notes\r
82This command supplies many common arguments to configure. To see the full list, examine the source.\r
83\r
84## Examples\r
85\r
86* [x264](https://github.com/Microsoft/vcpkg/blob/master/ports/x264/portfile.cmake)\r
87* [tcl](https://github.com/Microsoft/vcpkg/blob/master/ports/tcl/portfile.cmake)\r
88* [freexl](https://github.com/Microsoft/vcpkg/blob/master/ports/freexl/portfile.cmake)\r
89* [libosip2](https://github.com/Microsoft/vcpkg/blob/master/ports/libosip2/portfile.cmake)\r
90#]===]\r
91\r
92macro(_vcpkg_determine_host_mingw out_var)\r
93 if(DEFINED ENV{PROCESSOR_ARCHITEW6432})\r
94 set(HOST_ARCH $ENV{PROCESSOR_ARCHITEW6432})\r
95 else()\r
96 set(HOST_ARCH $ENV{PROCESSOR_ARCHITECTURE})\r
97 endif()\r
98 if(HOST_ARCH MATCHES "(amd|AMD)64")\r
99 set(${out_var} mingw64)\r
100 elseif(HOST_ARCH MATCHES "(x|X)86")\r
101 set(${out_var} mingw32)\r
102 else()\r
103 message(FATAL_ERROR "Unsupported mingw architecture ${HOST_ARCH} in _vcpkg_determine_autotools_host_cpu!" )\r
104 endif()\r
105 unset(HOST_ARCH)\r
106endmacro()\r
107\r
108macro(_vcpkg_determine_autotools_host_cpu out_var)\r
109 # TODO: the host system processor architecture can differ from the host triplet target architecture\r
110 if(DEFINED ENV{PROCESSOR_ARCHITEW6432})\r
111 set(HOST_ARCH $ENV{PROCESSOR_ARCHITEW6432})\r
112 elseif(DEFINED ENV{PROCESSOR_ARCHITECTURE})\r
113 set(HOST_ARCH $ENV{PROCESSOR_ARCHITECTURE})\r
114 else()\r
115 set(HOST_ARCH "${VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR}")\r
116 endif()\r
117 if(HOST_ARCH MATCHES "(amd|AMD)64")\r
118 set(${out_var} x86_64)\r
119 elseif(HOST_ARCH MATCHES "(x|X)86")\r
120 set(${out_var} i686)\r
121 elseif(HOST_ARCH MATCHES "^(ARM|arm)64$")\r
122 set(${out_var} aarch64)\r
123 elseif(HOST_ARCH MATCHES "^(ARM|arm)$")\r
124 set(${out_var} arm)\r
125 else()\r
126 message(FATAL_ERROR "Unsupported host architecture ${HOST_ARCH} in _vcpkg_determine_autotools_host_cpu!" )\r
127 endif()\r
128 unset(HOST_ARCH)\r
129endmacro()\r
130\r
131macro(_vcpkg_determine_autotools_target_cpu out_var)\r
132 if(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)64")\r
133 set(${out_var} x86_64)\r
134 elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)86")\r
135 set(${out_var} i686)\r
136 elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)64$")\r
137 set(${out_var} aarch64)\r
138 elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)$")\r
139 set(${out_var} arm)\r
140 else()\r
141 message(FATAL_ERROR "Unsupported VCPKG_TARGET_ARCHITECTURE architecture ${VCPKG_TARGET_ARCHITECTURE} in _vcpkg_determine_autotools_target_cpu!" )\r
142 endif()\r
143endmacro()\r
144\r
145macro(_vcpkg_determine_autotools_host_arch_mac out_var)\r
146 set(${out_var} "${VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR}")\r
147endmacro()\r
148\r
149macro(_vcpkg_determine_autotools_target_arch_mac out_var)\r
150 list(LENGTH VCPKG_OSX_ARCHITECTURES _num_osx_archs)\r
151 if(_num_osx_archs GREATER_EQUAL 2)\r
152 set(${out_var} "universal")\r
153 else()\r
154 # Better match the arch behavior of config.guess\r
155 # See: https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD\r
156 if(VCPKG_OSX_ARCHITECTURES MATCHES "^(ARM|arm)64$")\r
157 set(${out_var} "aarch64")\r
158 else()\r
159 set(${out_var} "${VCPKG_OSX_ARCHITECTURES}")\r
160 endif()\r
161 endif()\r
162 unset(_num_osx_archs)\r
163endmacro()\r
164\r
165macro(_vcpkg_backup_env_variable envvar)\r
166 if(DEFINED ENV{${envvar}})\r
167 set(${envvar}_BACKUP "$ENV{${envvar}}")\r
168 set(${envvar}_PATHLIKE_CONCAT "${VCPKG_HOST_PATH_SEPARATOR}$ENV{${envvar}}")\r
169 else()\r
170 set(${envvar}_BACKUP)\r
171 set(${envvar}_PATHLIKE_CONCAT)\r
172 endif()\r
173endmacro()\r
174\r
175macro(_vcpkg_backup_env_variables)\r
176 foreach(_var ${ARGV})\r
177 _vcpkg_backup_env_variable(${_var})\r
178 endforeach()\r
179endmacro()\r
180\r
181macro(_vcpkg_restore_env_variable envvar)\r
182 if(${envvar}_BACKUP)\r
183 set(ENV{${envvar}} "${${envvar}_BACKUP}")\r
184 else()\r
185 unset(ENV{${envvar}})\r
186 endif()\r
187endmacro()\r
188\r
189macro(_vcpkg_restore_env_variables)\r
190 foreach(_var ${ARGV})\r
191 _vcpkg_restore_env_variable(${_var})\r
192 endforeach()\r
193endmacro()\r
194\r
195macro(_vcpkg_extract_cpp_flags_and_set_cflags_and_cxxflags _SUFFIX)\r
196 string(REGEX MATCHALL "( |^)-D[^ ]+" CPPFLAGS_${_SUFFIX} "${VCPKG_DETECTED_CMAKE_C_FLAGS_${_SUFFIX}}")\r
197 string(REGEX MATCHALL "( |^)-D[^ ]+" CXXPPFLAGS_${_SUFFIX} "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_${_SUFFIX}}")\r
198 list(JOIN CXXPPFLAGS_${_SUFFIX} "|" CXXREGEX)\r
199 if(CXXREGEX)\r
200 list(FILTER CPPFLAGS_${_SUFFIX} INCLUDE REGEX "(${CXXREGEX})")\r
201 else()\r
202 set(CPPFLAGS_${_SUFFIX})\r
203 endif()\r
204 list(JOIN CPPFLAGS_${_SUFFIX} "|" CPPREGEX)\r
205 list(JOIN CPPFLAGS_${_SUFFIX} " " CPPFLAGS_${_SUFFIX})\r
206 set(CPPFLAGS_${_SUFFIX} "${CPPFLAGS_${_SUFFIX}}")\r
207 if(CPPREGEX)\r
208 string(REGEX REPLACE "(${CPPREGEX})" "" CFLAGS_${_SUFFIX} "${VCPKG_DETECTED_CMAKE_C_FLAGS_${_SUFFIX}}")\r
209 string(REGEX REPLACE "(${CPPREGEX})" "" CXXFLAGS_${_SUFFIX} "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_${_SUFFIX}}")\r
210 else()\r
211 set(CFLAGS_${_SUFFIX} "${VCPKG_DETECTED_CMAKE_C_FLAGS_${_SUFFIX}}")\r
212 set(CXXFLAGS_${_SUFFIX} "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_${_SUFFIX}}")\r
213 endif()\r
214 string(REGEX REPLACE " +" " " CPPFLAGS_${_SUFFIX} "${CPPFLAGS_${_SUFFIX}}")\r
215 string(REGEX REPLACE " +" " " CFLAGS_${_SUFFIX} "${CFLAGS_${_SUFFIX}}")\r
216 string(REGEX REPLACE " +" " " CXXFLAGS_${_SUFFIX} "${CXXFLAGS_${_SUFFIX}}")\r
217 # libtool has and -R option so we need to guard against -RTC by using -Xcompiler\r
218 # while configuring there might be a lot of unknown compiler option warnings due to that\r
219 # just ignore them. \r
220 string(REGEX REPLACE "((-|/)RTC[^ ]+)" "-Xcompiler \\1" CFLAGS_${_SUFFIX} "${CFLAGS_${_SUFFIX}}")\r
221 string(REGEX REPLACE "((-|/)RTC[^ ]+)" "-Xcompiler \\1" CXXFLAGS_${_SUFFIX} "${CXXFLAGS_${_SUFFIX}}")\r
222 string(STRIP "${CPPFLAGS_${_SUFFIX}}" CPPFLAGS_${_SUFFIX})\r
223 string(STRIP "${CFLAGS_${_SUFFIX}}" CFLAGS_${_SUFFIX})\r
224 string(STRIP "${CXXFLAGS_${_SUFFIX}}" CXXFLAGS_${_SUFFIX})\r
225 debug_message("CPPFLAGS_${_SUFFIX}: ${CPPFLAGS_${_SUFFIX}}")\r
226 debug_message("CFLAGS_${_SUFFIX}: ${CFLAGS_${_SUFFIX}}")\r
227 debug_message("CXXFLAGS_${_SUFFIX}: ${CXXFLAGS_${_SUFFIX}}")\r
228endmacro()\r
229\r
230function(vcpkg_configure_make)\r
231 # parse parameters such that semicolons in options arguments to COMMAND don't get erased\r
232 cmake_parse_arguments(PARSE_ARGV 0 _csc\r
233 "AUTOCONFIG;SKIP_CONFIGURE;COPY_SOURCE;DISABLE_VERBOSE_FLAGS;NO_ADDITIONAL_PATHS;ADD_BIN_TO_PATH;USE_WRAPPERS;DETERMINE_BUILD_TRIPLET"\r
234 "SOURCE_PATH;PROJECT_SUBPATH;PRERUN_SHELL;BUILD_TRIPLET"\r
235 "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;CONFIGURE_ENVIRONMENT_VARIABLES;CONFIG_DEPENDENT_ENVIRONMENT;ADDITIONAL_MSYS_PACKAGES"\r
236 )\r
237 vcpkg_internal_get_cmake_vars(OUTPUT_FILE _VCPKG_CMAKE_VARS_FILE)\r
238 set(_VCPKG_CMAKE_VARS_FILE "${_VCPKG_CMAKE_VARS_FILE}" PARENT_SCOPE)\r
239 debug_message("Including cmake vars from: ${_VCPKG_CMAKE_VARS_FILE}")\r
240 include("${_VCPKG_CMAKE_VARS_FILE}")\r
241 if(DEFINED VCPKG_MAKE_BUILD_TRIPLET)\r
242 set(_csc_BUILD_TRIPLET ${VCPKG_MAKE_BUILD_TRIPLET}) # Triplet overwrite for crosscompiling\r
243 endif()\r
244\r
245 set(SRC_DIR "${_csc_SOURCE_PATH}/${_csc_PROJECT_SUBPATH}")\r
246\r
247 set(REQUIRES_AUTOGEN FALSE) # use autogen.sh\r
248 set(REQUIRES_AUTOCONFIG FALSE) # use autotools and configure.ac\r
249 if(EXISTS "${SRC_DIR}/configure" AND "${SRC_DIR}/configure.ac") # remove configure; rerun autoconf\r
250 if(NOT VCPKG_MAINTAINER_SKIP_AUTOCONFIG) # If fixing bugs skipping autoconfig saves a lot of time\r
251 set(REQUIRES_AUTOCONFIG TRUE)\r
252 file(REMOVE "${SRC_DIR}/configure") # remove possible autodated configure scripts\r
253 set(_csc_AUTOCONFIG ON)\r
254 endif()\r
255 elseif(EXISTS "${SRC_DIR}/configure" AND NOT _csc_SKIP_CONFIGURE) # run normally; no autoconf or autgen required\r
256 elseif(EXISTS "${SRC_DIR}/configure.ac") # Run autoconfig\r
257 set(REQUIRES_AUTOCONFIG TRUE)\r
258 set(_csc_AUTOCONFIG ON)\r
259 elseif(EXISTS "${SRC_DIR}/autogen.sh") # Run autogen\r
260 set(REQUIRES_AUTOGEN TRUE)\r
261 else()\r
262 message(FATAL_ERROR "Could not determine method to configure make")\r
263 endif()\r
264\r
265 debug_message("REQUIRES_AUTOGEN:${REQUIRES_AUTOGEN}")\r
266 debug_message("REQUIRES_AUTOCONFIG:${REQUIRES_AUTOCONFIG}")\r
267 # Backup environment variables\r
268 # CCAS CC C CPP CXX FC FF GC LD LF LIBTOOL OBJC OBJCXX R UPC Y \r
269 set(_cm_FLAGS AS CCAS CC C CPP CXX FC FF GC LD LF LIBTOOL OBJC OBJXX R UPC Y RC)\r
270 list(TRANSFORM _cm_FLAGS APPEND "FLAGS")\r
271 _vcpkg_backup_env_variables(${_cm_FLAGS})\r
272\r
273\r
274 # FC fotran compiler | FF Fortran 77 compiler \r
275 # LDFLAGS -> pass -L flags\r
276 # LIBS -> pass -l flags\r
277\r
278 #Used by gcc/linux\r
279 _vcpkg_backup_env_variables(C_INCLUDE_PATH CPLUS_INCLUDE_PATH LIBRARY_PATH LD_LIBRARY_PATH)\r
280\r
281 #Used by cl\r
282 _vcpkg_backup_env_variables(INCLUDE LIB LIBPATH)\r
283\r
284 set(_vcm_paths_with_spaces FALSE)\r
285 if(CURRENT_PACKAGES_DIR MATCHES " " OR CURRENT_INSTALLED_DIR MATCHES " ")\r
286 # Don't bother with whitespace. The tools will probably fail and I tried very hard trying to make it work (no success so far)!\r
287 message(WARNING "Detected whitespace in root directory. Please move the path to one without whitespaces! The required tools do not handle whitespaces correctly and the build will most likely fail")\r
288 set(_vcm_paths_with_spaces TRUE)\r
289 endif()\r
290\r
291 # Pre-processing windows configure requirements\r
292 if (VCPKG_TARGET_IS_WINDOWS)\r
293 if(CMAKE_HOST_WIN32)\r
294 list(APPEND MSYS_REQUIRE_PACKAGES binutils libtool autoconf automake-wrapper automake1.16 m4)\r
295 vcpkg_acquire_msys(MSYS_ROOT PACKAGES ${MSYS_REQUIRE_PACKAGES} ${_csc_ADDITIONAL_MSYS_PACKAGES})\r
296 endif()\r
297 if (_csc_AUTOCONFIG AND NOT _csc_BUILD_TRIPLET OR _csc_DETERMINE_BUILD_TRIPLET OR VCPKG_CROSSCOMPILING AND NOT _csc_BUILD_TRIPLET)\r
298 _vcpkg_determine_autotools_host_cpu(BUILD_ARCH) # VCPKG_HOST => machine you are building on => --build=\r
299 _vcpkg_determine_autotools_target_cpu(TARGET_ARCH)\r
300 # --build: the machine you are building on\r
301 # --host: the machine you are building for\r
302 # --target: the machine that CC will produce binaries for\r
303 # https://stackoverflow.com/questions/21990021/how-to-determine-host-value-for-configure-when-using-cross-compiler\r
304 # Only for ports using autotools so we can assume that they follow the common conventions for build/target/host\r
305 if(CMAKE_HOST_WIN32)\r
306 set(_csc_BUILD_TRIPLET "--build=${BUILD_ARCH}-pc-mingw32") # This is required since we are running in a msys\r
307 # shell which will be otherwise identified as ${BUILD_ARCH}-pc-msys\r
308 endif()\r
309 if(NOT TARGET_ARCH MATCHES "${BUILD_ARCH}" OR NOT CMAKE_HOST_WIN32) # we don't need to specify the additional flags if we build nativly, this does not hold when we are not on windows\r
310 string(APPEND _csc_BUILD_TRIPLET " --host=${TARGET_ARCH}-pc-mingw32") # (Host activates crosscompilation; The name given here is just the prefix of the host tools for the target)\r
311 endif()\r
312 if(VCPKG_TARGET_IS_UWP AND NOT _csc_BUILD_TRIPLET MATCHES "--host")\r
313 # Needs to be different from --build to enable cross builds.\r
314 string(APPEND _csc_BUILD_TRIPLET " --host=${TARGET_ARCH}-unknown-mingw32")\r
315 endif()\r
316 debug_message("Using make triplet: ${_csc_BUILD_TRIPLET}")\r
317 endif()\r
318 if(CMAKE_HOST_WIN32)\r
319 set(APPEND_ENV)\r
320 if(_csc_AUTOCONFIG OR _csc_USE_WRAPPERS)\r
321 set(APPEND_ENV ";${MSYS_ROOT}/usr/share/automake-1.16")\r
322 string(APPEND APPEND_ENV ";${SCRIPTS}/buildsystems/make_wrapper") # Other required wrappers are also located there\r
323 endif()\r
324 # This inserts msys before system32 (which masks sort.exe and find.exe) but after MSVC (which avoids masking link.exe)\r
325 string(REPLACE ";$ENV{SystemRoot}\\System32;" "${APPEND_ENV};${MSYS_ROOT}/usr/bin;$ENV{SystemRoot}\\System32;" NEWPATH "$ENV{PATH}")\r
326 string(REPLACE ";$ENV{SystemRoot}\\system32;" "${APPEND_ENV};${MSYS_ROOT}/usr/bin;$ENV{SystemRoot}\\system32;" NEWPATH "$ENV{PATH}")\r
327 set(ENV{PATH} "${NEWPATH}")\r
328 set(BASH "${MSYS_ROOT}/usr/bin/bash.exe")\r
329 endif()\r
330\r
331 macro(_vcpkg_append_to_configure_environment inoutstring var defaultval)\r
332 # Allows to overwrite settings in custom triplets via the environment on windows\r
333 if(CMAKE_HOST_WIN32 AND DEFINED ENV{${var}})\r
334 string(APPEND ${inoutstring} " ${var}='$ENV{${var}}'")\r
335 else()\r
336 string(APPEND ${inoutstring} " ${var}='${defaultval}'")\r
337 endif()\r
338 endmacro()\r
339\r
340 set(CONFIGURE_ENV "V=1")\r
341 # Remove full filepaths due to spaces and prepend filepaths to PATH (cross-compiling tools are unlikely on path by default)\r
342 set(progs VCPKG_DETECTED_CMAKE_C_COMPILER VCPKG_DETECTED_CMAKE_CXX_COMPILER VCPKG_DETECTED_CMAKE_AR\r
343 VCPKG_DETECTED_CMAKE_LINKER VCPKG_DETECTED_CMAKE_RANLIB VCPKG_DETECTED_CMAKE_OBJDUMP\r
344 VCPKG_DETECTED_CMAKE_STRIP VCPKG_DETECTED_CMAKE_NM VCPKG_DETECTED_CMAKE_DLLTOOL VCPKG_DETECTED_CMAKE_RC_COMPILER)\r
345 foreach(prog IN LISTS progs)\r
346 if(${prog})\r
347 set(path "${${prog}}")\r
348 unset(prog_found CACHE)\r
349 get_filename_component(${prog} "${${prog}}" NAME)\r
350 find_program(prog_found ${${prog}} PATHS ENV PATH NO_DEFAULT_PATH)\r
351 if(NOT path STREQUAL prog_found)\r
352 get_filename_component(path "${path}" DIRECTORY)\r
353 vcpkg_add_to_path(PREPEND ${path})\r
354 endif()\r
355 endif()\r
356 endforeach()\r
357 if (_csc_AUTOCONFIG OR _csc_USE_WRAPPERS) # without autotools we assume a custom configure script which correctly handles cl and lib. Otherwise the port needs to set CC|CXX|AR and probably CPP\r
358 _vcpkg_append_to_configure_environment(CONFIGURE_ENV CPP "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")\r
359\r
360 _vcpkg_append_to_configure_environment(CONFIGURE_ENV CC "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER}")\r
361 _vcpkg_append_to_configure_environment(CONFIGURE_ENV CC_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER}")\r
362 _vcpkg_append_to_configure_environment(CONFIGURE_ENV CXX "compile ${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")\r
363 _vcpkg_append_to_configure_environment(CONFIGURE_ENV RC "windres-rc ${VCPKG_DETECTED_CMAKE_RC_COMPILER}")\r
364 _vcpkg_append_to_configure_environment(CONFIGURE_ENV WINDRES "windres-rc ${VCPKG_DETECTED_CMAKE_RC_COMPILER}")\r
365 if(VCPKG_DETECTED_CMAKE_AR)\r
366 _vcpkg_append_to_configure_environment(CONFIGURE_ENV AR "ar-lib ${VCPKG_DETECTED_CMAKE_AR}")\r
367 else()\r
368 _vcpkg_append_to_configure_environment(CONFIGURE_ENV AR "ar-lib lib.exe -verbose")\r
369 endif()\r
370 else()\r
371 _vcpkg_append_to_configure_environment(CONFIGURE_ENV CPP "${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")\r
372 _vcpkg_append_to_configure_environment(CONFIGURE_ENV CC "${VCPKG_DETECTED_CMAKE_C_COMPILER}")\r
373 _vcpkg_append_to_configure_environment(CONFIGURE_ENV CC_FOR_BUILD "${VCPKG_DETECTED_CMAKE_C_COMPILER}")\r
374 _vcpkg_append_to_configure_environment(CONFIGURE_ENV CXX "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")\r
375 if(VCPKG_DETECTED_CMAKE_AR)\r
376 _vcpkg_append_to_configure_environment(CONFIGURE_ENV AR "${VCPKG_DETECTED_CMAKE_AR}")\r
377 else()\r
378 _vcpkg_append_to_configure_environment(CONFIGURE_ENV AR "lib.exe -verbose")\r
379 endif()\r
380 endif()\r
381 _vcpkg_append_to_configure_environment(CONFIGURE_ENV LD "${VCPKG_DETECTED_CMAKE_LINKER} -verbose")\r
382 if(VCPKG_DETECTED_CMAKE_RANLIB)\r
383 _vcpkg_append_to_configure_environment(CONFIGURE_ENV RANLIB "${VCPKG_DETECTED_CMAKE_RANLIB}") # Trick to ignore the RANLIB call\r
384 else()\r
385 _vcpkg_append_to_configure_environment(CONFIGURE_ENV RANLIB ":")\r
386 endif()\r
387 if(VCPKG_DETECTED_CMAKE_OBJDUMP) #Objdump is required to make shared libraries. Otherwise define lt_cv_deplibs_check_method=pass_all\r
388 _vcpkg_append_to_configure_environment(CONFIGURE_ENV OBJDUMP "${VCPKG_DETECTED_CMAKE_OBJDUMP}") # Trick to ignore the RANLIB call\r
389 endif()\r
390 if(VCPKG_DETECTED_CMAKE_STRIP) # If required set the ENV variable STRIP in the portfile correctly\r
391 _vcpkg_append_to_configure_environment(CONFIGURE_ENV STRIP "${VCPKG_DETECTED_CMAKE_STRIP}") \r
392 else()\r
393 _vcpkg_append_to_configure_environment(CONFIGURE_ENV STRIP ":")\r
394 list(APPEND _csc_OPTIONS ac_cv_prog_ac_ct_STRIP=:)\r
395 endif()\r
396 if(VCPKG_DETECTED_CMAKE_NM) # If required set the ENV variable NM in the portfile correctly\r
397 _vcpkg_append_to_configure_environment(CONFIGURE_ENV NM "${VCPKG_DETECTED_CMAKE_NM}") \r
398 else()\r
399 # Would be better to have a true nm here! Some symbols (mainly exported variables) get not properly imported with dumpbin as nm \r
400 # and require __declspec(dllimport) for some reason (same problem CMake has with WINDOWS_EXPORT_ALL_SYMBOLS)\r
401 _vcpkg_append_to_configure_environment(CONFIGURE_ENV NM "dumpbin.exe -symbols -headers")\r
402 endif()\r
403 if(VCPKG_DETECTED_CMAKE_DLLTOOL) # If required set the ENV variable DLLTOOL in the portfile correctly\r
404 _vcpkg_append_to_configure_environment(CONFIGURE_ENV DLLTOOL "${VCPKG_DETECTED_CMAKE_DLLTOOL}") \r
405 else()\r
406 _vcpkg_append_to_configure_environment(CONFIGURE_ENV DLLTOOL "link.exe -verbose -dll")\r
407 endif()\r
408 _vcpkg_append_to_configure_environment(CONFIGURE_ENV CCAS ":") # If required set the ENV variable CCAS in the portfile correctly\r
409 _vcpkg_append_to_configure_environment(CONFIGURE_ENV AS ":") # If required set the ENV variable AS in the portfile correctly\r
410\r
411 foreach(_env IN LISTS _csc_CONFIGURE_ENVIRONMENT_VARIABLES)\r
412 _vcpkg_append_to_configure_environment(CONFIGURE_ENV ${_env} "${${_env}}")\r
413 endforeach()\r
414 debug_message("CONFIGURE_ENV: '${CONFIGURE_ENV}'")\r
415 # Other maybe interesting variables to control\r
416 # COMPILE This is the command used to actually compile a C source file. The file name is appended to form the complete command line. \r
417 # LINK This is the command used to actually link a C program.\r
418 # CXXCOMPILE The command used to actually compile a C++ source file. The file name is appended to form the complete command line. \r
419 # CXXLINK The command used to actually link a C++ program. \r
420\r
421 # Variables not correctly detected by configure. In release builds.\r
422 list(APPEND _csc_OPTIONS gl_cv_double_slash_root=yes\r
423 ac_cv_func_memmove=yes)\r
424 #list(APPEND _csc_OPTIONS lt_cv_deplibs_check_method=pass_all) # Just ignore libtool checks \r
425 if(VCPKG_TARGET_ARCHITECTURE MATCHES "^[Aa][Rr][Mm]64$")\r
426 list(APPEND _csc_OPTIONS gl_cv_host_cpu_c_abi=no)\r
427 # Currently needed for arm64 because objdump yields: "unrecognised machine type (0xaa64) in Import Library Format archive"\r
428 list(APPEND _csc_OPTIONS lt_cv_deplibs_check_method=pass_all)\r
429 elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^[Aa][Rr][Mm]$")\r
430 # Currently needed for arm because objdump yields: "unrecognised machine type (0x1c4) in Import Library Format archive"\r
431 list(APPEND _csc_OPTIONS lt_cv_deplibs_check_method=pass_all)\r
432 endif()\r
433 endif()\r
434\r
435 if(CMAKE_HOST_WIN32)\r
436 #Some PATH handling for dealing with spaces....some tools will still fail with that!\r
437 string(REPLACE " " "\\\ " _VCPKG_PREFIX ${CURRENT_INSTALLED_DIR})\r
438 string(REGEX REPLACE "([a-zA-Z]):/" "/\\1/" _VCPKG_PREFIX "${_VCPKG_PREFIX}")\r
439 set(_VCPKG_INSTALLED ${CURRENT_INSTALLED_DIR})\r
440 set(prefix_var "'\${prefix}'") # Windows needs extra quotes or else the variable gets expanded in the makefile!\r
441 else()\r
442 string(REPLACE " " "\ " _VCPKG_PREFIX ${CURRENT_INSTALLED_DIR})\r
443 string(REPLACE " " "\ " _VCPKG_INSTALLED ${CURRENT_INSTALLED_DIR})\r
444 set(EXTRA_QUOTES)\r
445 set(prefix_var "\${prefix}")\r
446 endif()\r
447\r
448 # macOS - cross-compiling support\r
449 if(VCPKG_TARGET_IS_OSX)\r
450 if (_csc_AUTOCONFIG AND NOT _csc_BUILD_TRIPLET OR _csc_DETERMINE_BUILD_TRIPLET)\r
451 _vcpkg_determine_autotools_host_arch_mac(BUILD_ARCH) # machine you are building on => --build=\r
452 _vcpkg_determine_autotools_target_arch_mac(TARGET_ARCH)\r
453 # --build: the machine you are building on\r
454 # --host: the machine you are building for\r
455 # --target: the machine that CC will produce binaries for\r
456 # https://stackoverflow.com/questions/21990021/how-to-determine-host-value-for-configure-when-using-cross-compiler\r
457 # Only for ports using autotools so we can assume that they follow the common conventions for build/target/host\r
458 if(NOT "${TARGET_ARCH}" STREQUAL "${BUILD_ARCH}") # we don't need to specify the additional flags if we build natively.\r
459 set(_csc_BUILD_TRIPLET "--host=${TARGET_ARCH}-apple-darwin") # (Host activates crosscompilation; The name given here is just the prefix of the host tools for the target)\r
460 endif()\r
461 debug_message("Using make triplet: ${_csc_BUILD_TRIPLET}")\r
462 endif()\r
463 endif()\r
464\r
465 # Cleanup previous build dirs\r
466 file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel"\r
467 "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg"\r
468 "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}")\r
469\r
470 # Set configure paths\r
471 set(_csc_OPTIONS_RELEASE ${_csc_OPTIONS_RELEASE} "--prefix=${EXTRA_QUOTES}${_VCPKG_PREFIX}${EXTRA_QUOTES}")\r
472 set(_csc_OPTIONS_DEBUG ${_csc_OPTIONS_DEBUG} "--prefix=${EXTRA_QUOTES}${_VCPKG_PREFIX}/debug${EXTRA_QUOTES}")\r
473 if(NOT _csc_NO_ADDITIONAL_PATHS)\r
474 set(_csc_OPTIONS_RELEASE ${_csc_OPTIONS_RELEASE}\r
475 # Important: These should all be relative to prefix!\r
476 "--bindir=${prefix_var}/tools/${PORT}/bin"\r
477 "--sbindir=${prefix_var}/tools/${PORT}/sbin"\r
478 #"--libdir='\${prefix}'/lib" # already the default!\r
479 #"--includedir='\${prefix}'/include" # already the default!\r
480 "--mandir=${prefix_var}/share/${PORT}"\r
481 "--docdir=${prefix_var}/share/${PORT}"\r
482 "--datarootdir=${prefix_var}/share/${PORT}")\r
483 set(_csc_OPTIONS_DEBUG ${_csc_OPTIONS_DEBUG}\r
484 # Important: These should all be relative to prefix!\r
485 "--bindir=${prefix_var}/../tools/${PORT}/debug/bin"\r
486 "--sbindir=${prefix_var}/../tools/${PORT}/debug/sbin"\r
487 #"--libdir='\${prefix}'/lib" # already the default!\r
488 "--includedir=${prefix_var}/../include"\r
489 "--datarootdir=${prefix_var}/share/${PORT}")\r
490 endif()\r
491 # Setup common options\r
492 if(NOT DISABLE_VERBOSE_FLAGS)\r
493 list(APPEND _csc_OPTIONS --disable-silent-rules --verbose)\r
494 endif()\r
495\r
496 if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)\r
497 list(APPEND _csc_OPTIONS --enable-shared --disable-static)\r
498 else()\r
499 list(APPEND _csc_OPTIONS --disable-shared --enable-static)\r
500 endif()\r
501\r
502 file(RELATIVE_PATH RELATIVE_BUILD_PATH "${CURRENT_BUILDTREES_DIR}" "${_csc_SOURCE_PATH}/${_csc_PROJECT_SUBPATH}")\r
503\r
504 set(base_cmd)\r
505 if(CMAKE_HOST_WIN32)\r
506 set(base_cmd ${BASH} --noprofile --norc --debug)\r
507 else()\r
508 find_program(base_cmd bash REQUIRED)\r
509 endif()\r
510 if(VCPKG_TARGET_IS_WINDOWS)\r
511 list(JOIN _csc_OPTIONS " " _csc_OPTIONS)\r
512 list(JOIN _csc_OPTIONS_RELEASE " " _csc_OPTIONS_RELEASE)\r
513 list(JOIN _csc_OPTIONS_DEBUG " " _csc_OPTIONS_DEBUG)\r
514 endif()\r
515 \r
516 # Setup include environment (since these are buildtype independent restoring them is unnecessary)\r
517 # Used by CL \r
518 set(ENV{INCLUDE} "${_VCPKG_INSTALLED}/include${VCPKG_HOST_PATH_SEPARATOR}${INCLUDE_BACKUP}")\r
519 # Used by GCC\r
520 set(ENV{C_INCLUDE_PATH} "${_VCPKG_INSTALLED}/include${VCPKG_HOST_PATH_SEPARATOR}${C_INCLUDE_PATH_BACKUP}")\r
521 set(ENV{CPLUS_INCLUDE_PATH} "${_VCPKG_INSTALLED}/include${VCPKG_HOST_PATH_SEPARATOR}${CPLUS_INCLUDE_PATH_BACKUP}")\r
522\r
523 # Flags should be set in the toolchain instead (Setting this up correctly requires a function named vcpkg_determined_cmake_compiler_flags which can also be used to setup CC and CXX etc.)\r
524 if(VCPKG_TARGET_IS_WINDOWS)\r
525 _vcpkg_backup_env_variables(_CL_ _LINK_)\r
526 # TODO: Should be CPP flags instead -> rewrite when vcpkg_determined_cmake_compiler_flags defined\r
527 if(VCPKG_TARGET_IS_UWP)\r
528 # Be aware that configure thinks it is crosscompiling due to: \r
529 # error while loading shared libraries: VCRUNTIME140D_APP.dll: \r
530 # cannot open shared object file: No such file or directory\r
531 # IMPORTANT: The only way to pass linker flags through libtool AND the compile wrapper \r
532 # is to use the CL and LINK environment variables !!!\r
533 # (This is due to libtool and compiler wrapper using the same set of options to pass those variables around)\r
534 string(REPLACE "\\" "/" VCToolsInstallDir "$ENV{VCToolsInstallDir}")\r
535 # Can somebody please check if CMake's compiler flags for UWP are correct?\r
536 set(ENV{_CL_} "$ENV{_CL_} /D_UNICODE /DUNICODE /DWINAPI_FAMILY=WINAPI_FAMILY_APP /D__WRL_NO_DEFAULT_LIB_ -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\"")\r
537 string(APPEND VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE " -ZW:nostdlib")\r
538 string(APPEND VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG " -ZW:nostdlib")\r
539 set(ENV{_LINK_} "$ENV{_LINK_} ${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES} ${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES} /MANIFEST /DYNAMICBASE /WINMD:NO /APPCONTAINER") \r
540 endif()\r
541 endif()\r
542\r
543 macro(convert_to_list input output)\r
544 string(REGEX MATCHALL "(( +|^ *)[^ ]+)" ${output} "${${input}}")\r
545 endmacro()\r
546 convert_to_list(VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES C_LIBS_LIST)\r
547 convert_to_list(VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES CXX_LIBS_LIST)\r
548 set(ALL_LIBS_LIST ${C_LIBS_LIST} ${CXX_LIBS_LIST})\r
549 list(REMOVE_DUPLICATES ALL_LIBS_LIST)\r
550 list(TRANSFORM ALL_LIBS_LIST STRIP)\r
551 #Do lib list transformation from name.lib to -lname if necessary\r
552 set(_VCPKG_TRANSFORM_LIBS TRUE)\r
553 if(VCPKG_TARGET_IS_UWP)\r
554 set(_VCPKG_TRANSFORM_LIBS FALSE)\r
555 # Avoid libtool choke: "Warning: linker path does not have real file for library -lWindowsApp."\r
556 # The problem with the choke is that libtool always falls back to built a static library even if a dynamic was requested. \r
557 # Note: Env LIBPATH;LIB are on the search path for libtool by default on windows. \r
558 # It even does unix/dos-short/unix transformation with the path to get rid of spaces. \r
559 endif()\r
560 set(_lprefix)\r
561 if(_VCPKG_TRANSFORM_LIBS)\r
562 set(_lprefix "-l")\r
563 list(TRANSFORM ALL_LIBS_LIST REPLACE "(.dll.lib|.lib|.a|.so)$" "")\r
564 if(VCPKG_TARGET_IS_WINDOWS)\r
565 list(REMOVE_ITEM ALL_LIBS_LIST "uuid")\r
566 endif()\r
567 list(TRANSFORM ALL_LIBS_LIST REPLACE "^(${_lprefix})" "")\r
568 endif()\r
569 list(JOIN ALL_LIBS_LIST " ${_lprefix}" ALL_LIBS_STRING)\r
570\r
571 if(ALL_LIBS_STRING)\r
572 set(ALL_LIBS_STRING "${_lprefix}${ALL_LIBS_STRING}")\r
573 if(DEFINED ENV{LIBS})\r
574 set(ENV{LIBS} "$ENV{LIBS} ${ALL_LIBS_STRING}")\r
575 else()\r
576 set(ENV{LIBS} "${ALL_LIBS_STRING}")\r
577 endif()\r
578 endif()\r
579 debug_message(STATUS "ENV{LIBS}:$ENV{LIBS}")\r
580 vcpkg_find_acquire_program(PKGCONFIG)\r
581 if(VCPKG_LIBRARY_LINKAGE STREQUAL "static" AND NOT PKGCONFIG STREQUAL "--static")\r
582 set(PKGCONFIG "${PKGCONFIG} --static") # Is this still required or was the PR changing the pc files accordingly merged?\r
583 endif()\r
584\r
585 # Run autoconf if necessary\r
586 set(_GENERATED_CONFIGURE FALSE)\r
587 if (_csc_AUTOCONFIG OR REQUIRES_AUTOCONFIG)\r
588 find_program(AUTORECONF autoreconf)\r
589 if(NOT AUTORECONF)\r
590 message(FATAL_ERROR "${PORT} requires autoconf from the system package manager (example: \"sudo apt-get install autoconf\")")\r
591 endif()\r
592 message(STATUS "Generating configure for ${TARGET_TRIPLET}")\r
593 if (CMAKE_HOST_WIN32)\r
594 vcpkg_execute_required_process(\r
595 COMMAND ${base_cmd} -c "autoreconf -vfi"\r
596 WORKING_DIRECTORY "${SRC_DIR}"\r
597 LOGNAME autoconf-${TARGET_TRIPLET}\r
598 )\r
599 else()\r
600 vcpkg_execute_required_process(\r
601 COMMAND ${AUTORECONF} -vfi\r
602 WORKING_DIRECTORY "${SRC_DIR}"\r
603 LOGNAME autoconf-${TARGET_TRIPLET}\r
604 )\r
605 endif()\r
606 message(STATUS "Finished generating configure for ${TARGET_TRIPLET}")\r
607 endif()\r
608 if(REQUIRES_AUTOGEN)\r
609 message(STATUS "Generating configure for ${TARGET_TRIPLET} via autogen.sh")\r
610 if (CMAKE_HOST_WIN32)\r
611 vcpkg_execute_required_process(\r
612 COMMAND ${base_cmd} -c "./autogen.sh"\r
613 WORKING_DIRECTORY "${SRC_DIR}"\r
614 LOGNAME autoconf-${TARGET_TRIPLET}\r
615 )\r
616 else()\r
617 vcpkg_execute_required_process(\r
618 COMMAND "./autogen.sh"\r
619 WORKING_DIRECTORY "${SRC_DIR}"\r
620 LOGNAME autoconf-${TARGET_TRIPLET}\r
621 )\r
622 endif()\r
623 message(STATUS "Finished generating configure for ${TARGET_TRIPLET}")\r
624 endif()\r
625\r
626 if (_csc_PRERUN_SHELL)\r
627 message(STATUS "Prerun shell with ${TARGET_TRIPLET}")\r
628 vcpkg_execute_required_process(\r
629 COMMAND ${base_cmd} -c "${_csc_PRERUN_SHELL}"\r
630 WORKING_DIRECTORY "${SRC_DIR}"\r
631 LOGNAME prerun-${TARGET_TRIPLET}\r
632 )\r
633 endif()\r
634\r
635 if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug" AND NOT _csc_NO_DEBUG)\r
636 set(_VAR_SUFFIX DEBUG)\r
637 set(PATH_SUFFIX_${_VAR_SUFFIX} "/debug")\r
638 set(SHORT_NAME_${_VAR_SUFFIX} "dbg")\r
639 list(APPEND _buildtypes ${_VAR_SUFFIX})\r
640 if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")\r
641 set(LINKER_FLAGS_${_VAR_SUFFIX} "${VCPKG_DETECTED_CMAKE_STATIC_LINKERFLAGS_${_VAR_SUFFIX}}")\r
642 else() # dynamic\r
643 set(LINKER_FLAGS_${_VAR_SUFFIX} "${VCPKG_DETECTED_CMAKE_SHARED_LINKERFLAGS_${_VAR_SUFFIX}}")\r
644 endif()\r
645 _vcpkg_extract_cpp_flags_and_set_cflags_and_cxxflags(${_VAR_SUFFIX})\r
646 if (CMAKE_HOST_WIN32 AND VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES "cl.exe")\r
647 if(NOT _vcm_paths_with_spaces)\r
648 set(LDFLAGS_${_VAR_SUFFIX} "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib -L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link")\r
649 endif()\r
650 if(DEFINED ENV{_LINK_})\r
651 set(LINK_ENV_${_VAR_SUFFIX} "$ENV{_LINK_} ${LINKER_FLAGS_${_VAR_SUFFIX}}")\r
652 else()\r
653 set(LINK_ENV_${_VAR_SUFFIX} "${LINKER_FLAGS_${_VAR_SUFFIX}}")\r
654 endif()\r
655 else()\r
656 set(_link_dirs)\r
657 if(EXISTS "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib")\r
658 set(_link_dirs "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib")\r
659 endif()\r
660 if(EXISTS "{_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link")\r
661 set(_link_dirs "${_link_dirs} -L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link")\r
662 endif()\r
663 string(STRIP "${_link_dirs}" _link_dirs)\r
664 set(LDFLAGS_${_VAR_SUFFIX} "${_link_dirs} ${LINKER_FLAGS_${_VAR_SUFFIX}}")\r
665 endif()\r
666 unset(_VAR_SUFFIX)\r
667 endif()\r
668 if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")\r
669 set(_VAR_SUFFIX RELEASE)\r
670 set(PATH_SUFFIX_${_VAR_SUFFIX} "")\r
671 set(SHORT_NAME_${_VAR_SUFFIX} "rel")\r
672 list(APPEND _buildtypes ${_VAR_SUFFIX})\r
673 if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")\r
674 set(LINKER_FLAGS_${_VAR_SUFFIX} "${VCPKG_DETECTED_CMAKE_STATIC_LINKERFLAGS_${_VAR_SUFFIX}}")\r
675 else() # dynamic\r
676 set(LINKER_FLAGS_${_VAR_SUFFIX} "${VCPKG_DETECTED_CMAKE_SHARED_LINKERFLAGS_${_VAR_SUFFIX}}")\r
677 endif()\r
678 _vcpkg_extract_cpp_flags_and_set_cflags_and_cxxflags(${_VAR_SUFFIX})\r
679 if (CMAKE_HOST_WIN32 AND VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES "cl.exe")\r
680 if(NOT _vcm_paths_with_spaces)\r
681 set(LDFLAGS_${_VAR_SUFFIX} "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib -L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link")\r
682 endif()\r
683 if(DEFINED ENV{_LINK_})\r
684 set(LINK_ENV_${_VAR_SUFFIX} "$ENV{_LINK_} ${LINKER_FLAGS_${_VAR_SUFFIX}}")\r
685 else()\r
686 set(LINK_ENV_${_VAR_SUFFIX} "${LINKER_FLAGS_${_VAR_SUFFIX}}")\r
687 endif()\r
688 else()\r
689 set(_link_dirs)\r
690 if(EXISTS "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib")\r
691 set(_link_dirs "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib")\r
692 endif()\r
693 if(EXISTS "{_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link")\r
694 set(_link_dirs "${_link_dirs} -L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link")\r
695 endif()\r
696 string(STRIP "${_link_dirs}" _link_dirs)\r
697 set(LDFLAGS_${_VAR_SUFFIX} "${_link_dirs} ${LINKER_FLAGS_${_VAR_SUFFIX}}")\r
698 endif()\r
699 unset(_VAR_SUFFIX)\r
700 endif()\r
701\r
702 foreach(_buildtype IN LISTS _buildtypes)\r
703 foreach(ENV_VAR ${_csc_CONFIG_DEPENDENT_ENVIRONMENT})\r
704 if(DEFINED ENV{${ENV_VAR}})\r
705 set(BACKUP_CONFIG_${ENV_VAR} "$ENV{${ENV_VAR}}")\r
706 endif()\r
707 set(ENV{${ENV_VAR}} "${${ENV_VAR}_${_buildtype}}")\r
708 endforeach()\r
709\r
710 set(TAR_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${SHORT_NAME_${_buildtype}}")\r
711 file(MAKE_DIRECTORY "${TAR_DIR}")\r
712 file(RELATIVE_PATH RELATIVE_BUILD_PATH "${TAR_DIR}" "${SRC_DIR}")\r
713\r
714 if(_csc_COPY_SOURCE)\r
715 file(COPY "${SRC_DIR}/" DESTINATION "${TAR_DIR}")\r
716 set(RELATIVE_BUILD_PATH .)\r
717 endif()\r
718\r
719 # Setup PKG_CONFIG_PATH\r
720 set(PKGCONFIG_INSTALLED_DIR "${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_buildtype}}/lib/pkgconfig")\r
721 set(PKGCONFIG_INSTALLED_SHARE_DIR "${CURRENT_INSTALLED_DIR}/share/pkgconfig")\r
722 if(ENV{PKG_CONFIG_PATH})\r
723 set(BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype} $ENV{PKG_CONFIG_PATH})\r
724 set(ENV{PKG_CONFIG_PATH} "${PKGCONFIG_INSTALLED_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_INSTALLED_SHARE_DIR}${VCPKG_HOST_PATH_SEPARATOR}$ENV{PKG_CONFIG_PATH}")\r
725 else()\r
726 set(ENV{PKG_CONFIG_PATH} "${PKGCONFIG_INSTALLED_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_INSTALLED_SHARE_DIR}")\r
727 endif()\r
728\r
729 # Setup environment\r
730 set(ENV{CPPFLAGS} "${CPPFLAGS_${_buildtype}}")\r
731 set(ENV{CFLAGS} "${CFLAGS_${_buildtype}}")\r
732 set(ENV{CXXFLAGS} "${CXXFLAGS_${_buildtype}}")\r
733 set(ENV{RCFLAGS} "${VCPKG_DETECTED_CMAKE_RC_FLAGS_${_buildtype}}")\r
734 set(ENV{LDFLAGS} "${LDFLAGS_${_buildtype}}")\r
735 if(LINK_ENV_${_VAR_SUFFIX})\r
736 set(_LINK_CONFIG_BACKUP "$ENV{_LINK_}")\r
737 set(ENV{_LINK_} "${LINK_ENV_${_VAR_SUFFIX}}")\r
738 endif()\r
739 set(ENV{PKG_CONFIG} "${PKGCONFIG} --define-variable=prefix=${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}")\r
740\r
741 set(_lib_env_vars LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH)\r
742 foreach(_lib_env_var IN LISTS _lib_env_vars)\r
743 set(_link_path)\r
744 if(EXISTS "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib")\r
745 set(_link_path "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib")\r
746 endif()\r
747 if(EXISTS "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link")\r
748 if(_link_path)\r
749 set(_link_path "${_link_path}${VCPKG_HOST_PATH_SEPARATOR}")\r
750 endif()\r
751 set(_link_path "${_link_path}${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link")\r
752 endif()\r
753 set(ENV{${_lib_env_var}} "${_link_path}${${_lib_env_var}_PATHLIKE_CONCAT}")\r
754 endforeach()\r
755 unset(_link_path)\r
756 unset(_lib_env_vars)\r
757\r
758 if(VCPKG_TARGET_IS_WINDOWS)\r
759 set(command "${base_cmd}" -c "${CONFIGURE_ENV} ./${RELATIVE_BUILD_PATH}/configure ${_csc_BUILD_TRIPLET} ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildtype}}")\r
760 else()\r
761 set(command "${base_cmd}" "./${RELATIVE_BUILD_PATH}/configure" ${_csc_BUILD_TRIPLET} ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildtype}})\r
762 endif()\r
763 \r
764 if(_csc_ADD_BIN_TO_PATH)\r
765 set(PATH_BACKUP $ENV{PATH})\r
766 vcpkg_add_to_path("${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_buildtype}}/bin")\r
767 endif()\r
768 debug_message("Configure command:'${command}'")\r
769 if (NOT _csc_SKIP_CONFIGURE)\r
770 message(STATUS "Configuring ${TARGET_TRIPLET}-${SHORT_NAME_${_buildtype}}")\r
771 vcpkg_execute_required_process(\r
772 COMMAND ${command}\r
773 WORKING_DIRECTORY "${TAR_DIR}"\r
774 LOGNAME config-${TARGET_TRIPLET}-${SHORT_NAME_${_buildtype}}\r
775 )\r
776 if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW AND VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)\r
777 file(GLOB_RECURSE LIBTOOL_FILES "${TAR_DIR}*/libtool")\r
778 foreach(lt_file IN LISTS LIBTOOL_FILES)\r
779 file(READ "${lt_file}" _contents)\r
780 string(REPLACE ".dll.lib" ".lib" _contents "${_contents}")\r
781 file(WRITE "${lt_file}" "${_contents}")\r
782 endforeach()\r
783 endif()\r
784 \r
785 if(EXISTS "${TAR_DIR}/config.log")\r
786 file(RENAME "${TAR_DIR}/config.log" "${CURRENT_BUILDTREES_DIR}/config.log-${TARGET_TRIPLET}-${SHORT_NAME_${_buildtype}}.log")\r
787 endif()\r
788 endif()\r
789\r
790 if(BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype})\r
791 set(ENV{PKG_CONFIG_PATH} "${BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype}}")\r
792 else()\r
793 unset(ENV{PKG_CONFIG_PATH})\r
794 endif()\r
795 unset(BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype})\r
796 \r
797 if(_LINK_CONFIG_BACKUP)\r
798 set(ENV{_LINK_} "${_LINK_CONFIG_BACKUP}")\r
799 unset(_LINK_CONFIG_BACKUP)\r
800 endif()\r
801 \r
802 if(_csc_ADD_BIN_TO_PATH)\r
803 set(ENV{PATH} "${PATH_BACKUP}")\r
804 endif()\r
805 # Restore environment (config dependent)\r
806 foreach(ENV_VAR ${_csc_CONFIG_DEPENDENT_ENVIRONMENT})\r
807 if(BACKUP_CONFIG_${ENV_VAR})\r
808 set(ENV{${ENV_VAR}} "${BACKUP_CONFIG_${ENV_VAR}}")\r
809 else()\r
810 unset(ENV{${ENV_VAR}})\r
811 endif()\r
812 endforeach()\r
813 endforeach()\r
814\r
815 # Restore environment\r
816 _vcpkg_restore_env_variables(${_cm_FLAGS} LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH)\r
817\r
818 SET(_VCPKG_PROJECT_SOURCE_PATH ${_csc_SOURCE_PATH} PARENT_SCOPE)\r
819 set(_VCPKG_PROJECT_SUBPATH ${_csc_PROJECT_SUBPATH} PARENT_SCOPE)\r
820endfunction()\r