Imported Upstream version 3.23.3 upstream/3.23.3
authorJinWang An <jinwang.an@samsung.com>
Tue, 27 Dec 2022 08:20:16 +0000 (17:20 +0900)
committerJinWang An <jinwang.an@samsung.com>
Tue, 27 Dec 2022 08:20:16 +0000 (17:20 +0900)
33 files changed:
Help/guide/tutorial/Adding System Introspection.rst
Help/guide/tutorial/Step6/MathFunctions/CMakeLists.txt
Help/guide/tutorial/Step6/MathFunctions/mysqrt.cxx
Help/release/3.21.rst
Help/release/3.22.rst
Help/release/3.23.rst
Modules/CMakeDetermineCompilerId.cmake
Modules/CompilerId/Xcode-3.pbxproj.in
Modules/ExternalProject.cmake
Modules/ExternalProject/mkdirs.cmake.in
Modules/FindLAPACK.cmake
Modules/Platform/Linux-LCC-Fortran.cmake
Source/CMakeVersion.cmake
Source/QtDialog/CMakeSetup.cxx
Source/cmExportSet.cxx
Source/cmExportSet.h
Source/cmGlobalGenerator.cxx
Source/cmInstallExportGenerator.cxx
Source/cmake.cxx
Tests/RunCMake/CommandLine/P_args-stdout.txt [new file with mode: 0644]
Tests/RunCMake/CommandLine/P_args.cmake [new file with mode: 0644]
Tests/RunCMake/CommandLine/RunCMakeTest.cmake
Tests/RunCMake/RunCMake.cmake
Tests/RunCMake/export/RunCMakeTest.cmake
Tests/RunCMake/export/TryCompileExport.cmake [new file with mode: 0644]
Tests/RunCMake/target_sources/FileSetExportMissingSetsInterfacePostExport-result.txt [new file with mode: 0644]
Tests/RunCMake/target_sources/FileSetExportMissingSetsInterfacePostExport-stderr.txt [new file with mode: 0644]
Tests/RunCMake/target_sources/FileSetExportMissingSetsInterfacePostExport.cmake [new file with mode: 0644]
Tests/RunCMake/target_sources/FileSetInstallMissingSetsInterfacePostInstall-result.txt [new file with mode: 0644]
Tests/RunCMake/target_sources/FileSetInstallMissingSetsInterfacePostInstall-stderr.txt [new file with mode: 0644]
Tests/RunCMake/target_sources/FileSetInstallMissingSetsInterfacePostInstall.cmake [new file with mode: 0644]
Tests/RunCMake/target_sources/RunCMakeTest.cmake
Utilities/Release/macos/sign-notarize.bash

index e149110..8db0cb8 100644 (file)
@@ -9,17 +9,15 @@ tutorial assume that they are not common.
 
 If the platform has ``log`` and ``exp`` then we will use them to compute the
 square root in the ``mysqrt`` function. We first test for the availability of
-these functions using the :module:`CheckSymbolExists` module in
-``MathFunctions/CMakeLists.txt``. On some platforms, we will need to link to
-the ``m`` library. If ``log`` and ``exp`` are not initially found, require the
-``m`` library and try again.
+these functions using the :module:`CheckCXXSourceCompiles` module in
+``MathFunctions/CMakeLists.txt``.
 
 Add the checks for ``log`` and ``exp`` to ``MathFunctions/CMakeLists.txt``,
 after the call to :command:`target_include_directories`:
 
 .. literalinclude:: Step6/MathFunctions/CMakeLists.txt
   :caption: MathFunctions/CMakeLists.txt
-  :name: MathFunctions/CMakeLists.txt-check_symbol_exists
+  :name: MathFunctions/CMakeLists.txt-check_cxx_source_compiles
   :language: cmake
   :start-after: # to find MathFunctions.h, while we don't.
   :end-before: # add compile definitions
index f64c6ac..42e098a 100644 (file)
@@ -7,19 +7,21 @@ target_include_directories(MathFunctions
           )
 
 # does this system provide the log and exp functions?
