commit 5c28587f5ca350ad5667d415d0385991b2c5b3fe from: Sergey Bronnikov date: Wed Feb 24 13:35:47 2021 UTC cmake: build rpm and deb packages Closes #21 commit - cef2c2c7dbc6586e191ca70def71748727be7309 commit + 5c28587f5ca350ad5667d415d0385991b2c5b3fe blob - dd3ebd11438d2c890e629700699df429f832f6d5 blob + 8ac2b0b292e4632a45e81a4ccdf97752036c8086 --- CMakeLists.txt +++ CMakeLists.txt @@ -28,3 +28,5 @@ add_custom_command(TARGET check-mandoc COMMAND mandoc -T lint -W warning,stop ${MANUAL_PAGES} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMENT "Run mandoc static analysis") + +include(${PROJECT_SOURCE_DIR}/cmake/CPack.cmake) blob - /dev/null blob + 2384c81006767873abf47e518794081a8792b6e4 (mode 644) --- /dev/null +++ CPackConfig.cmake @@ -0,0 +1 @@ +include(cmake/CPack.cmake) blob - /dev/null blob + cdf9c10a03b5fa27b773df310213d36aa8fd1aef (mode 644) --- /dev/null +++ cmake/CPack.cmake @@ -0,0 +1,125 @@ +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/ DESTINATION ${SERVICES_INSTALL_DIR}/ServiceMenus ) +install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/usr/bin/unreliablefs DESTINATION bin) + +set(MAJOR_VERSION "1") +set(MINOR_VERSION "0") +set(PATCH_VERSION "0") + +if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") +include(InstallRequiredSystemLibraries) +set(CPACK_SET_DESTDIR "on") +set(CPACK_PACKAGING_INSTALL_PREFIX "/tmp") +set(CPACK_GENERATOR "DEB") +set(CPACK_PACKAGE_DESCRIPTION "A FUSE-based fault injection filesystem.") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ) +set(CPACK_PACKAGE_VENDOR "nowardev") +set(CPACK_PACKAGE_CONTACT "Sergey Bronnikov estetus@gmail.com") +set(CPACK_PACKAGE_VERSION_MAJOR "${MAJOR_VERSION}") +set(CPACK_PACKAGE_VERSION_MINOR "${MINOR_VERSION}") +set(CPACK_PACKAGE_VERSION_PATCH "${PATCH_VERSION}") +set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${MAJOR_VERSION}.${MINOR_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}") +set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${MAJOR_VERSION}.${MINOR_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}") +set(CPACK_DEBIAN_PACKAGE_DEPENDS " fuse, libfuse-dev ") +set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") +set(CPACK_DEBIAN_PACKAGE_SECTION "devel") +set(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR}) +set(CPACK_COMPONENTS_ALL Libraries ApplicationData) +include(CPack) +endif(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") + +################### + +set (CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME}) +set (CPACK_PACKAGE_VENDOR unreliablefs) +set (CPACK_PACKAGE_DESCRIPTION ${PROJECT_DESCRIPTION}) +set (CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}) +set (CPACK_PACKAGE_CONTACT "Sergey Bronnikov ") +set (CPACK_PACKAGE_HOMEPAGE_URL ${PROJECT_HOMEPAGE_URL}) + +set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) +set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) +set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) +set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) + +set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt") +configure_file(${CMAKE_SOURCE_DIR}/LICENSE ${CPACK_RESOURCE_FILE_LICENSE}) + +set (CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/cmake/packaging/ReadMe.txt") +set (CPACK_RESOURCE_FILE_WELCOME "${CMAKE_SOURCE_DIR}/cmake/packaging/Welcome.txt") + +if (APPLE) + set (CPACK_SYSTEM_NAME "macOS") + execute_process( + COMMAND sw_vers -productVersion + OUTPUT_VARIABLE CPACK_SYSTEM_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +elseif(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + set (CPACK_SYSTEM_NAME "FreeBSD") + execute_process( + COMMAND freebsd-version + OUTPUT_VARIABLE CPACK_SYSTEM_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +else() + if(EXISTS /etc/os-release) + file(READ /etc/os-release OS_RELEASE) + string(REGEX REPLACE "\r?\n" ";" LINES "${OS_RELEASE}") + + foreach(LINE ${LINES}) + string(REGEX MATCH "^ID=\"?([A-Za-z0-9._-]+)\"?" match ${LINE}}) + if (match) + set (CPACK_SYSTEM_NAME ${CMAKE_MATCH_1}) + endif() + + string(REGEX MATCH "^VERSION_ID=\"?([A-Za-z0-9._-]+)\"?" match ${LINE}}) + if (match) + set (CPACK_SYSTEM_VERSION ${CMAKE_MATCH_1}) + endif() + endforeach() + else() + set (CPACK_SYSTEM_NAME "unknown") + endif() +endif() + +if (${CPACK_SYSTEM_NAME} STREQUAL "macOS") + set (CPACK_GENERATOR "PackageMaker") + set (CMAKE_INSTALL_PREFIX "/usr/local") + set (CPACK_PACKAGING_INSTALL_PREFIX "/usr/local") +elseif (${CPACK_SYSTEM_NAME} STREQUAL "debian") + set (CPACK_GENERATOR DEB) + set (CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT}) + set (CPACK_DEBIAN_PACKAGE_DESCRIPTION ${PROJECT_DESCRIPTION}) + set (CPACK_DEBIAN_PACKAGE_DEPENDS "libz-dev, libsqlite3-dev, ncurses-dev, libstdc++-6-dev, libxml2-dev, uuid-dev") +elseif(${CPACK_SYSTEM_NAME} STREQUAL "ubuntu") + set (CPACK_GENERATOR DEB) + set (CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT}) + set (CPACK_DEBIAN_PACKAGE_DESCRIPTION ${PROJECT_DESCRIPTION}) + set (CPACK_DEBIAN_PACKAGE_DEPENDS "zlib1g, libncurses5, libstdc++6, libxml2, libsqlite3-0") +elseif(${CPACK_SYSTEM_NAME} STREQUAL "fedora") + set (CPACK_GENERATOR RPM) + set (CPACK_RPM_PACKAGE_REQUIRES "ncurses, libsqlite3x, zlib, libxml2, libuuid") +elseif(${CPACK_SYSTEM_NAME} STREQUAL "FreeBSD") + set (CPACK_GENERATOR STGZ) + return() + # The following does not work on the FreeBSD 11.2 and default CMake. + # For some reason, CPack does not recognize FreeBSD as a valid generator + # TODO: fix + set (CPACK_GENERATOR FreeBSD) + set (CPACK_FREEBSD_PACKAGE_NAME ${CPACK_PACKAGE_NAME}) + set (CPACK_FREEBSD_PACKAGE_COMMENT ${CPACK_PACKAGE_DESCRIPTION}) + set (CPACK_FREEBSD_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION}) + set (CPACK_FREEBSD_PACKAGE_WWW ${PROJECT_HOMEPAGE_URL}) + set (CPACK_FREEBSD_PACKAGE_LICENSE "Apache-2.0") + set (CPACK_FREEBSD_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT}) + set (CPACK_FREEBSD_PACKAGE_ORIGIN "misc/mull") +else() + message(WARNING "UnreliableFS package is not available for ${CPACK_SYSTEM_NAME} yet.") +endif() + +set (MULL_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}-${CPACK_SYSTEM_VERSION}") +set (CPACK_PACKAGE_FILE_NAME ${MULL_PACKAGE_FILE_NAME}) + +include(CPack) + +file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/PACKAGE_FILE_NAME ${MULL_PACKAGE_FILE_NAME})