2020-01-31 13:50:50 +01:00
if ( QT_CREATOR_API_DEFINED )
return ( )
endif ( )
set ( QT_CREATOR_API_DEFINED TRUE )
2022-07-04 10:58:01 +02:00
set ( IDE_QT_VERSION_MIN "6.2.0" )
2020-09-03 13:36:44 +02:00
2020-05-15 16:01:43 +02:00
include ( ${ CMAKE_CURRENT_LIST_DIR } /QtCreatorAPIInternal.cmake )
2020-11-12 11:27:34 +01:00
include ( ${ CMAKE_CURRENT_LIST_DIR } /QtcSeparateDebugInfo.cmake )
2019-06-26 17:51:06 +02:00
set ( IDE_APP_PATH "${_IDE_APP_PATH}" ) # The target path of the IDE application (relative to CMAKE_INSTALL_PREFIX).
set ( IDE_APP_TARGET "${_IDE_APP_TARGET}" ) # The IDE application name.
set ( IDE_PLUGIN_PATH "${_IDE_PLUGIN_PATH}" ) # The IDE plugin path (relative to CMAKE_INSTALL_PREFIX).
set ( IDE_LIBRARY_BASE_PATH "${_IDE_LIBRARY_BASE_PATH}" ) # The IDE library base path (relative to CMAKE_INSTALL_PREFIX).
set ( IDE_LIBRARY_PATH "${_IDE_LIBRARY_PATH}" ) # The IDE library path (relative to CMAKE_INSTALL_PREFIX).
2021-05-10 13:54:19 +02:00
set ( IDE_LIBRARY_ARCHIVE_PATH "${_IDE_LIBRARY_ARCHIVE_PATH}" ) # The IDE library archive path (relative to CMAKE_INSTALL_PREFIX).
2019-06-26 17:51:06 +02:00
set ( IDE_LIBEXEC_PATH "${_IDE_LIBEXEC_PATH}" ) # The IDE libexec path (relative to CMAKE_INSTALL_PREFIX).
set ( IDE_DATA_PATH "${_IDE_DATA_PATH}" ) # The IDE data path (relative to CMAKE_INSTALL_PREFIX).
set ( IDE_DOC_PATH "${_IDE_DOC_PATH}" ) # The IDE documentation path (relative to CMAKE_INSTALL_PREFIX).
set ( IDE_BIN_PATH "${_IDE_BIN_PATH}" ) # The IDE bin path (relative to CMAKE_INSTALL_PREFIX).
2021-03-23 17:54:06 +01:00
set ( IDE_HEADER_INSTALL_PATH "${_IDE_HEADER_INSTALL_PATH}" )
set ( IDE_CMAKE_INSTALL_PATH "${_IDE_CMAKE_INSTALL_PATH}" )
2019-06-26 17:51:06 +02:00
file ( RELATIVE_PATH RELATIVE_PLUGIN_PATH "/${IDE_BIN_PATH}" "/${IDE_PLUGIN_PATH}" )
file ( RELATIVE_PATH RELATIVE_LIBEXEC_PATH "/${IDE_BIN_PATH}" "/${IDE_LIBEXEC_PATH}" )
file ( RELATIVE_PATH RELATIVE_DATA_PATH "/${IDE_BIN_PATH}" "/${IDE_DATA_PATH}" )
file ( RELATIVE_PATH RELATIVE_DOC_PATH "/${IDE_BIN_PATH}" "/${IDE_DOC_PATH}" )
list ( APPEND DEFAULT_DEFINES
R E L A T I V E _ P L U G I N _ P A T H = " $ { R E L A T I V E _ P L U G I N _ P A T H } "
R E L A T I V E _ L I B E X E C _ P A T H = " $ { R E L A T I V E _ L I B E X E C _ P A T H } "
R E L A T I V E _ D A T A _ P A T H = " $ { R E L A T I V E _ D A T A _ P A T H } "
R E L A T I V E _ D O C _ P A T H = " $ { R E L A T I V E _ D O C _ P A T H } "
)
2020-10-22 13:19:12 +02:00
# use CMAKE_CURRENT_FUNCTION_LIST_DIR when we can require CMake 3.17
set ( _THIS_MODULE_BASE_DIR "${CMAKE_CURRENT_LIST_DIR}" )
2023-08-16 17:15:52 +02:00
qtc_env_with_default ( "QTC_WITH_CCACHE_SUPPORT" ENV_WITH_CCACHE_SUPPORT OFF )
2020-09-30 17:41:02 +02:00
option ( BUILD_PLUGINS_BY_DEFAULT "Build plugins by default. This can be used to build all plugins by default, or none." ON )
option ( BUILD_EXECUTABLES_BY_DEFAULT "Build executables by default. This can be used to build all executables by default, or none." ON )
option ( BUILD_LIBRARIES_BY_DEFAULT "Build libraries by default. This can be used to build all libraries by default, or none." ON )
2021-06-11 14:46:53 +02:00
option ( BUILD_TESTS_BY_DEFAULT "Build tests by default. This can be used to build all tests by default, or none." ON )
2020-12-22 11:20:43 +01:00
option ( QTC_SEPARATE_DEBUG_INFO "Extract debug information from binary files." OFF )
2021-04-23 10:38:22 +02:00
option ( WITH_SCCACHE_SUPPORT "Enables support for building with SCCACHE and separate debug info with MSVC, which SCCACHE normally doesn't support." OFF )
2023-08-15 14:10:23 +02:00
option ( WITH_CCACHE_SUPPORT "Enables support for building with CCACHE and separate debug info with MSVC, which CCACHE normally doesn't support." "${ENV_WITH_CCACHE_SUPPORT}" )
2022-04-21 14:10:09 +02:00
option ( QTC_STATIC_BUILD "Builds libraries and plugins as static libraries" OFF )
2020-09-30 17:41:02 +02:00
2020-11-13 16:36:35 +01:00
# If we provide a list of plugins, executables, libraries, then the BUILD_<type>_BY_DEFAULT will be set to OFF
# and for every element we set BUILD_<type>_<elment> to ON
# e.g. BUILD_PLUGINS=Core;TextEditor will result in BUILD_PLUGINS_BY_DEFAULT=OFF and BUILD_PLUGIN_CORE=ON and BUILD_PLUGIN_TEXTEDITOR ON
function ( qtc_check_default_values_for_list list_type )
set ( PLUGINS_single plugin )
set ( EXECUTABLES_single executable )
set ( LIBRARIES_single library )
2021-06-11 14:46:53 +02:00
set ( TESTS_single test )
2020-11-13 16:36:35 +01:00
if ( NOT DEFINED BUILD_ ${ list_type } )
return ( )
endif ( )
set ( BUILD_ ${ list_type } _BY_DEFAULT OFF CACHE BOOL "" FORCE )
foreach ( element ${ BUILD_${list_type } } )
string ( TOUPPER "${${list_type}_single}_${element}" upper_element )
set ( BUILD_ ${ upper_element } ON CACHE BOOL "Build ${${list_type}_single} ${element}." )
endforeach ( )
endfunction ( )
qtc_check_default_values_for_list ( PLUGINS )
qtc_check_default_values_for_list ( EXECUTABLES )
qtc_check_default_values_for_list ( LIBRARIES )
2021-06-11 14:46:53 +02:00
qtc_check_default_values_for_list ( TESTS )
2020-11-13 16:36:35 +01:00
2019-06-26 17:51:06 +02:00
function ( qtc_plugin_enabled varName name )
if ( NOT ( name IN_LIST __QTC_PLUGINS ) )
2020-05-15 16:01:43 +02:00
message ( FATAL_ERROR "qtc_plugin_enabled: Unknown plugin target \" ${ name } \"")
2019-06-26 17:51:06 +02:00
endif ( )
if ( TARGET ${ name } )
set ( ${ varName } ON PARENT_SCOPE )
else ( )
set ( ${ varName } OFF PARENT_SCOPE )
endif ( )
endfunction ( )
2020-02-05 15:55:21 +01:00
function ( qtc_library_enabled varName name )
if ( NOT ( name IN_LIST __QTC_LIBRARIES ) )
2020-05-15 16:01:43 +02:00
message ( FATAL_ERROR "qtc_library_enabled: Unknown library target \" ${ name } \"")
2020-02-05 15:55:21 +01:00
endif ( )
if ( TARGET ${ name } )
set ( ${ varName } ON PARENT_SCOPE )
else ( )
set ( ${ varName } OFF PARENT_SCOPE )
endif ( )
endfunction ( )
2019-08-19 11:10:20 +02:00
function ( qtc_output_binary_dir varName )
if ( QTC_MERGE_BINARY_DIR )
set ( ${ varName } ${ QtCreator_BINARY_DIR } PARENT_SCOPE )
else ( )
set ( ${ varName } ${ PROJECT_BINARY_DIR } PARENT_SCOPE )
endif ( )
endfunction ( )
2021-03-23 17:54:06 +01:00
function ( qtc_source_dir varName )
if ( QTC_MERGE_BINARY_DIR )
set ( ${ varName } ${ QtCreator_SOURCE_DIR } PARENT_SCOPE )
else ( )
set ( ${ varName } ${ PROJECT_SOURCE_DIR } PARENT_SCOPE )
endif ( )
endfunction ( )
2023-01-24 16:23:00 +01:00
function ( get_default_defines varName allow_ascii_casts )
get_directory_property ( _compile_definitions COMPILE_DEFINITIONS )
list ( FIND _compile_definitions QT_NO_CAST_FROM_ASCII no_cast_index )
set ( default_defines_copy ${ DEFAULT_DEFINES } )
if ( allow_ascii_casts OR no_cast_index GREATER_EQUAL 0 )
list ( REMOVE_ITEM default_defines_copy QT_NO_CAST_TO_ASCII QT_RESTRICTED_CAST_FROM_ASCII )
endif ( )
set ( ${ varName } ${ default_defines_copy } PARENT_SCOPE )
endfunction ( )
2019-06-26 17:51:06 +02:00
function ( add_qtc_library name )
2023-03-06 16:00:47 +01:00
cmake_parse_arguments ( _arg "STATIC;OBJECT;SHARED;SKIP_TRANSLATION;ALLOW_ASCII_CASTS;FEATURE_INFO;SKIP_PCH;EXCLUDE_FROM_INSTALL"
2020-11-02 17:20:26 +01:00
" D E S T I N A T I O N ; C O M P O N E N T ; S O U R C E S _ P R E F I X ; B U I L D _ D E F A U L T "
2023-09-07 10:11:23 +02:00
" C O N D I T I O N ; D E P E N D S ; P U B L I C _ D E P E N D S ; D E F I N E S ; P U B L I C _ D E F I N E S ; I N C L U D E S ; S Y S T E M _ I N C L U D E S ; P U B L I C _ I N C L U D E S ; P U B L I C _ S Y S T E M _ I N C L U D E S ; S O U R C E S ; E X P L I C I T _ M O C ; S K I P _ A U T O M O C ; E X T R A _ T R A N S L A T I O N S ; P R O P E R T I E S " $ { A R G N }
2019-06-26 17:51:06 +02:00
)
2023-01-24 16:23:00 +01:00
get_default_defines ( default_defines_copy ${ _arg_ALLOW_ASCII_CASTS } )
2020-01-24 17:09:56 +01:00
2019-06-26 17:51:06 +02:00
if ( ${ _arg_UNPARSED_ARGUMENTS } )
message ( FATAL_ERROR "add_qtc_library had unparsed arguments" )
endif ( )
update_cached_list ( __QTC_LIBRARIES "${name}" )
2021-03-05 12:28:41 +01:00
condition_info ( _extra_text _arg_CONDITION )
2020-11-02 17:20:26 +01:00
if ( NOT _arg_CONDITION )
set ( _arg_CONDITION ON )
endif ( )
string ( TOUPPER "BUILD_LIBRARY_${name}" _build_library_var )
if ( DEFINED _arg_BUILD_DEFAULT )
set ( _build_library_default ${ _arg_BUILD_DEFAULT } )
else ( )
2020-09-30 17:41:02 +02:00
set ( _build_library_default ${ BUILD_LIBRARIES_BY_DEFAULT } )
2020-11-02 17:20:26 +01:00
endif ( )
if ( DEFINED ENV{QTC_ ${ _build_library_var } } )
set ( _build_library_default "$ENV{QTC_${_build_library_var}}" )
endif ( )
set ( ${ _build_library_var } "${_build_library_default}" CACHE BOOL "Build library ${name}." )
2020-02-05 15:55:21 +01:00
2020-11-02 17:20:26 +01:00
if ( ( ${ _arg_CONDITION } ) AND ${ _build_library_var } )
set ( _library_enabled ON )
else ( )
set ( _library_enabled OFF )
endif ( )
2021-03-05 12:28:41 +01:00
if ( DEFINED _arg_FEATURE_INFO )
add_feature_info ( "Library ${name}" _library_enabled "${_extra_text}" )
endif ( )
2020-11-02 17:20:26 +01:00
if ( NOT _library_enabled )
return ( )
2020-02-05 15:55:21 +01:00
endif ( )
2019-06-26 17:51:06 +02:00
set ( library_type SHARED )
2022-05-03 15:11:53 +02:00
if ( _arg_STATIC OR ( QTC_STATIC_BUILD AND NOT _arg_SHARED ) )
2019-06-26 17:51:06 +02:00
set ( library_type STATIC )
endif ( )
if ( _arg_OBJECT )
set ( library_type OBJECT )
endif ( )
2022-01-28 08:59:14 +01:00
add_library ( ${ name } ${ library_type } )
2020-11-11 16:11:07 +01:00
add_library ( QtCreator:: ${ name } ALIAS ${ name } )
2021-02-19 17:35:32 +01:00
2019-07-30 15:26:31 +02:00
if ( ${ name } MATCHES "^[^0-9-]+$" )
2022-04-21 14:10:09 +02:00
if ( QTC_STATIC_BUILD )
set ( export_symbol_suffix "STATIC_LIBRARY" )
else ( )
set ( export_symbol_suffix "LIBRARY" )
endif ( )
string ( TOUPPER "${name}_${export_symbol_suffix}" EXPORT_SYMBOL )
2019-06-26 17:51:06 +02:00
endif ( )
if ( WITH_TESTS )
set ( TEST_DEFINES WITH_TESTS SRCDIR= "${CMAKE_CURRENT_SOURCE_DIR}" )
endif ( )
2023-05-12 13:18:35 +02:00
if ( ( _arg_STATIC OR _arg_OBJECT ) AND UNIX )
2021-10-20 12:04:31 +02:00
# not added by Qt if reduce_relocations is turned off for it
set_target_properties ( ${ name } PROPERTIES POSITION_INDEPENDENT_CODE ON )
endif ( )
2020-05-18 09:37:42 +02:00
extend_qtc_target ( ${ name }
2022-01-28 08:59:14 +01:00
S O U R C E S _ P R E F I X $ { _ a r g _ S O U R C E S _ P R E F I X }
S O U R C E S $ { _ a r g _ S O U R C E S }
2020-05-18 09:37:42 +02:00
I N C L U D E S $ { _ a r g _ I N C L U D E S }
2023-09-07 10:11:23 +02:00
S Y S T E M _ I N C L U D E S $ { _ a r g _ S Y T E M _ I N C L U D E S }
2020-05-18 09:37:42 +02:00
P U B L I C _ I N C L U D E S $ { _ a r g _ P U B L I C _ I N C L U D E S }
2023-09-07 10:11:23 +02:00
P U B L I C _ S Y S T E M _ I N C L U D E S $ { _ a r g _ P U B L I C _ S Y S T E M _ I N C L U D E S }
2022-04-21 14:10:09 +02:00
D E F I N E S $ { d e f a u l t _ d e f i n e s _ c o p y } $ { _ a r g _ D E F I N E S } $ { T E S T _ D E F I N E S }
2020-05-18 09:37:42 +02:00
P U B L I C _ D E F I N E S $ { _ a r g _ P U B L I C _ D E F I N E S }
D E P E N D S $ { _ a r g _ D E P E N D S } $ { I M P L I C I T _ D E P E N D S }
P U B L I C _ D E P E N D S $ { _ a r g _ P U B L I C _ D E P E N D S }
E X P L I C I T _ M O C $ { _ a r g _ E X P L I C I T _ M O C }
2020-05-18 10:09:40 +02:00
S K I P _ A U T O M O C $ { _ a r g _ S K I P _ A U T O M O C }
E X T R A _ T R A N S L A T I O N S $ { _ a r g _ E X T R A _ T R A N S L A T I O N S }
2020-05-18 09:37:42 +02:00
)
2019-06-26 17:51:06 +02:00
2022-04-21 14:10:09 +02:00
if ( QTC_STATIC_BUILD )
2023-11-08 20:28:36 +01:00
extend_qtc_target ( ${ name }
D E F I N E S $ { E X P O R T _ S Y M B O L }
P U B L I C _ D E F I N E S $ { E X P O R T _ S Y M B O L } )
2022-04-21 14:10:09 +02:00
else ( )
extend_qtc_target ( ${ name } DEFINES ${ EXPORT_SYMBOL } )
2023-11-08 20:28:36 +01:00
if ( _arg_OBJECT OR _arg_STATIC )
extend_qtc_target ( ${ name } PUBLIC_DEFINES ${ EXPORT_SYMBOL } )
endif ( )
2022-04-21 14:10:09 +02:00
endif ( )
2020-09-30 18:38:14 +02:00
# everything is different with SOURCES_PREFIX
if ( NOT _arg_SOURCES_PREFIX )
get_filename_component ( public_build_interface_dir "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE )
file ( RELATIVE_PATH include_dir_relative_path ${ PROJECT_SOURCE_DIR } "${CMAKE_CURRENT_SOURCE_DIR}/.." )
target_include_directories ( ${ name }
P R I V A T E
" $ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } > "
P U B L I C
" $ < B U I L D _ I N T E R F A C E : $ { p u b l i c _ b u i l d _ i n t e r f a c e _ d i r } > "
2021-03-23 17:54:06 +01:00
" $ < I N S T A L L _ I N T E R F A C E : $ { I D E _ H E A D E R _ I N S T A L L _ P A T H } / $ { i n c l u d e _ d i r _ r e l a t i v e _ p a t h } > "
2020-09-30 18:38:14 +02:00
)
endif ( )
2019-06-26 17:51:06 +02:00
2019-05-23 15:13:06 +02:00
set ( skip_translation OFF )
if ( _arg_SKIP_TRANSLATION )
set ( skip_translation ON )
endif ( )
2019-09-27 22:52:15 +02:00
set ( _DESTINATION "${IDE_BIN_PATH}" )
if ( _arg_DESTINATION )
set ( _DESTINATION "${_arg_DESTINATION}" )
endif ( )
2019-08-19 11:10:20 +02:00
qtc_output_binary_dir ( _output_binary_dir )
2021-02-26 17:00:18 +01:00
string ( REGEX MATCH "^[0-9]*" IDE_VERSION_MAJOR ${ IDE_VERSION } )
2019-06-26 17:51:06 +02:00
set_target_properties ( ${ name } PROPERTIES
2021-07-05 12:45:24 +02:00
L I N K _ D E P E N D S _ N O _ S H A R E D O N
2019-06-26 17:51:06 +02:00
S O U R C E S _ D I R " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
V E R S I O N " $ { I D E _ V E R S I O N } "
2021-02-26 17:00:18 +01:00
S O V E R S I O N " $ { I D E _ V E R S I O N _ M A J O R } "
2020-06-26 11:59:19 +02:00
M A C H O _ C U R R E N T _ V E R S I O N $ { I D E _ V E R S I O N }
M A C H O _ C O M P A T I B I L I T Y _ V E R S I O N $ { I D E _ V E R S I O N _ C O M P A T }
2020-02-19 11:35:39 +01:00
C X X _ E X T E N S I O N S O F F
2019-06-26 17:51:06 +02:00
C X X _ V I S I B I L I T Y _ P R E S E T h i d d e n
V I S I B I L I T Y _ I N L I N E S _ H I D D E N O N
2022-02-10 08:52:32 +01:00
B U I L D _ R P A T H " $ { _ L I B _ R P A T H } ; $ { C M A K E _ B U I L D _ R P A T H } "
I N S T A L L _ R P A T H " $ { _ L I B _ R P A T H } ; $ { C M A K E _ I N S T A L L _ R P A T H } "
2019-09-27 22:52:15 +02:00
R U N T I M E _ O U T P U T _ D I R E C T O R Y " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { _ D E S T I N A T I O N } "
2019-08-19 11:10:20 +02:00
L I B R A R Y _ O U T P U T _ D I R E C T O R Y " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { I D E _ L I B R A R Y _ P A T H } "
2021-05-10 13:54:19 +02:00
A R C H I V E _ O U T P U T _ D I R E C T O R Y " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { I D E _ L I B R A R Y _ A R C H I V E _ P A T H } "
2022-02-24 14:53:36 +01:00
Q T _ C O M P I L E _ O P T I O N S _ D I S A B L E _ W A R N I N G S O F F
2019-06-26 17:51:06 +02:00
$ { _ a r g _ P R O P E R T I E S }
)
2021-06-17 11:44:01 +02:00
if ( NOT _arg_SKIP_PCH )
enable_pch ( ${ name } )
endif ( )
2019-06-26 17:51:06 +02:00
unset ( NAMELINK_OPTION )
if ( library_type STREQUAL "SHARED" )
set ( NAMELINK_OPTION NAMELINK_SKIP )
2020-08-10 10:36:34 -07:00
qtc_add_link_flags_no_undefined ( ${ name } )
2019-06-26 17:51:06 +02:00
endif ( )
2020-02-05 15:55:21 +01:00
unset ( COMPONENT_OPTION )
if ( _arg_COMPONENT )
set ( COMPONENT_OPTION "COMPONENT" "${_arg_COMPONENT}" )
endif ( )
2023-03-06 16:00:47 +01:00
if ( NOT _arg_EXCLUDE_FROM_INSTALL AND ( NOT QTC_STATIC_BUILD OR _arg_SHARED ) )
2022-04-21 14:10:09 +02:00
install ( TARGETS ${ name }
E X P O R T Q t C r e a t o r
R U N T I M E
D E S T I N A T I O N " $ { _ D E S T I N A T I O N } "
$ { C O M P O N E N T _ O P T I O N }
O P T I O N A L
L I B R A R Y
D E S T I N A T I O N " $ { I D E _ L I B R A R Y _ P A T H } "
$ { N A M E L I N K _ O P T I O N }
$ { C O M P O N E N T _ O P T I O N }
O P T I O N A L
O B J E C T S
D E S T I N A T I O N " $ { I D E _ L I B R A R Y _ P A T H } "
C O M P O N E N T D e v e l E X C L U D E _ F R O M _ A L L
A R C H I V E
D E S T I N A T I O N " $ { I D E _ L I B R A R Y _ A R C H I V E _ P A T H } "
C O M P O N E N T D e v e l E X C L U D E _ F R O M _ A L L
O P T I O N A L
)
endif ( )
2019-06-26 17:51:06 +02:00
2020-11-12 11:27:34 +01:00
qtc_enable_separate_debug_info ( ${ name } "${IDE_LIBRARY_PATH}" )
2021-10-05 07:40:58 +02:00
if ( WITH_SANITIZE )
2022-09-20 00:05:32 -07:00
qtc_enable_sanitize ( "${name}" ${ SANITIZE_FLAGS } )
2021-10-05 07:40:58 +02:00
endif ( )
2022-04-21 14:10:09 +02:00
if ( NAMELINK_OPTION AND NOT QTC_STATIC_BUILD )
2019-06-26 17:51:06 +02:00
install ( TARGETS ${ name }
L I B R A R Y
D E S T I N A T I O N " $ { I D E _ L I B R A R Y _ P A T H } "
N A M E L I N K _ O N L Y
C O M P O N E N T D e v e l E X C L U D E _ F R O M _ A L L
2019-12-03 14:15:55 +01:00
O P T I O N A L
2019-06-26 17:51:06 +02:00
)
endif ( )
2021-12-08 18:34:33 +01:00
get_target_property ( have_automoc_prop ${ name } AUTOMOC )
2023-01-23 11:44:31 +01:00
# check for Qt 6 is needed because sdktool & qml2puppet still build with Qt 5
if ( Qt6_VERSION AND "${have_automoc_prop}" )
2021-12-08 18:34:33 +01:00
qt_extract_metatypes ( ${ name } )
endif ( )
2019-06-26 17:51:06 +02:00
endfunction ( add_qtc_library )
function ( add_qtc_plugin target_name )
cmake_parse_arguments ( _arg
2021-11-19 15:26:54 +01:00
" S K I P _ I N S T A L L ; I N T E R N A L _ O N L Y ; S K I P _ T R A N S L A T I O N ; E X P O R T ; S K I P _ P C H "
2023-07-24 14:48:57 +02:00
" V E R S I O N ; C O M P A T _ V E R S I O N ; P L U G I N _ P A T H ; P L U G I N _ N A M E ; O U T P U T _ N A M E ; B U I L D _ D E F A U L T ; P L U G I N _ C L A S S "
2023-09-07 10:11:23 +02:00
" C O N D I T I O N ; D E P E N D S ; P U B L I C _ D E P E N D S ; D E F I N E S ; P U B L I C _ D E F I N E S ; I N C L U D E S ; S Y S T E M _ I N C L U D E S ; P U B L I C _ I N C L U D E S ; P U B L I C _ S Y S T E M _ I N C L U D E S ; S O U R C E S ; E X P L I C I T _ M O C ; S K I P _ A U T O M O C ; E X T R A _ T R A N S L A T I O N S ; P L U G I N _ D E P E N D S ; P L U G I N _ R E C O M M E N D S ; P L U G I N _ T E S T _ D E P E N D S ; P R O P E R T I E S "
2019-06-26 17:51:06 +02:00
$ { A R G N }
)
if ( ${ _arg_UNPARSED_ARGUMENTS } )
message ( FATAL_ERROR "add_qtc_plugin had unparsed arguments" )
endif ( )
update_cached_list ( __QTC_PLUGINS "${target_name}" )
set ( name ${ target_name } )
if ( _arg_PLUGIN_NAME )
set ( name ${ _arg_PLUGIN_NAME } )
endif ( )
2019-08-30 11:43:19 +02:00
condition_info ( _extra_text _arg_CONDITION )
2019-06-26 17:51:06 +02:00
if ( NOT _arg_CONDITION )
set ( _arg_CONDITION ON )
endif ( )
string ( TOUPPER "BUILD_PLUGIN_${target_name}" _build_plugin_var )
2020-06-02 13:12:41 +02:00
if ( DEFINED _arg_BUILD_DEFAULT )
set ( _build_plugin_default ${ _arg_BUILD_DEFAULT } )
else ( )
2020-09-30 17:41:02 +02:00
set ( _build_plugin_default ${ BUILD_PLUGINS_BY_DEFAULT } )
2020-06-02 13:12:41 +02:00
endif ( )
2019-06-26 17:51:06 +02:00
if ( DEFINED ENV{QTC_ ${ _build_plugin_var } } )
set ( _build_plugin_default "$ENV{QTC_${_build_plugin_var}}" )
endif ( )
2019-08-07 10:46:06 +02:00
if ( _arg_INTERNAL_ONLY )
set ( ${ _build_plugin_var } "${_build_plugin_default}" )
else ( )
set ( ${ _build_plugin_var } "${_build_plugin_default}" CACHE BOOL "Build plugin ${name}." )
endif ( )
2019-06-26 17:51:06 +02:00
if ( ( ${ _arg_CONDITION } ) AND ${ _build_plugin_var } )
set ( _plugin_enabled ON )
else ( )
set ( _plugin_enabled OFF )
endif ( )
2019-08-07 10:46:06 +02:00
if ( NOT _arg_INTERNAL_ONLY )
add_feature_info ( "Plugin ${name}" _plugin_enabled "${_extra_text}" )
endif ( )
2019-06-26 17:51:06 +02:00
if ( NOT _plugin_enabled )
return ( )
endif ( )
### Generate plugin.json file:
if ( NOT _arg_VERSION )
set ( _arg_VERSION ${ IDE_VERSION } )
endif ( )
if ( NOT _arg_COMPAT_VERSION )
set ( _arg_COMPAT_VERSION ${ _arg_VERSION } )
endif ( )
# Generate dependency list:
find_dependent_plugins ( _DEP_PLUGINS ${ _arg_PLUGIN_DEPENDS } )
set ( _arg_DEPENDENCY_STRING "\" Dependencies\ " : [\n" )
foreach ( i IN LISTS _DEP_PLUGINS )
2020-11-11 16:11:07 +01:00
if ( i MATCHES "^QtCreator::" )
2019-06-26 17:51:06 +02:00
set ( _v ${ IDE_VERSION } )
2020-11-11 16:11:07 +01:00
string ( REPLACE "QtCreator::" "" i ${ i } )
2019-06-26 17:51:06 +02:00
else ( )
get_property ( _v TARGET "${i}" PROPERTY _arg_VERSION )
endif ( )
string ( APPEND _arg_DEPENDENCY_STRING
" { \ " N a m e \ " : \ " $ { i } \ " , \ " V e r s i o n \ " : \ " $ { _ v } \ " } "
)
endforeach ( i )
2020-12-11 10:13:23 +01:00
foreach ( i IN LISTS _arg_PLUGIN_RECOMMENDS )
2020-11-11 16:11:07 +01:00
if ( i MATCHES "^QtCreator::" )
2019-06-26 17:51:06 +02:00
set ( _v ${ IDE_VERSION } )
2020-11-11 16:11:07 +01:00
string ( REPLACE "QtCreator::" "" i ${ i } )
2019-06-26 17:51:06 +02:00
else ( )
get_property ( _v TARGET "${i}" PROPERTY _arg_VERSION )
endif ( )
string ( APPEND _arg_DEPENDENCY_STRING
" { \ " N a m e \ " : \ " $ { i } \ " , \ " V e r s i o n \ " : \ " $ { _ v } \ " , \ " T y p e \ " : \ " o p t i o n a l \ " } "
)
endforeach ( i )
2020-12-11 12:23:49 +01:00
foreach ( i IN LISTS _arg_PLUGIN_TEST_DEPENDS )
if ( i MATCHES "^QtCreator::" )
string ( REPLACE "QtCreator::" "" i ${ i } )
endif ( )
set ( _v ${ IDE_VERSION } )
string ( APPEND _arg_DEPENDENCY_STRING
" { \ " N a m e \ " : \ " $ { i } \ " , \ " V e r s i o n \ " : \ " $ { _ v } \ " , \ " T y p e \ " : \ " t e s t \ " } "
)
endforeach ( i )
2020-12-11 10:13:23 +01:00
string ( REPLACE "} {" "},\n {"
_ a r g _ D E P E N D E N C Y _ S T R I N G " $ { _ a r g _ D E P E N D E N C Y _ S T R I N G } "
)
2019-06-26 17:51:06 +02:00
string ( APPEND _arg_DEPENDENCY_STRING "\n ]" )
2023-07-24 16:14:26 +02:00
set ( IDE_PLUGIN_DEPENDENCIES ${ _arg_DEPENDENCY_STRING } )
2019-06-26 17:51:06 +02:00
### Configure plugin.json file:
if ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${name}.json.in" )
2022-03-31 11:14:44 +03:00
list ( APPEND _arg_SOURCES ${ name } .json.in )
2019-06-26 17:51:06 +02:00
file ( READ "${name}.json.in" plugin_json_in )
2023-07-24 16:14:26 +02:00
if ( plugin_json_in MATCHES "\\$\\$dependencyList" )
message ( FATAL_ERROR "Found $$dependencyList in ${name}.json.in. "
" T h i s i s n o l o n g e r s u p p o r t e d . "
" U s e \ $ { I D E _ P L U G I N _ D E P E N D E N C I E S } , \ $ { I D E _ V E R S I O N } "
" a n d o t h e r C M a k e v a r i a b l e s d i r e c t l y . "
" A l s o r e m o v e e s c a p i n g o f q u o t e s . " )
endif ( )
configure_file ( ${ name } .json.in "${CMAKE_CURRENT_BINARY_DIR}/${name}.json" )
2019-06-26 17:51:06 +02:00
endif ( )
2022-04-21 14:10:09 +02:00
if ( QTC_STATIC_BUILD )
set ( library_type STATIC )
else ( )
set ( library_type SHARED )
endif ( )
add_library ( ${ target_name } ${ library_type } ${ _arg_SOURCES } )
2020-11-11 16:11:07 +01:00
add_library ( QtCreator:: ${ target_name } ALIAS ${ target_name } )
2021-02-19 17:35:32 +01:00
2019-06-26 17:51:06 +02:00
set_public_headers ( ${ target_name } "${_arg_SOURCES}" )
2022-04-21 14:10:09 +02:00
update_resource_files_list ( "${_arg_SOURCES}" )
2019-06-26 17:51:06 +02:00
### Generate EXPORT_SYMBOL
2022-04-21 14:10:09 +02:00
if ( QTC_STATIC_BUILD )
set ( export_symbol_suffix "STATIC_LIBRARY" )
else ( )
set ( export_symbol_suffix "LIBRARY" )
endif ( )
string ( TOUPPER "${name}_${export_symbol_suffix}" EXPORT_SYMBOL )
2019-06-26 17:51:06 +02:00
if ( WITH_TESTS )
set ( TEST_DEFINES WITH_TESTS SRCDIR= "${CMAKE_CURRENT_SOURCE_DIR}" )
endif ( )
2021-10-05 07:40:58 +02:00
if ( WITH_SANITIZE )
2022-09-20 00:05:32 -07:00
qtc_enable_sanitize ( "${name}" ${ SANITIZE_FLAGS } )
2021-10-05 07:40:58 +02:00
endif ( )
2020-05-18 09:37:42 +02:00
extend_qtc_target ( ${ target_name }
I N C L U D E S $ { _ a r g _ I N C L U D E S }
2023-09-07 10:11:23 +02:00
S Y S T E M _ I N C L U D E S $ { _ a r g _ S Y S T E M _ I N C L U D E S }
2020-05-18 09:37:42 +02:00
P U B L I C _ I N C L U D E S $ { _ a r g _ P U B L I C _ I N C L U D E S }
2023-09-07 10:11:23 +02:00
P U B L I C _ S Y S T E M _ I N C L U D E S $ { _ a r g _ P U B L I C _ S Y S T E M _ I N C L U D E S }
2022-04-21 14:10:09 +02:00
D E F I N E S $ { D E F A U L T _ D E F I N E S } $ { _ a r g _ D E F I N E S } $ { T E S T _ D E F I N E S }
2020-05-18 09:37:42 +02:00
P U B L I C _ D E F I N E S $ { _ a r g _ P U B L I C _ D E F I N E S }
D E P E N D S $ { _ a r g _ D E P E N D S } $ { _ D E P _ P L U G I N S } $ { I M P L I C I T _ D E P E N D S }
P U B L I C _ D E P E N D S $ { _ a r g _ P U B L I C _ D E P E N D S }
E X P L I C I T _ M O C $ { _ a r g _ E X P L I C I T _ M O C }
2020-05-18 10:09:40 +02:00
S K I P _ A U T O M O C $ { _ a r g _ S K I P _ A U T O M O C }
E X T R A _ T R A N S L A T I O N S $ { _ a r g _ E X T R A _ T R A N S L A T I O N S }
2020-05-18 09:37:42 +02:00
)
2019-06-26 17:51:06 +02:00
2022-04-21 14:10:09 +02:00
if ( QTC_STATIC_BUILD )
extend_qtc_target ( ${ target_name } PUBLIC_DEFINES ${ EXPORT_SYMBOL }
D E F I N E S Q T _ S T A T I C P L U G I N )
else ( )
extend_qtc_target ( ${ target_name } DEFINES ${ EXPORT_SYMBOL } )
endif ( )
2020-08-20 20:19:51 +02:00
get_filename_component ( public_build_interface_dir "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE )
file ( RELATIVE_PATH include_dir_relative_path ${ PROJECT_SOURCE_DIR } "${CMAKE_CURRENT_SOURCE_DIR}/.." )
2019-06-26 17:51:06 +02:00
target_include_directories ( ${ target_name }
P R I V A T E
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } "
" $ { C M A K E _ B I N A R Y _ D I R } / s r c "
" $ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } > "
2020-04-23 11:00:30 +02:00
P U B L I C
2020-08-20 20:19:51 +02:00
" $ < B U I L D _ I N T E R F A C E : $ { p u b l i c _ b u i l d _ i n t e r f a c e _ d i r } > "
2021-03-23 17:54:06 +01:00
" $ < I N S T A L L _ I N T E R F A C E : $ { I D E _ H E A D E R _ I N S T A L L _ P A T H } / $ { i n c l u d e _ d i r _ r e l a t i v e _ p a t h } > "
2019-06-26 17:51:06 +02:00
)
set ( plugin_dir "${IDE_PLUGIN_PATH}" )
if ( _arg_PLUGIN_PATH )
set ( plugin_dir "${_arg_PLUGIN_PATH}" )
endif ( )
2019-05-23 15:13:06 +02:00
set ( skip_translation OFF )
if ( _arg_SKIP_TRANSLATION )
set ( skip_translation ON )
endif ( )
2022-04-21 14:10:09 +02:00
if ( NOT _arg_PLUGIN_CLASS )
set ( _arg_PLUGIN_CLASS ${ target_name } Plugin )
endif ( )
2019-08-19 11:10:20 +02:00
qtc_output_binary_dir ( _output_binary_dir )
2019-06-26 17:51:06 +02:00
set_target_properties ( ${ target_name } PROPERTIES
2021-07-05 12:45:24 +02:00
L I N K _ D E P E N D S _ N O _ S H A R E D O N
2019-06-26 17:51:06 +02:00
S O U R C E S _ D I R " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
2020-06-26 11:59:19 +02:00
M A C H O _ C U R R E N T _ V E R S I O N $ { I D E _ V E R S I O N }
M A C H O _ C O M P A T I B I L I T Y _ V E R S I O N $ { I D E _ V E R S I O N _ C O M P A T }
2020-02-19 11:35:39 +01:00
C X X _ E X T E N S I O N S O F F
2019-06-26 17:51:06 +02:00
C X X _ V I S I B I L I T Y _ P R E S E T h i d d e n
V I S I B I L I T Y _ I N L I N E S _ H I D D E N O N
_ a r g _ D E P E N D S " $ { _ a r g _ P L U G I N _ D E P E N D S } "
_ a r g _ V E R S I O N " $ { _ a r g _ V E R S I O N } "
2022-02-10 08:52:32 +01:00
B U I L D _ R P A T H " $ { _ P L U G I N _ R P A T H } ; $ { C M A K E _ B U I L D _ R P A T H } "
I N S T A L L _ R P A T H " $ { _ P L U G I N _ R P A T H } ; $ { C M A K E _ I N S T A L L _ R P A T H } "
2019-08-19 11:10:20 +02:00
L I B R A R Y _ O U T P U T _ D I R E C T O R Y " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { p l u g i n _ d i r } "
A R C H I V E _ O U T P U T _ D I R E C T O R Y " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { p l u g i n _ d i r } "
R U N T I M E _ O U T P U T _ D I R E C T O R Y " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { p l u g i n _ d i r } "
2019-06-26 17:51:06 +02:00
O U T P U T _ N A M E " $ { n a m e } "
2019-05-23 15:13:06 +02:00
Q T _ S K I P _ T R A N S L A T I O N " $ { s k i p _ t r a n s l a t i o n } "
2022-02-24 14:53:36 +01:00
Q T _ C O M P I L E _ O P T I O N S _ D I S A B L E _ W A R N I N G S O F F
2022-04-21 14:10:09 +02:00
Q T C _ P L U G I N _ C L A S S _ N A M E $ { _ a r g _ P L U G I N _ C L A S S }
2019-06-26 17:51:06 +02:00
$ { _ a r g _ P R O P E R T I E S }
)
2020-01-14 17:48:58 +01:00
2021-06-17 11:44:01 +02:00
if ( NOT _arg_SKIP_PCH )
enable_pch ( ${ target_name } )
endif ( )
2019-06-26 17:51:06 +02:00
2022-04-21 14:10:09 +02:00
if ( NOT _arg_SKIP_INSTALL AND NOT QTC_STATIC_BUILD )
2020-10-22 13:19:12 +02:00
if ( _arg_EXPORT )
set ( export QtCreator ${ target_name } )
else ( )
set ( export QtCreator )
endif ( )
2019-06-26 17:51:06 +02:00
install ( TARGETS ${ target_name }
2020-10-22 13:19:12 +02:00
E X P O R T $ { e x p o r t }
2019-12-03 14:15:55 +01:00
R U N T I M E D E S T I N A T I O N " $ { p l u g i n _ d i r } " O P T I O N A L
L I B R A R Y D E S T I N A T I O N " $ { p l u g i n _ d i r } " O P T I O N A L
2019-06-26 17:51:06 +02:00
A R C H I V E
D E S T I N A T I O N " $ { p l u g i n _ d i r } "
C O M P O N E N T D e v e l E X C L U D E _ F R O M _ A L L
2019-12-03 14:15:55 +01:00
O P T I O N A L
2019-06-26 17:51:06 +02:00
)
2020-10-22 13:19:12 +02:00
2020-11-12 11:27:34 +01:00
qtc_enable_separate_debug_info ( ${ target_name } "${plugin_dir}" )
2020-10-22 13:19:12 +02:00
if ( _arg_EXPORT )
# export of external plugins
install ( EXPORT ${ export }
F I L E $ { e x p o r t } T a r g e t s . c m a k e
2021-03-23 17:54:06 +01:00
D E S T I N A T I O N $ { I D E _ C M A K E _ I N S T A L L _ P A T H } / $ { e x p o r t }
2020-10-22 13:19:12 +02:00
C O M P O N E N T D e v e l E X C L U D E _ F R O M _ A L L
N A M E S P A C E Q t C r e a t o r : :
)
include ( CMakePackageConfigHelpers )
configure_package_config_file ( ${ _THIS_MODULE_BASE_DIR } /Config.cmake.in
" $ { C M A K E _ B I N A R Y _ D I R } / c m a k e / $ { e x p o r t } C o n f i g . c m a k e "
2021-03-23 17:54:06 +01:00
I N S T A L L _ D E S T I N A T I O N $ { I D E _ C M A K E _ I N S T A L L _ P A T H } / $ { e x p o r t }
2020-10-22 13:19:12 +02:00
)
install (
F I L E S $ { C M A K E _ B I N A R Y _ D I R } / c m a k e / $ { e x p o r t } C o n f i g . c m a k e
2021-03-23 17:54:06 +01:00
D E S T I N A T I O N $ { I D E _ C M A K E _ I N S T A L L _ P A T H } / $ { e x p o r t }
2020-10-22 13:19:12 +02:00
C O M P O N E N T D e v e l E X C L U D E _ F R O M _ A L L
)
export ( EXPORT ${ export }
N A M E S P A C E Q t C r e a t o r : :
F I L E $ { C M A K E _ B I N A R Y _ D I R } / c m a k e / $ { e x p o r t } T a r g e t s . c m a k e
)
endif ( )
2019-06-26 17:51:06 +02:00
endif ( )
endfunction ( )
function ( extend_qtc_plugin target_name )
qtc_plugin_enabled ( _plugin_enabled ${ target_name } )
if ( NOT _plugin_enabled )
return ( )
endif ( )
extend_qtc_target ( ${ target_name } ${ ARGN } )
endfunction ( )
2020-02-05 15:55:21 +01:00
function ( extend_qtc_library target_name )
qtc_library_enabled ( _library_enabled ${ target_name } )
if ( NOT _library_enabled )
return ( )
endif ( )
extend_qtc_target ( ${ target_name } ${ ARGN } )
endfunction ( )
2020-05-15 16:25:49 +02:00
function ( extend_qtc_test target_name )
if ( NOT ( target_name IN_LIST __QTC_TESTS ) )
2021-05-27 23:11:28 +02:00
message ( FATAL_ERROR "extend_qtc_test: Unknown test target \" ${ target_name } \"")
2020-05-15 16:25:49 +02:00
endif ( )
2021-05-28 08:59:47 +02:00
if ( TARGET ${ target_name } )
extend_qtc_target ( ${ target_name } ${ ARGN } )
endif ( )
2020-05-15 16:25:49 +02:00
endfunction ( )
2019-06-26 17:51:06 +02:00
function ( add_qtc_executable name )
2021-06-24 17:44:14 +02:00
cmake_parse_arguments ( _arg "SKIP_INSTALL;SKIP_TRANSLATION;ALLOW_ASCII_CASTS;SKIP_PCH;QTC_RUNNABLE"
2020-11-04 16:46:11 +01:00
" D E S T I N A T I O N ; C O M P O N E N T ; B U I L D _ D E F A U L T "
" C O N D I T I O N ; D E P E N D S ; D E F I N E S ; I N C L U D E S ; S O U R C E S ; E X P L I C I T _ M O C ; S K I P _ A U T O M O C ; E X T R A _ T R A N S L A T I O N S ; P R O P E R T I E S " $ { A R G N } )
2019-06-26 17:51:06 +02:00
2020-11-04 16:46:11 +01:00
if ( ${ _arg_UNPARSED_ARGUMENTS } )
2019-06-26 17:51:06 +02:00
message ( FATAL_ERROR "add_qtc_executable had unparsed arguments!" )
endif ( )
2023-01-24 16:23:00 +01:00
get_default_defines ( default_defines_copy ${ _arg_ALLOW_ASCII_CASTS } )
2020-01-24 17:09:56 +01:00
2019-06-26 17:51:06 +02:00
update_cached_list ( __QTC_EXECUTABLES "${name}" )
2023-03-11 12:17:27 +01:00
condition_info ( _extra_text _arg_CONDITION )
2020-11-04 16:46:11 +01:00
if ( NOT _arg_CONDITION )
set ( _arg_CONDITION ON )
endif ( )
2019-06-26 17:51:06 +02:00
string ( TOUPPER "BUILD_EXECUTABLE_${name}" _build_executable_var )
2020-11-04 16:46:11 +01:00
if ( DEFINED _arg_BUILD_DEFAULT )
set ( _build_executable_default ${ _arg_BUILD_DEFAULT } )
else ( )
set ( _build_executable_default ${ BUILD_EXECUTABLES_BY_DEFAULT } )
endif ( )
2019-06-26 17:51:06 +02:00
if ( DEFINED ENV{QTC_ ${ _build_executable_var } } )
set ( _build_executable_default "$ENV{QTC_${_build_executable_var}}" )
endif ( )
set ( ${ _build_executable_var } "${_build_executable_default}" CACHE BOOL "Build executable ${name}." )
2020-11-04 16:46:11 +01:00
if ( ( ${ _arg_CONDITION } ) AND ${ _build_executable_var } )
set ( _executable_enabled ON )
else ( )
set ( _executable_enabled OFF )
endif ( )
2023-03-11 12:17:27 +01:00
if ( NOT _arg_INTERNAL_ONLY )
add_feature_info ( "Executable ${name}" _executable_enabled "${_extra_text}" )
endif ( )
2020-11-04 16:46:11 +01:00
if ( NOT _executable_enabled )
2019-06-26 17:51:06 +02:00
return ( )
endif ( )
set ( _DESTINATION "${IDE_LIBEXEC_PATH}" )
if ( _arg_DESTINATION )
set ( _DESTINATION "${_arg_DESTINATION}" )
endif ( )
set ( _EXECUTABLE_PATH "${_DESTINATION}" )
if ( APPLE )
# path of executable might be inside app bundle instead of DESTINATION directly
cmake_parse_arguments ( _prop "" "MACOSX_BUNDLE;OUTPUT_NAME" "" "${_arg_PROPERTIES}" )
if ( _prop_MACOSX_BUNDLE )
set ( _BUNDLE_NAME "${name}" )
if ( _prop_OUTPUT_NAME )
set ( _BUNDLE_NAME "${_prop_OUTPUT_NAME}" )
endif ( )
2020-11-12 16:10:30 +01:00
set ( _BUNDLE_CONTENTS_PATH "${_DESTINATION}/${_BUNDLE_NAME}.app/Contents" )
set ( _EXECUTABLE_PATH "${_BUNDLE_CONTENTS_PATH}/MacOS" )
set ( _EXECUTABLE_FILE_PATH "${_EXECUTABLE_PATH}/${_BUNDLE_NAME}" )
set ( _BUNDLE_INFO_PLIST "${_BUNDLE_CONTENTS_PATH}/Info.plist" )
2019-06-26 17:51:06 +02:00
endif ( )
endif ( )
2021-04-30 13:11:51 +02:00
if ( WITH_TESTS )
set ( TEST_DEFINES WITH_TESTS SRCDIR= "${CMAKE_CURRENT_SOURCE_DIR}" )
endif ( )
2019-06-26 17:51:06 +02:00
add_executable ( "${name}" ${ _arg_SOURCES } )
2020-05-18 09:37:42 +02:00
2022-09-20 00:05:32 -07:00
if ( WITH_SANITIZE )
qtc_enable_sanitize ( "${name}" ${ SANITIZE_FLAGS } )
endif ( )
2020-05-18 09:37:42 +02:00
extend_qtc_target ( "${name}"
I N C L U D E S " $ { C M A K E _ B I N A R Y _ D I R } / s r c " $ { _ a r g _ I N C L U D E S }
D E F I N E S $ { d e f a u l t _ d e f i n e s _ c o p y } $ { T E S T _ D E F I N E S } $ { _ a r g _ D E F I N E S }
D E P E N D S $ { _ a r g _ D E P E N D S } $ { I M P L I C I T _ D E P E N D S }
2020-05-18 10:09:40 +02:00
E X P L I C I T _ M O C $ { _ a r g _ E X P L I C I T _ M O C }
S K I P _ A U T O M O C $ { _ a r g _ S K I P _ A U T O M O C }
E X T R A _ T R A N S L A T I O N S $ { _ a r g _ E X T R A _ T R A N S L A T I O N S }
2020-05-18 09:37:42 +02:00
)
2019-05-23 15:13:06 +02:00
set ( skip_translation OFF )
if ( _arg_SKIP_TRANSLATION )
set ( skip_translation ON )
endif ( )
2020-02-04 13:22:28 +01:00
file ( RELATIVE_PATH relative_lib_path "/${_EXECUTABLE_PATH}" "/${IDE_LIBRARY_PATH}" )
set ( build_rpath "${_RPATH_BASE}/${relative_lib_path}" )
set ( install_rpath "${_RPATH_BASE}/${relative_lib_path}" )
if ( NOT WIN32 AND NOT APPLE )
file ( RELATIVE_PATH relative_qt_path "/${_EXECUTABLE_PATH}" "/${IDE_LIBRARY_BASE_PATH}/Qt/lib" )
file ( RELATIVE_PATH relative_plugins_path "/${_EXECUTABLE_PATH}" "/${IDE_PLUGIN_PATH}" )
set ( install_rpath "${install_rpath};${_RPATH_BASE}/${relative_qt_path};${_RPATH_BASE}/${relative_plugins_path}" )
endif ( )
2022-02-10 08:52:32 +01:00
set ( build_rpath "${build_rpath};${CMAKE_BUILD_RPATH}" )
set ( install_rpath "${install_rpath};${CMAKE_INSTALL_RPATH}" )
2020-02-04 13:22:28 +01:00
2019-08-19 11:10:20 +02:00
qtc_output_binary_dir ( _output_binary_dir )
2019-06-26 17:51:06 +02:00
set_target_properties ( "${name}" PROPERTIES
2021-07-05 12:45:24 +02:00
L I N K _ D E P E N D S _ N O _ S H A R E D O N
2020-02-04 13:22:28 +01:00
B U I L D _ R P A T H " $ { b u i l d _ r p a t h } "
I N S T A L L _ R P A T H " $ { i n s t a l l _ r p a t h } "
2019-08-19 11:10:20 +02:00
R U N T I M E _ O U T P U T _ D I R E C T O R Y " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { _ D E S T I N A T I O N } "
2019-05-23 15:13:06 +02:00
Q T _ S K I P _ T R A N S L A T I O N " $ { s k i p _ t r a n s l a t i o n } "
2020-02-19 11:35:39 +01:00
C X X _ E X T E N S I O N S O F F
2019-10-11 13:15:11 +02:00
C X X _ V I S I B I L I T Y _ P R E S E T h i d d e n
V I S I B I L I T Y _ I N L I N E S _ H I D D E N O N
2022-02-24 14:53:36 +01:00
Q T _ C O M P I L E _ O P T I O N S _ D I S A B L E _ W A R N I N G S O F F
2019-06-26 17:51:06 +02:00
$ { _ a r g _ P R O P E R T I E S }
)
2021-06-17 11:44:01 +02:00
if ( NOT _arg_SKIP_PCH )
enable_pch ( ${ name } )
endif ( )
2019-06-26 17:51:06 +02:00
2021-06-24 17:44:14 +02:00
if ( _arg_QTC_RUNNABLE )
# Used by QtCreator to select the default target in the project
set_target_properties ( ${ name } PROPERTIES FOLDER "qtc_runnable" )
endif ( )
2019-06-26 17:51:06 +02:00
if ( NOT _arg_SKIP_INSTALL )
2020-02-05 15:55:21 +01:00
unset ( COMPONENT_OPTION )
if ( _arg_COMPONENT )
set ( COMPONENT_OPTION "COMPONENT" "${_arg_COMPONENT}" )
endif ( )
2020-11-12 16:10:30 +01:00
# work around the issue that CMake simply copies the bundle directory
# when installing app bundles, which copies things that it should not
# like static libraries, executables with SKIP_INSTALL, clang resources
# and dSYM directories
if ( APPLE AND _EXECUTABLE_FILE_PATH AND _BUNDLE_INFO_PLIST )
install (
P R O G R A M S " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { _ E X E C U T A B L E _ F I L E _ P A T H } "
D E S T I N A T I O N " $ { _ E X E C U T A B L E _ P A T H } "
$ { C O M P O N E N T _ O P T I O N }
O P T I O N A L
)
install (
F I L E S " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { _ B U N D L E _ I N F O _ P L I S T } "
D E S T I N A T I O N " $ { _ B U N D L E _ C O N T E N T S _ P A T H } "
$ { C O M P O N E N T _ O P T I O N }
O P T I O N A L
)
# Remove build-rpaths. That is BUILD_RPATH and the ones added because we
# don't use SKIP_BUILD_RPATH
set ( _rpaths_to_remove ${ build_rpath } )
get_target_property ( _linked_libs ${ name } LINK_LIBRARIES )
foreach ( _lib ${ _linked_libs } )
get_target_property ( _target_type ${ _lib } TYPE )
if ( _target_type STREQUAL "SHARED_LIBRARY" )
get_target_property ( _location ${ _lib } LIBRARY_OUTPUT_DIRECTORY )
if ( _location )
get_filename_component ( _abs_location ${ _location } ABSOLUTE )
list ( APPEND _rpaths_to_remove "${_abs_location}" )
else ( )
get_target_property ( _location ${ _lib } LOCATION )
get_target_property ( _is_framework ${ _lib } FRAMEWORK )
if ( _is_framework )
2020-11-18 10:55:21 +01:00
# get rid of the whole Foo.framework/* part whereever it is
string ( REGEX REPLACE "/[^/]*[.]framework/.*" "" _location ${ _location } )
2020-11-12 16:10:30 +01:00
endif ( )
get_filename_component ( _abs_location ${ _location } ABSOLUTE )
list ( APPEND _rpaths_to_remove "${_abs_location}" )
endif ( )
endif ( )
endforeach ( )
list ( REMOVE_DUPLICATES _rpaths_to_remove )
set ( _code )
foreach ( _rpath ${ _rpaths_to_remove } )
set ( _code " ${ _code }
2020-11-13 15:07:57 +01:00
execute_process ( COMMAND \"${CMAKE_INSTALL_NAME_TOOL}\"
2020-11-12 16:10:30 +01:00
- d e l e t e _ r p a t h \ " $ { _ r p a t h } \ "
2022-11-16 11:59:52 +01:00
\ " \ $ E N V { D E S T D I R } \ $ { C M A K E _ I N S T A L L _ P R E F I X } / $ { _ E X E C U T A B L E _ F I L E _ P A T H } \ " $ { Q T C _ C O M M A N D _ E R R O R _ I S _ F A T A L } ) "
2020-11-12 16:10:30 +01:00
)
endforeach ( )
foreach ( _rpath ${ install_rpath } )
set ( _code " ${ _code }
2020-11-13 15:07:57 +01:00
execute_process ( COMMAND \"${CMAKE_INSTALL_NAME_TOOL}\"
2020-11-12 16:10:30 +01:00
- a d d _ r p a t h \ " $ { _ r p a t h } \ "
2022-11-16 11:59:52 +01:00
\ " \ $ E N V { D E S T D I R } \ $ { C M A K E _ I N S T A L L _ P R E F I X } / $ { _ E X E C U T A B L E _ F I L E _ P A T H } \ " $ { Q T C _ C O M M A N D _ E R R O R _ I S _ F A T A L } ) "
2020-11-12 16:10:30 +01:00
)
endforeach ( )
install ( CODE "${_code}" )
else ( )
install ( TARGETS ${ name }
D E S T I N A T I O N " $ { _ D E S T I N A T I O N } "
$ { C O M P O N E N T _ O P T I O N }
O P T I O N A L
)
endif ( )
2020-11-12 11:27:34 +01:00
qtc_enable_separate_debug_info ( ${ name } "${_DESTINATION}" )
2019-06-26 17:51:06 +02:00
endif ( )
endfunction ( )
function ( extend_qtc_executable name )
if ( NOT ( name IN_LIST __QTC_EXECUTABLES ) )
message ( FATAL_ERROR "extend_qtc_executable: Unknown executable target \" ${ name } \"")
endif ( )
if ( TARGET ${ name } )
extend_qtc_target ( ${ name } ${ ARGN } )
endif ( )
endfunction ( )
function ( add_qtc_test name )
2023-08-10 11:28:41 +02:00
cmake_parse_arguments ( _arg "GTEST;MANUALTEST;EXCLUDE_FROM_PRECHECK;NEEDS_GUI" "TIMEOUT"
2023-02-13 14:35:00 +01:00
" D E F I N E S ; D E P E N D S ; I N C L U D E S ; S O U R C E S ; E X P L I C I T _ M O C ; S K I P _ A U T O M O C ; S K I P _ P C H ; C O N D I T I O N ; P R O P E R T I E S " $ { A R G N } )
2019-06-26 17:51:06 +02:00
2022-06-24 09:57:23 +02:00
if ( ${ _arg_UNPARSED_ARGUMENTS } )
2021-05-28 08:59:47 +02:00
message ( FATAL_ERROR "add_qtc_test had unparsed arguments!" )
endif ( )
update_cached_list ( __QTC_TESTS "${name}" )
2022-02-10 13:21:19 +01:00
if ( NOT _arg_CONDITION )
set ( _arg_CONDITION ON )
endif ( )
2021-06-11 14:46:53 +02:00
string ( TOUPPER "BUILD_TEST_${name}" _build_test_var )
set ( _build_test_default ${ BUILD_TESTS_BY_DEFAULT } )
if ( DEFINED ENV{QTC_ ${ _build_test_var } } )
set ( _build_test_default "$ENV{QTC_${_build_test_var}}" )
endif ( )
set ( ${ _build_test_var } "${_build_test_default}" CACHE BOOL "Build test ${name}." )
2023-03-23 08:49:34 +01:00
if ( ( ${ _arg_CONDITION } ) AND ${ _build_test_var } )
set ( _test_enabled ON )
else ( )
set ( _test_enabled OFF )
endif ( )
if ( NOT _test_enabled )
2021-06-11 14:46:53 +02:00
return ( )
endif ( )
2020-01-16 17:11:41 +01:00
foreach ( dependency ${ _arg_DEPENDS } )
2022-06-24 09:48:39 +02:00
if ( NOT TARGET ${ dependency } )
2020-01-24 17:09:56 +01:00
if ( WITH_DEBUG_CMAKE )
message ( STATUS "'${dependency}' is not a target" )
endif ( )
2020-01-16 17:11:41 +01:00
return ( )
endif ( )
endforeach ( )
2023-08-31 13:37:04 +02:00
set ( TEST_DEFINES WITH_TESTS SRCDIR= "${CMAKE_CURRENT_SOURCE_DIR}" )
2021-06-11 13:42:49 +02:00
# relax cast requirements for tests
2023-01-24 16:23:00 +01:00
get_default_defines ( default_defines_copy YES )
2021-06-11 13:42:49 +02:00
2019-06-26 17:51:06 +02:00
file ( RELATIVE_PATH _RPATH "/${IDE_BIN_PATH}" "/${IDE_LIBRARY_PATH}" )
2021-06-11 13:42:49 +02:00
add_executable ( ${ name } ${ _arg_SOURCES } )
extend_qtc_target ( ${ name }
D E P E N D S $ { _ a r g _ D E P E N D S } $ { I M P L I C I T _ D E P E N D S }
I N C L U D E S " $ { C M A K E _ B I N A R Y _ D I R } / s r c " $ { _ a r g _ I N C L U D E S }
D E F I N E S $ { _ a r g _ D E F I N E S } $ { T E S T _ D E F I N E S } $ { d e f a u l t _ d e f i n e s _ c o p y }
2020-05-18 10:09:40 +02:00
E X P L I C I T _ M O C $ { _ a r g _ E X P L I C I T _ M O C }
S K I P _ A U T O M O C $ { _ a r g _ S K I P _ A U T O M O C }
2019-06-26 17:51:06 +02:00
)
set_target_properties ( ${ name } PROPERTIES
2021-07-05 12:45:24 +02:00
L I N K _ D E P E N D S _ N O _ S H A R E D O N
2021-06-11 13:42:49 +02:00
C X X _ V I S I B I L I T Y _ P R E S E T h i d d e n
V I S I B I L I T Y _ I N L I N E S _ H I D D E N O N
2022-02-10 08:52:32 +01:00
B U I L D _ R P A T H " $ { _ R P A T H _ B A S E } / $ { _ R P A T H } ; $ { C M A K E _ B U I L D _ R P A T H } "
I N S T A L L _ R P A T H " $ { _ R P A T H _ B A S E } / $ { _ R P A T H } ; $ { C M A K E _ I N S T A L L _ R P A T H } "
2023-02-13 14:35:00 +01:00
$ { _ a r g _ P R O P E R T I E S }
2019-06-26 17:51:06 +02:00
)
2021-06-17 11:44:01 +02:00
if ( NOT _arg_SKIP_PCH )
enable_pch ( ${ name } )
endif ( )
2019-06-26 17:51:06 +02:00
2023-08-10 11:28:41 +02:00
if ( _arg_NEEDS_GUI )
set ( EXTRA_ARGUMENTS "-platform" "minimal" )
endif ( )
2022-02-10 13:21:19 +01:00
if ( NOT _arg_GTEST AND NOT _arg_MANUALTEST )
2023-08-10 11:28:41 +02:00
add_test ( NAME ${ name } COMMAND ${ name } ${ EXTRA_ARGUMENTS } )
2022-06-24 09:57:23 +02:00
if ( _arg_EXCLUDE_FROM_PRECHECK )
set_tests_properties ( ${ name } PROPERTIES LABELS exclude_from_precheck )
endif ( )
2020-06-30 11:44:43 +02:00
if ( DEFINED _arg_TIMEOUT )
set ( timeout_option TIMEOUT ${ _arg_TIMEOUT } )
else ( )
set ( timeout_option )
endif ( )
finalize_test_setup ( ${ name } ${ timeout_option } )
2019-06-26 17:51:06 +02:00
endif ( )
endfunction ( )
2022-06-24 09:57:23 +02:00
function ( finalize_qtc_gtest test_name )
2020-01-31 12:45:20 +01:00
if ( NOT TARGET ${ test_name } )
2020-01-24 17:09:56 +01:00
return ( )
endif ( )
2022-06-24 09:57:23 +02:00
cmake_parse_arguments ( _arg "EXCLUDE_ALL_FROM_PRECHECK" "EXCLUDE_SOURCES_REGEX"
" E X C L U D E _ F R O M _ P R E C H E C K " $ { A R G N } )
if ( ${ _arg_UNPARSED_ARGUMENTS } )
message ( FATAL_ERROR "finalize_qtc_gtest had unparsed arguments!" )
endif ( )
2019-06-26 17:51:06 +02:00
get_target_property ( test_sources ${ test_name } SOURCES )
2022-06-24 09:57:23 +02:00
if ( _arg_EXCLUDE_SOURCES_REGEX )
list ( FILTER test_sources EXCLUDE REGEX "${_arg_EXCLUDE_SOURCES_REGEX}" )
2020-06-09 12:07:59 +02:00
endif ( )
2019-06-26 17:51:06 +02:00
include ( GoogleTest )
2021-12-13 19:48:31 +01:00
gtest_add_tests ( TARGET ${ test_name } SOURCES ${ test_sources } TEST_LIST test_list SKIP_DEPENDENCY )
2019-06-26 17:51:06 +02:00
2022-06-24 09:57:23 +02:00
if ( _arg_EXCLUDE_ALL_FROM_PRECHECK )
set_tests_properties ( ${ test_list }
P R O P E R T I E S L A B E L S e x c l u d e _ f r o m _ p r e c h e c k )
elseif ( _arg_EXCLUDE_FROM_PRECHECK )
set_tests_properties ( ${ _arg_EXCLUDE_FROM_PRECHECK }
P R O P E R T I E S L A B E L S e x c l u d e _ f r o m _ p r e c h e c k )
endif ( )
2019-06-26 17:51:06 +02:00
foreach ( test IN LISTS test_list )
2019-09-18 14:10:52 +02:00
finalize_test_setup ( ${ test } )
2019-06-26 17:51:06 +02:00
endforeach ( )
endfunction ( )
2020-02-24 15:56:12 +01:00
2020-04-29 22:09:45 +02:00
function ( qtc_copy_to_builddir custom_target_name )
cmake_parse_arguments ( _arg "CREATE_SUBDIRS" "DESTINATION" "FILES;DIRECTORIES" ${ ARGN } )
set ( timestampFiles )
qtc_output_binary_dir ( _output_binary_dir )
2021-06-04 15:13:08 +02:00
set ( allFiles ${ _arg_FILES } )
2020-04-29 22:09:45 +02:00
foreach ( srcFile ${ _arg_FILES } )
string ( MAKE_C_IDENTIFIER "${srcFile}" destinationTimestampFilePart )
set ( destinationTimestampFileName "${CMAKE_CURRENT_BINARY_DIR}/.${destinationTimestampFilePart}_timestamp" )
list ( APPEND timestampFiles "${destinationTimestampFileName}" )
2020-05-12 14:53:48 +02:00
if ( IS_ABSOLUTE "${srcFile}" )
set ( srcPath "" )
else ( )
get_filename_component ( srcPath "${srcFile}" DIRECTORY )
endif ( )
2020-04-29 22:09:45 +02:00
add_custom_command ( OUTPUT "${destinationTimestampFileName}"
2020-05-12 14:53:48 +02:00
C O M M A N D " $ { C M A K E _ C O M M A N D } " - E m a k e _ d i r e c t o r y " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { _ a r g _ D E S T I N A T I O N } / $ { s r c P a t h } "
C O M M A N D " $ { C M A K E _ C O M M A N D } " - E c o p y " $ { s r c F i l e } " " $ { _ o u t p u t _ b i n a r y _ d i r } / $ { _ a r g _ D E S T I N A T I O N } / $ { s r c P a t h } "
2020-04-29 22:09:45 +02:00
C O M M A N D " $ { C M A K E _ C O M M A N D } " - E t o u c h " $ { d e s t i n a t i o n T i m e s t a m p F i l e N a m e } "
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
C O M M E N T " C o p y $ { s r c F i l e } i n t o b u i l d d i r e c t o r y "
D E P E N D S " $ { s r c F i l e } "
V E R B A T I M
)
endforeach ( )
foreach ( srcDirectory ${ _arg_DIRECTORIES } )
string ( MAKE_C_IDENTIFIER "${srcDirectory}" destinationTimestampFilePart )
set ( destinationTimestampFileName "${CMAKE_CURRENT_BINARY_DIR}/.${destinationTimestampFilePart}_timestamp" )
list ( APPEND timestampFiles "${destinationTimestampFileName}" )
set ( destinationDirectory "${_output_binary_dir}/${_arg_DESTINATION}" )
if ( _arg_CREATE_SUBDIRS )
set ( destinationDirectory "${destinationDirectory}/${srcDirectory}" )
endif ( )
file ( GLOB_RECURSE filesToCopy "${srcDirectory}/*" )
2021-06-04 15:13:08 +02:00
list ( APPEND allFiles ${ filesToCopy } )
2020-04-29 22:09:45 +02:00
add_custom_command ( OUTPUT "${destinationTimestampFileName}"
C O M M A N D " $ { C M A K E _ C O M M A N D } " - E c o p y _ d i r e c t o r y " $ { s r c D i r e c t o r y } " " $ { d e s t i n a t i o n D i r e c t o r y } "
C O M M A N D " $ { C M A K E _ C O M M A N D } " - E t o u c h " $ { d e s t i n a t i o n T i m e s t a m p F i l e N a m e } "
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
C O M M E N T " C o p y $ { s r c D i r e c t o r y } / i n t o b u i l d d i r e c t o r y "
D E P E N D S $ { f i l e s T o C o p y }
V E R B A T I M
)
endforeach ( )
2021-06-04 15:13:08 +02:00
add_custom_target ( "${custom_target_name}" ALL DEPENDS ${ timestampFiles }
S O U R C E S $ { a l l F i l e s } )
2020-04-29 22:09:45 +02:00
endfunction ( )
2020-10-26 16:16:43 +01:00
function ( qtc_add_resources target resourceName )
2021-05-06 16:04:54 +02:00
cmake_parse_arguments ( rcc "" "PREFIX;LANG;BASE" "FILES;OPTIONS;CONDITION" ${ ARGN } )
if ( ${ _arg_UNPARSED_ARGUMENTS } )
message ( FATAL_ERROR "qtc_add_resources had unparsed arguments!" )
endif ( )
2023-03-23 08:49:34 +01:00
if ( NOT _arg_CONDITION )
set ( _arg_CONDITION ON )
endif ( )
if ( NOT ( ${ _arg_CONDITION } ) )
2021-05-06 16:04:54 +02:00
return ( )
endif ( )
2020-10-26 16:16:43 +01:00
2021-05-25 14:10:10 +02:00
if ( NOT TARGET ${ target } )
return ( )
endif ( )
2020-10-26 16:16:43 +01:00
string ( REPLACE "/" "_" resourceName ${ resourceName } )
string ( REPLACE "." "_" resourceName ${ resourceName } )
# Apply base to all files
if ( rcc_BASE )
foreach ( file IN LISTS rcc_FILES )
set ( resource_file "${rcc_BASE}/${file}" )
file ( TO_CMAKE_PATH ${ resource_file } resource_file )
list ( APPEND resource_files ${ resource_file } )
endforeach ( )
else ( )
set ( resource_files ${ rcc_FILES } )
endif ( )
set ( newResourceName ${ resourceName } )
set ( resources ${ resource_files } )
set ( generatedResourceFile "${CMAKE_CURRENT_BINARY_DIR}/.rcc/generated_${newResourceName}.qrc" )
set ( generatedSourceCode "${CMAKE_CURRENT_BINARY_DIR}/.rcc/qrc_${newResourceName}.cpp" )
# Generate .qrc file:
# <RCC><qresource ...>
set ( qrcContents "<RCC>\n <qresource" )
if ( rcc_PREFIX )
string ( APPEND qrcContents " prefix=\" ${ rcc_PREFIX } \"")
endif ( )
if ( rcc_LANG )
string ( APPEND qrcContents " lang=\" ${ rcc_LANG } \"")
endif ( )
string ( APPEND qrcContents ">\n" )
set ( resource_dependencies )
foreach ( file IN LISTS resources )
set ( file_resource_path ${ file } )
if ( NOT IS_ABSOLUTE ${ file } )
set ( file "${CMAKE_CURRENT_SOURCE_DIR}/${file}" )
endif ( )
### FIXME: escape file paths to be XML conform
# <file ...>...</file>
string ( APPEND qrcContents " <file alias=\" ${ file_resource_path } \">")
string ( APPEND qrcContents "${file}</file>\n" )
list ( APPEND files "${file}" )
list ( APPEND resource_dependencies ${ file } )
target_sources ( ${ target } PRIVATE "${file}" )
set_property ( SOURCE "${file}" PROPERTY HEADER_FILE_ONLY ON )
endforeach ( )
# </qresource></RCC>
string ( APPEND qrcContents " </qresource>\n</RCC>\n" )
file ( WRITE "${generatedResourceFile}.in" "${qrcContents}" )
configure_file ( "${generatedResourceFile}.in" "${generatedResourceFile}" )
set_property ( TARGET ${ target } APPEND PROPERTY _qt_generated_qrc_files "${generatedResourceFile}" )
set ( rccArgs --name "${newResourceName}"
- - o u t p u t " $ { g e n e r a t e d S o u r c e C o d e } " " $ { g e n e r a t e d R e s o u r c e F i l e } " )
if ( rcc_OPTIONS )
list ( APPEND rccArgs ${ rcc_OPTIONS } )
endif ( )
# Process .qrc file:
add_custom_command ( OUTPUT "${generatedSourceCode}"
2022-12-20 17:31:22 +01:00
C O M M A N D Q t : : r c c $ { r c c A r g s }
2020-10-26 16:16:43 +01:00
D E P E N D S
$ { r e s o u r c e _ d e p e n d e n c i e s }
$ { g e n e r a t e d R e s o u r c e F i l e }
2022-12-20 17:31:22 +01:00
" Q t : : r c c "
2020-10-26 16:16:43 +01:00
C O M M E N T " R C C $ { n e w R e s o u r c e N a m e } "
V E R B A T I M )
target_sources ( ${ target } PRIVATE "${generatedSourceCode}" )
set_property ( SOURCE "${generatedSourceCode}" PROPERTY SKIP_AUTOGEN ON )
2021-12-13 15:48:04 +01:00
set_property ( SOURCE "${generatedResourceFile}.in" PROPERTY SKIP_AUTOGEN ON )
2020-10-26 16:16:43 +01:00
endfunction ( )
2020-10-29 11:13:19 +01:00
function ( qtc_add_public_header header )
if ( NOT IS_ABSOLUTE ${ header } )
set ( header "${CMAKE_CURRENT_SOURCE_DIR}/${header}" )
endif ( )
2021-03-23 17:54:06 +01:00
qtc_source_dir ( qtcreator_source_dir )
2020-10-29 11:13:19 +01:00
get_filename_component ( source_dir ${ header } DIRECTORY )
2021-03-23 17:54:06 +01:00
file ( RELATIVE_PATH include_dir_relative_path ${ qtcreator_source_dir } ${ source_dir } )
2020-10-29 11:13:19 +01:00
install (
F I L E S $ { h e a d e r }
2021-03-23 17:54:06 +01:00
D E S T I N A T I O N " $ { I D E _ H E A D E R _ I N S T A L L _ P A T H } / $ { i n c l u d e _ d i r _ r e l a t i v e _ p a t h } "
2020-10-29 11:13:19 +01:00
C O M P O N E N T D e v e l E X C L U D E _ F R O M _ A L L
)
endfunction ( )