From 4567b13115d5f19816055cb0ed765f0850f46f30 Mon Sep 17 00:00:00 2001 From: Marc Butler Date: Fri, 22 Feb 2019 06:06:04 +1100 Subject: [PATCH] Add RPM packaging support (#5177) * Add RPM packaging support Using the existing PackageDebian as template add support for generating an rpm with the package target. * Restore debian package target Also add an option to advertise the fact. * Update package description C-n-p from README.md * Update rpm package maintainer --- CMake/DESCRIPTION.txt | 4 ++++ CMake/PackageDebian.cmake | 2 -- CMake/PackageRedhat.cmake | 34 ++++++++++++++++++++++++++++++++++ CMakeLists.txt | 19 ++++++++++++++++--- 4 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 CMake/DESCRIPTION.txt create mode 100644 CMake/PackageRedhat.cmake diff --git a/CMake/DESCRIPTION.txt b/CMake/DESCRIPTION.txt new file mode 100644 index 000000000..3698b034a --- /dev/null +++ b/CMake/DESCRIPTION.txt @@ -0,0 +1,4 @@ +FlatBuffers is a cross platform serialization library architected for +maximum memory efficiency. It allows you to directly access serialized +data without parsing/unpacking it first, while still having great +forwards/backwards compatibility. diff --git a/CMake/PackageDebian.cmake b/CMake/PackageDebian.cmake index 6653181c1..f587ff7ff 100644 --- a/CMake/PackageDebian.cmake +++ b/CMake/PackageDebian.cmake @@ -37,5 +37,3 @@ if (UNIX) "${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") endif(UNIX) - -INCLUDE(CPack) diff --git a/CMake/PackageRedhat.cmake b/CMake/PackageRedhat.cmake new file mode 100644 index 000000000..4545e7290 --- /dev/null +++ b/CMake/PackageRedhat.cmake @@ -0,0 +1,34 @@ +if (UNIX) + set(CPACK_GENERATOR "RPM") + set(CPACK_SOURCE_TGZ "ON") + + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "FlatBuffers serialization library and schema compiler.") + + set(CPACK_RPM_PACKAGE_HOMEPAGE "https://github.com/google/flatbuffers") + set(CPACK_RPM_PACKAGE_MAINTAINER "Marc Butler ") + + set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR}) + set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR}) + set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}) + set(CPACK_PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_COMMIT}") + set(CPACK_RPM_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}") + + set(CPACK_RPM_PACKAGE_NAME "flatbuffers") + + # Assume this is not a cross complation build. + if(NOT CPACK_RPM_PACKAGE_ARCHITECTURE) + set(CPACK_RPM_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") + endif(NOT CPACK_RPM_PACKAGE_ARCHITECTURE) + + set(CPACK_RPM_PACKAGE_VENDOR "Google, Inc.") + set(CPACK_RPM_PACKAGE_LICENSE "Apache 2.0") + set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE.txt) + set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/CMake/DESCRIPTION.txt) + + # This may reduce rpm compatiblity with very old systems. + set(CPACK_RPM_COMPRESSION_TYPE lzma) + + set(CPACK_RPM_PACKAGE_NAME "flatbuffers") + set(CPACK_PACKAGE_FILE_NAME + "${CPACK_RPM_PACKAGE_NAME}_${CPACK_RPM_PACKAGE_VERSION}_${CPACK_RPM_PACKAGE_ARCHITECTURE}") +endif(UNIX) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4211e58b9..b0562baca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,7 +23,13 @@ option(FLATBUFFERS_LIBCXX_WITH_CLANG "Force libc++ when using Clang" ON) option(FLATBUFFERS_CODE_SANITIZE "Add '-fsanitize' flags to 'flattests' and 'flatc' targets." OFF) - +option(FLATBUFFERS_PACKAGE_REDHAT + "Build an rpm using the 'package' target." + OFF) +option(FLATBUFFERS_PACKAGE_DEBIAN + "Build an deb using the 'package' target." + OFF) + if(NOT FLATBUFFERS_BUILD_FLATC AND FLATBUFFERS_BUILD_TESTS) message(WARNING "Cannot build tests without building the compiler. Tests will be disabled.") @@ -443,6 +449,13 @@ endif() include(CMake/BuildFlatBuffers.cmake) -if(FLATBUFFERS_PACKAGE_DEBIAN) - include(CMake/PackageDebian.cmake) +if(UNIX) + # Use of CPack only supported on Linux systems. + if(FLATBUFFERS_PACKAGE_DEBIAN) + include(CMake/PackageDebian.cmake) + endif() + if (FLATBUFFERS_PACKAGE_REDHAT) + include(CMake/PackageRedhat.cmake) + endif() + include(CPack) endif()