diff --git a/ports/gettext-libintl/0003-Fix-win-unicode-paths.patch b/ports/gettext-libintl/0003-Fix-win-unicode-paths.patch index e15e08755fa59b..80c7200797c345 100644 --- a/ports/gettext-libintl/0003-Fix-win-unicode-paths.patch +++ b/ports/gettext-libintl/0003-Fix-win-unicode-paths.patch @@ -59,4 +59,4 @@ index d5a5fe1..5c47f48 100644 +} #endif - /* For those losing systems which don't have `alloca' we have to add + /* For systems that distinguish between text and binary I/O. diff --git a/ports/gettext-libintl/portfile.cmake b/ports/gettext-libintl/portfile.cmake index 617221f2cdfdc2..f0ffd941ca905f 100644 --- a/ports/gettext-libintl/portfile.cmake +++ b/ports/gettext-libintl/portfile.cmake @@ -24,10 +24,10 @@ endif() set(VCPKG_POLICY_ALLOW_RESTRICTED_HEADERS enabled) vcpkg_download_distfile(ARCHIVE - URLS "https://ftp.gnu.org/pub/gnu/gettext/gettext-${VERSION}.tar.gz" - "https://www.mirrorservice.org/sites/ftp.gnu.org/gnu/gettext/gettext-${VERSION}.tar.gz" - FILENAME "gettext-${VERSION}.tar.gz" - SHA512 d8b22d7fba10052a2045f477f0a5b684d932513bdb3b295c22fbd9dfc2a9d8fccd9aefd90692136c62897149aa2f7d1145ce6618aa1f0be787cb88eba5bc09be + URLS "https://ftp.gnu.org/pub/gnu/gettext/gettext-${VERSION}.tar.xz" + "https://www.mirrorservice.org/sites/ftp.gnu.org/gnu/gettext/gettext-${VERSION}.tar.xz" + FILENAME "gettext-${VERSION}.tar.xz" + SHA512 544e41c9390695df1c21542842e9ca027a03cb7d4045d8cd759dec1a3dfb624aae900751b458bdb31d6454b37c40c474a952059b884555a03c7c95d6d0e687b1 ) vcpkg_extract_source_archive(SOURCE_PATH diff --git a/ports/gettext-libintl/vcpkg.json b/ports/gettext-libintl/vcpkg.json index 5c5c41918a44f8..4cade9f7b3e355 100644 --- a/ports/gettext-libintl/vcpkg.json +++ b/ports/gettext-libintl/vcpkg.json @@ -1,7 +1,6 @@ { "name": "gettext-libintl", - "version": "0.22.5", - "port-version": 3, + "version": "0.26", "description": "The libintl C library from GNU gettext-runtime.", "homepage": "https://www.gnu.org/software/gettext/", "license": "LGPL-2.1-or-later", diff --git a/ports/gettext/config-step-order.patch b/ports/gettext/config-step-order.patch index da247c65f20669..26364ebb0fd8d2 100644 --- a/ports/gettext/config-step-order.patch +++ b/ports/gettext/config-step-order.patch @@ -1,8 +1,8 @@ diff --git a/gettext-runtime/configure b/gettext-runtime/configure -index 2a376c6..a984774 100755 +index 3fab6ea..2dc6e07 100755 --- a/gettext-runtime/configure +++ b/gettext-runtime/configure -@@ -22346,6 +22346,12 @@ printf "%s\n" "$acl_cv_libdirstems" >&6; } +@@ -25216,6 +25216,12 @@ printf '%s\n' "$acl_cv_libdirstems" >&6; } @@ -12,10 +12,10 @@ index 2a376c6..a984774 100755 +for configuration_step in gettext-independent gettext-main ; do +case "$configuration_step" in +gettext-main) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 + { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 printf %s "checking for CFPreferencesCopyAppValue... " >&6; } if test ${gt_cv_func_CFPreferencesCopyAppValue+y} -@@ -23288,6 +23294,9 @@ printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h +@@ -26156,6 +26162,9 @@ printf '%s\n' "#define HAVE_DCGETTEXT 1" >>confdefs.h @@ -25,7 +25,7 @@ index 2a376c6..a984774 100755 # Check whether --enable-cross-guesses was given. if test ${enable_cross_guesses+y} then : -@@ -30464,6 +30473,10 @@ printf "%s\n" "$gl_cv_next_iconv_h" >&6; } +@@ -38458,6 +38467,10 @@ printf '%s\n' "$gl_cv_next_iconv_h" >&6; } gl_next_as_first_directive=$gl_cv_next_iconv_h fi NEXT_AS_FIRST_DIRECTIVE_ICONV_H=$gl_next_as_first_directive @@ -37,10 +37,10 @@ index 2a376c6..a984774 100755 diff --git a/gettext-tools/configure b/gettext-tools/configure -index 5ce6cf1..ee64b69 100755 +index 049d8fe..cce0097 100755 --- a/gettext-tools/configure +++ b/gettext-tools/configure -@@ -25735,6 +25735,12 @@ printf "%s\n" "$acl_cv_libdirstems" >&6; } +@@ -28963,6 +28963,12 @@ printf '%s\n' "$acl_cv_libdirstems" >&6; } @@ -50,10 +50,10 @@ index 5ce6cf1..ee64b69 100755 +for configuration_step in gettext-independent gettext-main; do +case "$configuration_step" in +gettext-main) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 + { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 printf %s "checking for CFPreferencesCopyAppValue... " >&6; } if test ${gt_cv_func_CFPreferencesCopyAppValue+y} -@@ -27588,6 +27594,9 @@ fi +@@ -30870,6 +30876,9 @@ fi @@ -63,7 +63,7 @@ index 5ce6cf1..ee64b69 100755 # Check whether --enable-cross-guesses was given. if test ${enable_cross_guesses+y} then : -@@ -38458,6 +38467,10 @@ printf "%s\n" "$gl_cv_next_iconv_h" >&6; } +@@ -44473,6 +44482,10 @@ printf '%s\n' "$gl_cv_next_iconv_h" >&6; } gl_next_as_first_directive=$gl_cv_next_iconv_h fi NEXT_AS_FIRST_DIRECTIVE_ICONV_H=$gl_next_as_first_directive diff --git a/ports/gettext/portfile.cmake b/ports/gettext/portfile.cmake index f35beeee059403..dac1e5f5b9d701 100644 --- a/ports/gettext/portfile.cmake +++ b/ports/gettext/portfile.cmake @@ -12,34 +12,44 @@ set(VCPKG_BUILD_TYPE release) set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +# gettext hates msys2. Turn off msys2 heurisics for command line arguments. +set(ENV{MSYS2_ARG_CONV_EXCL} "*") +include("${CURRENT_PORT_DIR}/vcpkg_make.cmake") +include("${CURRENT_PORT_DIR}/vcpkg_make_common.cmake") + vcpkg_download_distfile(ARCHIVE - URLS "https://ftp.gnu.org/pub/gnu/gettext/gettext-${VERSION}.tar.gz" - "https://www.mirrorservice.org/sites/ftp.gnu.org/gnu/gettext/gettext-${VERSION}.tar.gz" - FILENAME "gettext-${VERSION}.tar.gz" - SHA512 d8b22d7fba10052a2045f477f0a5b684d932513bdb3b295c22fbd9dfc2a9d8fccd9aefd90692136c62897149aa2f7d1145ce6618aa1f0be787cb88eba5bc09be + URLS "https://ftp.gnu.org/pub/gnu/gettext/gettext-${VERSION}.tar.xz" + "https://www.mirrorservice.org/sites/ftp.gnu.org/gnu/gettext/gettext-${VERSION}.tar.xz" + FILENAME "gettext-${VERSION}.tar.xz" + SHA512 544e41c9390695df1c21542842e9ca027a03cb7d4045d8cd759dec1a3dfb624aae900751b458bdb31d6454b37c40c474a952059b884555a03c7c95d6d0e687b1 ) vcpkg_extract_source_archive(SOURCE_PATH ARCHIVE "${ARCHIVE}" PATCHES - assume-modern-darwin.patch - uwp.patch + # assume-modern-darwin.patch + # uwp.patch rel_path.patch subdirs.patch - parallel-gettext-tools.patch + # parallel-gettext-tools.patch config-step-order.patch - 0001-xgettext-Fix-some-test-failures-on-MSVC.patch + # 0001-xgettext-Fix-some-test-failures-on-MSVC.patch ) +macro(execute_process) + _execute_process(TIMEOUT 1800 ${ARGN}) +endmacro() + set(subdirs "") if("runtime-tools" IN_LIST FEATURES) - string(APPEND subdirs " gettext-runtime") + list(APPEND subdirs "gettext-runtime") endif() if("tools" IN_LIST FEATURES) - string(APPEND subdirs " libtextstyle gettext-tools") + list(APPEND subdirs "libtextstyle" "gettext-tools") endif() if(subdirs) - set(ENV{VCPKG_GETTEXT_SUBDIRS} "${subdirs}") + list(JOIN subdirs " " subdirs_string) + set(ENV{VCPKG_GETTEXT_SUBDIRS} "${subdirs_string}") vcpkg_find_acquire_program(BISON) cmake_path(GET BISON FILENAME BISON_NAME) @@ -47,6 +57,7 @@ if(subdirs) vcpkg_add_to_path("${BISON_PATH}") if(VCPKG_HOST_IS_WINDOWS) +elseif(0) message(STATUS "Modifying build system for less forks") set(ENV{CONFIG_SHELL} "/usr/bin/bash") vcpkg_execute_required_process( @@ -64,7 +75,9 @@ if(subdirs) --disable-acl --disable-csharp --disable-curses + --disable-d --disable-java + --disable-modula2 --disable-openmp --disable-dependency-tracking # Avoiding system dependencies and unnecessary tests @@ -77,6 +90,7 @@ if(subdirs) --without-git --without-libcurses-prefix --without-libncurses-prefix + --without-selinux --without-libtermcap-prefix --without-libxcurses-prefix "INTLBISON=${BISON_NAME}" @@ -84,9 +98,9 @@ if(subdirs) ) if("nls" IN_LIST FEATURES) - vcpkg_list(APPEND options "--enable-nls") + vcpkg_list(APPEND OPTIONS "--enable-nls") else() - vcpkg_list(APPEND options "--disable-nls") + vcpkg_list(APPEND OPTIONS "--disable-nls") endif() if(VCPKG_TARGET_IS_LINUX) @@ -139,22 +153,37 @@ if(subdirs) endif() endif() +set(msys_require_packages gzip) file(REMOVE "${CURRENT_BUILDTREES_DIR}/config.cache-${TARGET_TRIPLET}-rel.log") - vcpkg_configure_make(SOURCE_PATH "${SOURCE_PATH}" - DETERMINE_BUILD_TRIPLET - USE_WRAPPERS - ADDITIONAL_MSYS_PACKAGES gzip + vcpkg_make_configure(SOURCE_PATH "${SOURCE_PATH}" + #[[ADDITIONAL_MSYS_PACKAGES gzip]] OPTIONS ${OPTIONS} OPTIONS_RELEASE "--cache-file=${CURRENT_BUILDTREES_DIR}/config.cache-${TARGET_TRIPLET}-rel.log" ) + foreach(subdir IN LISTS subdirs) + file(COPY_FILE + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/${subdir}/config.log" + "${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-rel-${subdir}-config.log" + ) + endforeach() + +# Considered for fixup in vcpkg-make: +# https://savannah.gnu.org/support/?111257, +# isolated in https://github.com/microsoft/vcpkg/pull/45913 +file(GLOB_RECURSE libtool_scripts "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*libtool") +foreach(script IN LISTS libtool_scripts) + vcpkg_replace_string("${script}" "lt_ar_flags=([^\"\n]+)" "lt_ar_flags=\"\\1\"" REGEX IGNORE_UNCHANGED) +endforeach() + # This helps with Windows build times, but should work everywhere in vcpkg. # - Avoid an extra command to move a temporary file, we are building out of source. # - Avoid a subshell just to add comments, the build dir is temporary. # - Avoid cygpath -w when other tools handle this for us. file(GLOB_RECURSE makefiles "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}*/*Makefile") +set(makefiles "") foreach(file IN LISTS makefiles) file(READ "${file}" rules) string(REGEX REPLACE "(\n\ttest -d [^ ]* [|][|] [\$][(]MKDIR_P[)][^\n;]*)(\n\t)" "\\1 || exit 1 ; \\\\\\2" rules "${rules}") @@ -164,7 +193,10 @@ if(subdirs) file(WRITE "${file}" "${rules}") endforeach() - vcpkg_install_make() + # ... but libtool needs msys2 conversions + set(ENV{MSYS2_ARG_CONV_EXCL} "") + + vcpkg_make_install() vcpkg_copy_pdbs() vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin") file(GLOB unix_runtime LIST_DIRECTORIES false @@ -179,7 +211,8 @@ if(subdirs) endif() if("tools" IN_LIST FEATURES) - vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/lib/gettext/user-email" "${CURRENT_INSTALLED_DIR}" "`dirname $0`/../.." IGNORE_UNCHANGED) + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/libexec/gettext/user-email" "${CURRENT_INSTALLED_DIR}" "`dirname $0`/../.." IGNORE_UNCHANGED) + vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/libexec/gettext") else() # A fast installation of the autopoint tool and data, needed for autoconfig include("${CMAKE_CURRENT_LIST_DIR}/install-autopoint.cmake") @@ -192,12 +225,13 @@ endif() file(INSTALL "${SOURCE_PATH}/gettext-runtime/m4/build-to-host.m4" "${SOURCE_PATH}/gettext-runtime/m4/gettext.m4" - "${SOURCE_PATH}/gettext-runtime/m4/iconv.m4" - "${SOURCE_PATH}/gettext-runtime/m4/intlmacosx.m4" + "${SOURCE_PATH}/gettext-runtime/m4/glibc2.m4" "${SOURCE_PATH}/gettext-runtime/m4/nls.m4" "${SOURCE_PATH}/gettext-runtime/m4/po.m4" "${SOURCE_PATH}/gettext-runtime/m4/progtest.m4" "${SOURCE_PATH}/gettext-runtime/gnulib-m4/host-cpu-c-abi.m4" + "${SOURCE_PATH}/gettext-runtime/gnulib-m4/iconv.m4" + "${SOURCE_PATH}/gettext-runtime/gnulib-m4/intlmacosx.m4" "${SOURCE_PATH}/gettext-runtime/gnulib-m4/lib-ld.m4" "${SOURCE_PATH}/gettext-runtime/gnulib-m4/lib-link.m4" "${SOURCE_PATH}/gettext-runtime/gnulib-m4/lib-prefix.m4" diff --git a/ports/gettext/subdirs.patch b/ports/gettext/subdirs.patch index 9931fed01602bd..e34b36e09c1cf9 100644 --- a/ports/gettext/subdirs.patch +++ b/ports/gettext/subdirs.patch @@ -1,8 +1,21 @@ +diff --git a/Makefile.in b/Makefile.in +index ab71ec3..25fb7a0 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -323,7 +323,7 @@ top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ + AUTOMAKE_OPTIONS = 1.5 gnu + ACLOCAL_AMFLAGS = -I m4 +-SUBDIRS = gnulib-local gettext-runtime libtextstyle gettext-tools ++SUBDIRS = gnulib-local $(VCPKG_GETTEXT_SUBDIRS) + changelog_etc = \ + gettext-runtime/ChangeLog.0 \ + gettext-runtime/doc/ChangeLog.0 \ diff --git a/configure b/configure -index 904bdf5..e751ffc 100755 +index 79ae793..3685874 100755 --- a/configure +++ b/configure -@@ -2797,7 +2797,7 @@ am__tar='${AMTAR} chf - --format=ustar --owner=root --group=root "$$tardir"' +@@ -3040,7 +3040,7 @@ am__tar='{ find "$$tardir" -type d | LC_ALL=C sort; find "$$tardir" ! -type d -p @@ -11,37 +24,23 @@ index 904bdf5..e751ffc 100755 -diff --git a/Makefile.in b/Makefile.in -index a287d38..075ddc5 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -311,7 +311,7 @@ top_builddir = @top_builddir@ - top_srcdir = @top_srcdir@ - AUTOMAKE_OPTIONS = 1.5 gnu no-dependencies - ACLOCAL_AMFLAGS = -I m4 --SUBDIRS = gnulib-local gettext-runtime libtextstyle gettext-tools -+SUBDIRS = $(VCPKG_GETTEXT_SUBDIRS) - changelog_etc = \ - gettext-runtime/ChangeLog.0 \ - gettext-runtime/doc/ChangeLog.0 \ diff --git a/gettext-runtime/Makefile.in b/gettext-runtime/Makefile.in -index 8b8b5bc..bb75447 100644 +index 365fd4e..8521d1e 100644 --- a/gettext-runtime/Makefile.in +++ b/gettext-runtime/Makefile.in -@@ -1487,7 +1487,7 @@ ACLOCAL_AMFLAGS = -I m4 -I ../m4 -I gnulib-m4 - # The list of subdirectories depends on whether --disable-libasprintf was +@@ -2347,6 +2347,7 @@ ACLOCAL_AMFLAGS = -I m4 -I ../m4 -I gnulib-m4 # specified. @ENABLE_LIBASPRINTF_TRUE@SUBDIR_libasprintf = libasprintf --SUBDIRS = doc intl intl-java intl-csharp gnulib-lib $(SUBDIR_libasprintf) src po man m4 tests -+SUBDIRS = $(VCPKG_INTL) gnulib-lib src po + SUBDIRS = doc intl intl-java intl-csharp intl-d intl-modula2 gnulib-lib $(SUBDIR_libasprintf) src po man m4 tests install-tests ++SUBDIRS = $(VCPKG_INTL) gnulib-lib src po # Allow users to use "gnulib-tool --update". diff --git a/gettext-runtime/configure b/gettext-runtime/configure -index a7594ed..296f3b7 100644 +index 3fab6ea..79bf7ad 100755 --- a/gettext-runtime/configure +++ b/gettext-runtime/configure -@@ -26906,7 +26906,7 @@ printf "%s\n" "$ac_res" >&6; } +@@ -26018,7 +26018,7 @@ printf '%s\n' "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ @@ -51,10 +50,10 @@ index a7594ed..296f3b7 100644 && test "$PACKAGE" != libintl; }; then gt_use_preinstalled_gnugettext=yes diff --git a/gettext-runtime/libasprintf/configure b/gettext-runtime/libasprintf/configure +index bd754f9..059e1c9 100755 --- a/gettext-runtime/libasprintf/configure +++ b/gettext-runtime/libasprintf/configure -index ff1c212..0c0dbcd 100644 -@@ -11,6 +11,7 @@ +@@ -9,6 +9,7 @@ # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. @@ -63,23 +62,23 @@ index ff1c212..0c0dbcd 100644 ## M4sh Initialization. ## ## -------------------- ## diff --git a/gettext-tools/Makefile.in b/gettext-tools/Makefile.in -index 59e81a8..107856d 100644 +index 18767d7..a201661 100644 --- a/gettext-tools/Makefile.in +++ b/gettext-tools/Makefile.in -@@ -2872,7 +2872,7 @@ top_builddir = @top_builddir@ +@@ -3834,7 +3834,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ - AUTOMAKE_OPTIONS = 1.5 gnu no-dependencies - ACLOCAL_AMFLAGS = -I m4 -I ../gettext-runtime/m4 -I ../m4 -I gnulib-m4 -I libgrep/gnulib-m4 -I libgettextpo/gnulib-m4 --SUBDIRS = gnulib-lib libgrep src libgettextpo po its projects styles emacs misc man m4 tests system-tests gnulib-tests examples doc + AUTOMAKE_OPTIONS = 1.5 gnu + ACLOCAL_AMFLAGS = -I m4 -I ../gettext-runtime/m4 -I ../m4 -I gnulib-m4 -I libgrep/gnulib-m4 -I libgettextpo/gnulib-m4 -I tests/gnulib-m4 +-SUBDIRS = gnulib-lib libgrep src libgettextpo po its projects styles emacs misc man m4 tests system-tests gnulib-tests install-tests examples doc +SUBDIRS = gnulib-lib libgrep src po its projects styles misc - # Allow users to use "gnulib-tool --update". + # Files imported from tree-sitter. diff --git a/gettext-tools/configure b/gettext-tools/configure -index 056a830..9abca7e 100644 +index 049d8fe..d40476a 100755 --- a/gettext-tools/configure +++ b/gettext-tools/configure -@@ -29661,7 +29661,7 @@ printf "%s\n" "$ac_res" >&6; } +@@ -29766,7 +29766,7 @@ printf '%s\n' "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ @@ -89,9 +88,9 @@ index 056a830..9abca7e 100644 gt_use_preinstalled_gnugettext=yes else diff --git a/gettext-tools/examples/configure b/gettext-tools/examples/configure +index 0bb9816..3b523e7 100755 --- a/gettext-tools/examples/configure +++ b/gettext-tools/examples/configure -index ff1c212..0c0dbcd 100644 @@ -11,6 +11,7 @@ # # This configure script is free software; the Free Software Foundation @@ -101,26 +100,26 @@ index ff1c212..0c0dbcd 100644 ## M4sh Initialization. ## ## -------------------- ## diff --git a/gettext-tools/src/Makefile.in b/gettext-tools/src/Makefile.in +index e44593b..2ce98d5 100644 --- a/gettext-tools/src/Makefile.in +++ b/gettext-tools/src/Makefile.in -index ff1c212..0c0dbcd 100644 -@@ -4381,6 +4381,7 @@ +@@ -5280,6 +5280,7 @@ msgfilter$(EXEEXT): $(msgfilter_OBJECTS) $(msgfilter_DEPENDENCIES) $(EXTRA_msgfi $(AM_V_GEN)$(msgfilter_LINK) $(msgfilter_OBJECTS) $(msgfilter_LDADD) $(LIBS) ../../gettext-runtime/intl/$(am__dirstamp): @$(MKDIR_P) ../../gettext-runtime/intl + @$(MAKE) -C ../../gettext-runtime/intl libgnuintl.h - @: > ../../gettext-runtime/intl/$(am__dirstamp) - ../../gettext-runtime/intl/msgfmt-hash-string.$(OBJEXT): \ - ../../gettext-runtime/intl/$(am__dirstamp) + @: >>../../gettext-runtime/intl/$(am__dirstamp) + ../../gettext-runtime/intl/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ../../gettext-runtime/intl/$(DEPDIR) diff --git a/libtextstyle/Makefile.in b/libtextstyle/Makefile.in -index ff1c212..0c0dbcd 100644 +index cdaf2b5..d76310c 100644 --- a/libtextstyle/Makefile.in +++ b/libtextstyle/Makefile.in -@@ -1667,7 +1667,7 @@ AUTOMAKE_OPTIONS = 1.13 gnu no-dependencies +@@ -2268,7 +2268,7 @@ AUTOMAKE_OPTIONS = 1.13 gnu ACLOCAL_AMFLAGS = -I m4 -I gnulib-m4 # The list of subdirectories containing Makefiles. --SUBDIRS = lib tests adhoc-tests doc +-SUBDIRS = lib tests adhoc-tests install-tests doc +SUBDIRS = lib # Allow users to use "gnulib-tool --update". diff --git a/ports/gettext/vcpkg.json b/ports/gettext/vcpkg.json index 84c627a53baf98..604c5d4fca0c54 100644 --- a/ports/gettext/vcpkg.json +++ b/ports/gettext/vcpkg.json @@ -1,13 +1,16 @@ { "name": "gettext", - "version": "0.22.5", - "port-version": 2, + "version": "0.26", "description": "A GNU framework to help produce multi-lingual messages.", "homepage": "https://www.gnu.org/software/gettext/", "license": "GPL-3.0-only", "supports": "!xbox", "dependencies": [ - "gettext-libintl" + "gettext-libintl", + { + "name": "vcpkg-make", + "host": true + } ], "features": { "nls": { diff --git a/ports/gettext/vcpkg_make.cmake b/ports/gettext/vcpkg_make.cmake new file mode 100644 index 00000000000000..6e4b448dc50b64 --- /dev/null +++ b/ports/gettext/vcpkg_make.cmake @@ -0,0 +1,304 @@ +# Be aware of https://github.com/microsoft/vcpkg/pull/31228 +include_guard(GLOBAL) +include("${CMAKE_CURRENT_LIST_DIR}/vcpkg_make_common.cmake") + +function(vcpkg_run_shell) + cmake_parse_arguments(PARSE_ARGV 0 arg + "" + "WORKING_DIRECTORY;LOGNAME" + "SHELL;COMMAND;SAVE_LOG_FILES" + ) + z_vcpkg_unparsed_args(FATAL_ERROR) + z_vcpkg_required_args(SHELL WORKING_DIRECTORY COMMAND LOGNAME) + + + set(extra_opts "") + if(arg_SAVE_LOG_FILES) + set(extra_opts SAVE_LOG_FILES ${arg_SAVE_LOG_FILES}) + endif() + + # In the construction of the shell command, we need to handle environment variable assignments and configure options differently: + # + # 1. Environment variable assignments (e.g., CC, CXX, etc.): + # - These must not be quoted. + # - If the environment variable names (e.g., CC, CXX, CC_FOR_BUILD) are quoted, the shell will treat them as part of the value, breaking the declaration. + # - For example, CC='/usr/bin/gcc' is valid, but "CC='/usr/bin/gcc'" would cause an error because the shell would try to use the entire quoted string as the variable name. + # + # 2. Options passed to the configure script: + # - The options should be quoted to ensure that any option containing spaces or special characters is treated as a single argument. + # - For instance, --prefix=/some path/with spaces would break if not quoted, as the shell would interpret each word as a separate argument. + # - By quoting the options like "--prefix=/some path/with spaces", we ensure they are passed correctly to the configure script as a single argument. + # + # The resulting command should look something like this: + # V=1 CC='/Library/Developer/CommandLineTools/usr/bin/cc -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.4.sdk -arch arm64' + # CXX='/Library/Developer/CommandLineTools/usr/bin/c++ -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.4.sdk -arch arm64' + # CC_FOR_BUILD='/Library/Developer/CommandLineTools/usr/bin/cc -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.4.sdk -arch arm64' + # CPP_FOR_BUILD='/Library/Developer/CommandLineTools/usr/bin/cc -E -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.4.sdk -arch arm64' + # CXX_FOR_BUILD='/Library/Developer/CommandLineTools/usr/bin/c++ -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.4.sdk -arch arm64' + # .... + # ./../src/8bc98c3a0d-84009aba94.clean/configure "--enable-pic" "--disable-lavf" "--disable-swscale" "--disable-avs" ... + vcpkg_list(JOIN arg_COMMAND " " arg_COMMAND) + vcpkg_execute_required_process( + COMMAND ${arg_SHELL} -c "${arg_COMMAND}" + WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}" + LOGNAME "${arg_LOGNAME}" + ${extra_opts} + ) +endfunction() + +function(vcpkg_run_shell_as_build) + cmake_parse_arguments(PARSE_ARGV 0 arg + "" + "WORKING_DIRECTORY;LOGNAME" + "SHELL;COMMAND;NO_PARALLEL_COMMAND;SAVE_LOG_FILES" + ) + z_vcpkg_unparsed_args(FATAL_ERROR) + z_vcpkg_required_args(SHELL WORKING_DIRECTORY COMMAND LOGNAME) + + set(extra_opts "") + if(arg_SAVE_LOG_FILES) + set(extra_opts SAVE_LOG_FILES ${arg_SAVE_LOG_FILES}) + endif() + + list(JOIN arg_COMMAND " " cmd) + list(JOIN arg_NO_PARALLEL_COMMAND " " no_par_cmd) + if(NOT no_par_cmd STREQUAL "") + set(no_par_cmd NO_PARALLEL_COMMAND ${arg_SHELL} -c "${no_par_cmd}") + endif() + vcpkg_execute_build_process( + COMMAND ${arg_SHELL} -c "${cmd}" + ${no_par_cmd} + WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}" + LOGNAME "${arg_LOGNAME}" + ${extra_opts} + ) +endfunction() + +function(vcpkg_run_autoreconf shell_cmd work_dir) + find_program(AUTORECONF NAMES autoreconf) + if(NOT AUTORECONF) + message(FATAL_ERROR "${PORT} currently requires the following programs from the system package manager: + autoconf automake autoconf-archive + On Debian and Ubuntu derivatives: + sudo apt-get install autoconf automake autoconf-archive + On recent Red Hat and Fedora derivatives: + sudo dnf install autoconf automake autoconf-archive + On Arch Linux and derivatives: + sudo pacman -S autoconf automake autoconf-archive + On Alpine: + apk add autoconf automake autoconf-archive + On macOS: + brew install autoconf automake autoconf-archive\n") + endif() + message(STATUS "Generating configure for ${TARGET_TRIPLET}") + vcpkg_run_shell( + SHELL ${shell_cmd} + COMMAND "${AUTORECONF}" -vfi + WORKING_DIRECTORY "${work_dir}" + LOGNAME "autoconf-${TARGET_TRIPLET}" + ) + message(STATUS "Finished generating configure for ${TARGET_TRIPLET}") +endfunction() + +function(vcpkg_make_setup_win_msys msys_out) + list(APPEND msys_require_packages autoconf-wrapper automake-wrapper autoconf-archive binutils libtool make which) + vcpkg_insert_msys_into_path(msys PACKAGES ${msys_require_packages}) + find_program(PKGCONFIG NAMES pkgconf NAMES_PER_DIR PATHS "${CURRENT_HOST_INSTALLED_DIR}/tools/pkgconf" NO_DEFAULT_PATH) + set("${msys_out}" "${msys}" PARENT_SCOPE) +endfunction() + +function(vcpkg_make_get_shell out_var) + set(shell_options "") + if(CMAKE_HOST_WIN32) + if(NOT DEFINED VCPKG_MAKE_ACQUIRE_MSYS OR VCPKG_MAKE_ACQUIRE_MSYS) + vcpkg_make_setup_win_msys(msys_root) + set(shell_options --noprofile --norc --debug) + set(shell_cmd "${msys_root}/usr/bin/bash.exe") + else() + message(STATUS "Not acquiring msys, reason: VCPKG_MAKE_ACQUIRE_MSYS=${VCPKG_MAKE_ACQUIRE_MSYS}") + endif() + endif() + find_program(shell_cmd NAMES bash sh zsh REQUIRED) + set("${out_var}" "${shell_cmd}" ${shell_options} PARENT_SCOPE) +endfunction() + +function(z_vcpkg_make_determine_target_triplet out) + cmake_parse_arguments(PARSE_ARGV 1 arg + "" + "COMPILER_NAME" + "" + ) + z_vcpkg_unparsed_args(FATAL_ERROR) + # --build: the machine you are building on + # --host: the machine you are building for + # --target: the machine that CC will produce binaries for + # https://stackoverflow.com/questions/21990021/how-to-determine-host-value-for-configure-when-using-cross-compiler + # Only for ports using autotools so we can assume that they follow the common conventions for build/target/host + z_vcpkg_make_determine_target_arch(TARGET_ARCH) + z_vcpkg_make_determine_host_arch(BUILD_ARCH) + set(output "") + if(VCPKG_MAKE_BUILD_TRIPLET MATCHES "--host=([^;]*)") + set(output "${CMAKE_MATCH_1}") + elseif(VCPKG_TARGET_IS_EMSCRIPTEN) + set(output "${TARGET_ARCH}-unknown-emscripten") + elseif(VCPKG_TARGET_IS_IOS OR VCPKG_TARGET_IS_OSX) + set(output "${TARGET_ARCH}-apple-darwin") + elseif(VCPKG_TARGET_IS_UWP) + # Needs to be different from --build to enable cross builds. + set(output "${TARGET_ARCH}-unknown-mingw32") + elseif(VCPKG_TARGET_IS_WINDOWS) + set(output "${TARGET_ARCH}-pc-mingw32") + elseif("${arg_COMPILER_NAME}" MATCHES "([^/]+)-(gcc|clang)(-[0-9]+)?$") + # --host activates crosscompilation and provides the prefix of the host tools for the target. + set(output "${CMAKE_MATCH_1}") + elseif(NOT VCPKG_CROSSCOMPILING AND VCPKG_MAKE_BUILD_TRIPLET MATCHES "--build=([^;]+)") + set(output "${CMAKE_MATCH_1}") + elseif(NOT "${TARGET_ARCH}" STREQUAL "${BUILD_ARCH}") + message(${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL} + "Unable to determine autotools host triplet for cross-build. " + "You can set the VCPKG_MAKE_HOST_TRIPLET variable for ${TARGET_TRIPLET}." + ) + endif() + set("${out}" "${output}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_make_get_configure_triplets out) + cmake_parse_arguments(PARSE_ARGV 1 arg + "" + "COMPILER_NAME" + "" + ) + z_vcpkg_unparsed_args(FATAL_ERROR) + + set(output "${VCPKG_MAKE_BUILD_TRIPLET}") + if(NOT output MATCHES "--host") + z_vcpkg_make_determine_target_triplet(host_opt_triplet COMPILER_NAME "${arg_COMPILER_NAME}") + if(host_opt_triplet) + list(APPEND output "--host=${host_opt_triplet}") + endif() + endif() + if(output MATCHES "--host" AND NOT output MATCHES "--build") + file(STRINGS "${CURRENT_HOST_INSTALLED_DIR}/share/vcpkg-make/build_opt_triplet.txt" build_opt_triplet LIMIT_COUNT 1) + if(build_opt_triplet) + list(APPEND output "--build=${build_opt_triplet}") + endif() + endif() + + set("${out}" "${output}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_make_prepare_env config) + cmake_parse_arguments(PARSE_ARGV 1 arg + "ADD_BIN_TO_PATH" + "" + "" + ) + z_vcpkg_unparsed_args(FATAL_ERROR) + # Used by CL + vcpkg_host_path_list(PREPEND ENV{INCLUDE} "${CURRENT_INSTALLED_DIR}/include") + # Used by GCC + vcpkg_host_path_list(PREPEND ENV{C_INCLUDE_PATH} "${CURRENT_INSTALLED_DIR}/include") + vcpkg_host_path_list(PREPEND ENV{CPLUS_INCLUDE_PATH} "${CURRENT_INSTALLED_DIR}/include") + + # 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.) + if(VCPKG_TARGET_IS_WINDOWS) + vcpkg_backup_env_variables(VARS _CL_ _LINK_) + # TODO: Should be CPP flags instead -> rewrite when vcpkg_determined_cmake_compiler_flags defined + if(VCPKG_TARGET_IS_UWP) + # Be aware that configure thinks it is crosscompiling due to: + # error while loading shared libraries: VCRUNTIME140D_APP.dll: + # cannot open shared object file: No such file or directory + # IMPORTANT: The only way to pass linker flags through libtool AND the compile wrapper + # is to use the CL and LINK environment variables !!! + # (This is due to libtool and compiler wrapper using the same set of options to pass those variables around) + file(TO_CMAKE_PATH "$ENV{VCToolsInstallDir}" VCToolsInstallDir) + set(_replacement -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\") + string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG}") + string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_C_FLAGS_DEBUG "${VCPKG_DETECTED_CMAKE_C_FLAGS_DEBUG}") + string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE}") + string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_C_FLAGS_RELEASE "${VCPKG_DETECTED_CMAKE_C_FLAGS_RELEASE}") + set(ENV{_CL_} "$ENV{_CL_} -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\"") + set(ENV{_LINK_} "$ENV{_LINK_} ${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES} ${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}") + endif() + endif() + + # Setup environment + set(ENV{CPPFLAGS} "${CPPFLAGS_${config}}") + set(ENV{CPPFLAGS_FOR_BUILD} "${CPPFLAGS_${config}}") + set(ENV{CFLAGS} "${CFLAGS_${config}}") + set(ENV{CFLAGS_FOR_BUILD} "${CFLAGS_${config}}") + set(ENV{CXXFLAGS} "${CXXFLAGS_${config}}") + set(ENV{RCFLAGS} "${RCFLAGS_${config}}") + set(ENV{LDFLAGS} "${LDFLAGS_${config}}") + set(ENV{LDFLAGS_FOR_BUILD} "${LDFLAGS_${config}}") + if(ARFLAGS_${config} AND NOT (arg_USE_WRAPPERS AND VCPKG_TARGET_IS_WINDOWS)) + # Target windows with wrappers enabled cannot forward ARFLAGS since it breaks the wrapper + #set(ENV{ARFLAGS} "${ARFLAGS_${config}}") + endif() + + if(LINK_ENV_${config}) + set(ENV{_LINK_} "${LINK_ENV_${config}}") + endif() + + vcpkg_list(APPEND lib_env_vars LIB LIBPATH LIBRARY_PATH) + foreach(lib_env_var IN LISTS lib_env_vars) + if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${config}}/lib") + vcpkg_host_path_list(PREPEND ENV{${lib_env_var}} "${CURRENT_INSTALLED_DIR}${path_suffix_${config}}/lib") + endif() + if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${config}}/lib/manual-link") + vcpkg_host_path_list(PREPEND ENV{${lib_env_var}} "${CURRENT_INSTALLED_DIR}${path_suffix_${config}}/lib/manual-link") + endif() + endforeach() +endfunction() + +function(z_vcpkg_make_restore_env) + # Only variables which are inspected in vcpkg_make_prepare_env need to be restored here. + # Rest is restored add the end of configure. + vcpkg_restore_env_variables(VARS + LIBRARY_PATH LIB LIBPATH + PATH + ) +endfunction() + +function(vcpkg_make_run_configure) + cmake_parse_arguments(PARSE_ARGV 0 arg + "ADD_BIN_TO_PATH" + "CONFIG;SHELL;WORKING_DIRECTORY;CONFIGURE_PATH;CONFIGURE_ENV" + "OPTIONS" + ) + z_vcpkg_unparsed_args(FATAL_ERROR) + z_vcpkg_required_args(SHELL CONFIG WORKING_DIRECTORY CONFIGURE_PATH) + + vcpkg_prepare_pkgconfig("${arg_CONFIG}") + + set(prepare_env_opts "") + + z_vcpkg_make_prepare_env("${arg_CONFIG}" ${prepare_env_opts}) + + vcpkg_list(SET tmp) + foreach(element IN LISTS arg_OPTIONS) + string(REPLACE [["]] [[\"]] element "${element}") + vcpkg_list(APPEND tmp "\"${element}\"") + endforeach() + vcpkg_list(JOIN tmp " " "arg_OPTIONS") + set(command ${arg_CONFIGURE_ENV} ${arg_CONFIGURE_PATH} ${arg_OPTIONS}) + + message(STATUS "Configuring ${TARGET_TRIPLET}-${suffix_${arg_CONFIG}}") + vcpkg_run_shell( + WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}" + LOGNAME "config-${TARGET_TRIPLET}-${suffix_${arg_CONFIG}}" + SAVE_LOG_FILES config.log + SHELL ${arg_SHELL} + COMMAND V=1 ${command} + ) + if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW AND VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) + file(GLOB_RECURSE libtool_files "${arg_WORKING_DIRECTORY}*/libtool") + foreach(lt_file IN LISTS libtool_files) + file(READ "${lt_file}" _contents) + string(REPLACE ".dll.lib" ".lib" _contents "${_contents}") + file(WRITE "${lt_file}" "${_contents}") + endforeach() + endif() + z_vcpkg_make_restore_env() + vcpkg_restore_pkgconfig() +endfunction() diff --git a/ports/gettext/vcpkg_make_common.cmake b/ports/gettext/vcpkg_make_common.cmake new file mode 100644 index 00000000000000..7bc1473d6b86b4 --- /dev/null +++ b/ports/gettext/vcpkg_make_common.cmake @@ -0,0 +1,656 @@ +include_guard(GLOBAL) + +### Mapping variables +macro(z_vcpkg_make_set_common_vars) + set(path_suffix_RELEASE "") + set(path_suffix_DEBUG "/debug") + set(suffix_RELEASE "rel") + set(suffix_DEBUG "dbg") + foreach(config IN ITEMS RELEASE DEBUG) + set("workdir_${config}" "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${suffix_${config}}") + endforeach() + set(buildtypes release) + if(NOT VCPKG_BUILD_TYPE) + list(PREPEND buildtypes debug) + endif() +endmacro() + +### Autotool's crosscompiling by autotool's triplets in ARGN +function(z_vcpkg_make_get_crosscompiling out_var) + set(host "") + set(build "") + if(ARGN MATCHES "--host=([^;]*)") + set(host "${CMAKE_MATCH_1}") + endif() + if(ARGN MATCHES "--build=([^;]*)") + set(build "${CMAKE_MATCH_1}") + endif() + string(COMPARE NOTEQUAL "${host}" "${build}" is_crosscompiling) + set("${out_var}" "${is_crosscompiling}" PARENT_SCOPE) +endfunction() + +### +macro(z_vcpkg_make_get_cmake_vars) + vcpkg_cmake_get_vars(cmake_vars_file ${Z_VCPKG_MAKE_GET_CMAKE_VARS_OPTS}) + include("${cmake_vars_file}") +endmacro() + +function(z_vcpkg_make_normalize_arch out_var value) + if(${value} MATCHES "^(amd|AMD|x)64$") + set(${out_var} x86_64 PARENT_SCOPE) + elseif(${value} MATCHES "^(x|X)86$") + set(${out_var} i686 PARENT_SCOPE) + elseif(${value} MATCHES "^(ARM|arm)64$") + set(${out_var} aarch64 PARENT_SCOPE) + elseif(${value} MATCHES "^(ARM|arm)$") + set(${out_var} arm PARENT_SCOPE) + elseif(${value} MATCHES "^(x86_64|i686|aarch64)$" OR NOT VCPKG_TARGET_IS_WINDOWS) + # Do nothing and assume valid architecture + set("${out_var}" "${value}" PARENT_SCOPE) + else() + message(FATAL_ERROR "Unsupported architecture '${value}' in '${CMAKE_CURRENT_FUNCTION}'!" ) + endif() +endfunction() + +function(z_vcpkg_make_determine_host_arch out_var) + if(DEFINED ENV{PROCESSOR_ARCHITEW6432}) + set(arch $ENV{PROCESSOR_ARCHITEW6432}) + elseif(DEFINED ENV{PROCESSOR_ARCHITECTURE}) + set(arch $ENV{PROCESSOR_ARCHITECTURE}) + else() + if(NOT DEFINED VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR) + z_vcpkg_make_get_cmake_vars() + endif() + set(arch "${VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR}") + endif() + z_vcpkg_make_normalize_arch("${out_var}" "${arch}") + set("${out_var}" "${${out_var}}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_make_determine_target_arch out_var) + list(LENGTH VCPKG_OSX_ARCHITECTURES osx_archs_num) + if(osx_archs_num GREATER_EQUAL 2 AND VCPKG_TARGET_IS_OSX) + set(${out_var} "universal") + else() + z_vcpkg_make_normalize_arch(${out_var} "${VCPKG_TARGET_ARCHITECTURE}") + endif() + set("${out_var}" "${${out_var}}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_make_prepare_compile_flags) + cmake_parse_arguments(PARSE_ARGV 0 arg + "DISABLE_CPPFLAGS;NO_FLAG_ESCAPING;DISABLE_MSVC_WRAPPERS" + "COMPILER_FRONTEND;CONFIG;FLAGS_OUT" + "LANGUAGES" + ) + + z_vcpkg_unparsed_args(FATAL_ERROR) + + if(NOT DEFINED arg_LANGUAGES) + set(arg_LANGUAGES "C" "CXX") + endif() + + z_vcpkg_make_set_common_vars() + set(var_suffix "${arg_CONFIG}") + set(CFLAGS "") + set(CXXFLAGS "") + + # separate_aruments is needed to remove outer quotes from detected cmake variables. + # (e.g. Android NDK has "--sysroot=...") + foreach(lang IN LISTS arg_LANGUAGES) + if(NOT "${VCPKG_COMBINED_${lang}_FLAGS_${var_suffix}}" STREQUAL "") + separate_arguments(${lang}FLAGS NATIVE_COMMAND "${VCPKG_COMBINED_${lang}_FLAGS_${var_suffix}}") + else() + set(${lang}FLAGS "") + endif() + vcpkg_list(APPEND flags ${lang}FLAGS) + endforeach() + + separate_arguments(LDFLAGS NATIVE_COMMAND "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_${var_suffix}}") + separate_arguments(ARFLAGS NATIVE_COMMAND "${VCPKG_COMBINED_STATIC_LINKER_FLAGS_${var_suffix}}") + set(RCFLAGS "${VCPKG_COMBINED_RC_FLAGS_${var_suffix}}") + + foreach(var IN ITEMS ABIFLAGS LDFLAGS ARFLAGS RCFLAGS) + vcpkg_list(APPEND flags ${var}) + endforeach() + + set(ABIFLAGS "") + set(pattern "") + foreach(arg IN LISTS CFLAGS) + if(NOT pattern STREQUAL "") + vcpkg_list(APPEND pattern "${arg}") + elseif(arg MATCHES "^--(sysroot|target)=.") + vcpkg_list(SET pattern "${arg}") + elseif(arg MATCHES "^-(isysroot|m32|m64|m?[Aa][Rr][Cc][Hh]|target)\$") + vcpkg_list(SET pattern "${arg}") + continue() + else() + continue() + endif() + vcpkg_list(APPEND ABIFLAGS "${pattern}") + list(REMOVE_ITEM CFLAGS "${pattern}") + list(REMOVE_ITEM CXXFLAGS "${pattern}") + list(REMOVE_ITEM LDFLAGS "${pattern}") + set(pattern "") + endforeach() + + # Filter common CPPFLAGS out of CFLAGS and CXXFLAGS + if(NOT arg_DISABLE_CPPFLAGS) + set(CPPFLAGS "") + set(pattern "") + foreach(arg IN LISTS CXXFLAGS) + if(NOT pattern STREQUAL "") + vcpkg_list(APPEND pattern "${arg}") + elseif(arg MATCHES "^-(D|isystem).") + vcpkg_list(SET pattern "${arg}") + elseif(arg MATCHES "^-(D|isystem)\$") + vcpkg_list(SET pattern "${arg}") + continue() + else() + continue() + endif() + string(FIND "${CFLAGS}" "${pattern} " index) + if(NOT index STREQUAL "-1") + vcpkg_list(APPEND CPPFLAGS ${pattern}) + list(REMOVE_ITEM CFLAGS "${pattern}") + list(REMOVE_ITEM CXXFLAGS "${pattern}") + list(REMOVE_ITEM LDFLAGS "${pattern}") + endif() + endforeach() + set(pattern "") + foreach(arg IN LISTS CFLAGS) + if(NOT pattern STREQUAL "") + vcpkg_list(APPEND pattern "${arg}") + elseif(arg MATCHES "^-(D|isystem)\$") + vcpkg_list(SET pattern "${arg}") + continue() + elseif(arg MATCHES "^-(D|isystem).") + vcpkg_list(SET pattern "${arg}") + else() + continue() + endif() + string(FIND "${CXXFLAGS}" "${pattern} " index) + if(NOT index STREQUAL "-1") + vcpkg_list(APPEND CPPFLAGS ${pattern}) + list(REMOVE_ITEM CFLAGS "${pattern}") + list(REMOVE_ITEM CXXFLAGS "${pattern}") + list(REMOVE_ITEM LDFLAGS "${pattern}") + endif() + vcpkg_list(SET pattern) + endforeach() + endif() + + # libtool tries to filter CFLAGS passed to the link stage via a allow list. + + # This approach is flawed since it fails to pass flags unknown to libtool + # but required for linking to the link stage (e.g. -fsanitize=). + # libtool has an -R option so we need to guard against -RTC by using -Xcompiler. + # While configuring there might be a lot of unknown compiler option warnings + # due to that; just ignore them. + set(compiler_flag_escape "") + if(arg_COMPILER_FRONTEND STREQUAL "MSVC" AND NOT arg_NO_FLAG_ESCAPING) + set(compiler_flag_escape "-Xcompiler") + endif() + if(compiler_flag_escape) + list(TRANSFORM CFLAGS PREPEND "${compiler_flag_escape};") + list(TRANSFORM CXXFLAGS PREPEND "${compiler_flag_escape};") + endif() + + set(library_path_flag "${VCPKG_DETECTED_CMAKE_LIBRARY_PATH_FLAG}") + set(linker_flag_escape "") + if(arg_COMPILER_FRONTEND STREQUAL "MSVC" AND NOT arg_NO_FLAG_ESCAPING) + # Removed by libtool + set(linker_flag_escape "-Xlinker") + if(NOT arg_DISABLE_MSVC_WRAPPERS) + set(linker_flag_escape "-Xlinker;-Xlinker;-Xlinker") + endif() + if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + string(STRIP "$ENV{_LINK_} ${VCPKG_COMBINED_STATIC_LINKER_FLAGS_${var_suffix}}" LINK_ENV) + else() + string(STRIP "$ENV{_LINK_} ${VCPKG_COMBINED_SHARED_LINKER_FLAGS_${var_suffix}}" LINK_ENV) + endif() + endif() + if(linker_flag_escape) + list(TRANSFORM LDFLAGS PREPEND "${linker_flag_escape};") + endif() + string(REPLACE " " "\\ " current_installed_dir_escaped "${CURRENT_INSTALLED_DIR}") + if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${var_suffix}}/lib/manual-link") + vcpkg_list(PREPEND LDFLAGS ${linker_flag_escape} "${library_path_flag}${current_installed_dir_escaped}${path_suffix_${var_suffix}}/lib/manual-link") + endif() + if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${var_suffix}}/lib") + vcpkg_list(PREPEND LDFLAGS ${linker_flag_escape} "${library_path_flag}${current_installed_dir_escaped}${path_suffix_${var_suffix}}/lib") + endif() + + if(ARFLAGS AND NOT arg_COMPILER_FRONTEND STREQUAL "MSVC") + # ARFLAGS need to know the command for creating an archive (Maybe needs user customization?) + # or extract it from CMake via CMAKE_${lang}_ARCHIVE_CREATE ? + # or from CMAKE_${lang}_${rule} with rule being one of CREATE_SHARED_MODULE CREATE_SHARED_LIBRARY LINK_EXECUTABLE + vcpkg_list(PREPEND ARFLAGS "cr") + elseif(NOT arg_DISABLE_MSVC_WRAPPERS AND arg_COMPILER_FRONTEND STREQUAL "MSVC") + # The wrapper needs an action and that action needs to be defined AFTER all flags + vcpkg_list(APPEND ARFLAGS "cr") + endif() + + foreach(var IN LISTS flags) + list(JOIN ${var} " " string) + set("${var}_${var_suffix}" "${string}" PARENT_SCOPE) + list(APPEND flags_out "${var}_${var_suffix}") + endforeach() + set("${arg_FLAGS_OUT}" "${flags_out}" PARENT_SCOPE) +endfunction() + +### Prepare environment for configure +function(z_vcpkg_make_prepare_programs out_env) + cmake_parse_arguments(PARSE_ARGV 1 arg + "DISABLE_CPPFLAGS;DISABLE_MSVC_WRAPPERS" + "CONFIG;BUILD_TRIPLET" + "LANGUAGES" + ) + z_vcpkg_unparsed_args(FATAL_ERROR) + + z_vcpkg_make_get_cmake_vars() + z_vcpkg_make_get_crosscompiling(is_crosscompiling ${arg_BUILD_TRIPLET}) + + macro(z_vcpkg_append_to_configure_environment inoutlist var defaultval) + # Allows to overwrite settings in custom triplets via the environment + if(DEFINED ENV{${var}}) + list(APPEND "${inoutlist}" "${var}='$ENV{${var}}'") + else() + list(APPEND "${inoutlist}" "${var}='${defaultval}'") + endif() + endmacro() + + set(configure_env "") + # Remove full filepaths due to spaces and prepend filepaths to PATH (cross-compiling tools are unlikely on path by default) + if (VCPKG_TARGET_IS_WINDOWS) + set(progs C_COMPILER CXX_COMPILER AR + LINKER RANLIB OBJDUMP + STRIP NM DLLTOOL RC_COMPILER) + list(TRANSFORM progs PREPEND "VCPKG_DETECTED_CMAKE_") + foreach(prog IN LISTS progs) + set(filepath "${${prog}}") + if("${filepath}" MATCHES " " AND EXISTS "${${prog}}") + cmake_path(GET filepath FILENAME "${prog}") + vcpkg_insert_program_into_path("${filepath}") + endif() + endforeach() + + if (NOT arg_DISABLE_MSVC_WRAPPERS AND NOT VCPKG_TARGET_IS_MINGW) + z_vcpkg_append_to_configure_environment(configure_env CPP "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} -E") + z_vcpkg_append_to_configure_environment(configure_env CC "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER}") + z_vcpkg_append_to_configure_environment(configure_env CXX "compile ${VCPKG_DETECTED_CMAKE_CXX_COMPILER}") + if(NOT is_crosscompiling) + z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER}") + z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} -E") + z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_CXX_COMPILER}") + else() + # Silly trick to make configure accept CC_FOR_BUILD but in reality CC_FOR_BUILD is deactivated. + z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true") + z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true") + z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true") + endif() + + z_vcpkg_append_to_configure_environment(configure_env RC "windres-rc ${VCPKG_DETECTED_CMAKE_RC_COMPILER}") + z_vcpkg_append_to_configure_environment(configure_env WINDRES "windres-rc ${VCPKG_DETECTED_CMAKE_RC_COMPILER}") + if(VCPKG_DETECTED_CMAKE_AR AND NOT "${VCPKG_DETECTED_CMAKE_AR}" MATCHES "llvm-ar") + z_vcpkg_append_to_configure_environment(configure_env AR "ar-lib ${VCPKG_DETECTED_CMAKE_AR}") + elseif("${VCPKG_DETECTED_CMAKE_AR}" MATCHES "llvm-ar") + # llvm-lib does not understand /EXTRACT so llvm-ar needs to be used. However, llvm-ar cannot use the ar-lib wrapper. + z_vcpkg_append_to_configure_environment(configure_env AR "${VCPKG_DETECTED_CMAKE_AR}") + else() + z_vcpkg_append_to_configure_environment(configure_env AR "ar-lib lib.exe -verbose") + endif() + else() + z_vcpkg_append_to_configure_environment(configure_env CPP "${VCPKG_DETECTED_CMAKE_C_COMPILER} -E") + z_vcpkg_append_to_configure_environment(configure_env CC "${VCPKG_DETECTED_CMAKE_C_COMPILER}") + z_vcpkg_append_to_configure_environment(configure_env CXX "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}") + if(NOT is_crosscompiling) + z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "${VCPKG_DETECTED_CMAKE_C_COMPILER}") + z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "${VCPKG_DETECTED_CMAKE_C_COMPILER} -E") + z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}") + else() + z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true") + z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true") + z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true") + endif() + z_vcpkg_append_to_configure_environment(configure_env RC "${VCPKG_DETECTED_CMAKE_RC_COMPILER}") + z_vcpkg_append_to_configure_environment(configure_env WINDRES "${VCPKG_DETECTED_CMAKE_RC_COMPILER}") + if(VCPKG_DETECTED_CMAKE_AR) + z_vcpkg_append_to_configure_environment(configure_env AR "${VCPKG_DETECTED_CMAKE_AR}") + else() + z_vcpkg_append_to_configure_environment(configure_env AR "lib.exe -verbose") + endif() + endif() + z_vcpkg_append_to_configure_environment(configure_env LD "${VCPKG_DETECTED_CMAKE_LINKER} -verbose") + if(VCPKG_DETECTED_CMAKE_RANLIB) + z_vcpkg_append_to_configure_environment(configure_env RANLIB "${VCPKG_DETECTED_CMAKE_RANLIB}") # Trick to ignore the RANLIB call + else() + z_vcpkg_append_to_configure_environment(configure_env RANLIB ": RANLIB-disabled") + endif() + if(VCPKG_DETECTED_CMAKE_OBJDUMP) #Objdump is required to make shared libraries. Otherwise define lt_cv_deplibs_check_method=pass_all + z_vcpkg_append_to_configure_environment(configure_env OBJDUMP "${VCPKG_DETECTED_CMAKE_OBJDUMP}") # Trick to ignore the RANLIB call + endif() + if(VCPKG_DETECTED_CMAKE_STRIP) # If required set the ENV variable STRIP in the portfile correctly + z_vcpkg_append_to_configure_environment(configure_env STRIP "${VCPKG_DETECTED_CMAKE_STRIP}") + else() + z_vcpkg_append_to_configure_environment(configure_env STRIP ": STRIP-disabled") + list(APPEND arg_OPTIONS ac_cv_prog_ac_ct_STRIP=:) + endif() + if(VCPKG_DETECTED_CMAKE_NM) # If required set the ENV variable NM in the portfile correctly + z_vcpkg_append_to_configure_environment(configure_env NM "${VCPKG_DETECTED_CMAKE_NM}") + else() + # Would be better to have a true nm here! Some symbols (mainly exported variables) get not properly imported with dumpbin as nm + # and require __declspec(dllimport) for some reason (same problem CMake has with WINDOWS_EXPORT_ALL_SYMBOLS) + z_vcpkg_append_to_configure_environment(configure_env NM "dumpbin.exe -symbols -headers") + endif() + if(VCPKG_DETECTED_CMAKE_DLLTOOL) # If required set the ENV variable DLLTOOL in the portfile correctly + z_vcpkg_append_to_configure_environment(configure_env DLLTOOL "${VCPKG_DETECTED_CMAKE_DLLTOOL}") + else() + z_vcpkg_append_to_configure_environment(configure_env DLLTOOL "link.exe -verbose -dll") + endif() + + if(NOT "ASM" IN_LIST arg_LANGUAGES ) + z_vcpkg_append_to_configure_environment(configure_env CCAS ": CCAS-disabled") # If required set the ENV variable CCAS in the portfile correctly + z_vcpkg_append_to_configure_environment(configure_env AS ": AS-disabled") # If required set the ENV variable AS in the portfile correctly + + else() + set(ccas "${VCPKG_DETECTED_CMAKE_ASM_COMPILER}") + if(VCPKG_DETECTED_CMAKE_ASM_COMPILER_ID STREQUAL "MSVC") + if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") + set(asmflags "--target=i686-pc-windows-msvc -m32") + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(asmflags "--target=x86_64-pc-windows-msvc") + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") + set(asmflags "--target=arm64-pc-windows-msvc") + endif() + vcpkg_find_acquire_program(CLANG) + set(ccas "${CLANG}") + if(ccas MATCHES " ") + cmake_path(GET ccas PARENT_PATH ccas_dir) + cmake_path(GET ccas FILENAME ccas_filename) + vcpkg_insert_program_into_path("${ccas_dir}") + set(ccas "${ccas_filename}") + endif() + string(APPEND ccas " ${asmflags}") + endif() + z_vcpkg_append_to_configure_environment(configure_env CCAS "${ccas} -c") + z_vcpkg_append_to_configure_environment(configure_env AS "${ccas} -c") + endif() + + else() + # OSX dosn't like CMAKE_C(XX)_COMPILER (cc) in CC/CXX and rather wants to have gcc/g++ + vcpkg_list(SET z_vcm_all_tools) + function(z_vcpkg_make_set_env envvar cmakevar) + set(prog "${VCPKG_DETECTED_CMAKE_${cmakevar}}") + if(NOT DEFINED ENV{${envvar}} AND NOT prog STREQUAL "") + vcpkg_list(APPEND z_vcm_all_tools "${prog}") + if(ARGN) + string(APPEND prog " ${ARGN}") + endif() + set(z_vcm_all_tools "${z_vcm_all_tools}" PARENT_SCOPE) + endif() + z_vcpkg_append_to_configure_environment(configure_env "${envvar}" "${prog}") + set(configure_env "${configure_env}" PARENT_SCOPE) + endfunction() + + z_vcpkg_make_set_env(CC C_COMPILER ${ABIFLAGS_${arg_CONFIG}}) + z_vcpkg_make_set_env(CXX CXX_COMPILER ${ABIFLAGS_${arg_CONFIG}}) + if(NOT is_crosscompiling) + z_vcpkg_make_set_env(CC_FOR_BUILD C_COMPILER ${ABIFLAGS_${arg_CONFIG}}) + z_vcpkg_make_set_env(CPP_FOR_BUILD C_COMPILER "-E" ${ABIFLAGS_${arg_CONFIG}}) + z_vcpkg_make_set_env(CXX_FOR_BUILD CXX_COMPILER ${ABIFLAGS_${arg_CONFIG}}) + else() + set(ENV{CC_FOR_BUILD} "umask 0 | touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true") + set(ENV{CPP_FOR_BUILD} "umask 0 | touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true") + set(ENV{CXX_FOR_BUILD} "umask 0 | touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true") + endif() + if("ASM" IN_LIST arg_LANGUAGES) + z_vcpkg_make_set_env(CCAS ASM_COMPILER "-c" ${ABIFLAGS_${arg_CONFIG}}) + z_vcpkg_make_set_env(AS ASM_COMPILER "-c" ${ABIFLAGS_${arg_CONFIG}}) + endif() + z_vcpkg_make_set_env(NM NM) + z_vcpkg_make_set_env(RC RC) + z_vcpkg_make_set_env(WINDRES RC) + z_vcpkg_make_set_env(DLLTOOL DLLTOOL) + z_vcpkg_make_set_env(STRIP STRIP) + z_vcpkg_make_set_env(OBJDUMP OBJDUMP) + z_vcpkg_make_set_env(RANLIB RANLIB) + z_vcpkg_make_set_env(AR AR) + z_vcpkg_make_set_env(LD LINKER) + unset(z_vcpkg_make_set_env) + + list(FILTER z_vcm_all_tools INCLUDE REGEX " ") + if(z_vcm_all_tools) + list(REMOVE_DUPLICATES z_vcm_all_tools) + list(JOIN z_vcm_all_tools "\n " tools) + message(STATUS "Warning: Tools with embedded space may be handled incorrectly by configure:\n ${tools}") + endif() + endif() + list(JOIN configure_env " " configure_env) + set("${out_env}" "${configure_env}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_make_prepare_link_flags) + cmake_parse_arguments(PARSE_ARGV 0 arg + "VCPKG_TRANSFORM_LIBS" + "IN_OUT_VAR" + "" + ) + + set(link_flags ${${arg_IN_OUT_VAR}}) + + if(arg_VCPKG_TRANSFORM_LIBS) + list(TRANSFORM link_flags REPLACE "[.](dll[.]lib|lib|a|so)$" "") + + if(VCPKG_TARGET_IS_WINDOWS) + list(REMOVE_ITEM link_flags "uuid") + endif() + + list(TRANSFORM link_flags REPLACE "^([^-].*)" "-l\\1") + if(VCPKG_TARGET_IS_MINGW AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") + # libtool must be told explicitly that there is no dynamic linkage for uuid. + # The "-Wl,..." syntax is understood by libtool and gcc, but no by ld. + list(TRANSFORM link_flags REPLACE "^-luuid\$" "-Wl,-Bstatic,-luuid,-Bdynamic") + endif() + endif() + + set(${arg_IN_OUT_VAR} ${link_flags} PARENT_SCOPE) +endfunction() + +function(z_vcpkg_make_prepare_flags) + cmake_parse_arguments(PARSE_ARGV 0 arg + "DISABLE_CPPFLAGS;DISABLE_MSVC_WRAPPERS;NO_FLAG_ESCAPING" + "LIBS_OUT;FRONTEND_VARIANT_OUT;C_COMPILER_NAME" + "LANGUAGES" + ) + z_vcpkg_unparsed_args(FATAL_ERROR) + + z_vcpkg_make_get_cmake_vars() + + # ==== LIBS + # TODO: Figure out what to do with other Languages like Fortran + # Remove outer quotes from cmake variables which will be forwarded via makefile/shell variables + # substituted into makefile commands (e.g. Android NDK has "--sysroot=...") + separate_arguments(c_libs_list NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES}") + separate_arguments(cxx_libs_list NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}") + list(REMOVE_ITEM cxx_libs_list ${c_libs_list}) + set(all_libs_list ${cxx_libs_list} ${c_libs_list}) + + # Do lib list transformation from name.lib to -lname if necessary + set(vcpkg_transform_libs VCPKG_TRANSFORM_LIBS) + if(VCPKG_DETECTED_CMAKE_C_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" AND (arg_NO_FLAG_ESCAPING)) + set(vcpkg_transform_libs "") + endif() + + if(VCPKG_TARGET_IS_UWP) + # Avoid libtool choke: "Warning: linker path does not have real file for library -lWindowsApp." + # The problem with the choke is that libtool always falls back to built a static library even if a dynamic was requested. + # Note: Env LIBPATH;LIB are on the search path for libtool by default on windows. + # It even does unix/dos-short/unix transformation with the path to get rid of spaces. + set(vcpkg_transform_libs "") + endif() + + z_vcpkg_make_prepare_link_flags( + IN_OUT_VAR all_libs_list + ${vcpkg_transform_libs} + ) + + if(all_libs_list) + list(JOIN all_libs_list " " all_libs_string) + if(DEFINED ENV{LIBS}) + set(ENV{LIBS} "$ENV{LIBS} ${all_libs_string}") + else() + set(ENV{LIBS} "${all_libs_string}") + endif() + endif() + + set("${arg_LIBS_OUT}" "${all_libs_string}" PARENT_SCOPE) + + # ==== /LIBS + + if(VCPKG_TARGET_IS_WINDOWS) + vcpkg_backup_env_variables(VARS _CL_ _LINK_) + # TODO: Should be CPP flags instead -> rewrite when vcpkg_determined_cmake_compiler_flags defined + if(VCPKG_TARGET_IS_UWP) + # Be aware that configure thinks it is crosscompiling due to: + # error while loading shared libraries: VCRUNTIME140D_APP.dll: + # cannot open shared object file: No such file or directory + # IMPORTANT: The only way to pass linker flags through libtool AND the compile wrapper + # is to use the CL and LINK environment variables !!! + # (This is due to libtool and compiler wrapper using the same set of options to pass those variables around) + file(TO_CMAKE_PATH "$ENV{VCToolsInstallDir}" VCToolsInstallDir) + set(_replacement -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\") + string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG "${VCPKG_COMBINED_CXX_FLAGS_DEBUG}") + string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_C_FLAGS_DEBUG "${VCPKG_COMBINED_C_FLAGS_DEBUG}") + string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE "${VCPKG_COMBINED_CXX_FLAGS_RELEASE}") + string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_C_FLAGS_RELEASE "${VCPKG_COMBINED_C_FLAGS_RELEASE}") + set(ENV{_CL_} "$ENV{_CL_} -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\"") + set(ENV{_LINK_} "$ENV{_LINK_} ${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES} ${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}") + endif() + endif() + + #### + set(flags_opts "") + if(DEFINED arg_LANGUAGES) + list(APPEND flags_opts LANGUAGES ${arg_LANGUAGES}) + endif() + + if(arg_DISABLE_CPPFLAGS) + list(APPEND flags_opts DISABLE_CPPFLAGS) + endif() + + if(arg_DISABLE_MSVC_WRAPPERS) + list(APPEND flags_opts DISABLE_MSVC_WRAPPERS) + endif() + + if(arg_NO_FLAG_ESCAPING) + list(APPEND flags_opts NO_FLAG_ESCAPING) + endif() + + z_vcpkg_make_prepare_compile_flags( + CONFIG RELEASE + COMPILER_FRONTEND "${VCPKG_DETECTED_CMAKE_C_COMPILER_FRONTEND_VARIANT}" + FLAGS_OUT release_flags_list + ${flags_opts} + ) + if(NOT DEFINED VCPKG_BUILD_TYPE) + z_vcpkg_make_prepare_compile_flags( + CONFIG DEBUG + COMPILER_FRONTEND "${VCPKG_DETECTED_CMAKE_C_COMPILER_FRONTEND_VARIANT}" + FLAGS_OUT debug_flags_list + ${flags_opts} + ) + endif() + + foreach(flag IN LISTS release_flags_list debug_flags_list) + set("${flag}" "${${flag}}" PARENT_SCOPE) + endforeach() + + cmake_path(GET VCPKG_DETECTED_CMAKE_C_COMPILER FILENAME cname) + set("${arg_C_COMPILER_NAME}" "${cname}" PARENT_SCOPE) # needed by z_vcpkg_make_get_configure_triplets + set("${arg_FRONTEND_VARIANT_OUT}" "${VCPKG_DETECTED_CMAKE_C_COMPILER_FRONTEND_VARIANT}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_make_default_path_and_configure_options out_var) + cmake_parse_arguments(PARSE_ARGV 1 arg + "AUTOMAKE" + "CONFIG;EXCLUDE_FILTER;INCLUDE_FILTER" + "" + ) + z_vcpkg_unparsed_args(FATAL_ERROR) + + set(opts "") + string(TOUPPER "${arg_CONFIG}" arg_CONFIG) + + z_vcpkg_make_set_common_vars() + + list(APPEND opts lt_cv_deplibs_check_method=pass_all) + + # Pre-processing windows configure requirements + if (VCPKG_TARGET_IS_WINDOWS) + # Other maybe interesting variables to control + # COMPILE This is the command used to actually compile a C source file. The file name is appended to form the complete command line. + # LINK This is the command used to actually link a C program. + # CXXCOMPILE The command used to actually compile a C++ source file. The file name is appended to form the complete command line. + # CXXLINK The command used to actually link a C++ program. + + # Variables not correctly detected by configure. In release builds. + list(APPEND opts gl_cv_double_slash_root=yes + ac_cv_func_memmove=yes + ac_cv_func_memset=yes + ) + + if(VCPKG_TARGET_ARCHITECTURE MATCHES "^[Aa][Rr][Mm]64$") + list(APPEND opts gl_cv_host_cpu_c_abi=no) + endif() + endif() + + # Set configure paths + set(current_installed_dir_msys "${CURRENT_INSTALLED_DIR}") + if(CMAKE_HOST_WIN32) + string(REGEX REPLACE "^([a-zA-Z]):/" "/\\1/" current_installed_dir_msys "${current_installed_dir_msys}") + endif() + vcpkg_list(APPEND opts "--prefix=${current_installed_dir_msys}${path_suffix_${arg_CONFIG}}") + + if(arg_CONFIG STREQUAL "RELEASE") + # ${prefix} has an extra backslash to prevent early expansion when calling `bash -c configure "..."`. + vcpkg_list(APPEND opts + # Important: These should all be relative to prefix! + "--bindir=\\\${prefix}/tools/${PORT}/bin" + "--sbindir=\\\${prefix}/tools/${PORT}/sbin" + "--libdir=\\\${prefix}/lib" # On some Linux distributions lib64 is the default + "--mandir=\\\${prefix}/share/${PORT}" + "--docdir=\\\${prefix}/share/${PORT}" + "--datarootdir=\\\${prefix}/share/${PORT}") + else() + vcpkg_list(APPEND opts + # Important: These should all be relative to prefix! + "--bindir=\\\${prefix}/../tools/${PORT}${path_suffix_DEBUG}/bin" + "--sbindir=\\\${prefix}/../tools/${PORT}${path_suffix_DEBUG}/sbin" + "--libdir=\\\${prefix}/lib" # On some Linux distributions lib64 is the default + "--includedir=\\\${prefix}/../include" + "--mandir=\\\${prefix}/share/${PORT}" + "--docdir=\\\${prefix}/share/${PORT}" + "--datarootdir=\\\${prefix}/share/${PORT}") + endif() + # Setup common options + if(NOT arg_AUTOMAKE) + vcpkg_list(APPEND opts --disable-silent-rules --verbose) + endif() + + if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") + vcpkg_list(APPEND opts --enable-shared --disable-static) + else() + vcpkg_list(APPEND opts --disable-shared --enable-static) + endif() + + if(DEFINED arg_EXCLUDE_FILTER) + list(FILTER opts EXCLUDE REGEX "${arg_EXCLUDE_FILTER}") + endif() + + if(DEFINED arg_INCLUDE_FILTER) + list(FILTER opts INCLUDE REGEX "${arg_INCLUDE_FILTER}") + endif() + + set("${out_var}" ${opts} PARENT_SCOPE) +endfunction() diff --git a/scripts/azure-pipelines/azure-pipelines.yml b/scripts/azure-pipelines/azure-pipelines.yml index fe6de219e79258..83935ff471ecb0 100644 --- a/scripts/azure-pipelines/azure-pipelines.yml +++ b/scripts/azure-pipelines/azure-pipelines.yml @@ -9,7 +9,7 @@ parameters: - name: tripletPattern displayName: 'Enable triplets which contain this substring' type: string - default: '-' + default: 'arm64-windows' jobs: - template: windows/azure-pipelines.yml diff --git a/versions/baseline.json b/versions/baseline.json index f9a968966be4d0..b12174467916ee 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -3225,8 +3225,8 @@ "port-version": 2 }, "gettext-libintl": { - "baseline": "0.22.5", - "port-version": 3 + "baseline": "0.25", + "port-version": 0 }, "gettimeofday": { "baseline": "2017-10-14", diff --git a/versions/g-/gettext-libintl.json b/versions/g-/gettext-libintl.json index 508241dae34df3..335f37e1c7fa9f 100644 --- a/versions/g-/gettext-libintl.json +++ b/versions/g-/gettext-libintl.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "edee36d437d6da098662a8b545c0e8792dfac084", + "version": "0.25", + "port-version": 0 + }, { "git-tree": "89734e29d2753df206cdd0e45f2f6c9b3f3fbc4f", "version": "0.22.5",