diff --git a/CMakeLists.txt b/CMakeLists.txt index cd72f2f..378d848 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,9 @@ project(docpp VERSION 0.0.1 LANGUAGES CXX ) +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + if (NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif() @@ -37,15 +40,12 @@ set_target_properties(${PROJECT_NAME} PROPERTIES install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets FILE_SET HEADERS - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RUNTIME DESTINATION bin - PUBLIC_HEADER DESTINATION include/docpp - INCLUDES DESTINATION include) + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/docpp + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -set(INCLUDE_INSTALL_DIR include/) - -include(CMakePackageConfigHelpers) write_basic_package_version_file( "${PROJECT_NAME}ConfigVersion.cmake" VERSION ${PROJECT_VERSION} @@ -54,11 +54,11 @@ write_basic_package_version_file( install(EXPORT ${PROJECT_NAME}Targets FILE ${PROJECT_NAME}Targets.cmake NAMESPACE docpp:: - DESTINATION lib/cmake/${PROJECT_NAME}) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) install(FILES "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - DESTINATION lib/cmake/${PROJECT_NAME}) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) if (NOT WIN32 AND NOT APPLE) configure_file(${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.pc.in @@ -66,9 +66,7 @@ if (NOT WIN32 AND NOT APPLE) ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc - DESTINATION lib/pkgconfig) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc - DESTINATION lib64/pkgconfig) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) endif() if (CMAKE_BUILD_TYPE STREQUAL "Debug") @@ -103,19 +101,14 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug") endif() if (NOT WIN32) - if (EXISTS "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.PKGBUILD.in") + if (EXISTS "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.PKGBUILD.in" AND + GENERATE_PKGBUILD) configure_file(${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.PKGBUILD.in ${CMAKE_CURRENT_BINARY_DIR}/PKGBUILD @ONLY ) endif() - if (EXISTS "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.ebuild.in") - configure_file(${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.ebuild.in - ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.ebuild @ONLY - ) - endif() - - if (BUILD_TARBALL OR BUILD_ARCH) + if (BUILD_TARBALL OR GENERATE_EBUILD) add_custom_command( TARGET ${PROJECT_NAME} COMMENT "Create tarball" @@ -123,31 +116,24 @@ if (NOT WIN32) WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND scripts/${PROJECT_NAME}_make dist && mv ${PROJECT_SOURCE_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.gz* ${CMAKE_BINARY_DIR} ) - elseif (BUILD_TARBALL_RELEASE OR BUILD_ARCH_RELEASE) - add_custom_command( - TARGET ${PROJECT_NAME} - COMMENT "Create tarball" - POST_BUILD - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - COMMAND scripts/${PROJECT_NAME}_make dist_release && mv ${PROJECT_SOURCE_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.gz* ${CMAKE_BINARY_DIR} - ) endif() - if (BUILD_ARCH_RELEASE) - add_custom_command( - TARGET ${PROJECT_NAME} - COMMENT "Build arch package" - POST_BUILD - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMAND makepkg -sfr --sign + if (EXISTS "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.ebuild.in" AND + GENERATE_EBUILD ) + configure_file(${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.ebuild.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.ebuild @ONLY ) - elseif (BUILD_ARCH) add_custom_command( TARGET ${PROJECT_NAME} - COMMENT "Build arch package" + COMMENT "Copy ebuild and generate manifest" POST_BUILD WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMAND makepkg -sfr + COMMAND cp + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.ebuild + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-9999.ebuild && + ${PROJECT_SOURCE_DIR}/scripts/generate_manifest + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.gz + > ${CMAKE_CURRENT_BINARY_DIR}/Manifest ) endif() endif() diff --git a/README.md b/README.md index 87d1987..fff6549 100644 --- a/README.md +++ b/README.md @@ -30,9 +30,15 @@ cmake --install . --prefix /usr ``` This will install the library to /usr/lib and the headers to /usr/include/docpp. -If you use Arch Linux, you can install the library by specifying -DBUILD_ARCH=ON to the cmake build command. This requires makepkg. If you don't specify anything, a PKGBUILD will be generated in the build directory. -If you use Gentoo Linux, an ebuild will automatically be generated in the build directory. -If you use a package manager that uses DEB or RPM packages, you can enable the BUILD_DEB or BUILD_RPM options to generate a package, which will be placed in the build directory. +If you use Arch Linux, you can specify -DGENERATE_PKGBUILD=ON to generate a PKGBUILD file in the build directory. You can then use makepkg to build a package. + +```sh +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DGENERATE_PKGBUILD=ON +cmake --build . +makepkg -si +``` + +If you use Gentoo Linux, you can specify -DGENERATE_EBUILD=ON to generate an ebuild file in the build directory, along with the manifest. ## Usage diff --git a/cmake/docpp.ebuild.in b/cmake/docpp.ebuild.in new file mode 100644 index 0000000..5ea225a --- /dev/null +++ b/cmake/docpp.ebuild.in @@ -0,0 +1,45 @@ +# Copyright 1999-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 +inherit toolchain-funcs cmake + +DESCRIPTION="C++ library for generating XML, HTML and CSS." +HOMEPAGE="" + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://git.speedie.site/speedie/${PN}.git" +else + KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~x86" + SRC_URI="https://ls.speedie.site/releases/${PN}/${PN}-${PV}/${P}.tar.gz -> ${P}.tar.gz" + S="${WORKDIR}/${P}" +fi + +LICENSE="LGPL-3" +SLOT="0" +IUSE="" + +DEPEND="${RDEPEND}" +BDEPEND="virtual/pkgconfig dev-build/cmake" + +src_prepare() { + default +} + +src_configure() { + local cmakeargs=( + -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr" + -DCMAKE_BUILD_TYPE=Release + ) + + cmake_src_configure +} + +src_compile() { + cmake_src_compile +} + +src_install() { + cmake_src_install +} diff --git a/cmake/docpp.pc.in b/cmake/docpp.pc.in index c8e1167..8cd3bf9 100644 --- a/cmake/docpp.pc.in +++ b/cmake/docpp.pc.in @@ -1,6 +1,6 @@ prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=${prefix} -libdir=${exec_prefix}/lib +libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@ includedir=${prefix}/include Name: @PROJECT_NAME@ diff --git a/scripts/docpp_make b/scripts/docpp_make index e69a0a5..ce94f7e 100755 --- a/scripts/docpp_make +++ b/scripts/docpp_make @@ -36,13 +36,16 @@ gen_pkg() { rm -rf ${proj}-${version} USER="$(whoami)" - printf "Is your GPG key '$(whoami)'?\n" - select yn in "Yes" "No"; do - case $yn in - Yes) USER="$(whoami)"; break ;; - No) printf "\n> "; read -r USER; break ;; - esac - done + + if [ "$1" = "release" ]; then + printf "Is your GPG key '$(whoami)'?\n" + select yn in "Yes" "No"; do + case $yn in + Yes) USER="$(whoami)"; break ;; + No) printf "\n> "; read -r USER; break ;; + esac + done + fi if [ -x "$(command -v gpg)" ] && [ "$1" = "release" ]; then gpg --detach-sign --yes --local-user "${USER}" ${proj}-${version}.tar.gz diff --git a/scripts/generate_manifest b/scripts/generate_manifest new file mode 100755 index 0000000..5b2449f --- /dev/null +++ b/scripts/generate_manifest @@ -0,0 +1,21 @@ +#!/bin/sh + +[ "$1" = "" ] && { + printf "%s\n" "Usage: $0 " + exit 1 +} + +[ ! -f "$1" ] && { + printf "%s\n" "Error: file '$1' not found" + exit 1 +} + +filename=$(basename "$1") +size=$(stat -c %s "$1") +#md5=$(md5sum "$1" | cut -d' ' -f1) +#sha1=$(sha1sum "$1" | cut -d' ' -f1) +#sha256=$(sha256sum "$1" | cut -d' ' -f1) +sha512=$(sha512sum "$1" | cut -d' ' -f1) +blake2b=$(b2sum "$1" | cut -d' ' -f1) + +printf "%s\n" "DIST $filename $size BLAKE2B $blake2b SHA512 $sha512"