Update upstream source from tag 'upstream/3.31.2'

Update to upstream version '3.31.2'
with Debian dir f2c09b3dd7
ci/unstable
Timo Röhling 2 weeks ago
commit 1ae502fda8

@ -1,5 +1,6 @@
#include "mysqrt.h" #include "mysqrt.h"
// TODO 4: include cmath
#include <iostream> #include <iostream>
namespace mathfunctions { namespace mathfunctions {

@ -16,5 +16,7 @@ the :prop_tgt:`SOVERSION` target property, if set, and otherwise from
the :prop_tgt:`VERSION` target property, if set. the :prop_tgt:`VERSION` target property, if set.
This property defaults to :variable:`CMAKE_AIX_SHARED_LIBRARY_ARCHIVE` This property defaults to :variable:`CMAKE_AIX_SHARED_LIBRARY_ARCHIVE`
if that variable is set when a ``SHARED`` library target is created if that variable is set when a non-imported ``SHARED`` library target
by :command:`add_library`. is created by :command:`add_library`. Imported targets must explicitly
enable :prop_tgt:`!AIX_SHARED_LIBRARY_ARCHIVE` if they import an AIX
shared library archive.

@ -263,9 +263,9 @@ Updates
Changes made since CMake 3.31.0 include the following. Changes made since CMake 3.31.0 include the following.
3.31.1 3.31.1, 3.31.2
------ --------------
* 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 Some implementation updates were made to support ecosystem changes
and/or fix regressions. and/or fix regressions.

@ -6,5 +6,5 @@ CMAKE_AIX_SHARED_LIBRARY_ARCHIVE
On AIX, enable creation of shared library archives. On AIX, enable creation of shared library archives.
This variable initializes the :prop_tgt:`AIX_SHARED_LIBRARY_ARCHIVE` This variable initializes the :prop_tgt:`AIX_SHARED_LIBRARY_ARCHIVE`
target property on ``SHARED`` library targets as they are created target property on non-imported ``SHARED`` library targets as they are
by :command:`add_library`. See that target property for details. created by :command:`add_library`. See that target property for details.

@ -30,6 +30,9 @@ else()
string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3") string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3")
string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g") string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g")
# Compiler + IPO does not recognize --dependency-file link option
set(CMAKE_${lang}_LINKER_DEPFILE_SUPPORTED FALSE)
if("${lang}" STREQUAL "CXX") if("${lang}" STREQUAL "CXX")
set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}") set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}")
if(CMAKE_${lang}_COMPILER_ARG1) if(CMAKE_${lang}_COMPILER_ARG1)

