summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2022-11-25 16:01:00 +0200
committerPanu Matilainen <pmatilai@redhat.com>2022-11-28 11:31:21 +0200
commit71fe36cdc55588ec6776839b0efd058977eaac2e (patch)
tree5f6b7e4415c7f2270987d2f4d46ae0c661efd9a5
parent17eb3a457a2d9f33ec7e9f031ccf7a951318cc7c (diff)
downloadrpm-71fe36cdc55588ec6776839b0efd058977eaac2e.tar.gz
Use cmake imported targets to let it sort out the compiler flag details
These imported targets passed to target_link_library() are supposed to handle all the pesky compilation, linkage etc details behind the scenes. I was pretty sure I was missing a trick with this, but this sure isn't exactly underlined in the documentation. Unroll the supposedly helpful loop for handling plugins: turns out doing this cmake native way is plenty shorter and more obvious too. The unroll kinda belongs to a separate commit but that'd be rather painful for very little if any gain. Fixes: #2269 and a whole class of similar cases, allegedly
-rw-r--r--CMakeLists.txt34
-rw-r--r--build/CMakeLists.txt16
-rw-r--r--lib/CMakeLists.txt10
-rw-r--r--plugins/CMakeLists.txt45
-rw-r--r--rpmio/CMakeLists.txt36
-rw-r--r--sign/CMakeLists.txt2
6 files changed, 63 insertions, 80 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e3b82faa8..6a187c64c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -118,16 +118,16 @@ include(CheckIncludeFile)
find_package(PkgConfig REQUIRED)
find_package(ZLIB REQUIRED)
find_package(BZip2)
-find_package(LibLZMA)
find_package(Iconv)
-pkg_check_modules(LUA lua REQUIRED)
-pkg_check_modules(POPT popt REQUIRED)
-pkg_check_modules(MAGIC libmagic REQUIRED)
-pkg_check_modules(READLINE readline)
-pkg_check_modules(ZSTD libzstd)
-pkg_check_modules(LIBELF libelf)
-pkg_check_modules(LIBDW libdw)
+pkg_check_modules(LUA REQUIRED IMPORTED_TARGET lua)
+pkg_check_modules(POPT REQUIRED IMPORTED_TARGET popt)
+pkg_check_modules(MAGIC REQUIRED IMPORTED_TARGET libmagic)
+pkg_check_modules(READLINE IMPORTED_TARGET readline)
+pkg_check_modules(ZSTD IMPORTED_TARGET libzstd)
+pkg_check_modules(LIBELF IMPORTED_TARGET libelf)
+pkg_check_modules(LIBDW IMPORTED_TARGET libdw)
+pkg_check_modules(LIBLZMA IMPORTED_TARGET liblzma)
if (ENABLE_OPENMP)
find_package(OpenMP REQUIRED)
@@ -138,7 +138,7 @@ if (ENABLE_NLS)
endif()
if (ENABLE_SQLITE)
- pkg_check_modules(SQLITE sqlite3 REQUIRED)
+ pkg_check_modules(SQLITE REQUIRED IMPORTED_TARGET sqlite3)
endif()
if (ENABLE_PYTHON)
@@ -146,31 +146,27 @@ if (ENABLE_PYTHON)
endif()
if (WITH_CAP)
- pkg_check_modules(LIBCAP libcap REQUIRED)
+ pkg_check_modules(LIBCAP REQUIRED IMPORTED_TARGET libcap)
endif()
if (WITH_ACL)
- pkg_check_modules(LIBACL libacl REQUIRED)
+ pkg_check_modules(LIBACL REQUIRED IMPORTED_TARGET libacl)
endif()
if (WITH_AUDIT)
- pkg_check_modules(AUDIT audit REQUIRED)
+ pkg_check_modules(AUDIT REQUIRED IMPORTED_TARGET audit)
endif()
if (WITH_SELINUX)
- pkg_check_modules(SELINUX libselinux REQUIRED)
+ pkg_check_modules(SELINUX REQUIRED IMPORTED_TARGET libselinux)
endif()
if (WITH_ARCHIVE)
- pkg_check_modules(LIBARCHIVE libarchive REQUIRED)
+ pkg_check_modules(LIBARCHIVE REQUIRED IMPORTED_TARGET libarchive)
endif()
if (WITH_FSVERITY)
- pkg_check_modules(FSVERITY libfsverity REQUIRED)
-endif()
-
-if (NOT WITH_INTERNAL_OPENPGP)
- pkg_check_modules(RPMSEQUOIA rpm-sequoia REQUIRED)
+ pkg_check_modules(FSVERITY REQUIRED IMPORTED_TARGET libfsverity)
endif()
find_program(__FIND_DEBUGINFO find-debuginfo)
diff --git a/build/CMakeLists.txt b/build/CMakeLists.txt
index 6626bdcce..7155dad67 100644
--- a/build/CMakeLists.txt
+++ b/build/CMakeLists.txt
@@ -14,24 +14,22 @@ set_target_properties(librpmbuild PROPERTIES
SOVERSION ${RPM_SOVERSION}
)
target_sources(librpmbuild PRIVATE ${librpmbuild_SOURCES})
-target_include_directories(librpmbuild PRIVATE ${LUA_INCLUDE_DIRS})
target_link_libraries(librpmbuild PUBLIC librpmio librpm)
target_link_libraries(librpmbuild PRIVATE
libmisc
- ${LUA_LIBRARIES}
- ${POPT_LIBRARIES}
- ${MAGIC_LIBRARIES}
- ${LIBELF_LIBRARIES}
- ${LIBDW_LIBRARIES}
+ PkgConfig::LUA
+ PkgConfig::POPT
+ PkgConfig::MAGIC
+ PkgConfig::LIBELF
+ PkgConfig::LIBDW
)
if(WITH_CAP)
- target_link_libraries(librpmbuild PRIVATE ${LIBCAP_LIBRARIES})
+ target_link_libraries(librpmbuild PRIVATE PkgConfig::LIBCAP)
endif()
if(OpenMP_C_FOUND)
- target_compile_options(librpmbuild PRIVATE ${OpenMP_C_FLAGS})
- target_link_libraries(librpmbuild PRIVATE ${OpenMP_C_LIBRARIES})
+ target_link_libraries(librpmbuild PRIVATE OpenMP::OpenMP_C)
endif()
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 7eb1bc993..ae895b9b6 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -28,8 +28,7 @@ set(librpm_SOURCES
if(ENABLE_SQLITE)
list(APPEND librpm_SOURCES backend/sqlite.c)
- target_include_directories(librpm PRIVATE ${SQLITE_INCLUDE_DIRS})
- target_link_libraries(librpm PRIVATE ${SQLITE_LIBRARIES})
+ target_link_libraries(librpm PRIVATE PkgConfig::SQLITE)
endif()
if(ENABLE_NDB)
@@ -46,11 +45,11 @@ if(ENABLE_BDB_RO)
endif()
if(WITH_ACL)
- target_link_libraries(librpm PRIVATE ${LIBACL_LIBRARIES})
+ target_link_libraries(librpm PRIVATE PkgConfig::LIBACL)
endif()
if(WITH_CAP)
- target_link_libraries(librpm PRIVATE ${LIBCAP_LIBRARIES})
+ target_link_libraries(librpm PRIVATE PkgConfig::LIBCAP)
endif()
add_custom_command(OUTPUT tagtbl.C
@@ -59,8 +58,7 @@ add_custom_command(OUTPUT tagtbl.C
)
target_sources(librpm PRIVATE ${librpm_SOURCES} tagtbl.C)
-target_include_directories(librpm PRIVATE ${LUA_INCLUDE_DIRS})
target_link_libraries(librpm PUBLIC librpmio)
-target_link_libraries(librpm PRIVATE ${POPT_LIBRARIES} ${LUA_LIBRARIES})
+target_link_libraries(librpm PRIVATE PkgConfig::POPT PkgConfig::LUA)
install(TARGETS librpm)
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index b662ed2c7..3309c964e 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -1,51 +1,42 @@
-set(plugins prioreset syslog)
+add_library(prioreset MODULE prioreset.c)
+add_library(syslog MODULE syslog.c)
if(WITH_SELINUX)
- set(selinux_libs ${SELINUX_LDFLAGS})
- set(selinux_flags ${SELINUX_CFLAGS})
- list(APPEND plugins selinux)
+ add_library(selinux MODULE selinux.c)
+ target_link_libraries(selinux PRIVATE PkgConfig::SELINUX)
endif()
if(WITH_DBUS)
- pkg_check_modules(DBUS dbus-1 REQUIRED)
- set(systemd_inhibit_libs ${DBUS_LDFLAGS})
- set(systemd_inhibit_flags ${DBUS_CFLAGS})
- set(dbus_announce_libs ${DBUS_LDFLAGS})
- set(dbus_announce_flags ${DBUS_CFLAGS})
- list(APPEND plugins systemd_inhibit dbus_announce)
+ pkg_check_modules(DBUS REQUIRED IMPORTED_TARGET dbus-1)
+ add_library(systemd_inhibit MODULE systemd_inhibit.c)
+ target_link_libraries(systemd_inhibit PRIVATE PkgConfig::DBUS)
+ add_library(dbus_announce MODULE dbus_announce.c)
+ target_link_libraries(dbus_announce PRIVATE PkgConfig::DBUS)
endif()
-if(WITH_IMA)
- set(ima_libs imaevm)
- list(APPEND plugins ima)
+if(WITH_IMAEVM)
+ add_library(ima MODULE ima.c)
+ target_link_libraries(ima PRIVATE imaevm)
endif()
if(WITH_FAPOLICYD)
- list(APPEND plugins fapolicyd)
+ add_library(fapolicyd MODULE fapolicyd.c)
endif()
if(WITH_AUDIT)
- set(audit_libs ${AUDIT_LDFLAGS})
- list(APPEND plugins audit)
+ add_library(audit MODULE audit.c)
+ target_link_libraries(audit PRIVATE PkgConfig::AUDIT)
endif()
if(WITH_FSVERITY)
- set(fsverity_libs ${FSVERITY_LDFLAGS})
- list(APPEND plugins fsverity)
+ add_library(fsverity MODULE fsverity.c)
+ target_link_libraries(fsverity PRIVATE PkgConfig::FSVERITY)
endif()
set(plugindir ${CMAKE_INSTALL_FULL_LIBDIR}/rpm-plugins)
+get_property(plugins DIRECTORY PROPERTY BUILDSYSTEM_TARGETS)
foreach(plugin ${plugins})
- add_library(${plugin} MODULE ${plugin}.c)
- set(ln ${plugin}_libs)
- if (${ln})
- target_link_libraries(${plugin} PRIVATE ${${ln}})
- endif()
- set(fn ${plugin}_flags)
- if (${fn})
- target_compile_options(${plugin} PRIVATE ${${fn}})
- endif()
install(TARGETS ${plugin} DESTINATION ${plugindir})
endforeach()
diff --git a/rpmio/CMakeLists.txt b/rpmio/CMakeLists.txt
index 1ea37afb6..7a25b6c12 100644
--- a/rpmio/CMakeLists.txt
+++ b/rpmio/CMakeLists.txt
@@ -12,19 +12,16 @@ if (WITH_INTERNAL_OPENPGP)
if (WITH_OPENSSL)
find_package(OpenSSL REQUIRED)
list(APPEND librpmio_SOURCES digest_openssl.c)
- target_include_directories(librpmio PRIVATE
- ${OPENSSL_INCLUDE_DIRS})
- target_link_libraries(librpmio PRIVATE ${OPENSSL_LIBRARIES})
+ target_link_libraries(librpmio PRIVATE OpenSSL:Crypto)
else()
- pkg_check_modules(LIBGCRYPT libgcrypt REQUIRED)
+ pkg_check_modules(LIBGCRYPT REQUIRED IMPORTED_TARGET libgcrypt)
list(APPEND librpmio_SOURCES digest_libgcrypt.c)
- target_include_directories(librpmio PRIVATE
- ${LIBGCRYPT_INCLUDE_DIRS})
- target_link_libraries(librpmio PRIVATE ${LIBGCRYPT_LIBRARIES})
+ target_link_libraries(librpmio PRIVATE PkgConfig::LIBGCRYPT)
endif()
else()
+ pkg_check_modules(RPMSEQUOIA REQUIRED IMPORTED_TARGET rpm-sequoia)
list(APPEND librpmio_SOURCES rpmpgp_sequoia.c)
- target_link_libraries(librpmio PRIVATE ${RPMSEQUOIA_LIBRARIES})
+ target_link_libraries(librpmio PRIVATE PkgConfig::RPMSEQUOIA)
endif()
set_target_properties(librpmio PROPERTIES
@@ -32,17 +29,20 @@ set_target_properties(librpmio PROPERTIES
SOVERSION ${RPM_SOVERSION}
)
target_sources(librpmio PRIVATE ${librpmio_SOURCES})
-target_include_directories(librpmio PRIVATE ${LUA_INCLUDE_DIRS})
-target_link_libraries(librpmio PRIVATE ${POPT_LIBRARIES} ${LUA_LIBRARIES})
+target_link_libraries(librpmio PRIVATE
+ PkgConfig::POPT
+ PkgConfig::LUA
+ ZLIB::ZLIB)
-set(iolibs ZLIB BZIP2 LIBLZMA ZSTD)
-foreach(lib ${iolibs})
- if (${${lib}_FOUND})
- target_include_directories(librpmio PRIVATE
- ${${lib}_INCLUDE_DIRS})
- target_link_libraries(librpmio PRIVATE ${${lib}_LIBRARIES})
- endif()
-endforeach()
+if (ZSTD_FOUND)
+ target_link_libraries(librpmio PRIVATE PkgConfig::ZSTD)
+endif()
+if (LIBLZMA_FOUND)
+ target_link_libraries(librpmio PRIVATE PkgConfig::LIBLZMA)
+endif()
+if (BZIP2_FOUND)
+ target_link_libraries(librpmio PRIVATE BZip2::BZip2)
+endif()
install(TARGETS librpmio
)
diff --git a/sign/CMakeLists.txt b/sign/CMakeLists.txt
index 61fef9d3c..c35aa31bd 100644
--- a/sign/CMakeLists.txt
+++ b/sign/CMakeLists.txt
@@ -14,7 +14,7 @@ if (WITH_IMAEVM)
endif()
if (WITH_FSVERITY)
list(APPEND librpmsign_SOURCES rpmsignverity.c)
- target_link_libraries(librpmsign PRIVATE ${FSVERITY_LDFLAGS})
+ target_link_libraries(librpmsign PRIVATE PkgConfig::FSVERITY)
endif()
target_sources(librpmsign PRIVATE ${librpmsign_SOURCES})