Skip to content

Commit

Permalink
Use cmake imported targets to let it sort out the compiler flag details
Browse files Browse the repository at this point in the history
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
  • Loading branch information
pmatilai committed Nov 28, 2022
1 parent 17eb3a4 commit 71fe36c
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 80 deletions.
34 changes: 15 additions & 19 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -138,39 +138,35 @@ 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)
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
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)
Expand Down
16 changes: 7 additions & 9 deletions build/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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()


Expand Down
10 changes: 4 additions & 6 deletions lib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
Expand All @@ -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)
45 changes: 18 additions & 27 deletions plugins/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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()

36 changes: 18 additions & 18 deletions rpmio/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,37 +12,37 @@ 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
VERSION ${RPM_LIBVERSION}
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
)
2 changes: 1 addition & 1 deletion sign/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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})

Expand Down

0 comments on commit 71fe36c

Please sign in to comment.