@ -3464,14 +3464,15 @@ if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
endif() endif()
# finalize library version information # finalize library version information
_python_get_version (SABI_LIBRARY PREFIX _${_PYTHON_PREFIX}_)
# ABI library does not have the full version information # ABI library does not have the full version information
if (${_PYTHON_PREFIX}_Interpreter_FOUND OR _${_PYTHON_PREFIX}_LIBRARY_RELEASE) if (${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
# update from interpreter or library # update from interpreter
set (_${_PYTHON_PREFIX}_VERSION ${${_PYTHON_PREFIX}_VERSION}) set (_${_PYTHON_PREFIX}_VERSION ${${_PYTHON_PREFIX}_VERSION})
set (_${_PYTHON_PREFIX}_VERSION_MAJOR ${${_PYTHON_PREFIX}_VERSION_MAJOR}) set (_${_PYTHON_PREFIX}_VERSION_MAJOR ${${_PYTHON_PREFIX}_VERSION_MAJOR})
set (_${_PYTHON_PREFIX}_VERSION_MINOR ${${_PYTHON_PREFIX}_VERSION_MINOR}) set (_${_PYTHON_PREFIX}_VERSION_MINOR ${${_PYTHON_PREFIX}_VERSION_MINOR})
set (_${_PYTHON_PREFIX}_VERSION_PATCH ${${_PYTHON_PREFIX}_VERSION_PATCH}) set (_${_PYTHON_PREFIX}_VERSION_PATCH ${${_PYTHON_PREFIX}_VERSION_PATCH})
elseif(NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
_python_get_version (SABI_LIBRARY PREFIX _${_PYTHON_PREFIX}_)
endif() endif()
set (${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE "${_${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE}") set (${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE "${_${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE}")

@ -5,22 +5,17 @@
FindRuby FindRuby
-------- --------
Find Ruby This module determines if Ruby is installed and finds the locations of its
include files and libraries. Ruby 1.8 through 3.4 are supported.
This module finds if Ruby is installed and determines where the
include files and libraries are. Ruby 1.8 through 3.3 are
supported.
The minimum required version of Ruby can be specified using the The minimum required version of Ruby can be specified using the
standard syntax, e.g. standard syntax, e.g.
.. code-block:: cmake .. code-block:: cmake
find_package(Ruby 2.5.1 EXACT REQUIRED) find_package(Ruby 3.2.6 EXACT REQUIRED)
# OR # OR
find_package(Ruby 2.4) find_package(Ruby 3.2)
It also determines what the name of the library is.
Virtual environments such as RVM are handled as well, by passing Virtual environments such as RVM are handled as well, by passing
the argument ``Ruby_FIND_VIRTUALENV`` the argument ``Ruby_FIND_VIRTUALENV``
@ -40,7 +35,7 @@ This module will set the following variables in your project:
.. versionadded:: 3.18 .. versionadded:: 3.18
libraries needed to use ruby from C. libraries needed to use ruby from C.
``Ruby_VERSION`` ``Ruby_VERSION``
the version of ruby which was found, e.g. "1.8.7" the version of ruby which was found, e.g. "3.2.6"
``Ruby_VERSION_MAJOR`` ``Ruby_VERSION_MAJOR``
Ruby major version. Ruby major version.
``Ruby_VERSION_MINOR`` ``Ruby_VERSION_MINOR``
@ -136,13 +131,13 @@ set(Ruby_FIND_VERSION_SHORT_NODOT "${Ruby_FIND_VERSION_MAJOR}${Ruby_FIND_VERSION
# Set name of possible executables, ignoring the minor # Set name of possible executables, ignoring the minor
# Eg: # Eg:
# 2.1.1 => from ruby33 to ruby21 included # 3.2.6 => from ruby34 to ruby32 included
# 2.1 => from ruby33 to ruby21 included # 3.2 => from ruby34 to ruby32 included
# 2 => from ruby33 to ruby20 included # 3 => from ruby34 to ruby30 included
# empty => from ruby33 to ruby18 included # empty => from ruby34 to ruby18 included
if(NOT Ruby_FIND_VERSION_EXACT) if(NOT Ruby_FIND_VERSION_EXACT)
foreach(_ruby_version RANGE 33 18 -1) foreach(_ruby_version RANGE 34 18 -1)
string(SUBSTRING "${_ruby_version}" 0 1 _ruby_major_version) string(SUBSTRING "${_ruby_version}" 0 1 _ruby_major_version)
string(SUBSTRING "${_ruby_version}" 1 1 _ruby_minor_version) string(SUBSTRING "${_ruby_version}" 1 1 _ruby_minor_version)

@ -11,7 +11,7 @@ cmake_policy(SET CMP0140 NEW)
function(__linker_gnu lang) function(__linker_gnu lang)
# define flags for linker depfile generation # define flags for linker depfile generation
set(CMAKE_${lang}_LINKER_DEPFILE_FLAGS "LINKER:--dependency-file,<DEP_FILE>") set(CMAKE_${lang}_LINKER_DEPFILE_FLAGS "LINKER:--dependency-file=<DEP_FILE>")
set(CMAKE_${lang}_LINKER_DEPFILE_FORMAT gcc) set(CMAKE_${lang}_LINKER_DEPFILE_FORMAT gcc)
if(NOT CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF") if(NOT CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")

@ -1,7 +1,7 @@
# CMake version number components. # CMake version number components.
set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MAJOR 3)
set(CMake_VERSION_MINOR 31) set(CMake_VERSION_MINOR 31)
set(CMake_VERSION_PATCH 1) set(CMake_VERSION_PATCH 2)
#set(CMake_VERSION_RC 0) #set(CMake_VERSION_RC 0)
set(CMake_VERSION_IS_DIRTY 0) set(CMake_VERSION_IS_DIRTY 0)
@ -21,7 +21,7 @@ endif()
if(NOT CMake_VERSION_NO_GIT) if(NOT CMake_VERSION_NO_GIT)
# If this source was exported by 'git archive', use its commit info. # If this source was exported by 'git archive', use its commit info.
set(git_info [==[eb281d3454 CMake 3.31.1]==]) set(git_info [==[793c5f11f6 CMake 3.31.2]==])
# Otherwise, try to identify the current development source version. # 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]* " 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]* "

@ -334,6 +334,12 @@ void cmExportCMakeConfigGenerator::GenerateImportTargetCode(
os << "set_property(TARGET " << targetName << " PROPERTY BUNDLE 1)\n"; os << "set_property(TARGET " << targetName << " PROPERTY BUNDLE 1)\n";
} }
// Mark the imported library if it is an AIX shared library archive.
if (target->IsArchivedAIXSharedLibrary()) {
os << "set_property(TARGET " << targetName
<< " PROPERTY AIX_SHARED_LIBRARY_ARCHIVE 1)\n";
}
// generate DEPRECATION // generate DEPRECATION
if (target->IsDeprecated()) { if (target->IsDeprecated()) {
os << "set_property(TARGET " << targetName << " PROPERTY DEPRECATION " os << "set_property(TARGET " << targetName << " PROPERTY DEPRECATION "

@ -3592,6 +3592,12 @@ struct TargetFilesystemArtifactResultCreator<ArtifactSonameTag>
"SHARED libraries."); "SHARED libraries.");
return std::string(); return std::string();
} }
if (target->IsArchivedAIXSharedLibrary()) {
::reportError(context, content->GetOriginalExpression(),
"TARGET_SONAME_FILE is not allowed for "
"AIX_SHARED_LIBRARY_ARCHIVE libraries.");
return std::string();
}
std::string result = cmStrCat(target->GetDirectory(context->Config), '/', std::string result = cmStrCat(target->GetDirectory(context->Config), '/',
target->GetSOName(context->Config)); target->GetSOName(context->Config));
return result; return result;
@ -3618,6 +3624,12 @@ struct TargetFilesystemArtifactResultCreator<ArtifactSonameImportTag>
"SHARED libraries."); "SHARED libraries.");
return std::string(); return std::string();
} }
if (target->IsArchivedAIXSharedLibrary()) {
::reportError(context, content->GetOriginalExpression(),
"TARGET_SONAME_IMPORT_FILE is not allowed for "
"AIX_SHARED_LIBRARY_ARCHIVE libraries.");
return std::string();
}
if (target->HasImportLibrary(context->Config)) { if (target->HasImportLibrary(context->Config)) {
return cmStrCat(target->GetDirectory( return cmStrCat(target->GetDirectory(

@ -551,8 +551,9 @@ std::vector<BT<std::string>>& cmGeneratorTarget::ResolveLinkerWrapper(
const std::string SHELL{ "SHELL:" }; const std::string SHELL{ "SHELL:" };
const std::string LINKER_SHELL = LINKER + SHELL; const std::string LINKER_SHELL = LINKER + SHELL;
for (auto entry = result.begin(); entry != result.end(); ++entry) { for (auto entry = result.begin(); entry != result.end();) {
if (entry->Value.compare(0, LINKER.length(), LINKER) != 0) { if (entry->Value.compare(0, LINKER.length(), LINKER) != 0) {
++entry;
continue; continue;
} }
@ -594,10 +595,10 @@ std::vector<BT<std::string>>& cmGeneratorTarget::ResolveLinkerWrapper(
if (joinItems) { if (joinItems) {
result.insert( result.insert(
entry, cmJoin(cmMakeRange(options.begin(), options.end()), " "_s)); entry, cmJoin(cmMakeRange(options.begin(), options.end()), " "_s));
entry = std::next(result.begin(), index); entry = std::next(result.begin(), index + 1);
} else { } else {
result.insert(entry, options.begin(), options.end()); result.insert(entry, options.begin(), options.end());
entry = std::next(result.begin(), index + options.size() - 1); entry = std::next(result.begin(), index + options.size());
} }
} }
return result; return result;

@ -107,11 +107,13 @@ void cmInstallImportedRuntimeArtifactsGenerator::GenerateScriptForConfig(
} }
} else { } else {
std::vector<std::string> files{ location }; std::vector<std::string> files{ location };
auto soName = this->Target->GetSOName(config); if (!this->Target->IsArchivedAIXSharedLibrary()) {
auto soNameFile = auto soName = this->Target->GetSOName(config);
cmStrCat(this->Target->GetDirectory(config), '/', soName); auto soNameFile =
if (!soName.empty() && soNameFile != location) { cmStrCat(this->Target->GetDirectory(config), '/', soName);
files.push_back(soNameFile); if (!soName.empty() && soNameFile != location) {
files.push_back(soNameFile);
}
} }
this->AddInstallRule(os, this->GetDestination(config), this->AddInstallRule(os, this->GetDestination(config),
cmInstallType_SHARED_LIBRARY, files, cmInstallType_SHARED_LIBRARY, files,

@ -1626,8 +1626,6 @@ void cmLocalGenerator::GetTargetFlags(
this->AppendPositionIndependentLinkerFlags(extraLinkFlags, target, config, this->AppendPositionIndependentLinkerFlags(extraLinkFlags, target, config,
linkLanguage); linkLanguage);
this->AppendIPOLinkerFlags(extraLinkFlags, target, config, linkLanguage); this->AppendIPOLinkerFlags(extraLinkFlags, target, config, linkLanguage);
this->AppendDependencyInfoLinkerFlags(extraLinkFlags, target, config,
linkLanguage);
this->AppendModuleDefinitionFlag(extraLinkFlags, target, linkLineComputer, this->AppendModuleDefinitionFlag(extraLinkFlags, target, linkLineComputer,
config); config);

@ -1277,6 +1277,9 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement(
vars["LINK_LIBRARIES"], vars["FLAGS"], vars["LINK_LIBRARIES"], vars["FLAGS"],
vars["LINK_FLAGS"], frameworkPath, linkPath, gt); vars["LINK_FLAGS"], frameworkPath, linkPath, gt);
localGen.AppendDependencyInfoLinkerFlags(vars["LINK_FLAGS"], gt, config,
this->TargetLinkLanguage(config));
// Add OS X version flags, if any. // Add OS X version flags, if any.
if (this->GeneratorTarget->GetType() == cmStateEnums::SHARED_LIBRARY || if (this->GeneratorTarget->GetType() == cmStateEnums::SHARED_LIBRARY ||
this->GeneratorTarget->GetType() == cmStateEnums::MODULE_LIBRARY) { this->GeneratorTarget->GetType() == cmStateEnums::MODULE_LIBRARY) {

@ -1340,12 +1340,9 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
} }
if (this->Uic.Enabled) { if (this->Uic.Enabled) {
// Make all ui_*.h files byproducts of the ${target}_autogen/timestamp
// custom command if the generation of depfile is enabled.
auto& byProducts = useDepfile ? timestampByproducts : autogenByproducts;
for (auto const& file : this->Uic.UiHeaders) { for (auto const& file : this->Uic.UiHeaders) {
this->AddGeneratedSource(file.first, this->Uic); this->AddGeneratedSource(file.first, this->Uic);
byProducts.push_back(file.second); autogenByproducts.push_back(file.second);
} }
} }
@ -1483,16 +1480,6 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
} }
} }
// For the Ninja, Makefile and Qt >= 5.15, add custom commands that create
// XXX_autogen/timestamp files. Those custom commands have a depfile
// assigned that is generated from the depfiles that were created by moc.
//
// The XXX_autogen targets merely wrap the XXX_autogen/timestamp custom
// commands.
// The dependency tree would then look like
// the original dependencies of '_autogen' target <-'/timestamp' file
// <- '_autogen' target
cmTarget* timestampTarget = nullptr; cmTarget* timestampTarget = nullptr;
std::vector<std::string> dependencies( std::vector<std::string> dependencies(
this->AutogenTarget.DependFiles.begin(), this->AutogenTarget.DependFiles.begin(),
@ -1500,6 +1487,40 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
if (useDepfile) { if (useDepfile) {
// Create a custom command that generates a timestamp file and // Create a custom command that generates a timestamp file and
// has a depfile assigned. The depfile is created by JobDepFilesMergeT. // has a depfile assigned. The depfile is created by JobDepFilesMergeT.
//
// Also create an additional '_autogen_timestamp_deps' that the custom
// command will depend on. It will have no sources or commands to
// execute, but it will have dependencies that would originally be
// assigned to the pre-Qt 5.15 'autogen' target. These dependencies will
// serve as a list of order-only dependencies for the custom command,
// without forcing the custom command to re-execute.
//
// The dependency tree would then look like
// '_autogen_timestamp_deps (order-only)' <- '/timestamp' file <-
// '_autogen' target.
const auto timestampTargetName =
cmStrCat(this->GenTarget->GetName(), "_autogen_timestamp_deps");
auto cc = cm::make_unique<cmCustomCommand>();
cc->SetWorkingDirectory(this->Dir.Work.c_str());
cc->SetDepends(dependencies);
cc->SetEscapeOldStyle(false);
timestampTarget = this->LocalGen->AddUtilityCommand(timestampTargetName,
true, std::move(cc));
this->LocalGen->AddGeneratorTarget(
cm::make_unique<cmGeneratorTarget>(timestampTarget, this->LocalGen));
// Set FOLDER property on the timestamp target, so it appears in the
// appropriate folder in an IDE or in the file api.
if (!this->TargetsFolder.empty()) {
timestampTarget->SetProperty("FOLDER", this->TargetsFolder);
}
// Make '/timestamp' file depend on '_autogen_timestamp_deps' and on the
// moc and uic executables (whichever are enabled).
dependencies.clear();
dependencies.push_back(timestampTargetName);
AddAutogenExecutableToDependencies(this->Moc, dependencies); AddAutogenExecutableToDependencies(this->Moc, dependencies);
AddAutogenExecutableToDependencies(this->Uic, dependencies); AddAutogenExecutableToDependencies(this->Uic, dependencies);
@ -1544,7 +1565,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
{ cmSystemTools::GetCMakeCommand(), "-E", "touch", outputFile })); { cmSystemTools::GetCMakeCommand(), "-E", "touch", outputFile }));
this->AddGeneratedSource(outputFile, this->Moc); this->AddGeneratedSource(outputFile, this->Moc);
} }
auto cc = cm::make_unique<cmCustomCommand>(); cc = cm::make_unique<cmCustomCommand>();
cc->SetOutputs(outputFile); cc->SetOutputs(outputFile);
cc->SetByproducts(timestampByproducts); cc->SetByproducts(timestampByproducts);
cc->SetDepends(dependencies); cc->SetDepends(dependencies);

@ -1087,6 +1087,11 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
} }
} }
// Imported targets must set AIX_SHARED_LIBRARY_ARCHIVE explicitly.
if (this->IsImported() && property == "AIX_SHARED_LIBRARY_ARCHIVE"_s) {
return;
}
// Replace everything after "CMAKE_" // Replace everything after "CMAKE_"
defKey.replace(defKey.begin() + 6, defKey.end(), property); defKey.replace(defKey.begin() + 6, defKey.end(), property);
if (cmValue value = mf->GetDefinition(defKey)) { if (cmValue value = mf->GetDefinition(defKey)) {

@ -5,6 +5,8 @@ if(POLICY CMP0129)
endif() endif()
project(Export C CXX) project(Export C CXX)
set(CMAKE_AIX_SHARED_LIBRARY_ARCHIVE 1)
find_package(Foo REQUIRED CONFIG NO_DEFAULT_PATH) find_package(Foo REQUIRED CONFIG NO_DEFAULT_PATH)
# Pretend that RelWithDebInfo should link to debug libraries to test # Pretend that RelWithDebInfo should link to debug libraries to test
@ -482,8 +484,8 @@ add_library(testMod1 MODULE empty.cpp)
add_library(testMod2 MODULE empty.cpp) add_library(testMod2 MODULE empty.cpp)
set_property(TARGET testMod2 PROPERTY BUNDLE 1) set_property(TARGET testMod2 PROPERTY BUNDLE 1)
add_library(testSharedLibArchiveAIX SHARED testSharedLibArchiveAIX.c) add_library(testSharedObjectAIX SHARED testSharedObjectAIX.c)
set_property(TARGET testSharedLibArchiveAIX PROPERTY AIX_SHARED_LIBRARY_ARCHIVE 1) set_property(TARGET testSharedObjectAIX PROPERTY AIX_SHARED_LIBRARY_ARCHIVE 0)
install(TARGETS testLibRequired install(TARGETS testLibRequired
EXPORT RequiredExp DESTINATION lib EXPORT RequiredExp DESTINATION lib
@ -625,7 +627,7 @@ install(
systemlib systemlib
testInterfaceIncludeUser testInterfaceIncludeUser
testInterfaceIncludeUser2 testInterfaceIncludeUser2
testSharedLibArchiveAIX testSharedObjectAIX
EXPORT exp EXPORT exp
RUNTIME DESTINATION $<1:bin>$<0:/wrong> RUNTIME DESTINATION $<1:bin>$<0:/wrong>
LIBRARY DESTINATION $<1:lib>$<0:/wrong> NAMELINK_SKIP LIBRARY DESTINATION $<1:lib>$<0:/wrong> NAMELINK_SKIP
@ -703,7 +705,7 @@ export(TARGETS testExe2 testLib4 testLib5 testLib6 testLib7 testExe3 testExe4 te
testExeWithPluginHelper testExePluginHelperObj testExeWithPluginHelper testExePluginHelperObj
testMod1 testMod2 testMod1 testMod2
testLibPerConfigDest testLibPerConfigDest
testSharedLibArchiveAIX testSharedObjectAIX
NAMESPACE bld_ NAMESPACE bld_
APPEND FILE ExportBuildTree.cmake APPEND FILE ExportBuildTree.cmake
) )

@ -4,7 +4,7 @@
# define EXPORT # define EXPORT
#endif #endif
EXPORT int testSharedLibArchiveAIX(void) EXPORT int testSharedObjectAIX(void)
{ {
return 0; return 0;
} }

@ -68,7 +68,7 @@ target_link_libraries(imp_testExe1
exp_testLib7 exp_testLib7
exp_testLibCycleA exp_testLibCycleA
exp_testLibPerConfigDest exp_testLibPerConfigDest
exp_testSharedLibArchiveAIX exp_testSharedObjectAIX
exp_testStaticLibWithPlugin exp_testStaticLibWithPlugin
) )
@ -124,7 +124,7 @@ target_link_libraries(imp_testExe1b
bld_testLib7 bld_testLib7
bld_testLibCycleA bld_testLibCycleA
bld_testLibPerConfigDest bld_testLibPerConfigDest
bld_testSharedLibArchiveAIX bld_testSharedObjectAIX
bld_testStaticLibWithPlugin bld_testStaticLibWithPlugin
) )

@ -11,7 +11,7 @@ extern int testLib7(void);
extern int testLibCycleA1(void); extern int testLibCycleA1(void);
extern int testLibPerConfigDest(void); extern int testLibPerConfigDest(void);
extern int testStaticLibPlugin(void); extern int testStaticLibPlugin(void);
extern int testSharedLibArchiveAIX(void); extern int testSharedObjectAIX(void);
/* Switch a symbol between debug and optimized builds to make sure the /* Switch a symbol between debug and optimized builds to make sure the
proper library is found from the testLib4 link interface. */ proper library is found from the testLib4 link interface. */
@ -27,6 +27,6 @@ int main(void)
return (testLib2() + generated_by_testExe1() + testLib3() + testLib4() + return (testLib2() + generated_by_testExe1() + testLib3() + testLib4() +
testLib5() + testLib6() + testLib7() + testLibCycleA1() + testLib5() + testLib6() + testLib7() + testLibCycleA1() +
testLibPerConfigDest() + testStaticLibPlugin() + testLibPerConfigDest() + testStaticLibPlugin() +
testSharedLibArchiveAIX() + generated_by_testExe3() + testSharedObjectAIX() + generated_by_testExe3() +
generated_by_testExe4() + testLib4lib() + testLib4libcfg()); generated_by_testExe4() + testLib4lib() + testLib4libcfg());
} }