-include(CheckSymbolExists)
-check_symbol_exists(log "math.h" HAVE_LOG)
-check_symbol_exists(exp "math.h" HAVE_EXP)
-if(NOT (HAVE_LOG AND HAVE_EXP))
-  unset(HAVE_LOG CACHE)
-  unset(HAVE_EXP CACHE)
-  set(CMAKE_REQUIRED_LIBRARIES "m")
-  check_symbol_exists(log "math.h" HAVE_LOG)
-  check_symbol_exists(exp "math.h" HAVE_EXP)
-  if(HAVE_LOG AND HAVE_EXP)
-    target_link_libraries(MathFunctions PRIVATE m)
-  endif()
-endif()
+include(CheckCXXSourceCompiles)
+check_cxx_source_compiles("
+  #include <cmath>
+  int main() {
+    std::log(1.0);
+    return 0;
+  }
+" HAVE_LOG)
+check_cxx_source_compiles("
+  #include <cmath>
+  int main() {
+    std::exp(1.0);
+    return 0;
+  }
+" HAVE_EXP)
 
 # add compile definitions
 if(HAVE_LOG AND HAVE_EXP)
index 0637063..7eecd26 100644 (file)
@@ -12,7 +12,7 @@ double mysqrt(double x)
 
   // if we have both log and exp then use them
 #if defined(HAVE_LOG) && defined(HAVE_EXP)
-  double result = exp(log(x) * 0.5);
+  double result = std::exp(std::log(x) * 0.5);
   std::cout << "Computing sqrt of " << x << " to be " << result
             << " using log and exp" << std::endl;
 #else
index 847f82d..462d2be 100644 (file)
@@ -335,8 +335,8 @@ Changes made since CMake 3.21.0 include the following.
   "Visual Studio 2022" release candidates.  Previously it was based on
   preview versions.
 
-3.21.5, 3.21.6
---------------
+3.21.5, 3.21.6, 3.21.7
+----------------------
 
 These versions made no changes to documented features or interfaces.
 Some implementation updates were made to support ecosystem changes
index 00e93f6..eba5d66 100644 (file)
@@ -170,9 +170,9 @@ Changes made since CMake 3.22.0 include the following.
   compatibility.  The fix may be restored in a future version of CMake
   via a policy.
 
-3.22.4
-------
+3.22.4, 3.22.5, 3.22.6
+----------------------
 
-* This version made no changes to documented features or interfaces.
+* These versions made no changes to documented features or interfaces.
   Some implementation updates were made to support ecosystem changes
   and/or fix regressions.
index 47c4243..18fd83b 100644 (file)
@@ -309,3 +309,10 @@ Changes made since CMake 3.23.0 include the following.
   expected the ``CPACK_PACKAGEMAKER_CHOICES`` variable to be defined.
   The old ``CPACK_PACKAGEMAKER_CHOICES`` variable is now also set to the
   same content as it was before, but it is formally deprecated.
+
+3.23.3
+------
+
+* This version made no changes to documented features or interfaces.
+  Some implementation updates were made to support ecosystem changes
+  and/or fix regressions.
index 5670509..c2e0fa8 100644 (file)
@@ -617,6 +617,7 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
       endif()
     endif()
     if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_OSX_SYSROOT MATCHES "^$|[Mm][Aa][Cc][Oo][Ss]")
+      set(id_code_sign_identity "-")
       # When targeting macOS, use only the host architecture.
       if (_CMAKE_APPLE_ARCHS_DEFAULT)
         set(id_archs "ARCHS = \"${_CMAKE_APPLE_ARCHS_DEFAULT}\";")
@@ -626,6 +627,7 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
         set(id_arch_active "ONLY_ACTIVE_ARCH = YES;")
       endif()
     else()
+      set(id_code_sign_identity "")
       set(id_archs "")
       set(id_arch_active "ONLY_ACTIVE_ARCH = YES;")
     endif()
index aab357a..43e8cc8 100644 (file)
@@ -49,6 +49,7 @@
                };
                2C8FEB8E15DC1A1A00E56A5D = {
                        isa = PBXShellScriptBuildPhase;
+                       alwaysOutOfDate = 1;
                        buildActionMask = 2147483647;
                        files = (
                        );
@@ -72,7 +73,7 @@
                1DEB928608733DD80010E9CD = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               CODE_SIGN_IDENTITY = "";
+                               CODE_SIGN_IDENTITY = "@id_code_sign_identity@";
                                PRODUCT_NAME = CompilerId@id_lang@;
                        };
                        name = Debug;
