Add 'add_cmake_library' to QtBuild.cmake
Add add_cmake_library to allow us to create normal cmake targets using all the information we have collected via the conversion script. This function is only meant for tests. For an example, see tests/auto/corelib/plugin/qpluginloader/lib/lib.pro. Change-Id: I738cb8ac241b8da1a1da3ef957c24dc7a754d43f Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
parent
441a9f562e
commit
6167031ecc
@ -2518,6 +2518,68 @@ function(qt_check_if_tools_will_be_built)
|
||||
set(QT_WILL_BUILD_TOOLS ${will_build_tools} CACHE INTERNAL "Are tools going to be built" FORCE)
|
||||
endfunction()
|
||||
|
||||
# Wrapper function to create a regular cmake target and forward all the
|
||||
# arguments collected by the conversion script. This is only meant for tests!
|
||||
function(add_cmake_library target)
|
||||
# Process arguments:
|
||||
qt_parse_all_arguments(arg "add_cmake_library"
|
||||
"SHARED;MODULE;STATIC;INTERFACE"
|
||||
"OUTPUT_DIRECTORY;ARCHIVE_INSTALL_DIRECTORY;INSTALL_DIRECTORY"
|
||||
"${__default_private_args};${__default_public_args};"
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
### Define Targets:
|
||||
if(${arg_INTERFACE})
|
||||
add_library("${target}" INTERFACE)
|
||||
elseif(${arg_STATIC})
|
||||
add_library("${target}" STATIC)
|
||||
elseif(${arg_SHARED})
|
||||
add_library("${target}" SHARED)
|
||||
else()
|
||||
add_library("${target}")
|
||||
endif()
|
||||
|
||||
if (NOT arg_ARCHIVE_INSTALL_DIRECTORY AND arg_INSTALL_DIRECTORY)
|
||||
set(arg_ARCHIVE_INSTALL_DIRECTORY "${arg_INSTALL_DIRECTORY}")
|
||||
endif()
|
||||
|
||||
if (android)
|
||||
qt_android_apply_arch_suffix("${target}")
|
||||
endif()
|
||||
|
||||
if (arg_INSTALL_DIRECTORY)
|
||||
set(install_arguments
|
||||
ARCHIVE_INSTALL_DIRECTORY ${arg_ARCHIVE_INSTALL_DIRECTORY}
|
||||
INSTALL_DIRECTORY ${arg_INSTALL_DIRECTORY}
|
||||
)
|
||||
endif()
|
||||
|
||||
extend_target("${target}"
|
||||
SOURCES ${arg_SOURCES}
|
||||
OUTPUT_DIRECTORY ${arg_OUTPUT_DIRECTORY}
|
||||
INCLUDE_DIRECTORIES
|
||||
${arg_INCLUDE_DIRECTORIES}
|
||||
PUBLIC_INCLUDE_DIRECTORIES
|
||||
${arg_PUBLIC_INCLUDE_DIRECTORIES}
|
||||
PUBLIC_DEFINES
|
||||
${arg_PUBLIC_DEFINES}
|
||||
DEFINES
|
||||
${arg_DEFINES}
|
||||
PUBLIC_LIBRARIES ${arg_PUBLIC_LIBRARIES}
|
||||
LIBRARIES ${arg_LIBRARIES} Qt::PlatformModuleInternal
|
||||
COMPILE_OPTIONS ${arg_COMPILE_OPTIONS}
|
||||
PUBLIC_COMPILE_OPTIONS ${arg_PUBLIC_COMPILE_OPTIONS}
|
||||
LINK_OPTIONS ${arg_LINK_OPTIONS}
|
||||
PUBLIC_LINK_OPTIONS ${arg_PUBLIC_LINK_OPTIONS}
|
||||
MOC_OPTIONS ${arg_MOC_OPTIONS}
|
||||
ENABLE_AUTOGEN_TOOLS ${arg_ENABLE_AUTOGEN_TOOLS}
|
||||
DISABLE_AUTOGEN_TOOLS ${arg_DISABLE_AUTOGEN_TOOLS}
|
||||
${install_arguments}
|
||||
)
|
||||
|
||||
endfunction()
|
||||
|
||||
# This function is used to define a "Qt tool", such as moc, uic or rcc.
|
||||
# The BOOTSTRAP option allows building it as standalone program, otherwise
|
||||
# it will be linked against QtCore.
|
||||
|
@ -2421,6 +2421,42 @@ def write_main_part(
|
||||
cm_fh.write(ignored_keys_report)
|
||||
|
||||
|
||||
def write_generic_library(cm_fh: IO[str], scope: Scope, *, indent: int = 0) -> str:
|
||||
|
||||
target_name = scope.TARGET
|
||||
|
||||
library_type = ""
|
||||
|
||||
if 'dll' in scope.get('CONFIG'):
|
||||
library_type = "SHARED"
|
||||
|
||||
if 'static' in scope.get('CONFIG'):
|
||||
library_type = "STATIC"
|
||||
|
||||
extra_lines = []
|
||||
|
||||
if library_type:
|
||||
extra_lines.append(library_type)
|
||||
|
||||
target_path = scope.expandString('target.path')
|
||||
target_path = replace_path_constants(target_path, scope)
|
||||
if target_path:
|
||||
extra_lines.append(f'INSTALL_DIRECTORY "{target_path}"')
|
||||
|
||||
write_main_part(
|
||||
cm_fh,
|
||||
target_name,
|
||||
"Generic Library",
|
||||
"add_cmake_library",
|
||||
scope,
|
||||
extra_lines=extra_lines,
|
||||
indent=indent,
|
||||
known_libraries={},
|
||||
extra_keys=[],
|
||||
)
|
||||
|
||||
return target_name
|
||||
|
||||
def write_module(cm_fh: IO[str], scope: Scope, *, indent: int = 0) -> str:
|
||||
module_name = scope.TARGET
|
||||
if not module_name.startswith("Qt"):
|
||||
@ -2921,9 +2957,12 @@ def handle_app_or_lib(
|
||||
elif is_plugin:
|
||||
assert not is_example
|
||||
target = write_plugin(cm_fh, scope, indent=indent)
|
||||
elif is_lib or "qt_module" in scope.get("_LOADED"):
|
||||
elif is_lib and "qt_module" in scope.get("_LOADED"):
|
||||
assert not is_example
|
||||
target = write_module(cm_fh, scope, indent=indent)
|
||||
elif is_lib:
|
||||
assert not is_example
|
||||
target = write_generic_library(cm_fh, scope, indent=indent)
|
||||
elif "qt_tool" in scope.get("_LOADED"):
|
||||
assert not is_example
|
||||
target = write_tool(cm_fh, scope, indent=indent)
|
||||
|
Loading…
x
Reference in New Issue
Block a user