@ -16,6 +16,55 @@ else()
set(USER_INCLUDE_DIR "/path/to/invalid/dir") set(USER_INCLUDE_DIR "/path/to/invalid/dir")
endif() endif()
# check some combinations for modules search without interpreter
block(SCOPE_FOR VARIABLES)
find_package(Python3 REQUIRED COMPONENTS Development.SABIModule)
if (NOT Python3_FOUND)
message (FATAL_ERROR "Failed to find Python 3")
endif()
if (Python3_Development_FOUND)
message (FATAL_ERROR "Python 3, COMPONENT 'Development' unexpectedly found")
endif()
if (Python3_Interpreter_FOUND)
message (FATAL_ERROR "Python 3, COMPONENT 'Interpreter' unexpectedly found")
endif()
if (Python3_Development.Embed_FOUND)
message (FATAL_ERROR "Python 3, COMPONENT 'Development.Embed' unexpectedly found")
endif()
if (Python3_Development.Module_FOUND)
message (FATAL_ERROR "Python 3, COMPONENT 'Development.Module' unexpectedly found")
endif()
if (NOT Python3_Development.SABIModule_FOUND)
message (FATAL_ERROR "Python 3, COMPONENT 'Development.SABIModule' not found")
endif()
unset(_Python3_SABI_LIBRARY_RELEASE CACHE)
endblock()
block(SCOPE_FOR VARIABLES)
find_package(Python3 REQUIRED COMPONENTS Development.Module Development.SABIModule)
if (NOT Python3_FOUND)
message (FATAL_ERROR "Failed to find Python 3")
endif()
if (Python3_Development_FOUND)
message (FATAL_ERROR "Python 3, COMPONENT 'Development' unexpectedly found")
endif()
if (Python3_Interpreter_FOUND)
message (FATAL_ERROR "Python 3, COMPONENT 'Interpreter' unexpectedly found")
endif()
if (Python3_Development.Embed_FOUND)
message (FATAL_ERROR "Python 3, COMPONENT 'Development.Embed' unexpectedly found")
endif()
if (NOT Python3_Development.Module_FOUND)
message (FATAL_ERROR "Python 3, COMPONENT 'Development.Module' not found")
endif()
if (NOT Python3_Development.SABIModule_FOUND)
message (FATAL_ERROR "Python 3, COMPONENT 'Development.SABIModule' not found")
endif()
unset(_Python3_LIBRARY_RELEASE CACHE)
unset(_Python3_SABI_LIBRARY_RELEASE CACHE)
endblock()
set(components Interpreter Development) set(components Interpreter Development)
if (CMake_TEST_FindPython3_SABIModule AND WIN32) if (CMake_TEST_FindPython3_SABIModule AND WIN32)
list (APPEND components Development.SABIModule) list (APPEND components Development.SABIModule)