index 7f16fdc..cb62c99 100644 (file)
@@ -1651,6 +1651,7 @@ function(_ep_set_directories name)
     ${script_filename}
     @ONLY
   )
+  unset(cfgdir) # do not leak into mkdirs.cmake script
   include(${script_filename})
 endfunction()
 
@@ -2419,11 +2420,12 @@ endfunction()
 function(_ep_add_mkdir_command name)
   ExternalProject_Get_Property(${name} tmp_dir)
   set(script_filename "${tmp_dir}/${name}-mkdirs.cmake")
+  _ep_get_configuration_subdir_suffix(cfgdir)
 
   ExternalProject_Add_Step(${name} mkdir
     INDEPENDENT TRUE
     COMMENT "Creating directories for '${name}'"
-    COMMAND ${CMAKE_COMMAND} -P ${script_filename}
+    COMMAND ${CMAKE_COMMAND} -Dcfgdir=${cfgdir} -P ${script_filename}
   )
 endfunction()
 
index d30a2e7..bb835cf 100644 (file)
@@ -17,3 +17,6 @@ set(configSubDirs @CMAKE_CONFIGURATION_TYPES@)
 foreach(subDir IN LISTS configSubDirs)
     file(MAKE_DIRECTORY "@stamp_dir@/${subDir}")
 endforeach()
+if(cfgdir)
+  file(MAKE_DIRECTORY "@stamp_dir@${cfgdir}") # cfgdir has leading slash
+endif()
index 5540965..91086a3 100644 (file)
@@ -663,6 +663,10 @@ if(NOT LAPACK_NOT_FOUND_MESSAGE)
     elseif(_lapack_sizeof_integer EQUAL 4)
       string(APPEND _lapack_nvhpc_lib "_lp64")
     endif()
