Add Gentoo ebuild, along with code necessary to generate one. Also,

clean up the CMakeLists.txt file, allowing it to be more cross platform.
This commit is contained in:
Jacob 2024-05-14 15:39:50 +02:00
parent ceda875213
commit 8a3d21ea31
6 changed files with 111 additions and 50 deletions

View file

@ -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()

View file

@ -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

45
cmake/docpp.ebuild.in Normal file
View file

@ -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
}

View file

@ -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@

View file

@ -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

21
scripts/generate_manifest Executable file
View file

@ -0,0 +1,21 @@
#!/bin/sh
[ "$1" = "" ] && {
printf "%s\n" "Usage: $0 <file>"
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"