@ -1,3 +1,4 @@
include(RunCMake) include(RunCMake)
include(Autogen_common/utils) include(Autogen_common/utils)
@ -10,18 +11,18 @@ if (DEFINED with_qt_version)
if (QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0) if (QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0)
macro(set_test_variables_for_unwanted_builds) macro(set_test_variables_for_unwanted_builds)
if (RunCMake_GENERATOR MATCHES "Ninja") if (RunCMake_GENERATOR MATCHES "Ninja")
set(RunCMake_TEST_NOT_EXPECT_stdout "widget2.cpp.o.d|mainwindow.cpp.o.d") set(RunCMake_TEST_EXPECT_stdout "ninja: no work to do.")
elseif (RunCMake_GENERATOR MATCHES "Make") elseif (RunCMake_GENERATOR MATCHES "Make")
set(RunCMake_TEST_NOT_EXPECT_stdout "Building CXX object multi_ui_files/CMakeFiles/example.dir/src/widget2.cpp.o|\ set(RunCMake_TEST_NOT_EXPECT_stdout "Building CXX object multi_ui_files/CMakeFiles/example.dir/src/main.cpp.o|\
Building CXX object multi_ui_files/CMakeFiles/example.dir/src/mainwindow.cpp.o") Building CXX object multi_ui_files/CMakeFiles/example.dir/src/widget.cpp.o")
elseif (RunCMake_GENERATOR MATCHES "Visual Studio") elseif (RunCMake_GENERATOR MATCHES "Visual Studio")
set(RunCMake_TEST_NOT_EXPECT_stdout "widget2.cpp|mainwindow.cpp") set(RunCMake_TEST_NOT_EXPECT_stdout "widget.cpp")
elseif (RunCMake_GENERATOR MATCHES "Xcode") elseif (RunCMake_GENERATOR MATCHES "Xcode")
set(RunCMake_TEST_NOT_EXPECT_stdout "widget2.cpp|mainwindow.cpp") set(RunCMake_TEST_NOT_EXPECT_stdout "widget.cpp")
endif() endif()
endmacro() endmacro()
function(uic_build_test test_name binary_dir source_dir file_to_touch test_config) function(uic_incremental_build_test test_name binary_dir source_dir test_config)
set(RunCMake_TEST_BINARY_DIR ${binary_dir}) set(RunCMake_TEST_BINARY_DIR ${binary_dir})
set(RunCMake_TEST_SOURCE_DIR ${source_dir}) set(RunCMake_TEST_SOURCE_DIR ${source_dir})
@ -38,13 +39,14 @@ if (DEFINED with_qt_version)
endif() endif()
run_cmake_with_options(${test_name} ${RunCMake_TEST_OPTIONS} ${config_arg}) run_cmake_with_options(${test_name} ${RunCMake_TEST_OPTIONS} ${config_arg})
set(RunCMake_TEST_NO_CLEAN 1) set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_VARIANT_DESCRIPTION "${RunCMake_TEST_VARIANT_DESCRIPTION}-First build")
run_cmake_command("${test_name}-build" ${CMAKE_COMMAND} --build . ${test_verbose_arg} ${multiconfig_config_arg})
set(RunCMake_TEST_VARIANT_DESCRIPTION "${config_desc}-Second build")
run_cmake_command("${test_name}-build" ${CMAKE_COMMAND} --build . ${test_verbose_arg} ${multiconfig_config_arg}) run_cmake_command("${test_name}-build" ${CMAKE_COMMAND} --build . ${test_verbose_arg} ${multiconfig_config_arg})
file(TOUCH ${file_to_touch}) set(RunCMake_TEST_VARIANT_DESCRIPTION "${config_desc}-No files were built on the third build")
set(RunCMake_TEST_VARIANT_DESCRIPTION "${config_desc}-first_build_after_touching")
set_test_variables_for_unwanted_builds() set_test_variables_for_unwanted_builds()
run_cmake_command("${test_name}-build" ${CMAKE_COMMAND} --build . ${test_verbose_arg} ${multiconfig_config_arg}) run_cmake_command("${test_name}-build" ${CMAKE_COMMAND} --build . ${test_verbose_arg} ${multiconfig_config_arg})
message(STATUS "${test_name}-build${config_desc}-Only build files that were touched were built - PASSED")
endfunction() endfunction()
if(RunCMake_GENERATOR MATCHES "Make|Ninja|Visual Studio|Xcode") if(RunCMake_GENERATOR MATCHES "Make|Ninja|Visual Studio|Xcode")
@ -59,11 +61,9 @@ if (DEFINED with_qt_version)
set(config_desc "-${config}") set(config_desc "-${config}")
endif() endif()
uic_build_test(multi_ui_files_touch_ui ${RunCMake_BINARY_DIR}/multi_ui_files_touch_ui${config_desc}-build uic_incremental_build_test(incremental_build_test ${RunCMake_BINARY_DIR}/incremental_build${config_desc}-build
${RunCMake_SOURCE_DIR}/multi_ui_files ${RunCMake_SOURCE_DIR}/multi_ui_files/src/widget1.ui ${config}) ${RunCMake_SOURCE_DIR}/incremental_build ${config})
uic_build_test(multi_ui_files_touch_cpp ${RunCMake_BINARY_DIR}/multi_ui_files_touch_cpp${config_desc}-build
${RunCMake_SOURCE_DIR}/multi_ui_files ${RunCMake_SOURCE_DIR}/multi_ui_files/src/widget1.cpp ${config})
endforeach() endforeach()
endif() endif()
endif() endif()