+    set(_lapack_nvhpc_flags)
+    if(";${CMAKE_C_COMPILER_ID};${CMAKE_CXX_COMPILER_ID};${CMAKE_Fortran_COMPILER_ID};" MATCHES ";(NVHPC|PGI);")
+      set(_lapack_nvhpc_flags "-fortranlibs")
+    endif()
 
     check_lapack_libraries(
       LAPACK_LIBRARIES
@@ -670,7 +674,7 @@ if(NOT LAPACK_NOT_FOUND_MESSAGE)
       cheev
       ""
       "${_lapack_nvhpc_lib}"
-      "-fortranlibs"
+      "${_lapack_nvhpc_flags}"
       ""
       ""
       "${BLAS_LIBRARIES}"
@@ -688,7 +692,7 @@ if(NOT LAPACK_NOT_FOUND_MESSAGE)
         cheev
         ""
         "${_lapack_nvhpc_lib}"
-        "-fortranlibs"
+        "${_lapack_nvhpc_flags}"
         ""
         ""
         "${BLAS_LIBRARIES}"
@@ -696,6 +700,7 @@ if(NOT LAPACK_NOT_FOUND_MESSAGE)
     endif()
 
     unset(_lapack_nvhpc_lib)
+    unset(_lapack_nvhpc_flags)
   endif()
 
   # Generic LAPACK library?
index d3a4cf4..bf2a1c2 100644 (file)
@@ -1,3 +1,7 @@
 include(Platform/Linux-LCC)
 __linux_compiler_lcc(Fortran)
-set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-llfortran")
+if (CMAKE_Fortran_COMPILER_VERSION VERSION_LESS "1.26.03")
+  set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-llfortran")
+else()
+  set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-lgfortran")
+endif()
index 26dff05..f678659 100644 (file)
@@ -1,7 +1,7 @@
 # CMake version number components.
 set(CMake_VERSION_MAJOR 3)
 set(CMake_VERSION_MINOR 23)
-set(CMake_VERSION_PATCH 2)
+set(CMake_VERSION_PATCH 3)
 #set(CMake_VERSION_RC 0)
 set(CMake_VERSION_IS_DIRTY 0)
 
@@ -21,7 +21,7 @@ endif()
 
 if(NOT CMake_VERSION_NO_GIT)
   # If this source was exported by 'git archive', use its commit info.
-  set(git_info [==[a8bd06dfd4 CMake 3.23.2]==])
+  set(git_info [==[d566bd962d CMake 3.23.3]==])
 
   # Otherwise, try to identify the current development source version.
   if(NOT git_info MATCHES "^([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]?[0-9a-f]?)[0-9a-f]* "
index 8ffa3e7..c556049 100644 (file)
 #include <QTranslator>
 #include <QtPlugin>
 
+// FIXME(#23565): Qt6 has QTextCodec in Core5Compat, but using its
+// `setCodecForLocale` does not make cmake-gui support non-ASCII chars
+// on Windows.  For now we only support them with Qt5.  How do we support
+// them with Qt6, preferably without Core5Compat?
+#if defined(Q_OS_WIN) && (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
+#  include <QTextCodec>
+#  define CMAKE_HAVE_QTEXTCODEC
+#endif
+
 #include "cmsys/CommandLineArguments.hxx"
 #include "cmsys/Encoding.hxx"
 #include "cmsys/SystemTools.hxx"
@@ -124,6 +133,11 @@ int main(int argc, char** argv)
 
   setlocale(LC_NUMERIC, "C");
 
+#ifdef CMAKE_HAVE_QTEXTCODEC
+  QTextCodec* utf8_codec = QTextCodec::codecForName("UTF-8");
+  QTextCodec::setCodecForLocale(utf8_codec);
+#endif
+
   // tell the cmake library where cmake is
   QDir cmExecDir(QApplication::applicationDirPath());
 #if defined(Q_OS_MAC)
index a20aa9a..3d4ef0a 100644 (file)
@@ -2,10 +2,15 @@
    file Copyright.txt or https://cmake.org/licensing for details.  */
 #include "cmExportSet.h"
 
+#include <algorithm>
 #include <tuple>
 #include <utility>
 
+#include "cmGeneratorTarget.h"
 #include "cmLocalGenerator.h"
+#include "cmMessageType.h"
+#include "cmStringAlgorithms.h"
+#include "cmTarget.h"
 #include "cmTargetExport.h"
 
 cmExportSet::cmExportSet(std::string name)
@@ -15,11 +20,35 @@ cmExportSet::cmExportSet(std::string name)
 
 cmExportSet::~cmExportSet() = default;
 
-void cmExportSet::Compute(cmLocalGenerator* lg)
+bool cmExportSet::Compute(cmLocalGenerator* lg)
 {
   for (std::unique_ptr<cmTargetExport>& tgtExport : this->TargetExports) {
     tgtExport->Target = lg->FindGeneratorTargetToUse(tgtExport->TargetName);
+
+    auto const interfaceFileSets =
+      tgtExport->Target->Target->GetAllInterfaceFileSets();
+    auto const fileSetInTargetExport =
+      [&tgtExport, lg](const std::string& fileSetName) -> bool {
+      auto* fileSet = tgtExport->Target->Target->GetFileSet(fileSetName);
+
+      if (!tgtExport->FileSetGenerators.count(fileSet)) {
+        lg->IssueMessage(MessageType::FATAL_ERROR,
+                         cmStrCat("File set \"", fileSetName,
+                                  "\" is listed in interface file sets of ",
+                                  tgtExport->Target->GetName(),
+                                  " but has not been exported"));
+        return false;
+      }
+      return true;
+    };
+
+    if (!std::all_of(interfaceFileSets.begin(), interfaceFileSets.end(),
+                     fileSetInTargetExport)) {
+      return false;
+    }
   }
+
+  return true;
 }
 
 void cmExportSet::AddTargetExport(std::unique_ptr<cmTargetExport> te)
index 07deb11..b75a26d 100644 (file)
@@ -25,7 +25,7 @@ public:
   cmExportSet(const cmExportSet&) = delete;
   cmExportSet& operator=(const cmExportSet&) = delete;
 
-  void Compute(cmLocalGenerator* lg);
+  bool Compute(cmLocalGenerator* lg);
 
   void AddTargetExport(std::unique_ptr<cmTargetExport> tgt);
 
index 156ecce..c75198d 100644 (file)
@@ -1361,7 +1361,9 @@ void cmGlobalGenerator::CreateGenerationObjects(TargetTypes targetTypes)
     this->CheckTargetProperties();
   }
   this->CreateGeneratorTargets(targetTypes);
-  this->ComputeBuildFileGenerators();
+  if (targetTypes == TargetTypes::AllTargets) {
+    this->ComputeBuildFileGenerators();
+  }
 }
 
 void cmGlobalGenerator::CreateImportedGenerationObjects(
index 820f24a..9cb376d 100644 (file)
@@ -49,8 +49,7 @@ cmInstallExportGenerator::~cmInstallExportGenerator() = default;
 bool cmInstallExportGenerator::Compute(cmLocalGenerator* lg)
 {
   this->LocalGenerator = lg;
-  this->ExportSet->Compute(lg);
-  return true;
+  return this->ExportSet->Compute(lg);
 }
 
 void cmInstallExportGenerator::ComputeTempDir()
index 7de488b..b47155e 100644 (file)
@@ -405,9 +405,6 @@ void cmake::PrintPresetEnvironment()
 // Parse the args
 bool cmake::SetCacheArgs(const std::vector<std::string>& args)
 {
-  auto findPackageMode = false;
-  auto seenScriptOption = false;
-
   auto DefineLambda = [](std::string const& entry, cmake* state) -> bool {
     std::string var;
     std::string value;
@@ -498,10 +495,10 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
     GetProjectCommandsInScriptMode(state->GetState());
     // Documented behavior of CMAKE{,_CURRENT}_{SOURCE,BINARY}_DIR is to be
     // set to $PWD for -P mode.
+    state->SetWorkingMode(SCRIPT_MODE);
     state->SetHomeDirectory(cmSystemTools::GetCurrentWorkingDirectory());
     state->SetHomeOutputDirectory(cmSystemTools::GetCurrentWorkingDirectory());
     state->ReadListFile(args, path);
-    seenScriptOption = true;
     return true;
   };
 
@@ -565,15 +562,12 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
                      "No install directory specified for --install-prefix",
                      CommandArgument::Values::One, PrefixLambda },
     CommandArgument{ "--find-package", CommandArgument::Values::Zero,
-                     [&](std::string const&, cmake*) -> bool {
-                       findPackageMode = true;
-                       return true;
-                     } },
+                     IgnoreAndTrueLambda },
   };
   for (decltype(args.size()) i = 1; i < args.size(); ++i) {
     std::string const& arg = args[i];
 
-    if (arg == "--" && seenScriptOption) {
+    if (arg == "--" && this->GetWorkingMode() == SCRIPT_MODE) {
       // Stop processing CMake args and avoid possible errors
       // when arbitrary args are given to CMake script.
       break;
@@ -588,7 +582,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
     }
   }
 
-  if (findPackageMode) {
+  if (this->GetWorkingMode() == FIND_PACKAGE_MODE) {
     return this->FindPackage(args);
   }
 
@@ -793,7 +787,6 @@ void cmake::SetArgs(const std::vector<std::string>& args)
   bool haveToolset = false;
   bool havePlatform = false;
   bool haveBArg = false;
-  bool scriptMode = false;
   std::string possibleUnknownArg;
   std::string extraProvidedPath;
 #if !defined(CMAKE_BOOTSTRAP)
@@ -871,10 +864,7 @@ void cmake::SetArgs(const std::vector<std::string>& args)
     CommandArgument{ "-P", "-P must be followed by a file name.",
                      CommandArgument::Values::One,
                      CommandArgument::RequiresSeparator::No,
-                     [&](std::string const&, cmake*) -> bool {
-                       scriptMode = true;
-                       return true;
-                     } },
+                     IgnoreAndTrueLambda },
     CommandArgument{ "-D", "-D must be followed with VAR=VALUE.",
                      CommandArgument::Values::One,
                      CommandArgument::RequiresSeparator::No,
@@ -1198,12 +1188,12 @@ void cmake::SetArgs(const std::vector<std::string>& args)
     }
   }
 
