commit:     755299aaafbf5b1dd243ab371375f742699fcceb
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 12 17:00:40 2020 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Sat Dec 12 17:58:23 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=755299aa

dev-util/cmake: Fix spurious include target

Reported-by: Attila Tóth <atoth <AT> atoth.sote.hu>
Closes: https://bugs.gentoo.org/759271
Package-Manager: Portage-3.0.12, Repoman-3.0.2
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 dev-util/cmake/cmake-3.19.1-r1.ebuild              | 225 +++++++++++++++++++++
 .../cmake-3.19.1-fix-spurious-include-target.patch | 198 ++++++++++++++++++
 2 files changed, 423 insertions(+)

diff --git a/dev-util/cmake/cmake-3.19.1-r1.ebuild 
b/dev-util/cmake/cmake-3.19.1-r1.ebuild
new file mode 100644
index 00000000000..97f173f95a8
--- /dev/null
+++ b/dev-util/cmake/cmake-3.19.1-r1.ebuild
@@ -0,0 +1,225 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+CMAKE_MAKEFILE_GENERATOR="emake" # TODO: Re-check with 3.19, see commit 
491dddfb; bug #596460
+CMAKE_REMOVE_MODULES_LIST=( none )
+inherit bash-completion-r1 cmake elisp-common flag-o-matic multiprocessing \
+       toolchain-funcs virtualx xdg-utils
+
+MY_P="${P/_/-}"
+
+DESCRIPTION="Cross platform Make"
+HOMEPAGE="https://cmake.org/";
+SRC_URI="https://cmake.org/files/v$(ver_cut 1-2)/${MY_P}.tar.gz"
+
+LICENSE="CMake"
+SLOT="0"
+[[ "${PV}" = *_rc* ]] || \
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv 
~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos 
~sparc-solaris ~x64-solaris ~x86-solaris"
+IUSE="doc emacs ncurses qt5 test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+       >=app-arch/libarchive-3.3.3:=
+       app-crypt/rhash
+       >=dev-libs/expat-2.0.1
+       >=dev-libs/jsoncpp-1.9.2-r2:0=
+       >=dev-libs/libuv-1.10.0:=
+       >=net-misc/curl-7.21.5[ssl]
+       sys-libs/zlib
+       virtual/pkgconfig
+       emacs? ( >=app-editors/emacs-23.1:* )
+       ncurses? ( sys-libs/ncurses:0= )
+       qt5? (
+               dev-qt/qtcore:5
+               dev-qt/qtgui:5
+               dev-qt/qtwidgets:5
+       )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+       doc? (
+               dev-python/requests
+               dev-python/sphinx
+       )
+"
+
+S="${WORKDIR}/${MY_P}"
+
+SITEFILE="50${PN}-gentoo.el"
+
+PATCHES=(
+       # prefix
+       "${FILESDIR}"/${PN}-3.16.0_rc4-darwin-bundle.patch
+       "${FILESDIR}"/${PN}-3.14.0_rc3-prefix-dirs.patch
+       "${FILESDIR}"/${PN}-3.19.1-darwin-gcc.patch
+
+       # handle gentoo packaging in find modules
+       "${FILESDIR}"/${PN}-3.17.0_rc1-FindBLAS.patch
+       # Next patch needs to be reworked
+       #"${FILESDIR}"/${PN}-3.17.0_rc1-FindLAPACK.patch
+       "${FILESDIR}"/${PN}-3.5.2-FindQt4.patch
+
+       # respect python eclasses
+       "${FILESDIR}"/${PN}-2.8.10.2-FindPythonLibs.patch
+       "${FILESDIR}"/${PN}-3.9.0_rc2-FindPythonInterp.patch
+
+       "${FILESDIR}"/${PN}-3.18.0-filter_distcc_warning.patch # bug 691544
+
+       # upstream fixes (can usually be removed with a version bump)
+       "${FILESDIR}"/${P}-fix-spurious-include-target.patch # bug 759271
+)
+
+cmake_src_bootstrap() {
+       # disable running of cmake in bootstrap 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
+
+       # bootstrap script isn't exactly /bin/sh compatible
+       tc-env_build ${CONFIG_SHELL:-sh} ./bootstrap \
+               --prefix="${T}/cmakestrap/" \
+               --parallel=$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)") \
+               || die "Bootstrap failed"
+}
+
+cmake_src_test() {
+       # fix OutDir and SelectLibraryConfigurations tests
+       # these are altered thanks to our eclass
+       sed -i -e 's:^#_cmake_modify_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 actually bootstrap it every time so why test it.
+       #    BundleUtilities: bundle creation broken
+       #    CMakeOnly.AllFindModules: pthread issues
+       #    CTest.updatecvs: fails to commit as root
+       #    Fortran: requires fortran
+       #    RunCMake.CommandLineTar: whatever...
+       #    RunCMake.CompilerLauncher: also requires fortran
+       #    RunCMake.CPack_RPM: breaks if app-arch/rpm is installed because
+       #        debugedit binary is not in the expected location
+       #    RunCMake.CPack_DEB: breaks if app-arch/dpkg is installed because
+       #        it can't find a deb package that owns libc
+       #    RunCMake.{IncompatibleQt,ObsoleteQtMacros}: Require Qt4
+       #    TestUpload: requires network access
+       "${BUILD_DIR}"/bin/ctest \
+               -j "$(makeopts_jobs)" \
+               --test-load "$(makeopts_loadavg)" \
+               ${ctestargs} \
+               -E 
"(BootstrapTest|BundleUtilities|CMakeOnly.AllFindModules|CompileOptions|CTest.UpdateCVS|DependencyGraph|Fortran|RunCMake.CommandLineTar|RunCMake.CompilerLauncher|RunCMake.IncompatibleQt|RunCMake.ObsoleteQtMacros|RunCMake.PrecompileHeaders|RunCMake.CPack_(DEB|RPM)|TestUpload)"
 \
+               || die "Tests failed"
+
+       popd > /dev/null
+}
+
+src_prepare() {
+       cmake_src_prepare
+
+       if [[ ${CHOST} == *-darwin* ]] ; then
+               # disable Xcode hooks, bug #652134
+               sed -i -e 's/__APPLE__/__DISABLED_APPLE__/' \
+                       Source/cmGlobalXCodeGenerator.cxx || die
+               # disable isysroot usage with GCC, we've properly instructed
+               # where things are via GCC configuration and ldwrapper
+               sed -i -e '/cmake_gnu_set_sysroot_flag/d' \
+                       Modules/Platform/Apple-GNU-*.cmake || die
+               # don't set a POSIX standard, system headers don't like that, 
#757426
+               sed -i -e 's/^#if !defined(_WIN32) && !defined(__sun)/& \&\& 
!defined(__APPLE__)/' \
+                       Source/cmLoadCommandCommand.cxx \
+                       Source/cmStandardLexer.h \
+                       Source/cmSystemTools.cxx \
+                       Source/cmTimestamp.cxx
+       fi
+
+       # Add gcc libs to the default link paths
+       sed -i \
+               -e 
"s|@GENTOO_PORTAGE_GCCLIBDIR@|${EPREFIX}/usr/${CHOST}/lib/|g" \
+               -e "$(usex prefix-guest "s|@GENTOO_HOST@||" 
"/@GENTOO_HOST@/d")" \
+               -e "s|@GENTOO_PORTAGE_EPREFIX@|${EPREFIX}/|g" \
+               Modules/Platform/{UnixPaths,Darwin}.cmake || die "sed failed"
+       if ! has_version -b \>=${CATEGORY}/${PN}-3.4.0_rc1 || ! cmake --version 
&>/dev/null ; 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_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)"
+               -DBUILD_TESTING=$(usex test)
+       )
+       use qt5 && mycmakeargs+=( -DBUILD_QtDialog=ON )
+
+       cmake_src_configure
+}
+
+src_compile() {
+       cmake_src_compile
+       use emacs && elisp-compile Auxiliary/cmake-mode.el
+}
+
+src_test() {
+       virtx cmake_src_test
+}
+
+src_install() {
+       cmake_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}
+}
+
+pkg_postinst() {
+       use emacs && elisp-site-regen
+       if use qt5; then
+               xdg_icon_cache_update
+               xdg_desktop_database_update
+               xdg_mimeinfo_database_update
+       fi
+}
+
+pkg_postrm() {
+       use emacs && elisp-site-regen
+       if use qt5; then
+               xdg_icon_cache_update
+               xdg_desktop_database_update
+               xdg_mimeinfo_database_update
+       fi
+}