@ -8,16 +8,10 @@ set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC ON)
add_executable(example add_executable(example
src/mainwindow.ui main.cpp
src/widget1.ui ui/widget.cpp
src/widget2.ui ui/widget.h
src/mainwindow.h ui/widget.ui
src/widget1.h
src/widget2.h
src/main.cpp
src/mainwindow.cpp
src/widget1.cpp
src/widget2.cpp
) )
target_link_libraries(example PRIVATE Qt${with_qt_version}::Widgets target_link_libraries(example PRIVATE Qt${with_qt_version}::Widgets

@ -1,11 +1,11 @@
#include <QApplication> #include <QApplication>
#include "mainwindow.h" #include "ui/widget.h"
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
QApplication a(argc, argv); QApplication a(argc, argv);
MainWindow w; Widget w;
w.show(); w.show();
return a.exec(); return a.exec();
} }

@ -0,0 +1,15 @@
#include "widget.h"
#include "./ui_widget.h"
Widget::Widget(QWidget* parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}

@ -0,0 +1,23 @@
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget* parent = nullptr);
~Widget();
private:
Ui::Widget* ui;
};
#endif // WIDGET_H

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
</widget>
<resources/>
<connections/>
</ui>

@ -1,25 +0,0 @@
#include "mainwindow.h"
#include <QVBoxLayout>
#include "src/ui_mainwindow.h"
#include "widget1.h"
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
auto layout = new QVBoxLayout;
layout->addWidget(new Widget1);
QWidget* w = new QWidget(this);
w->setLayout(layout);
setCentralWidget(w);
}
MainWindow::~MainWindow()
{
delete ui;
}

