# Use our cli tools as an ordering clue to cmake: the project # needs to be built before we can populate anything. The tools depend # on all the libraries so we get a good coverage. get_property(TOOLPROGS DIRECTORY ../tools PROPERTY BUILDSYSTEM_TARGETS) function(os_release var key) execute_process( COMMAND sh -c ". /etc/os-release; echo $${key}" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE value ) string(TOLOWER ${value} value) set(${var} ${value} PARENT_SCOPE) endfunction() set(PYTHON ${Python3_EXECUTABLE}) if (WITH_SEQUOIA) set(PGP sequoia) elseif (WITH_LEGACY_OPENPGP) set(PGP legacy) else() set(PGP dummy) endif() set(HAVE_UNSHARE ${HAVE_UNSHARE}) set(TESTSUITE_AT rpmpgp.at rpmgeneral.at rpmvercmp.at rpmmacro.at rpmapi.at rpmdevel.at rpmpython.at rpmpython2.at rpmdepmatch.at rpmquery.at rpmspec.at rpmvfylevel.at rpmsigdig.at rpmpkgfmt.at rpmio.at rpmverify.at rpmdb.at rpmi.at rpme.at rpmorder.at rpmbuild.at rpmbuildid.at rpmscript.at rpmdeps.at rpmconflict.at rpmreplace.at rpmconfig.at rpmconfig2.at rpmconfig3.at rpmbrp.at ) FILE(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/rpmtests.at) FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/rpmtests.at "m4_define([RPM_PGP], [${PGP}])\n") foreach(at ${TESTSUITE_AT}) FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/rpmtests.at "m4_include([${at}])\n") endforeach() set(TESTPROGS rpmpgpcheck rpmpgppubkeyfingerprint readpkgnullts rpmdig) foreach(prg ${TESTPROGS}) add_executable(${prg} EXCLUDE_FROM_ALL ${prg}.c) target_link_libraries(${prg} PRIVATE librpm) endforeach() string(REPLACE ";" " " TESTPROG_NAMES "${TESTPROGS}") set(PINNED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/pinned) include(ProcessorCount) ProcessorCount(nproc) if (nproc GREATER 1) set(JOBS -j${nproc}) endif() # Set up mktree set(MKTREE_BACKEND oci CACHE STRING "Mktree backend to use") if (MKTREE_BACKEND STREQUAL oci) find_program(PODMAN podman) find_program(DOCKER docker) mark_as_advanced(PODMAN DOCKER) os_release(OS_NAME ID) os_release(OS_VERSION VERSION_ID) set(DOCKERFILE ${CMAKE_CURRENT_SOURCE_DIR}/Dockerfile.${OS_NAME}) if (PODMAN AND EXISTS ${DOCKERFILE}) set(MKTREE_NATIVE yes) configure_file(${DOCKERFILE} Dockerfile COPYONLY) add_custom_target(ci COMMAND ./mktree.oci build COMMAND ./mktree.oci check ${JOBS} $(TESTOPTS) COMMAND ./mktree.oci clean WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) else() set(MKTREE_NATIVE no) configure_file(Dockerfile Dockerfile COPYONLY) endif() find_program(PODMAN NAMES podman docker REQUIRED) elseif (MKTREE_BACKEND STREQUAL rootfs) set(MKTREE_NATIVE yes) find_program(BWRAP bwrap REQUIRED) mark_as_advanced(BWRAP) endif() message(STATUS "Using mktree backend: ${MKTREE_BACKEND} " "(native: ${MKTREE_NATIVE})") configure_file(mktree.common mktree.common @ONLY) configure_file(mktree.${MKTREE_BACKEND} mktree @ONLY) configure_file(setup.sh setup.sh @ONLY) if (MKTREE_NATIVE) find_program(AUTOM4TE autom4te REQUIRED) mark_as_advanced(AUTOM4TE) set(AUTOTEST ${AUTOM4TE} --language=autotest) configure_file(atlocal.in atlocal @ONLY) configure_file(package.m4.in package.m4 @ONLY) add_custom_command(OUTPUT rpmtests COMMAND ${AUTOTEST} -I ${CMAKE_CURRENT_SOURCE_DIR} -o rpmtests rpmtests.at DEPENDS ${TESTSUITE_AT} rpmtests.at DEPENDS local.at ) add_custom_target(tree COMMAND ./mktree build DEPENDS rpmtests DEPENDS ${TESTPROGS} DEPENDS ${TOOLPROGS} ) else() add_custom_target(tree COMMAND ./mktree build) endif() add_custom_target(atshell COMMAND ./mktree atshell ||: COMMAND ./mktree clean DEPENDS tree ) add_custom_target(pinned COMMAND ./mktree atshell /pinned/update COMMAND cp pinned/*.txt ${PINNED_DIR}/ COMMAND git add ${PINNED_DIR}/*.txt COMMAND git diff --staged ${PINNED_DIR}/*.txt COMMAND ./mktree clean DEPENDS tree ) add_custom_target(shell COMMAND ./mktree shell ||: COMMAND ./mktree clean DEPENDS tree ) add_custom_target(check COMMAND ./mktree check ${JOBS} $(TESTOPTS) COMMAND ./mktree clean DEPENDS tree ) add_custom_target(reset COMMAND ./mktree reset )