summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt283
-rw-r--r--build/CMakeLists.txt36
-rw-r--r--cmconfig.h.in126
-rw-r--r--docs/CMakeLists.txt33
-rw-r--r--docs/man/CMakeLists.txt40
-rw-r--r--fileattrs/CMakeLists.txt6
-rw-r--r--include/rpm/CMakeLists.txt16
-rw-r--r--lib/CMakeLists.txt66
-rw-r--r--plugins/CMakeLists.txt51
-rw-r--r--po/CMakeLists.txt16
-rw-r--r--python/CMakeLists.txt27
-rw-r--r--rpmio/CMakeLists.txt48
-rw-r--r--scripts/CMakeLists.txt22
-rw-r--r--sign/CMakeLists.txt19
14 files changed, 789 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 000000000..415a7f6dd
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,283 @@
+####################################
+############ WARNING ###############
+########## EXPERIMENTAL! ###########
+####################################
+
+cmake_minimum_required(VERSION 3.10)
+
+project(rpm
+ VERSION 4.18.90
+ DESCRIPTION "The RPM Package Manager"
+ HOMEPAGE_URL "http://rpm.org"
+ LANGUAGES C
+)
+
+# user configurable stuff
+option(ENABLE_PYTHON "Enable Python bindings" ON)
+option(ENABLE_PLUGINS "Enable plugin support" ON)
+option(ENABLE_WERROR "Stop build on warnings" OFF)
+option(ENABLE_SQLITE "Enable sqlite rpmdb support" ON)
+option(ENABLE_NDB "Enable ndb rpmdb support" ON)
+option(ENABLE_BDB_RO "Enable read-only Berkeley DB rpmdb support (EXPERIMENTAL)" OFF)
+
+option(WITH_INTERNAL_OPENPGP "Use internal OpenPGP parse (DEPRECATED)" ON)
+option(WITH_OPENSSL "Use openssl (instead of libgcrypt) for internal crypto" OFF)
+
+option(WITH_CAP "Build with capability support" ON)
+option(WITH_ACL "Build with ACL support" ON)
+option(WITH_ARCHIVE "Build with libarchive support" ON)
+option(WITH_SELINUX "Build with SELinux support" ON)
+option(WITH_DBUS "Build with DBUS support" ON)
+option(WITH_AUDIT "Build with audit support" ON)
+option(WITH_FSVERITY "Build with fsverity support" OFF)
+option(WITH_IMA "Build with IMA support" off)
+
+set(RPMCONFIGDIR "${CMAKE_INSTALL_PREFIX}/lib/rpm" CACHE PATH "rpm home")
+set(RPMCANONVENDOR "vendor" CACHE STRING "rpm vendor string")
+
+# emulate libtool versioning
+set(RPM_SOVERSION 9)
+set(RPM_LIBVERSION ${RPM_SOVERSION}.3.0)
+
+set(CMAKE_C_STANDARD 99)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+set(CMAKE_C_EXTENSIONS ON)
+set(CMAKE_SHARED_LIBRARY_PREFIX "")
+set(CMAKE_SHARED_MODULE_PREFIX "")
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+include(GNUInstallDirs)
+add_compile_definitions(_GNU_SOURCE)
+
+# autotools compat stuff
+set(PACKAGE "${PROJECT_NAME}")
+set(PACKAGE_NAME "${PROJECT_NAME}")
+set(VERSION "${PROJECT_VERSION}")
+set(PACKAGE_VERSION "${PROJECT_VERSION}")
+set(PACKAGE_BUGREPORT "${PROJECT_HOMEPAGE_URL}")
+
+set(UID_0_USER root)
+set(GID_0_GROUP root)
+
+function(makemacros)
+ set(prefix ${CMAKE_INSTALL_PREFIX})
+ set(exec_prefix "\${prefix}")
+ set(CMAKE_INSTALL_PREFIX "\${prefix}")
+ set(acutils
+ awk ar as cpp cxx
+ )
+ foreach (V ${acutils})
+ string(TOUPPER ${V} n)
+ set(${n} /usr/bin/${V})
+ endforeach()
+ set(extutils
+ 7zip bzip2 cat chmod chown cp curl file gpg grep gzip id cc ln
+ install lrzip lzip xz make mkdir mv patch rm sed tar unzip
+ zstd gem git hg bzr quilt ld objdump strip
+ )
+ foreach (V ${extutils})
+ string(TOUPPER ${V} n)
+ set(__${n} /usr/bin/${V})
+ endforeach()
+ set(macrodirs
+ BINDIR SBINDIR LIBEXECDIR SYSCONFDIR RUNSTATEDIR
+ SHAREDSTATEDIR LOCALSTATEDIR RUNSTATEDIR LIB LIBDIR
+ INCLUDEDIR OLDINCLUDEDIR DATADIR DATAROOTDIR MANDIR
+ DOCDIR INFODIR
+ )
+ foreach (V ${macrodirs})
+ string(TOLOWER ${V} n)
+ set(${n} ${CMAKE_INSTALL_FULL_${V}})
+ endforeach()
+
+ set(DB_BACKEND sqlite)
+ set(__FIND_DEBUGINFO /usr/bin/find-debuginfo)
+ set(RUNDIR /run)
+ set(localstatedir /var)
+
+ set(host_cpu ${CMAKE_HOST_SYSTEM_PROCESSOR})
+ string(TOLOWER ${CMAKE_HOST_SYSTEM_NAME} host_os)
+ set(host_vendor redhat)
+ set(host ${host_cpu}-${host_vendor}-${host_os})
+
+ set(RPMCANONVENDOR ${host_vendor})
+ set(RPMCANONOS ${host_os})
+ set(RPMCANONGNU -gnu)
+
+ configure_file(platform.in platform @ONLY)
+ configure_file(rpmrc.in rpmrc @ONLY)
+ configure_file(macros.in macros @ONLY)
+ configure_file(rpmpopt.in rpmpopt-${PROJECT_VERSION} @ONLY)
+
+ install(CODE "execute_process(
+ COMMAND ${CMAKE_SOURCE_DIR}/installplatform
+ rpmrc platform macros
+ ${RPMCANONVENDOR} ${RPMCANONOS} ${RPMCANONGNU})"
+ )
+endfunction()
+
+include(CheckLibraryExists)
+include(CheckFunctionExists)
+include(CheckIncludeFile)
+
+find_package(PkgConfig REQUIRED)
+find_package(OpenMP)
+find_package(ZLIB REQUIRED)
+find_package(BZip2)
+find_package(LibLZMA)
+
+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(FSVERITY libfsverity)
+
+if (ENABLE_SQLITE)
+ pkg_check_modules(SQLITE sqlite3 REQUIRED)
+endif()
+
+if (ENABLE_PYTHON)
+ find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
+endif()
+
+if (WITH_CAP)
+ pkg_check_modules(LIBCAP libcap REQUIRED)
+endif()
+
+if (WITH_SELINUX)
+ pkg_check_modules(SELINUX libselinux REQUIRED)
+endif()
+
+if (WITH_ARCHIVE)
+ pkg_check_modules(LIBARCHIVE libarchive REQUIRED)
+endif()
+
+function(chkdef func)
+ string(TOUPPER ${func} FUNC)
+ set(HAVENAME HAVE_${FUNC})
+ check_function_exists(${func} ${HAVENAME})
+endfunction()
+
+set(OPTFUNCS
+ stpcpy stpncpy putenv mempcpy fdatasync lutimes mergesort
+ getauxval setprogname __progname syncfs sched_getaffinity unshare
+ secure_getenv __secure_getenv)
+foreach(f ${OPTFUNCS})
+ chkdef(${f})
+endforeach()
+
+function(chkhdr inc)
+ string(MAKE_C_IDENTIFIER ${inc} ID)
+ string(TOUPPER ${ID} INC)
+ set(HAVENAME HAVE_${INC})
+ check_include_file(${inc} ${HAVENAME})
+endfunction()
+
+set(OPTINCS
+ limits.h getopt.h
+ sys/utsname.h sys/systemcfg.h sys/param.h sys/auxv.h
+)
+foreach(f ${OPTINCS})
+ chkhdr(${f})
+endforeach()
+
+configure_file(cmconfig.h.in config.h)
+add_compile_definitions(HAVE_CONFIG_H)
+
+add_compile_definitions(MAJOR_IN_SYSMACROS)
+
+add_compile_definitions(RPMCONFIGDIR="${RPMCONFIGDIR}")
+add_compile_definitions(LOCALEDIR="${CMAKE_INSTALL_FULL_LOCALEDIR}")
+add_compile_definitions(LOCALSTATEDIR="${CMAKE_INSTALL_FULL_LOCALSTATEDIR}")
+add_compile_definitions(SYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}")
+add_compile_definitions(LIBRPMALIAS_FILENAME="rpmpopt-${VERSION}")
+add_compile_definitions(LIBRPMALIAS_EXECPATH="${CMAKE_INSTALL_FULL_BINDIR}")
+
+# map module/package findings to autoconf tests
+if (${BZIP2_FOUND})
+ add_compile_definitions(HAVE_BZLIB_H)
+endif()
+if (${LIBLZMA_FOUND})
+ add_compile_definitions(HAVE_LZMA_H)
+endif()
+if (${ZSTD_FOUND})
+ add_compile_definitions(HAVE_ZSTD)
+endif()
+
+if (ENABLE_WERROR)
+ add_compile_options(-Werror)
+endif()
+
+include_directories(${CMAKE_BINARY_DIR})
+include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/include)
+
+add_subdirectory(docs)
+add_subdirectory(include/rpm)
+add_subdirectory(misc)
+add_subdirectory(rpmio)
+add_subdirectory(lib)
+add_subdirectory(build)
+add_subdirectory(sign)
+add_subdirectory(po)
+
+if (ENABLE_PYTHON)
+ add_subdirectory(python)
+endif()
+
+if (ENABLE_PLUGINS)
+ add_subdirectory(plugins)
+endif()
+
+
+add_subdirectory(fileattrs)
+add_subdirectory(scripts)
+
+add_library(cliutils OBJECT cliutils.c cliutils.h)
+
+set(rpmbuild_libs librpmbuild)
+set(rpmspec_libs librpmbuild ${READLINE_LIBRARIES})
+set(rpmsign_libs librpmsign)
+
+set(rpmlibs librpmio librpm ${POPT_LIBRARIES})
+set(rpmcli rpm rpmdb rpmkeys rpm2cpio rpmbuild rpmspec rpmsign)
+if (WITH_ARCHIVE)
+ set(rpm2archive_libs ${LIBARCHIVE_LIBRARIES})
+ list(APPEND rpmcli rpm2archive)
+endif()
+
+foreach(cmd ${rpmcli})
+ add_executable(${cmd} ${cmd}.c cliutils)
+ target_link_libraries(${cmd} PRIVATE ${rpmlibs} ${${cmd}_libs})
+endforeach()
+install(TARGETS ${rpmcli})
+
+foreach(cmd rpmverify rpmquery)
+ add_custom_target(${cmd} ALL COMMAND
+ ${CMAKE_COMMAND} -E create_symlink rpm ${cmd})
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${cmd} TYPE BIN)
+endforeach()
+
+set(rpmdeps_libs librpmbuild)
+set(rpmlua_libs ${READLINE_LIBRARIES})
+set(rpmtools rpmdeps rpmgraph rpmlua rpmuncompress)
+if (${LIBELF_FOUND})
+ set(elfdeps_libs ${LIBELF_LIBRARIES})
+ list(APPEND rpmtools elfdeps)
+endif()
+foreach(cmd ${rpmtools})
+ add_executable(${cmd} tools/${cmd}.c)
+ target_link_libraries(${cmd} PRIVATE ${rpmlibs} ${${cmd}_libs})
+endforeach()
+install(TARGETS elfdeps rpmdeps rpmuncompress DESTINATION ${RPMCONFIGDIR})
+install(TARGETS rpmgraph rpmlua)
+
+makemacros()
+foreach(f macros rpmrc rpmpopt-${PROJECT_VERSION})
+ install(FILES ${CMAKE_BINARY_DIR}/${f} DESTINATION ${RPMCONFIGDIR})
+endforeach()
+
+install(DIRECTORY DESTINATION ${RPMCONFIGDIR}/lua)
+install(DIRECTORY DESTINATION ${RPMCONFIGDIR}/macros.d)
+install(FILES CONTRIBUTING.md COPYING CREDITS INSTALL README TYPE DOC)
diff --git a/build/CMakeLists.txt b/build/CMakeLists.txt
new file mode 100644
index 000000000..813119224
--- /dev/null
+++ b/build/CMakeLists.txt
@@ -0,0 +1,36 @@
+set(librpmbuild_SOURCES
+ build.c files.c misc.c pack.c
+ parseSimpleScript.c parseChangelog.c parseDescription.c
+ parseFiles.c parsePreamble.c parsePrep.c parseReqs.c parseScript.c
+ parseSpec.c parseList.c reqprov.c rpmfc.c spec.c
+ parsePolicies.c policies.c
+ rpmbuild_internal.h rpmbuild_misc.h
+ speclua.c
+)
+
+add_library(librpmbuild SHARED)
+set_target_properties(librpmbuild PROPERTIES
+ VERSION ${RPM_LIBVERSION}
+ SOVERSION ${RPM_SOVERSION}
+)
+target_sources(librpmbuild PRIVATE ${librpmbuild_SOURCES})
+target_link_libraries(librpmbuild PUBLIC librpmio librpm)
+target_link_libraries(librpmbuild PRIVATE
+ libmisc
+ ${LUA_LIBRARIES}
+ ${POPT_LIBRARIES}
+ ${MAGIC_LIBRARIES}
+ ${LIBELF_LIBRARIES}
+ ${LIBDW_LIBRARIES}
+)
+
+if(WITH_CAP)
+ target_link_libraries(librpmbuild PRIVATE ${LIBCAP_LIBRARIES})
+endif()
+
+if(OpenMP_C_FOUND)
+ target_link_libraries(librpmbuild PRIVATE ${OpenMP_C_LIBRARIES})
+endif()
+
+
+install(TARGETS librpmbuild)
diff --git a/cmconfig.h.in b/cmconfig.h.in
new file mode 100644
index 000000000..1803dd4cb
--- /dev/null
+++ b/cmconfig.h.in
@@ -0,0 +1,126 @@
+#cmakedefine DBUS @DBUS@
+#cmakedefine ENABLE_INHIBIT_PLUGIN @ENABLE_INHIBIT_PLUGIN@
+#cmakedefine ENABLE_NDB @ENABLE_NDB@
+#cmakedefine ENABLE_NLS @ENABLE_NLS@
+#cmakedefine ENABLE_OPENMP @ENABLE_OPENMP@
+#cmakedefine ENABLE_PLUGINS @ENABLE_PLUGINS@
+#cmakedefine HAVE_BASENAME @HAVE_BASENAME@
+#cmakedefine HAVE_BN2BINPAD @HAVE_BN2BINPAD@
+#cmakedefine HAVE_BZLIB_H @HAVE_BZLIB_H@
+#cmakedefine HAVE_CAP_COMPARE @HAVE_CAP_COMPARE@
+#cmakedefine HAVE_DECL_FDATASYNC @HAVE_DECL_FDATASYNC@
+#cmakedefine HAVE_DIRENT_H @HAVE_DIRENT_H@
+#cmakedefine HAVE_DIRNAME @HAVE_DIRNAME@
+#cmakedefine HAVE_DLFCN_H @HAVE_DLFCN_H@
+#cmakedefine HAVE_DSA_SET0_KEY @HAVE_DSA_SET0_KEY@
+#cmakedefine HAVE_DSA_SET0_PQG @HAVE_DSA_SET0_PQG@
+#cmakedefine HAVE_DSA_SIG_SET0 @HAVE_DSA_SIG_SET0@
+#cmakedefine HAVE_DWELF_ELF_BEGIN @HAVE_DWELF_ELF_BEGIN@
+#cmakedefine HAVE_ELFUTILS_LIBDWELF_H @HAVE_ELFUTILS_LIBDWELF_H@
+#cmakedefine HAVE_EVP_MD_CTX_NEW @HAVE_EVP_MD_CTX_NEW@
+#cmakedefine HAVE_FCHMODAT @HAVE_FCHMODAT@
+#cmakedefine HAVE_FCHOWNAT @HAVE_FCHOWNAT@
+#cmakedefine HAVE_FDATASYNC @HAVE_FDATASYNC@
+#cmakedefine HAVE_FSTATAT @HAVE_FSTATAT@
+#cmakedefine HAVE_GELF_H @HAVE_GELF_H@
+#cmakedefine HAVE_GETADDRINFO @HAVE_GETADDRINFO@
+#cmakedefine HAVE_GETAUXVAL @HAVE_GETAUXVAL@
+#cmakedefine HAVE_GETCWD @HAVE_GETCWD@
+#cmakedefine HAVE_GETLINE @HAVE_GETLINE@
+#cmakedefine HAVE_GETOPT_H @HAVE_GETOPT_H@
+#cmakedefine HAVE_GETTEXT @HAVE_GETTEXT@
+#cmakedefine HAVE_GZSEEK @HAVE_GZSEEK@
+#cmakedefine HAVE_ICONV @HAVE_ICONV@
+#cmakedefine HAVE_INTTYPES_H @HAVE_INTTYPES_H@
+#cmakedefine HAVE_LCHOWN @HAVE_LCHOWN@
+#cmakedefine HAVE_LIBCRYPTO @HAVE_LIBCRYPTO@
+#cmakedefine HAVE_LIBDW @HAVE_LIBDW@
+#cmakedefine HAVE_LIBELF @HAVE_LIBELF@
+#cmakedefine HAVE_LIBNSL @HAVE_LIBNSL@
+#cmakedefine HAVE_LIBPTHREAD @HAVE_LIBPTHREAD@
+#cmakedefine HAVE_LIBSELINUX @HAVE_LIBSELINUX@
+#cmakedefine HAVE_LIBTHREAD @HAVE_LIBTHREAD@
+#cmakedefine HAVE_LIMITS_H @HAVE_LIMITS_H@
+#cmakedefine HAVE_LINKAT @HAVE_LINKAT@
+#cmakedefine HAVE_LINUX_FSVERITY_H @HAVE_LINUX_FSVERITY_H@
+#cmakedefine HAVE_LOCALTIME_R @HAVE_LOCALTIME_R@
+#cmakedefine HAVE_LSETXATTR @HAVE_LSETXATTR@
+#cmakedefine HAVE_LUTIMES @HAVE_LUTIMES@
+#cmakedefine HAVE_LZMA_H @HAVE_LZMA_H@
+#cmakedefine HAVE_MEMORY_H @HAVE_MEMORY_H@
+#cmakedefine HAVE_MEMPCPY @HAVE_MEMPCPY@
+#cmakedefine HAVE_MERGESORT @HAVE_MERGESORT@
+#cmakedefine HAVE_MKDIRAT @HAVE_MKDIRAT@
+#cmakedefine HAVE_MKFIFOAT @HAVE_MKFIFOAT@
+#cmakedefine HAVE_MKNODAT @HAVE_MKNODAT@
+#cmakedefine HAVE_MKSTEMP @HAVE_MKSTEMP@
+#cmakedefine HAVE_MREMAP @HAVE_MREMAP@
+#cmakedefine HAVE_NDIR_H @HAVE_NDIR_H@
+#cmakedefine HAVE_OPENAT @HAVE_OPENAT@
+#cmakedefine HAVE_OPENSSL_DSA_H @HAVE_OPENSSL_DSA_H@
+#cmakedefine HAVE_OPENSSL_EVP_H @HAVE_OPENSSL_EVP_H@
+#cmakedefine HAVE_OPENSSL_RSA_H @HAVE_OPENSSL_RSA_H@
+#cmakedefine HAVE_PTHREAD_H @HAVE_PTHREAD_H@
+#cmakedefine HAVE_PUTENV @HAVE_PUTENV@
+#cmakedefine HAVE_READLINE @HAVE_READLINE@
+#cmakedefine HAVE_REALPATH @HAVE_REALPATH@
+#cmakedefine HAVE_REGCOMP @HAVE_REGCOMP@
+#cmakedefine HAVE_RENAMEAT @HAVE_RENAMEAT@
+#cmakedefine HAVE_RSA_SET0_KEY @HAVE_RSA_SET0_KEY@
+#cmakedefine HAVE_SCHED_GETAFFINITY @HAVE_SCHED_GETAFFINITY@
+#cmakedefine HAVE_SECURE_GETENV @HAVE_SECURE_GETENV@
+#cmakedefine HAVE_SETENV @HAVE_SETENV@
+#cmakedefine HAVE_SETEXECFILECON @HAVE_SETEXECFILECON@
+#cmakedefine HAVE_SETPROGNAME @HAVE_SETPROGNAME@
+#cmakedefine HAVE_STATVFS @HAVE_STATVFS@
+#cmakedefine HAVE_STDINT_H @HAVE_STDINT_H@
+#cmakedefine HAVE_STDLIB_H @HAVE_STDLIB_H@
+#cmakedefine HAVE_STPCPY @HAVE_STPCPY@
+#cmakedefine HAVE_STPNCPY @HAVE_STPNCPY@
+#cmakedefine HAVE_STRINGS_H @HAVE_STRINGS_H@
+#cmakedefine HAVE_STRING_H @HAVE_STRING_H@
+#cmakedefine HAVE_STRUCT_DIRENT_D_TYPE @HAVE_STRUCT_DIRENT_D_TYPE@
+#cmakedefine HAVE_SYMLINKAT @HAVE_SYMLINKAT@
+#cmakedefine HAVE_SYNCFS @HAVE_SYNCFS@
+#cmakedefine HAVE_SYS_AUXV_H @HAVE_SYS_AUXV_H@
+#cmakedefine HAVE_SYS_DIR_H @HAVE_SYS_DIR_H@
+#cmakedefine HAVE_SYS_NDIR_H @HAVE_SYS_NDIR_H@
+#cmakedefine HAVE_SYS_PARAM_H @HAVE_SYS_PARAM_H@
+#cmakedefine HAVE_SYS_STAT_H @HAVE_SYS_STAT_H@
+#cmakedefine HAVE_SYS_SYSTEMCFG_H @HAVE_SYS_SYSTEMCFG_H@
+#cmakedefine HAVE_SYS_TYPES_H @HAVE_SYS_TYPES_H@
+#cmakedefine HAVE_SYS_UTSNAME_H @HAVE_SYS_UTSNAME_H@
+#cmakedefine HAVE_UNISTD_H @HAVE_UNISTD_H@
+#cmakedefine HAVE_UNLINKAT @HAVE_UNLINKAT@
+#cmakedefine HAVE_UNSETENV @HAVE_UNSETENV@
+#cmakedefine HAVE_UNSHARE @HAVE_UNSHARE@
+#cmakedefine HAVE_UTIMENSAT @HAVE_UTIMENSAT@
+#cmakedefine HAVE_UTIMES @HAVE_UTIMES@
+#cmakedefine HAVE_ZLIB_H @HAVE_ZLIB_H@
+#cmakedefine HAVE_ZSTD @HAVE_ZSTD@
+#cmakedefine HAVE___PROGNAME @HAVE___PROGNAME@
+#cmakedefine HAVE___SECURE_GETENV @HAVE___SECURE_GETENV@
+#cmakedefine MAJOR_IN_MKDEV @MAJOR_IN_MKDEV@
+#cmakedefine MAJOR_IN_SYSMACROS @MAJOR_IN_SYSMACROS@
+#cmakedefine RUNDIR @RUNDIR@
+#cmakedefine WITH_ACL @WITH_ACL@
+#cmakedefine WITH_AUDIT @WITH_AUDIT@
+#cmakedefine ENABLE_BDB_RO @ENABLE_BDB_RO@
+#cmakedefine WITH_CAP @WITH_CAP@
+#cmakedefine WITH_FSVERITY @WITH_FSVERITY@
+#cmakedefine WITH_IMAEVM @WITH_IMAEVM@
+#cmakedefine WITH_SELINUX @WITH_SELINUX@
+#cmakedefine ENABLE_SQLITE @ENABLE_SQLITE@
+
+#cmakedefine UID_0_USER "@UID_0_USER@"
+#cmakedefine GID_0_GROUP "@GID_0_GROUP@"
+
+#cmakedefine PACKAGE "@PACKAGE@"
+#cmakedefine VERSION "@VERSION@"
+#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@"
+#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@"
+#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@"
+#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@"
+#cmakedefine PACKAGE_URL "@PACKAGE_URL@"
+#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@"
+#cmakedefine RPMCANONVENDOR "@RPMCANONVENDOR@"
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
new file mode 100644
index 000000000..24603a253
--- /dev/null
+++ b/docs/CMakeLists.txt
@@ -0,0 +1,33 @@
+find_program(PANDOC NAMES pandoc)
+
+add_subdirectory(man)
+
+set(refman
+ manual/arch_dependencies.md
+ manual/autosetup.md
+ manual/boolean_dependencies.md
+ manual/buildprocess.md
+ manual/conditionalbuilds.md
+ manual/dependencies.md
+ manual/dependency_generators.md
+ manual/devel_documentation.md
+ manual/file_triggers.md
+ manual/format.md
+ manual/hregions.md
+ manual/index.md
+ manual/large_files.md
+ manual/lua.md
+ manual/macros.md
+ manual/more_dependencies.md
+ manual/multiplebuilds.md
+ manual/plugins.md
+ manual/queryformat.md
+ manual/relocatable.md
+ manual/scriptlet_expansion.md
+ manual/signatures_digests.md
+ manual/spec.md
+ manual/tags.md
+ manual/triggers.md
+ manual/tsort.md
+)
+install(FILES ${refman} TYPE DOC)
diff --git a/docs/man/CMakeLists.txt b/docs/man/CMakeLists.txt
new file mode 100644
index 000000000..0b54e64c6
--- /dev/null
+++ b/docs/man/CMakeLists.txt
@@ -0,0 +1,40 @@
+
+set(manuals
+ gendiff.1 rpm2cpio.8
+ rpm.8 rpmbuild.8 rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8
+ rpmdeps.8 rpmgraph.8 rpmlua.8 rpm-misc.8
+)
+
+if (WITH_ARCHIVE)
+ list(APPEND manuals rpm2archive.8)
+endif()
+
+if (ENABLE_PLUGINS)
+ list(APPEND manuals rpm-plugins.8
+ rpm-plugin-prioreset.8 rpm-plugin-syslog.8)
+ if (WITH_AUDIT)
+ list(APPEND manuals rpm-plugin-audit.8)
+ endif()
+ if (WITH_DBUS)
+ list(APPEND manuals
+ rpm-plugin-dbus-announce.8 rpm-plugin-systemd-inhibit.8)
+ endif()
+ if (WITH_FAPOLICYD)
+ list(APPEND manuals rpm-plugin-fapolicyd.8)
+ endif()
+ if (WITH_IMA)
+ list(APPEND manuals rpm-plugin-ima.8)
+ endif()
+ if (WITH_SELINUX)
+ list(APPEND manuals rpm-plugin-selinux.8)
+ endif()
+endif()
+
+foreach(man ${manuals})
+ # XXX manuals should be pre-built in tarballs
+ if (DEFINED PANDOC)
+ add_custom_target(${man} ALL COMMAND ${PANDOC}
+ ${CMAKE_CURRENT_SOURCE_DIR}/${man}.md -o ${man})
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${man} TYPE MAN)
+ endif()
+endforeach()
diff --git a/fileattrs/CMakeLists.txt b/fileattrs/CMakeLists.txt
new file mode 100644
index 000000000..31cbc3ec2
--- /dev/null
+++ b/fileattrs/CMakeLists.txt
@@ -0,0 +1,6 @@
+set(fileattrs_DATA
+ debuginfo.attr desktop.attr elf.attr font.attr metainfo.attr
+ perl.attr perllib.attr pkgconfig.attr ocaml.attr
+ rpm_macro.attr script.attr)
+
+install(FILES ${fileattrs_DATA} DESTINATION ${RPMCONFIGDIR}/fileattrs)
diff --git a/include/rpm/CMakeLists.txt b/include/rpm/CMakeLists.txt
new file mode 100644
index 000000000..c9fbcc073
--- /dev/null
+++ b/include/rpm/CMakeLists.txt
@@ -0,0 +1,16 @@
+set(rpm_HEADERS
+ argv.h rpmbase64.h rpmcrypto.h rpmfileutil.h rpmio.h
+ rpmkeyring.h rpmlog.h rpmmacro.h rpmpgp.h rpmsq.h rpmstring.h
+ rpmstrpool.h rpmsw.h rpmurl.h rpmutil.h rpmver.h
+
+ header.h rpmarchive.h rpmcallback.h rpmcli.h
+ rpmdb.h rpmds.h rpmfi.h rpmfiles.h rpmlib.h
+ rpmprob.h rpmps.h rpmtag.h rpmtd.h rpmte.h rpmte.h rpmts.h
+ rpmtypes.h
+
+ rpmbuild.h rpmspec.h rpmfc.h
+
+ rpmsign.h
+)
+
+install(FILES ${rpm_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rpm )
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
new file mode 100644
index 000000000..d6b274c51
--- /dev/null
+++ b/lib/CMakeLists.txt
@@ -0,0 +1,66 @@
+add_library(librpm SHARED)
+set_target_properties(librpm PROPERTIES
+ VERSION ${RPM_LIBVERSION}
+ SOVERSION ${RPM_SOVERSION}
+)
+
+set(librpm_SOURCES
+ backend/dbi.c backend/dbi.h backend/dummydb.c
+ backend/dbiset.c backend/dbiset.h
+ headerutil.c header.c headerfmt.c header_internal.h
+ rpmdb.c rpmdb_internal.h
+ fprint.c fprint.h tagname.c rpmtd.c
+ cpio.c cpio.h depends.c order.c formats.c tagexts.c fsm.c fsm.h
+ manifest.c manifest.h package.c
+ poptALL.c poptI.c poptQV.c psm.c query.c
+ rpmal.c rpmal.h rpmchecksig.c rpmds.c rpmds_internal.h
+ rpmfi.c rpmfi_internal.h
+ rpmgi.h rpmgi.c rpminstall.c rpmts_internal.h
+ rpmlead.c rpmlead.h rpmps.c rpmprob.c rpmrc.c
+ rpmte.c rpmte_internal.h rpmts.c rpmfs.h rpmfs.c
+ signature.c signature.h transaction.c
+ verify.c rpmlock.c rpmlock.h misc.h relocation.c
+ rpmscript.h rpmscript.c
+ rpmchroot.c rpmchroot.h
+ rpmplugins.c rpmplugins.h rpmplugin.h rpmug.c rpmug.h
+ rpmtriggers.h rpmtriggers.c rpmvs.c rpmvs.h
+)
+
+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})
+endif()
+
+if(ENABLE_NDB)
+ list(APPEND librpm_SOURCES
+ backend/ndb/glue.c
+ backend/ndb/rpmpkg.c backend/ndb/rpmpkg.h
+ backend/ndb/rpmidx.c backend/ndb/rpmidx.h
+ backend/ndb/rpmxdb.c backend/ndb/rpmxdb.h
+ )
+endif()
+
+if(ENABLE_BDB_RO)
+ list(APPEND librpm_SOURCES backend/bdb_ro.c)
+ target_link_libraries(librpm PRIVATE ${SQLITE_LIBRARIES})
+endif()
+
+if(WITH_ACL)
+ target_link_libraries(librpm PRIVATE acl)
+endif()
+
+if(WITH_CAP)
+ target_link_libraries(librpm PRIVATE ${LIBCAP_LIBRARIES})
+endif()
+
+add_custom_command(OUTPUT tagtbl.C
+ COMMAND AWK=gawk ${CMAKE_CURRENT_SOURCE_DIR}/gentagtbl.sh ${CMAKE_SOURCE_DIR}/include/rpm/rpmtag.h > tagtbl.C
+ DEPENDS ${CMAKE_SOURCE_DIR}/include/rpm/rpmtag.h gentagtbl.sh
+)
+
+target_sources(librpm PRIVATE ${librpm_SOURCES} tagtbl.C)
+target_link_libraries(librpm PUBLIC librpmio)
+target_link_libraries(librpm PRIVATE ${POPT_LIBRARIES} ${LUA_LIBRARIES})
+
+install(TARGETS librpm)
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
new file mode 100644
index 000000000..05697a904
--- /dev/null
+++ b/plugins/CMakeLists.txt
@@ -0,0 +1,51 @@
+set(plugins prioreset syslog)
+
+if(WITH_SELINUX)
+ set(selinux_libs ${SELINUX_LDFLAGS})
+ set(selinux_flags ${SELINUX_CFLAGS})
+ list(APPEND plugins 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)
+endif()
+
+if(WITH_IMA)
+ set(ima_libs imaevm)
+ list(APPEND plugins ima)
+endif()
+
+if(WITH_FAPOLICYD)
+ list(APPEND plugins fapolicyd)
+endif()
+
+if(WITH_AUDIT)
+ set(audit_libs -laudit)
+ list(APPEND plugins audit)
+endif()
+
+if(FSVERITY_IOCTL)
+ set(fsverity_libs ${FSVERITY_LIBRARIES})
+ list(APPEND plugins fsverity)
+endif()
+
+set(plugindir ${CMAKE_INSTALL_FULL_LIBDIR}/rpm-plugins)
+
+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/po/CMakeLists.txt b/po/CMakeLists.txt
new file mode 100644
index 000000000..4b62fa23b
--- /dev/null
+++ b/po/CMakeLists.txt
@@ -0,0 +1,16 @@
+find_package(Gettext)
+
+if(GETTEXT_FOUND)
+ # Discover our translations
+ file(READ LINGUAS linguas)
+ string(REPLACE " " ";" linguas ${linguas})
+ set(linguas ${linguas})
+ # Copy translations to build tree to avoid modifying source
+ foreach(lang ${linguas})
+ string(STRIP ${lang} lang)
+ set(po ${lang}.po)
+ file(COPY ${po} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+ list(APPEND pos ${CMAKE_CURRENT_BINARY_DIR}/${po})
+ endforeach()
+ GETTEXT_CREATE_TRANSLATIONS(rpm.pot ALL ${pos})
+endif()
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
new file mode 100644
index 000000000..ac655c45d
--- /dev/null
+++ b/python/CMakeLists.txt
@@ -0,0 +1,27 @@
+set(_rpm_SOURCES
+ rpmmodule.c rpmsystem-py.h
+ header-py.c header-py.h
+ rpmarchive-py.c rpmarchive-py.h
+ rpmds-py.c rpmds-py.h
+ rpmfd-py.c rpmfd-py.h
+ rpmfiles-py.c rpmfiles-py.h
+ rpmkeyring-py.c rpmkeyring-py.h
+ rpmmi-py.c rpmmi-py.h
+ rpmii-py.c rpmii-py.h
+ rpmps-py.c rpmps-py.h
+ rpmmacro-py.c rpmmacro-py.h
+ rpmstrpool-py.c rpmstrpool-py.h
+ rpmtd-py.c rpmtd-py.h
+ rpmte-py.c rpmte-py.h
+ rpmts-py.c rpmts-py.h
+ rpmver-py.c rpmver-py.h
+ spec-py.c spec-py.h
+)
+
+Python3_add_library(_rpm ${_rpm_SOURCES})
+target_link_libraries(_rpm PRIVATE librpmio librpm librpmbuild librpmsign)
+
+install(TARGETS _rpm
+ DESTINATION ${Python3_SITEARCH}/rpm)
+install(FILES rpm/transaction.py rpm/__init__.py
+ DESTINATION ${Python3_SITEARCH}/rpm)
diff --git a/rpmio/CMakeLists.txt b/rpmio/CMakeLists.txt
new file mode 100644
index 000000000..f003eae1f
--- /dev/null
+++ b/rpmio/CMakeLists.txt
@@ -0,0 +1,48 @@
+add_library(librpmio SHARED)
+
+set(librpmio_SOURCES
+ argv.c base64.c digest.c expression.c macro.c rpmhook.h rpmhook.c
+ rpmio.c rpmlog.c rpmmalloc.c rgetopt.c rpmpgp.c rpmpgpval.h
+ rpmsq.c rpmsw.c url.c rpmio_internal.h rpmvercmp.c
+ rpmver.c rpmstring.c rpmfileutil.c rpmglob.c rpmkeyring.c
+ rpmstrpool.c rpmmacro_internal.h rpmlua.c rpmlua.h lposix.c)
+
+if (WITH_INTERNAL_OPENPGP)
+ list(APPEND librpmio_SOURCES rpmpgp_internal.h rpmpgp_internal.c)
+ 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})
+ else()
+ pkg_check_modules(LIBGCRYPT libgcrypt REQUIRED)
+ list(APPEND librpmio_SOURCES digest_libgcrypt.c)
+ target_include_directories(librpmio PRIVATE
+ ${LIBGCRYPT_INCLUDE_DIRS})
+ target_link_libraries(librpmio PRIVATE ${LIBGCRYPT_LIBRARIES})
+ endif()
+else()
+ find_library(RPMSEQUOIA librpm_sequoia.so.0 REQUIRED)
+ list(APPEND librpmio_SOURCES rpmpgp_sequoia.c)
+ target_link_libraries(librpmio PRIVATE ${RPMSEQUOIA})
+endif()
+
+set_target_properties(librpmio PROPERTIES
+ VERSION ${RPM_LIBVERSION}
+ SOVERSION ${RPM_SOVERSION}
+)
+target_sources(librpmio PRIVATE ${librpmio_SOURCES})
+target_link_libraries(librpmio PRIVATE ${POPT_LIBRARIES} ${LUA_LIBRARIES})
+
+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()
+
+install(TARGETS librpmio
+)
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
new file mode 100644
index 000000000..235a3e339
--- /dev/null
+++ b/scripts/CMakeLists.txt
@@ -0,0 +1,22 @@
+set(rpmconfig_SCRIPTS
+ brp-compress brp-strip brp-strip-comment-note
+ brp-strip-static-archive brp-elfperms brp-remove-la-files
+ check-files check-prereqs
+ check-buildroot check-rpaths check-rpaths-worker
+ find-lang.sh find-requires find-provides
+ perl.prov perl.req
+ pkgconfigdeps.sh
+ ocamldeps.sh
+ fontconfig.prov script.req
+ rpm_macros_provides.sh
+ rpmdb_dump rpmdb_load
+ rpm2cpio.sh tgpg
+)
+
+set(rpmconfig_DATA
+ rpm.daily rpm.log rpm.supp
+)
+
+install(PROGRAMS gendiff TYPE BIN)
+install(PROGRAMS ${rpmconfig_SCRIPTS} DESTINATION ${RPMCONFIGDIR})
+install(FILES ${rpmconfig_DATA} DESTINATION ${RPMCONFIGDIR})
diff --git a/sign/CMakeLists.txt b/sign/CMakeLists.txt
new file mode 100644
index 000000000..78e5b70fa
--- /dev/null
+++ b/sign/CMakeLists.txt
@@ -0,0 +1,19 @@
+set(librpmsign_SOURCES
+ rpmgensig.c rpmsignverity.c rpmsignfiles.c
+)
+
+add_library(librpmsign SHARED)
+set_target_properties(librpmsign PROPERTIES
+ VERSION ${RPM_LIBVERSION}
+ SOVERSION ${RPM_SOVERSION}
+)
+target_sources(librpmsign PRIVATE ${librpmsign_SOURCES})
+target_link_libraries(librpmsign PUBLIC librpmio librpm)
+if (WITH_IMA)
+ target_link_libraries(librpmsign PRIVATE imaevm)
+endif()
+if (WITH_FSVERITY)
+ target_link_libraries(librpmsign PRIVATE ${FSVERITY_LIBRARIES})
+endif()
+
+install(TARGETS librpmsign)