161 lines
3.8 KiB
CMake
161 lines
3.8 KiB
CMake
# 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
|
|
rpmdevel.at
|
|
rpmpython.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)
|
|
foreach(prg ${TESTPROGS})
|
|
add_executable(${prg} EXCLUDE_FROM_ALL ${prg}.c)
|
|
target_link_libraries(${prg} PRIVATE librpmio)
|
|
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)
|
|
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)
|
|
|
|
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 ||:
|
|
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
|
|
DEPENDS tree
|
|
)
|
|
|
|
add_custom_target(shell
|
|
COMMAND ./mktree shell ||:
|
|
DEPENDS tree
|
|
)
|
|
|
|
add_custom_target(check
|
|
COMMAND ./mktree check ${JOBS} $(TESTOPTS)
|
|
DEPENDS tree
|
|
)
|
|
|
|
add_custom_target(reset
|
|
COMMAND ./mktree reset
|
|
)
|