-  if (!extraProvidedPath.empty() && !scriptMode) {
+  if (!extraProvidedPath.empty() && this->GetWorkingMode() == NORMAL_MODE) {
     this->IssueMessage(MessageType::WARNING,
                        cmStrCat("Ignoring extra path from command line:\n \"",
                                 extraProvidedPath, "\""));
   }
-  if (!possibleUnknownArg.empty() && !scriptMode) {
+  if (!possibleUnknownArg.empty() && this->GetWorkingMode() != SCRIPT_MODE) {
     cmSystemTools::Error(cmStrCat("Unknown argument ", possibleUnknownArg));
     cmSystemTools::Error("Run 'cmake --help' for all supported options.");
     exit(1);
@@ -1787,7 +1777,8 @@ void cmake::SetHomeDirectoryViaCommandLine(std::string const& path)
   }
 
   auto prev_path = this->GetHomeDirectory();
-  if (prev_path != path && !prev_path.empty()) {
+  if (prev_path != path && !prev_path.empty() &&
+      this->GetWorkingMode() == NORMAL_MODE) {
     this->IssueMessage(MessageType::WARNING,
                        cmStrCat("Ignoring extra path from command line:\n \"",
                                 prev_path, "\""));
diff --git a/Tests/RunCMake/CommandLine/P_args-stdout.txt b/Tests/RunCMake/CommandLine/P_args-stdout.txt
new file mode 100644 (file)
index 0000000..f9d039f
--- /dev/null
@@ -0,0 +1,6 @@
+^-- CMAKE_ARGC='5'
+-- CMAKE_ARGV1='-P'
+-- CMAKE_ARGV2='[^']*/Tests/RunCMake/CommandLine/P_args.cmake'
+-- CMAKE_ARGV3='relative/path'
+-- CMAKE_ARGV4='[^']*/Tests/RunCMake/CommandLine'
+-- CMAKE_ARGV5=''$
diff --git a/Tests/RunCMake/CommandLine/P_args.cmake b/Tests/RunCMake/CommandLine/P_args.cmake
new file mode 100644 (file)
index 0000000..6c4fa4c
--- /dev/null
@@ -0,0 +1,6 @@
+message(STATUS "CMAKE_ARGC='${CMAKE_ARGC}'")
+message(STATUS "CMAKE_ARGV1='${CMAKE_ARGV1}'")
+message(STATUS "CMAKE_ARGV2='${CMAKE_ARGV2}'")
+message(STATUS "CMAKE_ARGV3='${CMAKE_ARGV3}'")
+message(STATUS "CMAKE_ARGV4='${CMAKE_ARGV4}'")
+message(STATUS "CMAKE_ARGV5='${CMAKE_ARGV5}'")
index f7554ff..48df4f7 100644 (file)
@@ -52,6 +52,7 @@ run_cmake_command(G_no-arg ${CMAKE_COMMAND} -B DummyBuildDir -G)
 run_cmake_command(G_bad-arg ${CMAKE_COMMAND} -B DummyBuildDir -G NoSuchGenerator)
 run_cmake_command(P_no-arg ${CMAKE_COMMAND} -P)
 run_cmake_command(P_no-file ${CMAKE_COMMAND} -P nosuchscriptfile.cmake)
+run_cmake_command(P_args ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_args.cmake" relative/path "${RunCMake_SOURCE_DIR}")
 run_cmake_command(P_arbitrary_args ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_arbitrary_args.cmake" -- -DFOO)
 
 run_cmake_command(build-no-dir
index 3ddb890..87752bd 100644 (file)
@@ -164,7 +164,9 @@ function(run_cmake test)
 
     "|[^\n]*install_name_tool: warning: changes being made to the file will invalidate the code signature in:"
     "|[^\n]*xcodebuild[^\n]*DVTPlugInManager"
+    "|[^\n]*xcodebuild[^\n]*DVTSDK: Warning: SDK path collision for path"
     "|[^\n]*xcodebuild[^\n]*Requested but did not find extension point with identifier"
+    "|[^\n]*xcodebuild[^\n]*nil host used in call to allows.*HTTPSCertificateForHost"
     "|[^\n]*xcodebuild[^\n]*warning: file type[^\n]*is based on missing file type"
     "|[^\n]*objc[^\n]*: Class [^\n]* One of the two will be used. Which one is undefined."
     "|[^\n]*is a member of multiple groups"
index 0e6020f..ee00b27 100644 (file)
@@ -18,3 +18,4 @@ run_cmake(DependOnDoubleExport)
 run_cmake(UnknownExport)
 run_cmake(NamelinkOnlyExport)
 run_cmake(SeparateNamelinkExport)
+run_cmake(TryCompileExport)
diff --git a/Tests/RunCMake/export/TryCompileExport.cmake b/Tests/RunCMake/export/TryCompileExport.cmake
new file mode 100644 (file)
index 0000000..5ad7c6e
--- /dev/null
@@ -0,0 +1,9 @@
+enable_language(CXX)
+
+add_library(interface INTERFACE)
+install(TARGETS interface EXPORT export)
+export(EXPORT export)
+
+add_library(imported IMPORTED INTERFACE)
+
+try_compile(tc "${CMAKE_CURRENT_BINARY_DIR}/tc" "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp" LINK_LIBRARIES imported)
diff --git a/Tests/RunCMake/target_sources/FileSetExportMissingSetsInterfacePostExport-result.txt b/Tests/RunCMake/target_sources/FileSetExportMissingSetsInterfacePostExport-result.txt
new file mode 100644 (file)
index 0000000..d00491f
--- /dev/null
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/target_sources/FileSetExportMissingSetsInterfacePostExport-stderr.txt b/Tests/RunCMake/target_sources/FileSetExportMissingSetsInterfacePostExport-stderr.txt
new file mode 100644 (file)
index 0000000..b8d35af
--- /dev/null
@@ -0,0 +1,6 @@
+^CMake Error in CMakeLists\.txt:
+  File set "a" is listed in interface file sets of lib1 but has not been
+  exported
+
+
+CMake Generate step failed\.  Build files cannot be regenerated correctly\.$
diff --git a/Tests/RunCMake/target_sources/FileSetExportMissingSetsInterfacePostExport.cmake b/Tests/RunCMake/target_sources/FileSetExportMissingSetsInterfacePostExport.cmake
new file mode 100644 (file)
index 0000000..72fab47
--- /dev/null
@@ -0,0 +1,6 @@
+enable_language(C)
+
+add_library(lib1 STATIC empty.c)
+install(TARGETS lib1 EXPORT a)
+target_sources(lib1 INTERFACE FILE_SET a TYPE HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} FILES h1.h)
+export(EXPORT a)
diff --git a/Tests/RunCMake/target_sources/FileSetInstallMissingSetsInterfacePostInstall-result.txt b/Tests/RunCMake/target_sources/FileSetInstallMissingSetsInterfacePostInstall-result.txt
new file mode 100644 (file)
index 0000000..d00491f
--- /dev/null
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/target_sources/FileSetInstallMissingSetsInterfacePostInstall-stderr.txt b/Tests/RunCMake/target_sources/FileSetInstallMissingSetsInterfacePostInstall-stderr.txt
new file mode 100644 (file)
index 0000000..b8d35af
--- /dev/null
@@ -0,0 +1,6 @@
+^CMake Error in CMakeLists\.txt:
+  File set "a" is listed in interface file sets of lib1 but has not been
+  exported
+
+
+CMake Generate step failed\.  Build files cannot be regenerated correctly\.$
diff --git a/Tests/RunCMake/target_sources/FileSetInstallMissingSetsInterfacePostInstall.cmake b/Tests/RunCMake/target_sources/FileSetInstallMissingSetsInterfacePostInstall.cmake
new file mode 100644 (file)
index 0000000..4e1edff
--- /dev/null
@@ -0,0 +1,6 @@
+enable_language(C)
+
+add_library(lib1 STATIC empty.c)
+install(TARGETS lib1 EXPORT a)
+target_sources(lib1 INTERFACE FILE_SET a TYPE HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} FILES h1.h)
+install(EXPORT a DESTINATION lib/cmake/test)
index e78ee9d..6a3c7b9 100644 (file)
@@ -33,6 +33,8 @@ run_cmake(FileSetWrongBaseDirsRelative)
 run_cmake(FileSetOverlappingBaseDirs)
 run_cmake(FileSetInstallMissingSetsPrivate)
 run_cmake(FileSetInstallMissingSetsInterface)
+run_cmake(FileSetInstallMissingSetsInterfacePostInstall)
+run_cmake(FileSetExportMissingSetsInterfacePostExport)
 run_cmake(FileSetReadOnlyPrivate)
 run_cmake(FileSetReadOnlyInterface)
 run_cmake(FileSetNoExistInstall)
index 8283c90..76b8898 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 set -e
-readonly usage='usage: sign-notarize.bash -i <id> -d <dev-acct> -k <key-item> [-p <provider>] [--] <package>.dmg
+readonly usage='usage: sign-notarize.bash -i <id> -k <keychain-profile> [--] <package>.dmg
 
 Sign and notarize the "CMake.app" bundle inside the given "<package>.dmg" disk image.
 Also produce a "<package>.tar.gz" tarball containing the same "CMake.app".
@@ -8,9 +8,22 @@ Also produce a "<package>.tar.gz" tarball containing the same "CMake.app".
 Options:
 
     -i <id>                Signing Identity
-    -d <dev-acct>          Developer account name
-    -k <key-item>          Keychain item containing account credentials
-    -p <provider>          Provider short name
+    -k <keychain-profile>  Keychain profile containing stored credentials
+
+Create the keychain profile ahead of time using
+
+    xcrun notarytool store-credentials <keychain-profile> \
+      --apple-id <dev-acct> --team-id <team-id> [--password <app-specific-password>]
+
+where:
+
+    <dev-acct>              is an Apple ID of a developer account
+    <team-id>               is from https://developer.apple.com/account/#!/membership
+    <app-specific-password> is generated via https://support.apple.com/en-us/HT204397
+                            If --password is omitted, notarytool will prompt for it.
+
+This creates a keychain item called "com.apple.gke.notary.tool" with an
+account name "com.apple.gke.notary.tool.saved-creds.<keychain-profile>".
 '
 
 cleanup() {
@@ -29,15 +42,11 @@ die() {
 }
 
 id=''
-dev_acct=''
-key_item=''
-provider=''
+keychain_profile=''
 while test "$#" != 0; do
     case "$1" in
     -i) shift; id="$1" ;;
-    -d) shift; dev_acct="$1" ;;
-    -k) shift; key_item="$1" ;;
-    -p) shift; provider="$1" ;;
+    -k) shift; keychain_profile="$1" ;;
     --) shift ; break ;;
     -*) die "$usage" ;;
     *) break ;;
