From 2ae782f68b91c67347e50dde0fd9dc0ced13746e Mon Sep 17 00:00:00 2001 From: Michael Palimaka Date: Mon, 13 Mar 2017 23:10:51 +1100 Subject: dev-util/cmake: backport x32 support patches from upstream for testing Gentoo-bug: 426936 Package-Manager: Portage-2.3.4, Repoman-2.3.2 --- dev-util/cmake/cmake-3.7.2-r10.ebuild | 202 +++++++ dev-util/cmake/files/cmake-3.7.2-x32.patch | 843 +++++++++++++++++++++++++++++ 2 files changed, 1045 insertions(+) create mode 100644 dev-util/cmake/cmake-3.7.2-r10.ebuild create mode 100644 dev-util/cmake/files/cmake-3.7.2-x32.patch (limited to 'dev-util') diff --git a/dev-util/cmake/cmake-3.7.2-r10.ebuild b/dev-util/cmake/cmake-3.7.2-r10.ebuild new file mode 100644 index 000000000000..dd1df55049be --- /dev/null +++ b/dev-util/cmake/cmake-3.7.2-r10.ebuild @@ -0,0 +1,202 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +CMAKE_REMOVE_MODULES="no" +inherit bash-completion-r1 elisp-common toolchain-funcs eutils versionator cmake-utils virtualx flag-o-matic + +MY_P="${P/_/-}" + +DESCRIPTION="Cross platform Make" +HOMEPAGE="http://www.cmake.org/" +SRC_URI="http://www.cmake.org/files/v$(get_version_component_range 1-2)/${MY_P}.tar.gz" + +LICENSE="CMake" +SLOT="0" +[[ "${PV}" = *_rc* ]] || \ +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris" +IUSE="doc emacs system-jsoncpp ncurses qt5" + +RDEPEND=" + >=app-arch/libarchive-3.0.0:= + >=dev-libs/expat-2.0.1 + >=dev-libs/libuv-1.0.0:= + >=net-misc/curl-7.21.5[ssl] + sys-libs/zlib + virtual/pkgconfig + emacs? ( virtual/emacs ) + ncurses? ( sys-libs/ncurses:0= ) + qt5? ( + dev-qt/qtcore:5 + dev-qt/qtgui:5 + dev-qt/qtwidgets:5 + ) + system-jsoncpp? ( >=dev-libs/jsoncpp-0.6.0_rc2:0= ) +" +DEPEND="${RDEPEND} + doc? ( dev-python/sphinx ) +" + +S="${WORKDIR}/${MY_P}" + +SITEFILE="50${PN}-gentoo.el" + +PATCHES=( + # prefix + "${FILESDIR}"/${PN}-3.4.0_rc1-darwin-bundle.patch + "${FILESDIR}"/${PN}-3.0.0-prefix-dirs.patch + "${FILESDIR}"/${PN}-3.1.0-darwin-isysroot.patch + + # handle gentoo packaging in find modules + "${FILESDIR}"/${PN}-2.8.12.1-FindImageMagick.patch + "${FILESDIR}"/${PN}-3.0.0-FindBLAS.patch + "${FILESDIR}"/${PN}-3.0.0-FindBoost-python.patch + "${FILESDIR}"/${PN}-3.0.2-FindLAPACK.patch + "${FILESDIR}"/${PN}-3.5.2-FindQt4.patch + + # respect python eclasses + "${FILESDIR}"/${PN}-2.8.10.2-FindPythonLibs.patch + "${FILESDIR}"/${PN}-3.1.0-FindPythonInterp.patch + + # upstream fixes (can usually be removed with a version bump) + + # testing 3.9 backports - bug #426936 + "${FILESDIR}"/${PN}-3.7.2-x32.patch +) + +cmake_src_bootstrap() { + # Cleanup args to extract only JOBS. + # Because bootstrap does not know anything else. + echo ${MAKEOPTS} | egrep -o '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' > /dev/null + if [ $? -eq 0 ]; then + par_arg=$(echo ${MAKEOPTS} | egrep -o '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' | tail -n1 | egrep -o '[[:digit:]]+') + par_arg="--parallel=${par_arg}" + else + par_arg="--parallel=1" + fi + + # disable running of cmake in boostrap command + sed -i \ + -e '/"${cmake_bootstrap_dir}\/cmake"/s/^/#DONOTRUN /' \ + bootstrap || die "sed failed" + + # execinfo.h on Solaris isn't quite what it is on Darwin + if [[ ${CHOST} == *-solaris* ]] ; then + sed -i -e 's/execinfo\.h/blablabla.h/' Source/kwsys/CMakeLists.txt || die + fi + + tc-export CC CXX LD + + # bootstrap script isn't exactly /bin/sh compatible + ${CONFIG_SHELL:-sh} ./bootstrap \ + --prefix="${T}/cmakestrap/" \ + ${par_arg} \ + || die "Bootstrap failed" +} + +cmake_src_test() { + # fix OutDir and SelectLibraryConfigurations tests + # these are altered thanks to our eclass + sed -i -e 's:#IGNORE ::g' \ + "${S}"/Tests/{OutDir,CMakeOnly/SelectLibraryConfigurations}/CMakeLists.txt \ + || die + + pushd "${BUILD_DIR}" > /dev/null + + local ctestargs + [[ -n ${TEST_VERBOSE} ]] && ctestargs="--extra-verbose --output-on-failure" + + # Excluded tests: + # BootstrapTest: we actualy bootstrap it every time so why test it. + # BundleUtilities: bundle creation broken + # CTest.updatecvs: which fails to commit as root + # Fortran: requires fortran + # Qt4Deploy, which tries to break sandbox and ignores prefix + # Qt5Autogen, which breaks for unknown reason + # TestUpload, which requires network access + "${BUILD_DIR}"/bin/ctest ${ctestargs} \ + -E "(BootstrapTest|BundleUtilities|CTest.UpdateCVS|Fortran|Qt4Deploy|Qt5Autogen|TestUpload)" \ + || die "Tests failed" + + popd > /dev/null +} + +src_prepare() { + cmake-utils_src_prepare + + # Add gcc libs to the default link paths + sed -i \ + -e "s|@GENTOO_PORTAGE_GCCLIBDIR@|${EPREFIX}/usr/${CHOST}/lib/|g" \ + -e "s|@GENTOO_PORTAGE_EPREFIX@|${EPREFIX}/|g" \ + Modules/Platform/{UnixPaths,Darwin}.cmake || die "sed failed" + if ! has_version \>=${CATEGORY}/${PN}-3.4.0_rc1 ; then + CMAKE_BINARY="${S}/Bootstrap.cmk/cmake" + cmake_src_bootstrap + fi +} + +src_configure() { + # Fix linking on Solaris + [[ ${CHOST} == *-solaris* ]] && append-ldflags -lsocket -lnsl + + local mycmakeargs=( + -DCMAKE_USE_SYSTEM_LIBRARIES=ON + -DCMAKE_USE_SYSTEM_LIBRARY_JSONCPP=$(usex system-jsoncpp) + -DCMAKE_INSTALL_PREFIX="${EPREFIX}"/usr + -DCMAKE_DOC_DIR=/share/doc/${PF} + -DCMAKE_MAN_DIR=/share/man + -DCMAKE_DATA_DIR=/share/${PN} + -DSPHINX_MAN=$(usex doc) + -DSPHINX_HTML=$(usex doc) + -DBUILD_CursesDialog="$(usex ncurses)" + ) + + if use qt5 ; then + mycmakeargs+=( + -DBUILD_QtDialog=ON + $(cmake-utils_use_find_package qt5 Qt5Widgets) + ) + fi + + cmake-utils_src_configure +} + +src_compile() { + cmake-utils_src_compile + use emacs && elisp-compile Auxiliary/cmake-mode.el +} + +src_test() { + virtx cmake_src_test +} + +src_install() { + cmake-utils_src_install + + if use emacs; then + elisp-install ${PN} Auxiliary/cmake-mode.el Auxiliary/cmake-mode.elc + elisp-site-file-install "${FILESDIR}/${SITEFILE}" + fi + + insinto /usr/share/vim/vimfiles/syntax + doins Auxiliary/vim/syntax/cmake.vim + + insinto /usr/share/vim/vimfiles/indent + doins Auxiliary/vim/indent/cmake.vim + + insinto /usr/share/vim/vimfiles/ftdetect + doins "${FILESDIR}/${PN}.vim" + + dobashcomp Auxiliary/bash-completion/{${PN},ctest,cpack} + + rm -r "${ED}"/usr/share/cmake/{completions,editors} || die +} + +pkg_postinst() { + use emacs && elisp-site-regen +} + +pkg_postrm() { + use emacs && elisp-site-regen +} diff --git a/dev-util/cmake/files/cmake-3.7.2-x32.patch b/dev-util/cmake/files/cmake-3.7.2-x32.patch new file mode 100644 index 000000000000..0164a39d0ef1 --- /dev/null +++ b/dev-util/cmake/files/cmake-3.7.2-x32.patch @@ -0,0 +1,843 @@ +Backports from 3.9 + +Gentoo-bug: 426936 + +From 503f25d490e56dfc1d3dc894e1fc1bd3e7e89e81 Mon Sep 17 00:00:00 2001 +From: Christian Schmidbauer +Date: Sat, 25 Feb 2017 19:47:49 +0100 +Subject: [PATCH] find_library: Allow custom lib suffix be used as find path + +Add a new `CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable to allow use +of a custom suffix on `lib` directory names. This is a more general +option than that added by commit v3.7.0-rc1~504^2 (Teach find_library +and find_package to search lib32 paths, 2016-06-10). It allows the find +path to be more deterministic on custom setups. + +See discussion in #10287 and #15994. +--- + Help/command/find_library.rst | 7 ++++++ + Help/manual/cmake-variables.7.rst | 1 + + Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst | 2 ++ + Help/prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS.rst | 2 ++ + .../release/dev/find_library-custom-lib-suffix.rst | 6 +++++ + .../CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst | 11 +++++++++ + Source/cmFindLibraryCommand.cxx | 28 ++++++++++++---------- + Tests/CMakeOnly/find_library/CMakeLists.txt | 15 +++++++++++- + .../CMakeOnly/find_library/lib/A/libXYZ/libtest2.a | 0 + Tests/CMakeOnly/find_library/lib/XYZ/libtest1.a | 0 + .../CMakeOnly/find_library/libXYZ/A/lib/libtest4.a | 0 + .../find_library/libXYZ/A/libXYZ/libtest5.a | 0 + Tests/CMakeOnly/find_library/libXYZ/A/libtest6.a | 0 + Tests/CMakeOnly/find_library/libXYZ/libtest7.a | 0 + 14 files changed, 58 insertions(+), 14 deletions(-) + create mode 100644 Help/release/dev/find_library-custom-lib-suffix.rst + create mode 100644 Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst + create mode 100644 Tests/CMakeOnly/find_library/lib/A/libXYZ/libtest2.a + create mode 100644 Tests/CMakeOnly/find_library/lib/XYZ/libtest1.a + create mode 100644 Tests/CMakeOnly/find_library/libXYZ/A/lib/libtest4.a + create mode 100644 Tests/CMakeOnly/find_library/libXYZ/A/libXYZ/libtest5.a + create mode 100644 Tests/CMakeOnly/find_library/libXYZ/A/libtest6.a + create mode 100644 Tests/CMakeOnly/find_library/libXYZ/libtest7.a + +diff --git a/Help/command/find_library.rst b/Help/command/find_library.rst +index 1eb50f7..e912040 100644 +--- a/Help/command/find_library.rst ++++ b/Help/command/find_library.rst +@@ -49,6 +49,13 @@ path to the framework ``/A.framework``. When a full path to a + framework is used as a library, CMake will use a ``-framework A``, and a + ``-F`` to link the framework to the target. + ++If the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable is set all ++search paths will be tested as normal, with the suffix appended, and with ++all matches of ``lib/`` replaced with ++``lib${CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX}/``. This variable overrides ++the :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` ++and :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` global properties. ++ + If the :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` global property is set + all search paths will be tested as normal, with ``32/`` appended, and + with all matches of ``lib/`` replaced with ``lib32/``. This property is +diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst +index 259d87b..a25efe7 100644 +--- a/Help/manual/cmake-variables.7.rst ++++ b/Help/manual/cmake-variables.7.rst +@@ -130,6 +130,7 @@ Variables that Change Behavior + /variable/CMAKE_SYSROOT + /variable/CMAKE_FIND_APPBUNDLE + /variable/CMAKE_FIND_FRAMEWORK ++ /variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX + /variable/CMAKE_FIND_LIBRARY_PREFIXES + /variable/CMAKE_FIND_LIBRARY_SUFFIXES + /variable/CMAKE_FIND_NO_INSTALL_PREFIX +diff --git a/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst b/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst +index ce18b65..8396026 100644 +--- a/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst ++++ b/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst +@@ -8,3 +8,5 @@ Whether the :command:`find_library` command should automatically search + :command:`find_library` command should automatically search the ``lib32`` + variant of directories called ``lib`` in the search path when building 32-bit + binaries. ++ ++See also the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable. +diff --git a/Help/prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS.rst b/Help/prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS.rst +index e52f8eb..ed343ba 100644 +--- a/Help/prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS.rst ++++ b/Help/prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS.rst +@@ -8,3 +8,5 @@ FIND_LIBRARY_USE_LIB64_PATHS is a boolean specifying whether the + :command:`find_library` command should automatically search the lib64 + variant of directories called lib in the search path when building + 64-bit binaries. ++ ++See also the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable. +diff --git a/Help/release/dev/find_library-custom-lib-suffix.rst b/Help/release/dev/find_library-custom-lib-suffix.rst +new file mode 100644 +index 0000000..824b27e +--- /dev/null ++++ b/Help/release/dev/find_library-custom-lib-suffix.rst +@@ -0,0 +1,6 @@ ++find_library-custom-lib-suffix ++------------------------------ ++ ++* A :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable was added to ++ tell the :command:`find_library` command to search in a ``lib`` ++ directory before each ``lib`` directory that would normally be searched. +diff --git a/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst b/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst +new file mode 100644 +index 0000000..f7c6524 +--- /dev/null ++++ b/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst +@@ -0,0 +1,11 @@ ++CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX ++------------------------------------ ++ ++Specify a ```` to tell the :command:`find_library` command to ++search in a ``lib`` directory before each ``lib`` directory that ++would normally be searched. ++ ++This overrides the behavior of related global properties: ++ ++* :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` ++* :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` +diff --git a/Source/cmFindLibraryCommand.cxx b/Source/cmFindLibraryCommand.cxx +index 2feedf3..c506d66 100644 +--- a/Source/cmFindLibraryCommand.cxx ++++ b/Source/cmFindLibraryCommand.cxx +@@ -43,20 +43,22 @@ bool cmFindLibraryCommand::InitialPass(std::vector const& argsIn, + return true; + } + +- if (this->Makefile->GetState()->GetGlobalPropertyAsBool( +- "FIND_LIBRARY_USE_LIB32_PATHS")) { +- // add special 32 bit paths if this is a 32 bit compile. +- if (this->Makefile->PlatformIs32Bit()) { +- this->AddArchitecturePaths("32"); +- } ++ // add custom lib paths instead of using fixed lib32 or lib64 ++ if (const char* customLib = this->Makefile->GetDefinition( ++ "CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX")) { ++ this->AddArchitecturePaths(customLib); + } +- +- if (this->Makefile->GetState()->GetGlobalPropertyAsBool( +- "FIND_LIBRARY_USE_LIB64_PATHS")) { +- // add special 64 bit paths if this is a 64 bit compile. +- if (this->Makefile->PlatformIs64Bit()) { +- this->AddArchitecturePaths("64"); +- } ++ // add special 32 bit paths if this is a 32 bit compile. ++ else if (this->Makefile->PlatformIs32Bit() && ++ this->Makefile->GetState()->GetGlobalPropertyAsBool( ++ "FIND_LIBRARY_USE_LIB32_PATHS")) { ++ this->AddArchitecturePaths("32"); ++ } ++ // add special 64 bit paths if this is a 64 bit compile. ++ else if (this->Makefile->PlatformIs64Bit() && ++ this->Makefile->GetState()->GetGlobalPropertyAsBool( ++ "FIND_LIBRARY_USE_LIB64_PATHS")) { ++ this->AddArchitecturePaths("64"); + } + + std::string library = this->FindLibrary(); +diff --git a/Tests/CMakeOnly/find_library/CMakeLists.txt b/Tests/CMakeOnly/find_library/CMakeLists.txt +index 9958650..9c1aad8 100644 +--- a/Tests/CMakeOnly/find_library/CMakeLists.txt ++++ b/Tests/CMakeOnly/find_library/CMakeLists.txt +@@ -24,7 +24,7 @@ endmacro() + macro(test_find_library_subst expected) + get_filename_component(dir ${expected} PATH) + get_filename_component(name ${expected} NAME) +- string(REGEX REPLACE "lib/?64" "lib" dir "${dir}") ++ string(REGEX REPLACE "lib/?[36X][24Y][Z]*" "lib" dir "${dir}") + test_find_library(", searched as ${dir}" "${expected}" + NAMES ${name} + PATHS ${CMAKE_CURRENT_SOURCE_DIR}/${dir} +@@ -79,3 +79,16 @@ test_find_library("" A/libtestA.a + NAMES testB testA NAMES_PER_DIR + PATHS ${CMAKE_CURRENT_SOURCE_DIR}/A ${CMAKE_CURRENT_SOURCE_DIR}/B + ) ++ ++set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX "XYZ") ++foreach(libXYZ ++ lib/XYZ/libtest1.a ++ lib/A/libXYZ/libtest2.a ++ lib/libtest3.a ++ libXYZ/A/lib/libtest4.a ++ libXYZ/A/libXYZ/libtest5.a ++ libXYZ/A/libtest6.a ++ libXYZ/libtest7.a ++ ) ++ test_find_library_subst(${libXYZ}) ++endforeach() +diff --git a/Tests/CMakeOnly/find_library/lib/A/libXYZ/libtest2.a b/Tests/CMakeOnly/find_library/lib/A/libXYZ/libtest2.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/CMakeOnly/find_library/lib/XYZ/libtest1.a b/Tests/CMakeOnly/find_library/lib/XYZ/libtest1.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/CMakeOnly/find_library/libXYZ/A/lib/libtest4.a b/Tests/CMakeOnly/find_library/libXYZ/A/lib/libtest4.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/CMakeOnly/find_library/libXYZ/A/libXYZ/libtest5.a b/Tests/CMakeOnly/find_library/libXYZ/A/libXYZ/libtest5.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/CMakeOnly/find_library/libXYZ/A/libtest6.a b/Tests/CMakeOnly/find_library/libXYZ/A/libtest6.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/CMakeOnly/find_library/libXYZ/libtest7.a b/Tests/CMakeOnly/find_library/libXYZ/libtest7.a +new file mode 100644 +index 0000000..e69de29 +-- +2.10.2 + +From 462cf254270fbd56bffc73b00dc28882fdb0bdd6 Mon Sep 17 00:00:00 2001 +From: Steven Newbury +Date: Mon, 27 Feb 2017 21:06:51 +0000 +Subject: [PATCH 1/4] Add support for x32-abi + +Detect x32-abi through CMakeCompilerABI infrastruture and use this +information at runtime to determine the correct library paths with +`FIND_LIBRARY_USE_LIBX32_PATHS`. + +Fixes: #15994 +--- + Help/command/find_library.rst | 10 +++++++++- + Help/manual/cmake-properties.7.rst | 1 + + Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst | 12 ++++++++++++ + Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst | 1 + + Modules/CMakeCompilerABI.h | 4 ++++ + Modules/FindPkgConfig.cmake | 4 ++++ + Modules/Platform/UnixPaths.cmake | 1 + + Source/cmExportInstallFileGenerator.cxx | 4 +++- + Source/cmFindLibraryCommand.cxx | 9 ++++++++- + Source/cmFindPackageCommand.cxx | 11 +++++++++++ + Source/cmFindPackageCommand.h | 1 + + Source/cmMakefile.cxx | 17 +++++++++++++++++ + Source/cmMakefile.h | 2 ++ + 13 files changed, 74 insertions(+), 3 deletions(-) + create mode 100644 Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst + +diff --git a/Help/command/find_library.rst b/Help/command/find_library.rst +index e912040..f774f17 100644 +--- a/Help/command/find_library.rst ++++ b/Help/command/find_library.rst +@@ -53,7 +53,8 @@ If the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable is set all + search paths will be tested as normal, with the suffix appended, and with + all matches of ``lib/`` replaced with + ``lib${CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX}/``. This variable overrides +-the :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` ++the :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS`, ++:prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS`, + and :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` global properties. + + If the :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` global property is set +@@ -63,6 +64,13 @@ automatically set for the platforms that are known to need it if at + least one of the languages supported by the :command:`project` command + is enabled. + ++If the :prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS` global property is set ++all search paths will be tested as normal, with ``x32/`` appended, and ++with all matches of ``lib/`` replaced with ``libx32/``. This property is ++automatically set for the platforms that are known to need it if at ++least one of the languages supported by the :command:`project` command ++is enabled. ++ + If the :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` global property is set + all search paths will be tested as normal, with ``64/`` appended, and + with all matches of ``lib/`` replaced with ``lib64/``. This property is +diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst +index 5bd6365..2157ba5 100644 +--- a/Help/manual/cmake-properties.7.rst ++++ b/Help/manual/cmake-properties.7.rst +@@ -26,6 +26,7 @@ Properties of Global Scope + /prop_gbl/ENABLED_LANGUAGES + /prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS + /prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS ++ /prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS + /prop_gbl/FIND_LIBRARY_USE_OPENBSD_VERSIONING + /prop_gbl/GLOBAL_DEPENDS_DEBUG_MODE + /prop_gbl/GLOBAL_DEPENDS_NO_CYCLES +diff --git a/Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst b/Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst +new file mode 100644 +index 0000000..b87b09b +--- /dev/null ++++ b/Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst +@@ -0,0 +1,12 @@ ++FIND_LIBRARY_USE_LIBX32_PATHS ++----------------------------- ++ ++Whether the :command:`find_library` command should automatically search ++``libx32`` directories. ++ ++``FIND_LIBRARY_USE_LIBX32_PATHS`` is a boolean specifying whether the ++:command:`find_library` command should automatically search the ``libx32`` ++variant of directories called ``lib`` in the search path when building ++x32-abi binaries. ++ ++See also the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable. +diff --git a/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst b/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst +index f7c6524..ada8955 100644 +--- a/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst ++++ b/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst +@@ -9,3 +9,4 @@ This overrides the behavior of related global properties: + + * :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` + * :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` ++* :prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS` +diff --git a/Modules/CMakeCompilerABI.h b/Modules/CMakeCompilerABI.h +index f2714b4..ad481d6 100644 +--- a/Modules/CMakeCompilerABI.h ++++ b/Modules/CMakeCompilerABI.h +@@ -25,6 +25,10 @@ const char info_sizeof_dptr[] = { + #elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEL__) + #define ABI_ID "ELF ARM" + ++#elif defined(__linux__) && defined(__ELF__) && defined(__amd64__) && \ ++ defined(__ILP32__) ++#define ABI_ID "ELF X32" ++ + #elif defined(__ELF__) + #define ABI_ID "ELF" + #endif +diff --git a/Modules/FindPkgConfig.cmake b/Modules/FindPkgConfig.cmake +index a69081f..54572f0 100644 +--- a/Modules/FindPkgConfig.cmake ++++ b/Modules/FindPkgConfig.cmake +@@ -312,6 +312,10 @@ macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cma + if(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8) + list(APPEND _lib_dirs "lib64/pkgconfig") + endif() ++ get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS) ++ if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32") ++ list(APPEND _lib_dirs "libx32/pkgconfig") ++ endif() + endif() + endif() + list(APPEND _lib_dirs "lib/pkgconfig") +diff --git a/Modules/Platform/UnixPaths.cmake b/Modules/Platform/UnixPaths.cmake +index b216d03..c1d2c03 100644 +--- a/Modules/Platform/UnixPaths.cmake ++++ b/Modules/Platform/UnixPaths.cmake +@@ -86,3 +86,4 @@ list(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES + # Enable use of lib32 and lib64 search path variants by default. + set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS TRUE) + set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE) ++set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS TRUE) +diff --git a/Source/cmExportInstallFileGenerator.cxx b/Source/cmExportInstallFileGenerator.cxx +index 64ea3c8..3b76a87 100644 +--- a/Source/cmExportInstallFileGenerator.cxx ++++ b/Source/cmExportInstallFileGenerator.cxx +@@ -195,8 +195,10 @@ void cmExportInstallFileGenerator::GenerateImportPrefix(std::ostream& os) + << " \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\n"; + if (cmHasLiteralPrefix(absDestS.c_str(), "/lib/") || + cmHasLiteralPrefix(absDestS.c_str(), "/lib64/") || ++ cmHasLiteralPrefix(absDestS.c_str(), "/libx32/") || + cmHasLiteralPrefix(absDestS.c_str(), "/usr/lib/") || +- cmHasLiteralPrefix(absDestS.c_str(), "/usr/lib64/")) { ++ cmHasLiteralPrefix(absDestS.c_str(), "/usr/lib64/") || ++ cmHasLiteralPrefix(absDestS.c_str(), "/usr/libx32/")) { + // Handle "/usr move" symlinks created by some Linux distros. + /* clang-format off */ + os << +diff --git a/Source/cmFindLibraryCommand.cxx b/Source/cmFindLibraryCommand.cxx +index 69f9078..e92d672 100644 +--- a/Source/cmFindLibraryCommand.cxx ++++ b/Source/cmFindLibraryCommand.cxx +@@ -43,7 +43,8 @@ bool cmFindLibraryCommand::InitialPass(std::vector const& argsIn, + return true; + } + +- // add custom lib paths instead of using fixed lib32 or lib64 ++ // add custom lib paths instead of using fixed lib32, lib64 or ++ // libx32 + if (const char* customLib = this->Makefile->GetDefinition( + "CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX")) { + this->AddArchitecturePaths(customLib); +@@ -60,6 +61,12 @@ bool cmFindLibraryCommand::InitialPass(std::vector const& argsIn, + "FIND_LIBRARY_USE_LIB64_PATHS")) { + this->AddArchitecturePaths("64"); + } ++ // add special 32 bit paths if this is an x32 compile. ++ else if (this->Makefile->PlatformIsx32() && ++ this->Makefile->GetState()->GetGlobalPropertyAsBool( ++ "FIND_LIBRARY_USE_LIBX32_PATHS")) { ++ this->AddArchitecturePaths("x32"); ++ } + + std::string library = this->FindLibrary(); + if (library != "") { +diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx +index 60de74f..4b29837 100644 +--- a/Source/cmFindPackageCommand.cxx ++++ b/Source/cmFindPackageCommand.cxx +@@ -92,6 +92,7 @@ cmFindPackageCommand::cmFindPackageCommand() + this->DebugMode = false; + this->UseLib32Paths = false; + this->UseLib64Paths = false; ++ this->UseLibx32Paths = false; + this->PolicyScope = true; + this->VersionMajor = 0; + this->VersionMinor = 0; +@@ -173,6 +174,13 @@ bool cmFindPackageCommand::InitialPass(std::vector const& args, + this->UseLib64Paths = true; + } + ++ // Lookup whether libx32 paths should be used. ++ if (this->Makefile->PlatformIsx32() && ++ this->Makefile->GetState()->GetGlobalPropertyAsBool( ++ "FIND_LIBRARY_USE_LIBX32_PATHS")) { ++ this->UseLibx32Paths = true; ++ } ++ + // Check if User Package Registry should be disabled + if (this->Makefile->IsOn("CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY")) { + this->NoUserRegistry = true; +@@ -2002,6 +2010,9 @@ bool cmFindPackageCommand::SearchPrefix(std::string const& prefix_in) + if (this->UseLib64Paths) { + common.push_back("lib64"); + } ++ if (this->UseLibx32Paths) { ++ common.push_back("libx32"); ++ } + common.push_back("lib"); + common.push_back("share"); + +diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h +index d454892..61a8dd6 100644 +--- a/Source/cmFindPackageCommand.h ++++ b/Source/cmFindPackageCommand.h +@@ -169,6 +169,7 @@ private: + bool DebugMode; + bool UseLib32Paths; + bool UseLib64Paths; ++ bool UseLibx32Paths; + bool PolicyScope; + std::string LibraryArchitecture; + std::vector Names; +diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx +index c75d101..da32dd7 100644 +--- a/Source/cmMakefile.cxx ++++ b/Source/cmMakefile.cxx +@@ -2149,6 +2149,12 @@ bool cmMakefile::IsSet(const std::string& name) const + + bool cmMakefile::PlatformIs32Bit() const + { ++ if (const char* plat_abi = ++ this->GetDefinition("CMAKE_INTERNAL_PLATFORM_ABI")) { ++ if (strcmp(plat_abi, "ELF X32") == 0) { ++ return false; ++ } ++ } + if (const char* sizeof_dptr = this->GetDefinition("CMAKE_SIZEOF_VOID_P")) { + return atoi(sizeof_dptr) == 4; + } +@@ -2163,6 +2169,17 @@ bool cmMakefile::PlatformIs64Bit() const + return false; + } + ++bool cmMakefile::PlatformIsx32() const ++{ ++ if (const char* plat_abi = ++ this->GetDefinition("CMAKE_INTERNAL_PLATFORM_ABI")) { ++ if (strcmp(plat_abi, "ELF X32") == 0) { ++ return true; ++ } ++ } ++ return false; ++} ++ + bool cmMakefile::PlatformIsAppleIos() const + { + std::string sdkRoot; +diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h +index 4d5ce98..4e48c88 100644 +--- a/Source/cmMakefile.h ++++ b/Source/cmMakefile.h +@@ -436,6 +436,8 @@ public: + + /** Return whether the target platform is 64-bit. */ + bool PlatformIs64Bit() const; ++ /** Return whether the target platform is x32. */ ++ bool PlatformIsx32() const; + + /** Return whether the target platform is Apple iOS. */ + bool PlatformIsAppleIos() const; +-- +2.10.2 + + +From bed9c73decfcda0366984d990045e588928440ec Mon Sep 17 00:00:00 2001 +From: Steven Newbury +Date: Mon, 27 Feb 2017 21:17:28 +0000 +Subject: [PATCH 2/4] Modules: Add x32-abi support to hard-coded paths + +Update hard-coded library paths in bundled CMake Modules for libx32 as +used with x32-abi. +--- + Modules/CPackRPM.cmake | 2 +- + Modules/FindDevIL.cmake | 6 +++--- + Modules/FindGLEW.cmake | 2 +- + Modules/FindGTK2.cmake | 2 ++ + Modules/FindIce.cmake | 2 +- + Modules/FindKDE3.cmake | 2 ++ + Modules/FindOpenAL.cmake | 2 +- + Modules/GetPrerequisites.cmake | 2 +- + 8 files changed, 12 insertions(+), 8 deletions(-) + +diff --git a/Modules/CPackRPM.cmake b/Modules/CPackRPM.cmake +index 722ee15..b32feb5 100644 +--- a/Modules/CPackRPM.cmake ++++ b/Modules/CPackRPM.cmake +@@ -1044,7 +1044,7 @@ function(cpack_rpm_prepare_content_list) + endif() + + if(NOT DEFINED CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST) +- set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST /etc /etc/init.d /usr /usr/share /usr/share/doc /usr/bin /usr/lib /usr/lib64 /usr/include) ++ set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST /etc /etc/init.d /usr /usr/share /usr/share/doc /usr/bin /usr/lib /usr/lib64 /usr/libx32 /usr/include) + if(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION) + if(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: Adding ${CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION} to builtin omit list.") +diff --git a/Modules/FindDevIL.cmake b/Modules/FindDevIL.cmake +index 45fab82..4b868a2 100644 +--- a/Modules/FindDevIL.cmake ++++ b/Modules/FindDevIL.cmake +@@ -45,7 +45,7 @@ find_path(IL_INCLUDE_DIR il.h + + find_library(IL_LIBRARIES + NAMES IL DEVIL +- PATH_SUFFIXES lib64 lib lib32 ++ PATH_SUFFIXES libx32 lib64 lib lib32 + DOC "The file that corresponds to the base il library." + ) + +@@ -53,7 +53,7 @@ find_library(IL_LIBRARIES + + find_library(ILUT_LIBRARIES + NAMES ILUT +- PATH_SUFFIXES lib64 lib lib32 ++ PATH_SUFFIXES libx32 lib64 lib lib32 + DOC "The file that corresponds to the il (system?) utility library." + ) + +@@ -61,7 +61,7 @@ find_library(ILUT_LIBRARIES + + find_library(ILU_LIBRARIES + NAMES ILU +- PATH_SUFFIXES lib64 lib lib32 ++ PATH_SUFFIXES libx32 lib64 lib lib32 + DOC "The file that corresponds to the il utility library." + ) + +diff --git a/Modules/FindGLEW.cmake b/Modules/FindGLEW.cmake +index d8609e6..11e8724 100644 +--- a/Modules/FindGLEW.cmake ++++ b/Modules/FindGLEW.cmake +@@ -27,7 +27,7 @@ + find_path(GLEW_INCLUDE_DIR GL/glew.h) + + if(NOT GLEW_LIBRARY) +- find_library(GLEW_LIBRARY_RELEASE NAMES GLEW glew32 glew glew32s PATH_SUFFIXES lib64) ++ find_library(GLEW_LIBRARY_RELEASE NAMES GLEW glew32 glew glew32s PATH_SUFFIXES lib64 libx32) + find_library(GLEW_LIBRARY_DEBUG NAMES GLEWd glew32d glewd PATH_SUFFIXES lib64) + + include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) +diff --git a/Modules/FindGTK2.cmake b/Modules/FindGTK2.cmake +index 20d7924..2eca5f9 100644 +--- a/Modules/FindGTK2.cmake ++++ b/Modules/FindGTK2.cmake +@@ -292,8 +292,10 @@ function(_GTK2_FIND_INCLUDE_DIR _var _hdr) + find_path(GTK2_${_var}_INCLUDE_DIR ${_hdr} + PATHS + ${_gtk2_arch_dir} ++ /usr/local/libx32 + /usr/local/lib64 + /usr/local/lib ++ /usr/libx32 + /usr/lib64 + /usr/lib + /usr/X11R6/include +diff --git a/Modules/FindIce.cmake b/Modules/FindIce.cmake +index a61d4a8..e0286ee 100644 +--- a/Modules/FindIce.cmake ++++ b/Modules/FindIce.cmake +@@ -198,7 +198,7 @@ function(_Ice_FIND) + endif() + # Generic 64-bit and 32-bit directories + list(APPEND ice_binary_suffixes "bin${_x64}" "bin") +- list(APPEND ice_library_suffixes "${_lib64}" "lib${_x64}" "lib") ++ list(APPEND ice_library_suffixes "libx32" "${_lib64}" "lib${_x64}" "lib") + list(APPEND ice_include_suffixes "include") + list(APPEND ice_slice_suffixes "slice") + +diff --git a/Modules/FindKDE3.cmake b/Modules/FindKDE3.cmake +index 62e2a50..03216a5 100644 +--- a/Modules/FindKDE3.cmake ++++ b/Modules/FindKDE3.cmake +@@ -221,6 +221,8 @@ get_filename_component(KDE3_LIB_DIR ${KDE3_KDECORE_LIBRARY} PATH ) + if(NOT KDE3_LIBTOOL_DIR) + if(KDE3_KDECORE_LIBRARY MATCHES lib64) + set(KDE3_LIBTOOL_DIR /lib64/kde3) ++ elseif(KDE3_KDECORE_LIBRARY MATCHES libx32) ++ set(KDE3_LIBTOOL_DIR /libx32/kde3) + else() + set(KDE3_LIBTOOL_DIR /lib/kde3) + endif() +diff --git a/Modules/FindOpenAL.cmake b/Modules/FindOpenAL.cmake +index 8622b4c..c3d202e 100644 +--- a/Modules/FindOpenAL.cmake ++++ b/Modules/FindOpenAL.cmake +@@ -79,7 +79,7 @@ find_library(OPENAL_LIBRARY + NAMES OpenAL al openal OpenAL32 + HINTS + ENV OPENALDIR +- PATH_SUFFIXES lib64 lib libs64 libs ${_OpenAL_ARCH_DIR} ++ PATH_SUFFIXES libx32 lib64 lib libs64 libs ${_OpenAL_ARCH_DIR} + PATHS + ~/Library/Frameworks + /Library/Frameworks +diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake +index 417af7c..a3b97ab 100644 +--- a/Modules/GetPrerequisites.cmake ++++ b/Modules/GetPrerequisites.cmake +@@ -521,7 +521,7 @@ function(gp_resolved_file_type original_file file exepath dirs type_var) + string(TOLOWER "${resolved_file}" lower) + + if(UNIX) +- if(resolved_file MATCHES "^(/lib/|/lib32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/lib64/|/usr/X11R6/|/usr/bin/)") ++ if(resolved_file MATCHES "^(/lib/|/lib32/|/libx32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/libx32/|/usr/lib64/|/usr/X11R6/|/usr/bin/)") + set(is_system 1) + endif() + endif() +-- +2.10.2 + + +From 5b6d354f70e1faddb006a7c98479f5d655a07b87 Mon Sep 17 00:00:00 2001 +From: Brad King +Date: Mon, 6 Mar 2017 11:15:00 -0500 +Subject: [PATCH 3/4] Help: Add notes for topic 'x32-abi' + +--- + Help/release/dev/x32-abi.rst | 6 ++++++ + 1 file changed, 6 insertions(+) + create mode 100644 Help/release/dev/x32-abi.rst + +diff --git a/Help/release/dev/x32-abi.rst b/Help/release/dev/x32-abi.rst +new file mode 100644 +index 0000000..7571fac +--- /dev/null ++++ b/Help/release/dev/x32-abi.rst +@@ -0,0 +1,6 @@ ++x32-abi ++------- ++ ++* The :command:`find_library` command learned to search ``libx32`` paths ++ when the build targets the ``x32`` ABI. See the ++ :prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS` global property. +-- +2.10.2 + + +From d9bdcf34efa79dcdea4ded8e90b80a55db69fbf6 Mon Sep 17 00:00:00 2001 +From: Steven Newbury +Date: Wed, 8 Mar 2017 17:13:29 +0000 +Subject: [PATCH 4/4] Tests: Add x32 tests to test suite + +--- + Tests/CMakeOnly/find_library/CMakeLists.txt | 16 ++++++++++++++++ + Tests/CMakeOnly/find_library/lib/A/libx32/libtest3.a | 0 + Tests/CMakeOnly/find_library/lib/x32/libtest2.a | 0 + Tests/CMakeOnly/find_library/libx32/A/lib/libtest2.a | 0 + Tests/CMakeOnly/find_library/libx32/A/libtest1.a | 0 + Tests/CMakeOnly/find_library/libx32/A/libx32/libtest1.a | 0 + Tests/CMakeOnly/find_library/libx32/libtest1.a | 0 + .../FindPkgConfig_CMAKE_APPBUNDLE_PATH.cmake | 5 ++++- + .../FindPkgConfig_CMAKE_FRAMEWORK_PATH.cmake | 5 ++++- + .../FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH.cmake | 5 ++++- + ...Config_PKGCONFIG_PATH_NO_CMAKE_ENVIRONMENT_PATH.cmake | 5 ++++- + .../FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_PATH.cmake | 5 ++++- + .../FindPkgConfig/pc-bar/libx32/pkgconfig/.placeholder | 0 + .../FindPkgConfig/pc-foo/libx32/pkgconfig/.placeholder | 0 + 14 files changed, 36 insertions(+), 5 deletions(-) + create mode 100644 Tests/CMakeOnly/find_library/lib/A/libx32/libtest3.a + create mode 100644 Tests/CMakeOnly/find_library/lib/x32/libtest2.a + create mode 100644 Tests/CMakeOnly/find_library/libx32/A/lib/libtest2.a + create mode 100644 Tests/CMakeOnly/find_library/libx32/A/libtest1.a + create mode 100644 Tests/CMakeOnly/find_library/libx32/A/libx32/libtest1.a + create mode 100644 Tests/CMakeOnly/find_library/libx32/libtest1.a + create mode 100644 Tests/RunCMake/FindPkgConfig/pc-bar/libx32/pkgconfig/.placeholder + create mode 100644 Tests/RunCMake/FindPkgConfig/pc-foo/libx32/pkgconfig/.placeholder + +diff --git a/Tests/CMakeOnly/find_library/CMakeLists.txt b/Tests/CMakeOnly/find_library/CMakeLists.txt +index 9c1aad8..749cf42 100644 +--- a/Tests/CMakeOnly/find_library/CMakeLists.txt ++++ b/Tests/CMakeOnly/find_library/CMakeLists.txt +@@ -33,9 +33,11 @@ endmacro() + + set(CMAKE_FIND_LIBRARY_PREFIXES "lib") + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") ++set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS TRUE) + set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS TRUE) + set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE) + ++set(CMAKE_INTERNAL_PLATFORM_ABI "ELF") + set(CMAKE_SIZEOF_VOID_P 4) + foreach(lib + lib/32/libtest5.a +@@ -67,6 +69,20 @@ foreach(lib64 + test_find_library_subst(${lib64}) + endforeach() + ++set(CMAKE_INTERNAL_PLATFORM_ABI "ELF X32") ++set(CMAKE_SIZEOF_VOID_P 4) ++foreach(libx32 ++ lib/x32/libtest2.a ++ lib/A/libx32/libtest3.a ++ lib/libtest3.a ++ libx32/A/lib/libtest2.a ++ libx32/A/libx32/libtest1.a ++ libx32/A/libtest1.a ++ libx32/libtest1.a ++ ) ++ test_find_library_subst(${libx32}) ++endforeach() ++ + test_find_library("" A/libtestA.a + NAMES testA testB + PATHS ${CMAKE_CURRENT_SOURCE_DIR}/A ${CMAKE_CURRENT_SOURCE_DIR}/B +diff --git a/Tests/CMakeOnly/find_library/lib/A/libx32/libtest3.a b/Tests/CMakeOnly/find_library/lib/A/libx32/libtest3.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/CMakeOnly/find_library/lib/x32/libtest2.a b/Tests/CMakeOnly/find_library/lib/x32/libtest2.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/CMakeOnly/find_library/libx32/A/lib/libtest2.a b/Tests/CMakeOnly/find_library/libx32/A/lib/libtest2.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/CMakeOnly/find_library/libx32/A/libtest1.a b/Tests/CMakeOnly/find_library/libx32/A/libtest1.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/CMakeOnly/find_library/libx32/A/libx32/libtest1.a b/Tests/CMakeOnly/find_library/libx32/A/libx32/libtest1.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/CMakeOnly/find_library/libx32/libtest1.a b/Tests/CMakeOnly/find_library/libx32/libtest1.a +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_CMAKE_APPBUNDLE_PATH.cmake b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_CMAKE_APPBUNDLE_PATH.cmake +index 4a41533..2687efe 100644 +--- a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_CMAKE_APPBUNDLE_PATH.cmake ++++ b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_CMAKE_APPBUNDLE_PATH.cmake +@@ -30,9 +30,12 @@ if(NOT DEFINED CMAKE_SYSTEM_NAME + endif() + else() + # not debian, check the FIND_LIBRARY_USE_LIB32_PATHS and FIND_LIBRARY_USE_LIB64_PATHS properties ++ get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS) + get_property(uselib32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS) + get_property(uselib64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS) +- if(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) ++ if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32") ++ set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/libx32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/libx32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") ++ elseif(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) + set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") + elseif(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8) + set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib64/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib64/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") +diff --git a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_CMAKE_FRAMEWORK_PATH.cmake b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_CMAKE_FRAMEWORK_PATH.cmake +index b66d02f..74cda25 100644 +--- a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_CMAKE_FRAMEWORK_PATH.cmake ++++ b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_CMAKE_FRAMEWORK_PATH.cmake +@@ -30,9 +30,12 @@ if(NOT DEFINED CMAKE_SYSTEM_NAME + endif() + else() + # not debian, check the FIND_LIBRARY_USE_LIB64_PATHS and FIND_LIBRARY_USE_LIB64_PATHS properties ++ get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS) + get_property(uselib32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS) + get_property(uselib64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS) +- if(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) ++ if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32") ++ set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/libx32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/libx32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") ++ elseif(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) + set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") + elseif(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8) + set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib64/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib64/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") +diff --git a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH.cmake b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH.cmake +index bdecb8a..1defde8 100644 +--- a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH.cmake ++++ b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH.cmake +@@ -30,9 +30,12 @@ if(NOT DEFINED CMAKE_SYSTEM_NAME + endif() + else() + # not debian, check the FIND_LIBRARY_USE_LIB32_PATHS and FIND_LIBRARY_USE_LIB64_PATHS propertie ++ get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS) + get_property(uselib32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS) + get_property(uselib64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS) +- if(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) ++ if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32") ++ set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/libx32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/libx32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") ++ elseif(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) + set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") + elseif(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8) + set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib64/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib64/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") +diff --git a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_ENVIRONMENT_PATH.cmake b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_ENVIRONMENT_PATH.cmake +index df67235..166a617 100644 +--- a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_ENVIRONMENT_PATH.cmake ++++ b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_ENVIRONMENT_PATH.cmake +@@ -30,9 +30,12 @@ if(NOT DEFINED CMAKE_SYSTEM_NAME + endif() + else() + # not debian, check the FIND_LIBRARY_USE_LIB32_PATHS and FIND_LIBRARY_USE_LIB64_PATHS properties ++ get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS) + get_property(uselib32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS) + get_property(uselib64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS) +- if(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) ++ if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32") ++ set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/libx32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig") ++ elseif(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) + set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig") + elseif(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8) + set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib64/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-foo/lib/pkgconfig") +diff --git a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_PATH.cmake b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_PATH.cmake +index 1351b6f..e4673b3 100644 +--- a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_PATH.cmake ++++ b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_PKGCONFIG_PATH_NO_CMAKE_PATH.cmake +@@ -30,9 +30,12 @@ if(NOT DEFINED CMAKE_SYSTEM_NAME + endif() + else() + # not debian, check the FIND_LIBRARY_USE_LIB64_PATHS and FIND_LIBRARY_USE_LIB32_PATHS properties ++ get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS) + get_property(uselib32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS) + get_property(uselib64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS) +- if(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) ++ if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32") ++ set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/libx32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") ++ elseif(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) + set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib32/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") + elseif(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8) + set(expected_path "/baz:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib64/pkgconfig:${CMAKE_CURRENT_SOURCE_DIR}/pc-bar/lib/pkgconfig") +diff --git a/Tests/RunCMake/FindPkgConfig/pc-bar/libx32/pkgconfig/.placeholder b/Tests/RunCMake/FindPkgConfig/pc-bar/libx32/pkgconfig/.placeholder +new file mode 100644 +index 0000000..e69de29 +diff --git a/Tests/RunCMake/FindPkgConfig/pc-foo/libx32/pkgconfig/.placeholder b/Tests/RunCMake/FindPkgConfig/pc-foo/libx32/pkgconfig/.placeholder +new file mode 100644 +index 0000000..e69de29 +-- +2.10.2 + -- cgit v1.2.3-65-gdbad