Remove framework-related functionality from syncqt

The files generated by syncqt should land not only in module include
directory, but also in framework directory. Before syncqt made two
copies of the generated files one in staging directory and the second
one in module framework directory. This commit moves all logic related
to framework header files to cmake scripts. This is done for both
consistency and simlifying the logic. The whole module .syncqt_staging
directory is copying to the framework library in cmake.

[ChangeLog][Tools][syncqt] '-framework' and '-frameworkIncludeDir'
arguments were removed. The related logic is moved to cmake scripts.

Task-number: QTBUG-116483
Pick-to: 6.6 6.5
Change-Id: If79c5470d2ab51eb7fc083bce6fb01858bed76ba
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
Alexey Edelev 2023-09-20 18:29:44 +02:00
parent aa19704bbc
commit bfe62b0224
3 changed files with 28 additions and 45 deletions

View File

@ -83,24 +83,41 @@ function(qt_copy_framework_headers target)
set(output_dir_RHI "${output_dir}/${fw_private_module_header_dir}/rhi")
set(output_dir_SSG "${output_dir}/${fw_private_module_header_dir}/ssg")
qt_internal_module_info(module "${target}")
set(out_files)
set(out_files "")
set(in_files "")
set(copy_commands "")
foreach(type IN ITEMS PUBLIC PRIVATE QPA RHI SSG)
set(in_files_${type} "")
set(fw_output_header_dir "${output_dir_${type}}")
foreach(hdr IN LISTS arg_${type})
get_filename_component(in_file_path ${hdr} ABSOLUTE)
get_filename_component(in_file_name ${hdr} NAME)
set(out_file_path "${fw_output_header_dir}/${in_file_name}")
add_custom_command(
OUTPUT ${out_file_path}
DEPENDS ${in_file_path}
COMMAND ${CMAKE_COMMAND} -E make_directory "${fw_output_header_dir}"
COMMAND ${CMAKE_COMMAND} -E copy "${in_file_path}" "${fw_output_header_dir}"
VERBATIM)
list(APPEND out_files ${out_file_path})
list(APPEND in_files_${type} "${in_file_path}")
endforeach()
if(in_files_${type})
list(APPEND copy_commands
COMMAND ${CMAKE_COMMAND} -E copy ${in_files_${type}} "${fw_output_header_dir}")
list(APPEND in_files ${in_files_${type}})
endif()
endforeach()
list(REMOVE_DUPLICATES out_files)
list(REMOVE_DUPLICATES in_files)
add_custom_command(
OUTPUT "${output_dir}/${fw_versioned_header_dir}" ${out_files}
DEPENDS ${in_files} ${target}_sync_headers
COMMAND
${CMAKE_COMMAND} -E copy_directory
"${module_build_interface_include_dir}/.syncqt_staging"
"${output_dir}/${fw_versioned_header_dir}"
${copy_commands}
VERBATIM
COMMENT "Copy the ${target} header files to the framework directory"
)
set_property(TARGET ${target} APPEND PROPERTY
QT_COPIED_FRAMEWORK_HEADERS "${out_files}")
endfunction()

View File

@ -61,13 +61,6 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge
set(is_framework FALSE)
if(NOT is_interface_lib)
get_target_property(is_framework ${target} FRAMEWORK)
if(is_framework)
qt_internal_get_framework_info(fw ${target})
get_target_property(fw_output_base_dir ${target} LIBRARY_OUTPUT_DIRECTORY)
set(framework_args "-framework"
"-frameworkIncludeDir" "${fw_output_base_dir}/${fw_versioned_header_dir}"
)
endif()
endif()
qt_internal_get_qt_all_known_modules(known_modules)
@ -160,7 +153,6 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge
-headers ${module_headers}
-stagingDir "${syncqt_staging_dir}"
-knownModules ${known_modules}
${framework_args}
${version_script_args}
)
list(JOIN syncqt_args "\n" syncqt_args_string)

View File