@@ -51,18 +60,14 @@ esac
 test "$#" = 0 || die "$usage"
 
 # Verify arguments.
-if test -z "$id" -o -z "$dev_acct" -o -z "$key_item"; then
+if test -z "$id" -o -z "$keychain_profile"; then
     die "$usage"
 fi
-if test -n "$provider"; then
-    provider="--provider $provider"
-fi
 
 # Verify environment.
-if ! xcnotary="$(type -p xcnotary)"; then
-    die "'xcnotary' not found in PATH"
+if ! xcrun --find notarytool 2>/dev/null; then
+    die "'xcrun notarytool' not found"
 fi
-readonly xcnotary
 
 readonly tmpdir="$(mktemp -d)"
 
@@ -101,7 +106,9 @@ codesign --verify --timestamp --options=runtime --verbose --deep \
   "$vol_path/CMake.app/Contents/bin/cpack" \
   "$vol_path/CMake.app"
 
-xcnotary notarize "$vol_path/CMake.app" -d "$dev_acct" -k "$key_item" $provider
+ditto -c -k --keepParent "$vol_path/CMake.app" "$tmpdir/CMake.app.zip"
+xcrun notarytool submit "$tmpdir/CMake.app.zip" --keychain-profile "$keychain_profile" --wait
+xcrun stapler staple "$vol_path/CMake.app"
 
 # Create a tarball of the volume next to the original disk image.
 readonly tar_gz="${dmg/%.dmg/.tar.gz}"