@ -1,22 +0,0 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget* parent = nullptr);
~MainWindow();
private:
Ui::MainWindow* ui;
};
#endif // MAINWINDOW_H

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout"/>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

@ -1,22 +0,0 @@
#include "widget1.h"
#include "src/ui_widget1.h"
Widget1::Widget1(QWidget* parent)
: QWidget(parent)
, ui(new Ui::Widget1)
{
ui->setupUi(this);
connect(ui->lineEdit, SIGNAL(textChanged(const QString&)), this,
SLOT(onTextChanged(const QString&)));
}
Widget1::~Widget1()
{
delete ui;
}
void Widget1::onTextChanged(const QString& text)
{
ui->OnTextChanged->setText(text);
}

@ -1,23 +0,0 @@
#ifndef WIDGET1_H
#define WIDGET1_H
#include <QWidget>
namespace Ui {
class Widget1;
}
class Widget1 : public QWidget
{
Q_OBJECT
public:
explicit Widget1(QWidget* parent = nullptr);
~Widget1();
public slots:
void onTextChanged(const QString& text);
private:
Ui::Widget1* ui;
};
#endif // WIDGET1_H

@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget1</class>
<widget class="QWidget" name="Widget1">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Input:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="lineEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>OnTextChanged:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="OnTextChanged">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -1,22 +0,0 @@
#include "widget2.h"
#include "src/ui_widget2.h"
Widget2::Widget2(QWidget* parent)
: QWidget(parent)
, ui(new Ui::Widget2)
{
ui->setupUi(this);
connect(ui->lineEdit, SIGNAL(textChanged(const QString&)), this,
SLOT(onTextChanged(const QString&)));
}
Widget2::~Widget2()
{
delete ui;
}
void Widget2::onTextChanged(const QString& text)
{
ui->OnTextChanged->setText(text);
}