@ -7,8 +7,7 @@
* - Header file that contains the module version information, and named as <module>Vesion
* - LD version script if applicable
* - Aliases or copies of the header files sorted by the generic Qt-types: public/private/qpa
* and stored in the corresponding directories. Also copies the aliases to the framework-specific
* directories.
* and stored in the corresponding directories.
* Also the tool executes conformity checks on each header file if applicable, to make sure they
* follow rules that are relevant for their header type.
* The tool can be run in two modes: with either '-all' or '-headers' options specified. Depending
@ -201,8 +200,6 @@ public:
const std::string &privateIncludeDir() const { return m_privateIncludeDir; }
const std::string &frameworkIncludeDir() const { return m_frameworkIncludeDir; }
const std::string &qpaIncludeDir() const { return m_qpaIncludeDir; }
const std::string &rhiIncludeDir() const { return m_rhiIncludeDir; }
@ -231,8 +228,6 @@ public:
bool scanAllMode() const { return m_scanAllMode; }
bool isFramework() const { return m_isFramework; }
bool isInternal() const { return m_isInternal; }
bool isNonQtModule() const { return m_isNonQtModule; }
@ -255,7 +250,6 @@ public:
" -includeDir <dir> -privateIncludeDir <dir> -qpaIncludeDir <dir> -rhiIncludeDir <dir> -ssgIncludeDir <dir>"
" -stagingDir <dir> <-headers <header list>|-all> [-debug]"
" [-versionScript <path>] [-qpaHeadersFilter <regex>] [-rhiHeadersFilter <regex>]"
" [-framework [-frameworkIncludeDir <dir>]]"
" [-knownModules <module1> <module2>... <moduleN>]"
" [-nonQt] [-internal] [-copy]\n"
""
@ -303,10 +297,6 @@ public:
" -versionScript Generate linker version script by\n"
" provided path.\n"
" -debug Enable debug output.\n"
" -framework Indicates that module is framework.\n"
" -frameworkIncludeDir The directory to store the framework\n"
" header files.\n"
" E.g. QtCore.framework/Versions/A/Headers\n"
" -copy Copy header files instead of creating\n"
" aliases.\n"
" -minimal Do not create CaMeL case headers for the\n"
@ -353,7 +343,6 @@ private:
{ "-ssgIncludeDir", { &m_ssgIncludeDir } },
{ "-stagingDir", { &m_stagingDir, true } },
{ "-versionScript", { &m_versionScriptFile, true } },
{ "-frameworkIncludeDir", { &m_frameworkIncludeDir, true } },
{ "-publicNamespaceFilter", { &publicNamespaceFilter, true } },
};
@ -366,7 +355,7 @@ private:
static const std::unordered_map<std::string, CommandLineOption<bool>> boolArgumentMap = {
{ "-nonQt", { &m_isNonQtModule, true } }, { "-debug", { &m_debug, true } },
{ "-help", { &m_printHelpOnly, true } }, { "-framework", { &m_isFramework, true } },
{ "-help", { &m_printHelpOnly, true } },
{ "-internal", { &m_isInternal, true } }, { "-all", { &m_scanAllMode, true } },
{ "-copy", { &m_copy, true } }, { "-minimal", { &m_minimal, true } },
{ "-showonly", { &m_showOnly, true } }, { "-showOnly", { &m_showOnly, true } },
@ -503,10 +492,10 @@ private:
// Convert all paths from command line to a generic one.
void normilizePaths()
{
static std::array<std::string *, 9> paths = {
static std::array<std::string *, 8> paths = {
&m_sourceDir, &m_binaryDir, &m_includeDir, &m_privateIncludeDir,
&m_qpaIncludeDir, &m_rhiIncludeDir, &m_stagingDir,
&m_versionScriptFile, &m_frameworkIncludeDir
&m_versionScriptFile,
};
for (auto path : paths) {
if (!path->empty())
@ -524,13 +513,11 @@ private:
std::string m_ssgIncludeDir;
std::string m_stagingDir;
std::string m_versionScriptFile;
std::string m_frameworkIncludeDir;
std::set<std::string> m_knownModules;
std::set<std::string> m_headers;
std::set<std::string> m_generatedHeaders;
bool m_scanAllMode = false;
bool m_copy = false;
bool m_isFramework = false;
bool m_isNonQtModule = false;
bool m_isInternal = false;
bool m_printHelpOnly = false;
@ -759,13 +746,6 @@ public:
// process eaiser.
if (!copyGeneratedHeadersToStagingDirectory(m_commandLineArgs->stagingDir()))
error = SyncFailed;
// We also need to have a copy of the generated header files in framework include
// directories when building with '-framework'.
if (m_commandLineArgs->isFramework()) {
if (!copyGeneratedHeadersToStagingDirectory(
m_commandLineArgs->frameworkIncludeDir(), true))
error = SyncFailed;
}
}
return error;
}
@ -1637,12 +1617,6 @@ public:
if (isCrossModuleDeprecation) {
const std::string stagingDir = outputDir + "/.syncqt_staging/";
writeIfDifferent(stagingDir + headerName, buffer.str());
if (m_commandLineArgs->isFramework()) {
const std::string frameworkStagingDir = stagingDir + moduleName
+ ".framework/Versions/A/Headers/" QT_VERSION_STR "/"
+ moduleName.substr(2) + '/';
writeIfDifferent(frameworkStagingDir + headerName, buffer.str());
}
}
m_producedHeaders.insert(headerName);
}