diff --git 
a/dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch 
b/dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch
new file mode 100644
index 00000000000..1b51cf013fe
--- /dev/null
+++ b/dev-util/cmake/files/cmake-3.19.1-fix-spurious-include-target.patch
@@ -0,0 +1,198 @@
+From 38bcb5c0a3accd2dd29fb7632c6b3bf31b990d82 Mon Sep 17 00:00:00 2001
+From: Deniz Bahadir <[email protected]>
+Date: Tue, 1 Dec 2020 00:25:39 +0100
+Subject: [PATCH] export: Do not fail generation for separate namelink only
+ case
+
+Update the change from commit 64690f6df0 (export: Do not fail generation
+for namelink-only case, 2020-10-09, v3.19.0-rc1~7^2) to also handle
+separate namelink-only and namelink-skip calls.
+
+Fixes: #21529
+---
+ Source/cmExportBuildFileGenerator.cxx         |  3 +++
+ Source/cmExportInstallFileGenerator.cxx       |  3 +++
+ Source/cmInstallCommand.cxx                   | 19 +++++++++++--------
+ Source/cmTargetExport.h                       |  2 ++
+ Tests/RunCMake/export/RunCMakeTest.cmake      |  1 +
+ .../export/SeparateNamelinkExport.cmake       | 16 ++++++++++++++++
+ .../install/EXPORT-SeparateNamelink.cmake     | 19 +++++++++++++++++++
+ Tests/RunCMake/install/RunCMakeTest.cmake     |  1 +
+ 8 files changed, 56 insertions(+), 8 deletions(-)
+ create mode 100644 Tests/RunCMake/export/SeparateNamelinkExport.cmake
+ create mode 100644 Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake
+
+diff --git a/Source/cmExportBuildFileGenerator.cxx 
b/Source/cmExportBuildFileGenerator.cxx
+index dd700c5edf..1a31ae4afd 100644
+--- a/Source/cmExportBuildFileGenerator.cxx
++++ b/Source/cmExportBuildFileGenerator.cxx
+@@ -288,6 +288,9 @@ void cmExportBuildFileGenerator::GetTargets(
+   if (this->ExportSet) {
+     for (std::unique_ptr<cmTargetExport> const& te :
+          this->ExportSet->GetTargetExports()) {
++      if (te->NamelinkOnly) {
++        continue;
++      }
+       targets.push_back(te->TargetName);
+     }
+     return;
+diff --git a/Source/cmExportInstallFileGenerator.cxx 
b/Source/cmExportInstallFileGenerator.cxx
+index 987ec9ea7b..0b9b183d54 100644
+--- a/Source/cmExportInstallFileGenerator.cxx
++++ b/Source/cmExportInstallFileGenerator.cxx
+@@ -42,6 +42,9 @@ bool 
cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
+     std::string sep;
+     for (std::unique_ptr<cmTargetExport> const& te :
+          this->IEGen->GetExportSet()->GetTargetExports()) {
++      if (te->NamelinkOnly) {
++        continue;
++      }
+       expectedTargets += sep + this->Namespace + te->Target->GetExportName();
+       sep = " ";
+       if (this->ExportedTargets.insert(te->Target).second) {
+diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
+index b99e6a3c6c..ff08ee41ef 100644
+--- a/Source/cmInstallCommand.cxx
++++ b/Source/cmInstallCommand.cxx
+@@ -461,6 +461,13 @@ bool HandleTargetsMode(std::vector<std::string> const& 
args,
+     std::unique_ptr<cmInstallFilesGenerator> publicHeaderGenerator;
+     std::unique_ptr<cmInstallFilesGenerator> resourceGenerator;
+ 
++    // Avoid selecting default destinations for PUBLIC_HEADER and
++    // PRIVATE_HEADER if any artifacts are specified.
++    bool artifactsSpecified = false;
++
++    // Track whether this is a namelink-only rule.
++    bool namelinkOnly = false;
++
+     auto addTargetExport = [&]() {
+       // Add this install rule to an export if one was specified.
+       if (!exports.empty()) {
+@@ -475,20 +482,13 @@ bool HandleTargetsMode(std::vector<std::string> const& 
args,
+         te->ObjectsGenerator = objectGenerator.get();
+         te->InterfaceIncludeDirectories =
+           cmJoin(includesArgs.GetIncludeDirs(), ";");
+-
++        te->NamelinkOnly = namelinkOnly;
+         helper.Makefile->GetGlobalGenerator()
+           ->GetExportSets()[exports]
+           .AddTargetExport(std::move(te));
+       }
+     };
+ 
+-    // Avoid selecting default destinations for PUBLIC_HEADER and
+-    // PRIVATE_HEADER if any artifacts are specified.
+-    bool artifactsSpecified = false;
+-
+-    // Track whether this is a namelink-only rule.
+-    bool namelinkOnly = false;
+-
+     switch (target.GetType()) {
+       case cmStateEnums::SHARED_LIBRARY: {
+         // Shared libraries are handled differently on DLL and non-DLL
+@@ -497,6 +497,7 @@ bool HandleTargetsMode(std::vector<std::string> const& 
args,
+         if (target.IsDLLPlatform()) {
+           // When in namelink only mode skip all libraries on Windows.
+           if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
++            namelinkOnly = true;
+             addTargetExport();
+             continue;
+           }
+@@ -529,6 +530,7 @@ bool HandleTargetsMode(std::vector<std::string> const& 
args,
+           if (target.IsFrameworkOnApple()) {
+             // When in namelink only mode skip frameworks.
+             if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
++              namelinkOnly = true;
+               addTargetExport();
+               continue;
+             }
+@@ -574,6 +576,7 @@ bool HandleTargetsMode(std::vector<std::string> const& 
args,
+         if (target.IsFrameworkOnApple()) {
+           // When in namelink only mode skip frameworks.
+           if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
++            namelinkOnly = true;
+             addTargetExport();
+             continue;
+           }
+diff --git a/Source/cmTargetExport.h b/Source/cmTargetExport.h
+index cb4d8dae44..1e38d84923 100644
+--- a/Source/cmTargetExport.h
++++ b/Source/cmTargetExport.h
+@@ -31,4 +31,6 @@ public:
+   cmInstallFilesGenerator* HeaderGenerator;
+   std::string InterfaceIncludeDirectories;
+   ///@}
++
++  bool NamelinkOnly = false;
+ };
+diff --git a/Tests/RunCMake/export/RunCMakeTest.cmake 
b/Tests/RunCMake/export/RunCMakeTest.cmake
+index 95c8d5cf45..0e6020f0f4 100644
+--- a/Tests/RunCMake/export/RunCMakeTest.cmake
++++ b/Tests/RunCMake/export/RunCMakeTest.cmake
+@@ -17,3 +17,4 @@ run_cmake(DependOnNotExport)
+ run_cmake(DependOnDoubleExport)
+ run_cmake(UnknownExport)
+ run_cmake(NamelinkOnlyExport)
++run_cmake(SeparateNamelinkExport)
+diff --git a/Tests/RunCMake/export/SeparateNamelinkExport.cmake 
b/Tests/RunCMake/export/SeparateNamelinkExport.cmake
+new file mode 100644
+index 0000000000..b006aea128
+--- /dev/null
++++ b/Tests/RunCMake/export/SeparateNamelinkExport.cmake
+@@ -0,0 +1,16 @@
++enable_language(CXX)
++add_library(foo SHARED empty.cpp)
++install(TARGETS foo EXPORT fooExport
++  RUNTIME DESTINATION bin
++  LIBRARY
++     DESTINATION lib
++     COMPONENT runtime
++     NAMELINK_SKIP
++)
++install(TARGETS foo EXPORT fooExport
++  LIBRARY
++     DESTINATION lib
++     COMPONENT development
++     NAMELINK_ONLY
++)
++export(EXPORT fooExport FILE "${CMAKE_CURRENT_BINARY_DIR}/foo.cmake")
+diff --git a/Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake 
b/Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake
+new file mode 100644
+index 0000000000..5c6fa10d18
+--- /dev/null
++++ b/Tests/RunCMake/install/EXPORT-SeparateNamelink.cmake
+@@ -0,0 +1,19 @@
++enable_language(C)
++add_library(foo SHARED empty.c)
++install(TARGETS foo EXPORT fooExport
++  RUNTIME DESTINATION bin
++  LIBRARY
++     DESTINATION lib
++     COMPONENT runtime
++     NAMELINK_SKIP
++)
++install(TARGETS foo EXPORT fooExport
++  LIBRARY
++     DESTINATION lib
++     COMPONENT development
++     NAMELINK_ONLY
++)
++install(EXPORT fooExport
++    DESTINATION "lib/cmake/"
++    FILE "foo.cmake"
++)
+diff --git a/Tests/RunCMake/install/RunCMakeTest.cmake 
b/Tests/RunCMake/install/RunCMakeTest.cmake
+index 5aab88ca80..d64d88b770 100644
+--- a/Tests/RunCMake/install/RunCMakeTest.cmake
++++ b/Tests/RunCMake/install/RunCMakeTest.cmake
+@@ -78,6 +78,7 @@ run_cmake(TARGETS-DESTINATION-bad)
+ run_cmake(EXPORT-OldIFace)
+ run_cmake(EXPORT-UnknownExport)
+ run_cmake(EXPORT-NamelinkOnly)
++run_cmake(EXPORT-SeparateNamelink)
+ run_cmake(CMP0062-OLD)
+ run_cmake(CMP0062-NEW)
+ run_cmake(CMP0062-WARN)
+-- 
+GitLab
+

Reply via email to