@ -1,24 +0,0 @@
#ifndef WIDGET2_H
#define WIDGET2_H
#include <QWidget>
namespace Ui {
class Widget2;
}
class Widget2 : public QWidget
{
Q_OBJECT
public:
explicit Widget2(QWidget* parent = nullptr);
~Widget2();
public slots:
void onTextChanged(const QString& text);
private:
Ui::Widget2* ui;
};
#endif // WIDGET2_H

@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget2</class>
<widget class="QWidget" name="Widget2">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Input:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="lineEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>OnTextChanged:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="OnTextChanged">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -19,6 +19,10 @@ run_cmake_with_options(TARGET_FILE_BASE_NAME -DCMAKE_BUILD_TYPE:STRING=Debug)
run_cmake_with_options(TARGET_FILE_BASE_NAME-imported-target -DCMAKE_BUILD_TYPE:STRING=Debug) run_cmake_with_options(TARGET_FILE_BASE_NAME-imported-target -DCMAKE_BUILD_TYPE:STRING=Debug)
run_cmake(TARGET_FILE_BASE_NAME-non-valid-target) run_cmake(TARGET_FILE_BASE_NAME-non-valid-target)
run_cmake(TARGET_LINKER_FILE_BASE_NAME-non-valid-target) run_cmake(TARGET_LINKER_FILE_BASE_NAME-non-valid-target)
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "AIX")
run_cmake(TARGET_SONAME_FILE-AIX)
run_cmake(TARGET_SONAME_IMPORT_FILE-AIX)
endif()
run_cmake(NonValidTarget-TARGET_BUNDLE_DIR) run_cmake(NonValidTarget-TARGET_BUNDLE_DIR)
run_cmake(NonValidTarget-TARGET_BUNDLE_DIR_NAME) run_cmake(NonValidTarget-TARGET_BUNDLE_DIR_NAME)
run_cmake(NonValidTarget-TARGET_BUNDLE_CONTENT_DIR) run_cmake(NonValidTarget-TARGET_BUNDLE_CONTENT_DIR)

