Distinguish between qt_plugin and regular plugins
If we do not encounter the load(qt_plugin) statement in the .pro file but we do see the entry CONFIG+=plugin, treat the target as a regular CMake library instead of treating it as a qt_plugin by default. Change-Id: I67ad5c865a1a5ab691a6b0d86c2db4b686aa04dd Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
parent
080f9ad160
commit
69fb4ae343
@ -2584,6 +2584,10 @@ function(add_cmake_library target)
|
||||
add_library("${target}" STATIC)
|
||||
elseif(${arg_SHARED})
|
||||
add_library("${target}" SHARED)
|
||||
elseif(${arg_MODULE})
|
||||
add_library("${target}" MODULE)
|
||||
set_property(TARGET ${name} PROPERTY C_VISIBILITY_PRESET default)
|
||||
set_property(TARGET ${name} PROPERTY CXX_VISIBILITY_PRESET default)
|
||||
else()
|
||||
add_library("${target}")
|
||||
endif()
|
||||
|
@ -1,10 +1,11 @@
|
||||
# Generated from plugin1.pro.
|
||||
|
||||
#####################################################################
|
||||
## plugin1 Plugin:
|
||||
## plugin1 Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_qt_plugin(plugin1
|
||||
add_cmake_library(plugin1
|
||||
MODULE
|
||||
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qfactoryloader/bin"
|
||||
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
|
||||
SOURCES
|
||||
@ -31,3 +32,5 @@ extend_target(plugin1 CONDITION NOT QT_FEATURE_library
|
||||
DEFINES
|
||||
QT_STATICPLUGIN
|
||||
)
|
||||
|
||||
qt_autogen_tools_initial_setup(plugin1)
|
||||
|
@ -1,10 +1,11 @@
|
||||
# Generated from plugin2.pro.
|
||||
|
||||
#####################################################################
|
||||
## plugin2 Plugin:
|
||||
## plugin2 Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_qt_plugin(plugin2
|
||||
add_cmake_library(plugin2
|
||||
MODULE
|
||||
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qfactoryloader/bin"
|
||||
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
|
||||
SOURCES
|
||||
@ -31,3 +32,5 @@ extend_target(plugin2 CONDITION NOT QT_FEATURE_library
|
||||
DEFINES
|
||||
QT_STATICPLUGIN
|
||||
)
|
||||
|
||||
qt_autogen_tools_initial_setup(plugin2)
|
||||
|
@ -0,0 +1,41 @@
|
||||
# Generated from test.pro.
|
||||
|
||||
#####################################################################
|
||||
## tst_qfactoryloader Test:
|
||||
#####################################################################
|
||||
|
||||
add_qt_test(tst_qfactoryloader
|
||||
SOURCES
|
||||
../plugin1/plugininterface1.h
|
||||
../plugin2/plugininterface2.h
|
||||
../tst_qfactoryloader.cpp
|
||||
LIBRARIES
|
||||
Qt::CorePrivate
|
||||
)
|
||||
|
||||
## Scopes:
|
||||
#####################################################################
|
||||
|
||||
extend_target(tst_qfactoryloader CONDITION NOT QT_FEATURE_library
|
||||
PUBLIC_LIBRARIES
|
||||
# Remove: L
|
||||
../bin/
|
||||
plugin1
|
||||
plugin2
|
||||
)
|
||||
|
||||
if(ANDROID)
|
||||
# Resources:
|
||||
set(qmake_libs_resource_files
|
||||
${CMAKE_CURRENT_BINARY_DIR}/../bin
|
||||
)
|
||||
|
||||
add_qt_resource(tst_qfactoryloader "qmake_libs"
|
||||
PREFIX
|
||||
"android_test_data"
|
||||
BASE
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/.."
|
||||
FILES
|
||||
${qmake_libs_resource_files}
|
||||
)
|
||||
endif()
|
@ -30,8 +30,6 @@ extend_target(tst_qfactoryloader CONDITION NOT QT_FEATURE_library
|
||||
# this part is handled as a special case above
|
||||
# ../bin/
|
||||
# special case end
|
||||
plugin1
|
||||
plugin2
|
||||
)
|
||||
|
||||
if(ANDROID)
|
||||
@ -45,15 +43,19 @@ if(ANDROID)
|
||||
${CMAKE_CURRENT_BINARY_DIR}/../bin/libplugin2.so
|
||||
PROPERTIES QT_RESOURCE_TARGET_DEPENDENCY plugin2
|
||||
)
|
||||
# special case end
|
||||
# Resources:
|
||||
set(qmake_libs_resource_files
|
||||
# special case begin
|
||||
bin/libplugin1.so
|
||||
bin/libplugin2.so
|
||||
#${CMAKE_CURRENT_BINARY_DIR}/../bin
|
||||
# special case end
|
||||
)
|
||||
if (ANDROID)
|
||||
set(qmake_libs_resource_files
|
||||
bin/libplugin1_${CMAKE_ANDROID_ARCH_ABI}.so
|
||||
bin/libplugin2_${CMAKE_ANDROID_ARCH_ABI}.so
|
||||
)
|
||||
else()
|
||||
set(qmake_libs_resource_files
|
||||
bin/libplugin1.so
|
||||
bin/libplugin2.so
|
||||
)
|
||||
endif()
|
||||
# special case end
|
||||
|
||||
add_qt_resource(tst_qfactoryloader "qmake_libs"
|
||||
PREFIX
|
||||
|
34
tests/auto/corelib/plugin/qlibrary/lib/.prev_CMakeLists.txt
Normal file
34
tests/auto/corelib/plugin/qlibrary/lib/.prev_CMakeLists.txt
Normal file
@ -0,0 +1,34 @@
|
||||
# Generated from lib.pro.
|
||||
|
||||
#####################################################################
|
||||
## mylib Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_cmake_library(mylib
|
||||
SHARED
|
||||
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qlibrary"
|
||||
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
|
||||
SOURCES
|
||||
mylib.c
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::Core
|
||||
)
|
||||
|
||||
#### Keys ignored in scope 1:.:.:lib.pro:<TRUE>:
|
||||
# INSTALLS = "target"
|
||||
# TEMPLATE = "lib"
|
||||
# target.path = "$$[QT_INSTALL_TESTS]/tst_qlibrary"
|
||||
|
||||
## Scopes:
|
||||
#####################################################################
|
||||
|
||||
extend_target(mylib CONDITION MSVC
|
||||
DEFINES
|
||||
WIN32_MSVC
|
||||
)
|
||||
|
||||
#### Keys ignored in scope 4:.:.:lib.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
|
||||
# DESTDIR = "../debug/"
|
||||
|
||||
#### Keys ignored in scope 5:.:.:lib.pro:else:
|
||||
# DESTDIR = "../release/"
|
@ -1,11 +1,11 @@
|
||||
# Generated from debugplugin.pro.
|
||||
|
||||
#####################################################################
|
||||
## debugplugin Plugin:
|
||||
## debugplugin Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_qt_plugin(debugplugin
|
||||
SKIP_INSTALL
|
||||
add_cmake_library(debugplugin
|
||||
MODULE
|
||||
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../plugins"
|
||||
SOURCES
|
||||
main.cpp
|
||||
@ -15,3 +15,5 @@ add_qt_plugin(debugplugin
|
||||
|
||||
#### Keys ignored in scope 1:.:.:debugplugin.pro:<TRUE>:
|
||||
# TEMPLATE = "lib"
|
||||
|
||||
qt_autogen_tools_initial_setup(debugplugin)
|
||||
|
@ -1,11 +1,11 @@
|
||||
# Generated from invalidplugin.pro.
|
||||
|
||||
#####################################################################
|
||||
## invalidplugin Plugin:
|
||||
## invalidplugin Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_qt_plugin(invalidplugin
|
||||
SKIP_INSTALL
|
||||
add_cmake_library(invalidplugin
|
||||
MODULE
|
||||
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../plugins"
|
||||
SOURCES
|
||||
main.cpp
|
||||
@ -15,3 +15,5 @@ add_qt_plugin(invalidplugin
|
||||
|
||||
#### Keys ignored in scope 1:.:.:invalidplugin.pro:<TRUE>:
|
||||
# TEMPLATE = "lib"
|
||||
|
||||
qt_autogen_tools_initial_setup(invalidplugin)
|
||||
|
@ -1,11 +1,11 @@
|
||||
# Generated from releaseplugin.pro.
|
||||
|
||||
#####################################################################
|
||||
## releaseplugin Plugin:
|
||||
## releaseplugin Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_qt_plugin(releaseplugin
|
||||
SKIP_INSTALL
|
||||
add_cmake_library(releaseplugin
|
||||
MODULE
|
||||
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../plugins"
|
||||
SOURCES
|
||||
main.cpp
|
||||
@ -15,3 +15,5 @@ add_qt_plugin(releaseplugin
|
||||
|
||||
#### Keys ignored in scope 1:.:.:releaseplugin.pro:<TRUE>:
|
||||
# TEMPLATE = "lib"
|
||||
|
||||
qt_autogen_tools_initial_setup(releaseplugin)
|
||||
|
@ -0,0 +1,30 @@
|
||||
# Generated from almostplugin.pro.
|
||||
|
||||
#####################################################################
|
||||
## almostplugin Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_cmake_library(almostplugin
|
||||
MODULE
|
||||
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qpluginloader/bin"
|
||||
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
|
||||
SOURCES
|
||||
almostplugin.cpp almostplugin.h
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::Core
|
||||
)
|
||||
|
||||
#### Keys ignored in scope 1:.:.:almostplugin.pro:<TRUE>:
|
||||
# INSTALLS = "target"
|
||||
# TEMPLATE = "lib"
|
||||
# target.path = "$$[QT_INSTALL_TESTS]/tst_qpluginloader/bin"
|
||||
|
||||
## Scopes:
|
||||
#####################################################################
|
||||
|
||||
extend_target(almostplugin CONDITION GCC
|
||||
LINK_OPTIONS
|
||||
"--Wl,--no-undefined"
|
||||
)
|
||||
|
||||
qt_autogen_tools_initial_setup(almostplugin)
|
@ -1,11 +1,11 @@
|
||||
# Generated from almostplugin.pro.
|
||||
|
||||
#####################################################################
|
||||
## almostplugin Plugin:
|
||||
## almostplugin Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_qt_plugin(almostplugin
|
||||
ALLOW_UNDEFINED_SYMBOLS # special case
|
||||
add_cmake_library(almostplugin
|
||||
MODULE
|
||||
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qpluginloader/bin"
|
||||
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
|
||||
SOURCES
|
||||
@ -22,6 +22,7 @@ add_qt_plugin(almostplugin
|
||||
## Scopes:
|
||||
#####################################################################
|
||||
|
||||
qt_autogen_tools_initial_setup(almostplugin)
|
||||
# special case begin
|
||||
# We want the opposite of this
|
||||
#extend_target(almostplugin CONDITION GCC
|
||||
|
@ -0,0 +1,34 @@
|
||||
# Generated from lib.pro.
|
||||
|
||||
#####################################################################
|
||||
## tst_qpluginloaderlib Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_cmake_library(tst_qpluginloaderlib
|
||||
SHARED
|
||||
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qpluginloader/bin"
|
||||
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
|
||||
SOURCES
|
||||
mylib.c
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::Core
|
||||
)
|
||||
|
||||
#### Keys ignored in scope 1:.:.:lib.pro:<TRUE>:
|
||||
# INSTALLS = "target"
|
||||
# TEMPLATE = "lib"
|
||||
# target.path = "$$[QT_INSTALL_TESTS]/tst_qpluginloader/bin"
|
||||
|
||||
## Scopes:
|
||||
#####################################################################
|
||||
|
||||
#### Keys ignored in scope 6:.:..:../winrt.pri:(CMAKE_BUILD_TYPE STREQUAL Debug):
|
||||
# DESTDIR = "../debug/bin"
|
||||
|
||||
#### Keys ignored in scope 7:.:..:../winrt.pri:else:
|
||||
# DESTDIR = "../release/bin"
|
||||
|
||||
extend_target(tst_qpluginloaderlib CONDITION MSVC
|
||||
DEFINES
|
||||
WIN32_MSVC
|
||||
)
|
@ -0,0 +1,23 @@
|
||||
# Generated from staticplugin.pro.
|
||||
|
||||
#####################################################################
|
||||
## staticplugin Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_cmake_library(staticplugin
|
||||
STATIC
|
||||
SOURCES
|
||||
main.cpp
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::Core
|
||||
MOC_OPTIONS
|
||||
"-M"
|
||||
"ExtraMetaData=StaticPlugin"
|
||||
"-M"
|
||||
"ExtraMetaData=foo"
|
||||
)
|
||||
|
||||
#### Keys ignored in scope 1:.:.:staticplugin.pro:<TRUE>:
|
||||
# TEMPLATE = "lib"
|
||||
|
||||
qt_autogen_tools_initial_setup(staticplugin)
|
@ -1,12 +1,10 @@
|
||||
# Generated from staticplugin.pro.
|
||||
|
||||
#####################################################################
|
||||
## staticplugin Plugin:
|
||||
## staticplugin Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_qt_plugin(staticplugin
|
||||
OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
|
||||
SKIP_INSTALL
|
||||
add_cmake_library(staticplugin
|
||||
STATIC
|
||||
SOURCES
|
||||
main.cpp
|
||||
@ -21,3 +19,7 @@ add_qt_plugin(staticplugin
|
||||
|
||||
#### Keys ignored in scope 1:.:.:staticplugin.pro:<TRUE>:
|
||||
# TEMPLATE = "lib"
|
||||
|
||||
qt_autogen_tools_initial_setup(staticplugin)
|
||||
|
||||
target_compile_definitions(staticplugin PRIVATE QT_STATICPLUGIN)
|
||||
|
@ -1,10 +1,11 @@
|
||||
# Generated from theplugin.pro.
|
||||
|
||||
#####################################################################
|
||||
## theplugin Plugin:
|
||||
## theplugin Generic Library:
|
||||
#####################################################################
|
||||
|
||||
add_qt_plugin(theplugin
|
||||
add_cmake_library(theplugin
|
||||
MODULE
|
||||
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qpluginloader/bin"
|
||||
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
|
||||
SOURCES
|
||||
@ -26,3 +27,5 @@ add_qt_plugin(theplugin
|
||||
|
||||
#### Keys ignored in scope 6:.:..:../winrt.pri:else:
|
||||
# DESTDIR = "../release/bin"
|
||||
|
||||
qt_autogen_tools_initial_setup(theplugin)
|
||||
|
@ -0,0 +1,44 @@
|
||||
# Generated from tst.pro.
|
||||
|
||||
#####################################################################
|
||||
## tst_qpluginloader Test:
|
||||
#####################################################################
|
||||
|
||||
# Collect test data
|
||||
list(APPEND test_data "../elftest")
|
||||
list(APPEND test_data "../machtest")
|
||||
|
||||
add_qt_test(tst_qpluginloader
|
||||
SOURCES
|
||||
../fakeplugin.cpp
|
||||
../theplugin/plugininterface.h
|
||||
../tst_qpluginloader.cpp
|
||||
PUBLIC_LIBRARIES
|
||||
staticplugin
|
||||
TESTDATA ${test_data}
|
||||
)
|
||||
|
||||
## Scopes:
|
||||
#####################################################################
|
||||
|
||||
extend_target(tst_qpluginloader CONDITION QT_FEATURE_private_tests
|
||||
LIBRARIES
|
||||
Qt::CorePrivate
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::Core
|
||||
)
|
||||
|
||||
extend_target(tst_qpluginloader CONDITION CMAKE_BUILD_TYPE STREQUAL Debug AND WIN32 AND debug_and_release
|
||||
PUBLIC_LIBRARIES
|
||||
# Remove: L../staticplugin/debug
|
||||
)
|
||||
|
||||
extend_target(tst_qpluginloader CONDITION WIN32 AND debug_and_release AND NOT CMAKE_BUILD_TYPE STREQUAL Debug
|
||||
PUBLIC_LIBRARIES
|
||||
# Remove: L../staticplugin/release
|
||||
)
|
||||
|
||||
extend_target(tst_qpluginloader CONDITION UNIX OR NOT debug_and_release
|
||||
PUBLIC_LIBRARIES
|
||||
# Remove: L../staticplugin
|
||||
)
|
@ -29,17 +29,17 @@ extend_target(tst_qpluginloader CONDITION QT_FEATURE_private_tests
|
||||
Qt::Core
|
||||
)
|
||||
|
||||
extend_target(tst_qpluginloader CONDITION CMAKE_BUILD_TYPE STREQUAL Debug AND WIN32
|
||||
extend_target(tst_qpluginloader CONDITION CMAKE_BUILD_TYPE STREQUAL Debug AND WIN32 AND debug_and_release
|
||||
PUBLIC_LIBRARIES
|
||||
# Remove: L../staticplugin/debug
|
||||
)
|
||||
|
||||
extend_target(tst_qpluginloader CONDITION WIN32 AND NOT CMAKE_BUILD_TYPE STREQUAL Debug
|
||||
extend_target(tst_qpluginloader CONDITION WIN32 AND debug_and_release AND NOT CMAKE_BUILD_TYPE STREQUAL Debug
|
||||
PUBLIC_LIBRARIES
|
||||
# Remove: L../staticplugin/release
|
||||
)
|
||||
|
||||
extend_target(tst_qpluginloader CONDITION UNIX
|
||||
extend_target(tst_qpluginloader CONDITION UNIX OR NOT debug_and_release
|
||||
PUBLIC_LIBRARIES
|
||||
# Remove: L../staticplugin
|
||||
)
|
||||
|
29
tests/auto/corelib/plugin/quuid/test/.prev_CMakeLists.txt
Normal file
29
tests/auto/corelib/plugin/quuid/test/.prev_CMakeLists.txt
Normal file
@ -0,0 +1,29 @@
|
||||
# Generated from test.pro.
|
||||
|
||||
#####################################################################
|
||||
## tst_quuid Test:
|
||||
#####################################################################
|
||||
|
||||
add_qt_test(tst_quuid
|
||||
SOURCES
|
||||
../tst_quuid.cpp
|
||||
)
|
||||
|
||||
## Scopes:
|
||||
#####################################################################
|
||||
|
||||
extend_target(tst_quuid CONDITION APPLE
|
||||
SOURCES
|
||||
../tst_quuid_darwin.mm
|
||||
PUBLIC_LIBRARIES
|
||||
${FWFoundation}
|
||||
)
|
||||
|
||||
#### Keys ignored in scope 4:.:.:test.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
|
||||
# DESTDIR = "../debug"
|
||||
|
||||
#### Keys ignored in scope 5:.:.:test.pro:else:
|
||||
# DESTDIR = "../release"
|
||||
|
||||
#### Keys ignored in scope 6:.:.:test.pro:else:
|
||||
# DESTDIR = ".."
|
@ -2498,6 +2498,12 @@ def write_generic_library(cm_fh: IO[str], scope: Scope, *, indent: int = 0) -> s
|
||||
if "dll" in scope.get("CONFIG"):
|
||||
library_type = "SHARED"
|
||||
|
||||
is_plugin = False
|
||||
if "plugin" in scope.get("CONFIG"):
|
||||
library_type = "MODULE"
|
||||
is_plugin = True
|
||||
|
||||
# static after plugin in order to handle static library plugins
|
||||
if "static" in scope.get("CONFIG"):
|
||||
library_type = "STATIC"
|
||||
|
||||
@ -2523,6 +2529,13 @@ def write_generic_library(cm_fh: IO[str], scope: Scope, *, indent: int = 0) -> s
|
||||
extra_keys=[],
|
||||
)
|
||||
|
||||
if is_plugin:
|
||||
# Plugins need to be able to run auto moc
|
||||
cm_fh.write(f"\nqt_autogen_tools_initial_setup({target_name})\n")
|
||||
|
||||
if library_type == "STATIC":
|
||||
cm_fh.write(f"\ntarget_compile_definitions({target_name} PRIVATE QT_STATICPLUGIN)\n")
|
||||
|
||||
return target_name
|
||||
|
||||
|
||||
@ -3077,8 +3090,9 @@ def handle_app_or_lib(
|
||||
is_jar = "java" in config
|
||||
is_lib = scope.TEMPLATE == "lib"
|
||||
is_qml_plugin = any("qml_plugin" == s for s in scope.get("_LOADED"))
|
||||
is_plugin = (
|
||||
any("qt_plugin" == s for s in scope.get("_LOADED")) or is_qml_plugin or "plugin" in config
|
||||
is_plugin = "plugin" in config
|
||||
is_qt_plugin = (
|
||||
any("qt_plugin" == s for s in scope.get("_LOADED")) or is_qml_plugin
|
||||
)
|
||||
target = ""
|
||||
gui = all(
|
||||
@ -3089,10 +3103,10 @@ def handle_app_or_lib(
|
||||
tar = write_jar(cm_fh, scope, indent=indent)
|
||||
elif is_example:
|
||||
target = write_example(cm_fh, scope, gui, indent=indent, is_plugin=is_plugin)
|
||||
elif is_plugin:
|
||||
elif is_qt_plugin:
|
||||
assert not is_example
|
||||
target = write_plugin(cm_fh, scope, indent=indent)
|
||||
elif is_lib and "qt_module" not in scope.get("_LOADED"):
|
||||
elif (is_lib and "qt_module" not in scope.get("_LOADED")) or is_plugin:
|
||||
assert not is_example
|
||||
target = write_generic_library(cm_fh, scope, indent=indent)
|
||||
elif is_lib or "qt_module" in scope.get("_LOADED"):
|
||||
|
Loading…
Reference in New Issue
Block a user