]>
Commit | Line | Data |
---|---|---|
1e59de90 TL |
1 | #[===[.md:\r |
2 | # vcpkg_configure_make\r | |
3 | \r | |
4 | Configure configure for Debug and Release builds of a project.\r | |
5 | \r | |
6 | ## Usage\r | |
7 | ```cmake\r | |
8 | vcpkg_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 | |
30 | Specifies the directory containing the `configure`/`configure.ac`.\r | |
31 | By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.\r | |
32 | \r | |
33 | ### PROJECT_SUBPATH\r | |
34 | Specifies the directory containing the ``configure`/`configure.ac`.\r | |
35 | By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.\r | |
36 | \r | |
37 | ### SKIP_CONFIGURE\r | |
38 | Skip configure process\r | |
39 | \r | |
40 | ### USE_WRAPPERS\r | |
41 | Use autotools ar-lib and compile wrappers (only applies to windows cl and lib)\r | |
42 | \r | |
43 | ### BUILD_TRIPLET\r | |
44 | Used 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 | |
47 | For ports having a configure script following the autotools rules for selecting the triplet\r | |
48 | \r | |
49 | ### NO_ADDITIONAL_PATHS\r | |
50 | Don't pass any additional paths except for --prefix to the configure call\r | |
51 | \r | |
52 | ### AUTOCONFIG\r | |
53 | Need to use autoconfig to generate configure file.\r | |
54 | \r | |
55 | ### PRERUN_SHELL\r | |
56 | Script 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 | |
59 | Adds 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 | |
62 | do not pass '--disable-silent-rules --verbose' to configure\r | |
63 | \r | |
64 | ### OPTIONS\r | |
65 | Additional options passed to configure during the configuration.\r | |
66 | \r | |
67 | ### OPTIONS_RELEASE\r | |
68 | Additional options passed to configure during the Release configuration. These are in addition to `OPTIONS`.\r | |
69 | \r | |
70 | ### OPTIONS_DEBUG\r | |
71 | Additional options passed to configure during the Debug configuration. These are in addition to `OPTIONS`.\r | |
72 | \r | |
73 | ### CONFIG_DEPENDENT_ENVIRONMENT\r | |
74 | List of additional configuration dependent environment variables to set. \r | |
75 | Pass SOMEVAR to set the environment and have SOMEVAR_(DEBUG|RELEASE) set in the portfile to the appropriate values\r | |
76 | General environment variables can be set from within the portfile itself. \r | |
77 | \r | |
78 | ### CONFIGURE_ENVIRONMENT_VARIABLES\r | |
79 | List of additional environment variables to pass via the configure call. \r | |
80 | \r | |
81 | ## Notes\r | |
82 | This 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 | |
92 | macro(_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 | |
106 | endmacro()\r | |
107 | \r | |
108 | macro(_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 | |
129 | endmacro()\r | |
130 | \r | |
131 | macro(_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 | |
143 | endmacro()\r | |
144 | \r | |
145 | macro(_vcpkg_determine_autotools_host_arch_mac out_var)\r | |
146 | set(${out_var} "${VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR}")\r | |
147 | endmacro()\r | |
148 | \r | |
149 | macro(_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 | |
163 | endmacro()\r | |
164 | \r | |
165 | macro(_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 | |
173 | endmacro()\r | |
174 | \r | |
175 | macro(_vcpkg_backup_env_variables)\r | |
176 | foreach(_var ${ARGV})\r | |
177 | _vcpkg_backup_env_variable(${_var})\r | |
178 | endforeach()\r | |
179 | endmacro()\r | |
180 | \r | |
181 | macro(_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 | |
187 | endmacro()\r | |
188 | \r | |
189 | macro(_vcpkg_restore_env_variables)\r | |
190 | foreach(_var ${ARGV})\r | |
191 | _vcpkg_restore_env_variable(${_var})\r | |
192 | endforeach()\r | |
193 | endmacro()\r | |
194 | \r | |
195 | macro(_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 | |
228 | endmacro()\r | |
229 | \r | |
230 | function(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 | |
820 | endfunction()\r |