@ -0,0 +1,8 @@
^CMake Error at TARGET_SONAME_FILE-AIX\.cmake:[0-9]+ \(add_custom_target\):
Error evaluating generator expression:
\$<TARGET_SONAME_FILE:sla>
TARGET_SONAME_FILE is not allowed for AIX_SHARED_LIBRARY_ARCHIVE libraries\.
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)

@ -0,0 +1,4 @@
enable_language (C)
set(CMAKE_AIX_SHARED_LIBRARY_ARCHIVE 1)
add_library(sla SHARED empty.c)
add_custom_target(custom COMMAND ${CMAKE_COMMAND} -E echo "$<TARGET_SONAME_FILE:sla>")

@ -0,0 +1,9 @@
^CMake Error at TARGET_SONAME_IMPORT_FILE-AIX\.cmake:[0-9]+ \(add_custom_target\):
Error evaluating generator expression:
\$<TARGET_SONAME_IMPORT_FILE:sla>
TARGET_SONAME_IMPORT_FILE is not allowed for AIX_SHARED_LIBRARY_ARCHIVE
libraries\.
Call Stack \(most recent call first\):
CMakeLists\.txt:[0-9]+ \(include\)

@ -0,0 +1,4 @@
enable_language (C)
set(CMAKE_AIX_SHARED_LIBRARY_ARCHIVE 1)
add_library(sla SHARED empty.c)
add_custom_target(custom COMMAND ${CMAKE_COMMAND} -E echo "$<TARGET_SONAME_IMPORT_FILE:sla>")

@ -1 +1 @@
(error while loading shared libraries: libStub\.so\.1|Library not loaded: '?@rpath/libStub\.1\.dylib'?|(Cannot|Could not) load module libStub\.so|fatal: libStub\.so\.1: open failed|Shared object "libStub\.so\.1" not found) (error while loading shared libraries: libStub\.so\.1|Library not loaded: '?@rpath/libStub\.1\.dylib'?|(Cannot|Could not) load module libStub\.a\(libStub\.so\.1\)|fatal: libStub\.so\.1: open failed|Shared object "libStub\.so\.1" not found)

@ -1,5 +1,15 @@
enable_language(C) enable_language(C)
set(CMAKE_AIX_SHARED_LIBRARY_ARCHIVE 1)
if(CMAKE_SYSTEM_NAME STREQUAL "AIX")
set(suffix "${CMAKE_SHARED_LIBRARY_ARCHIVE_SUFFIX}")
set(genex "TARGET_LINKER_FILE")
else()
set(suffix "${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(genex "TARGET_SONAME_FILE")
endif()
add_library(Stub SHARED Stub.c) add_library(Stub SHARED Stub.c)
set_target_properties(Stub PROPERTIES set_target_properties(Stub PROPERTIES
SOVERSION 1 SOVERSION 1
@ -7,10 +17,10 @@ set_target_properties(Stub PROPERTIES
) )
set(StubDir ${CMAKE_CURRENT_BINARY_DIR}/lib/stubs) set(StubDir ${CMAKE_CURRENT_BINARY_DIR}/lib/stubs)
set(Stub "${StubDir}/${CMAKE_SHARED_LIBRARY_PREFIX}Stub${CMAKE_SHARED_LIBRARY_SUFFIX}") set(Stub "${StubDir}/${CMAKE_SHARED_LIBRARY_PREFIX}Stub${suffix}")
add_custom_target(StubCopy add_custom_target(StubCopy
COMMAND ${CMAKE_COMMAND} -E make_directory "${StubDir}" COMMAND ${CMAKE_COMMAND} -E make_directory "${StubDir}"
COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_SONAME_FILE:Stub>" "${Stub}" COMMAND ${CMAKE_COMMAND} -E copy "$<${genex}:Stub>" "${Stub}"
BYPRODUCTS ${Stub} BYPRODUCTS ${Stub}
) )
add_dependencies(StubCopy Stub) add_dependencies(StubCopy Stub)

@ -26,6 +26,7 @@ endfunction()
# Use LINKER alone # Use LINKER alone
add_test_library(linker) add_test_library(linker)
target_link_options(linker PRIVATE "LINKER:-foo,bar") target_link_options(linker PRIVATE "LINKER:-foo,bar")
target_link_options(linker PRIVATE "LINKER:") # empty
# Use LINKER with SHELL # Use LINKER with SHELL
add_test_library(linker_shell) add_test_library(linker_shell)

@ -36,3 +36,9 @@ if(aix_sla_versioned)
message(FATAL_ERROR "AIX_SHARED_LIBRARY_ARCHIVE initialized on EXECUTABLE") message(FATAL_ERROR "AIX_SHARED_LIBRARY_ARCHIVE initialized on EXECUTABLE")
endif() endif()
target_link_libraries(UseSLA_versioned PRIVATE sla_versioned) target_link_libraries(UseSLA_versioned PRIVATE sla_versioned)
add_library(imported SHARED IMPORTED)
get_property(aix_sla TARGET imported PROPERTY AIX_SHARED_LIBRARY_ARCHIVE)
if(aix_sla)
message(FATAL_ERROR "AIX_SHARED_LIBRARY_ARCHIVE initialized on imported target")
endif()

Loading…
Cancel
Save