cmvr-es/dependency/arm/third_party/jrl-cmakemodules/v1.1.2/share/jrl-cmakemodules/dist.cmake

176 lines
7.0 KiB
CMake

# Copyright (C) 2008-2014 LAAS-CNRS, JRL AIST-CNRS.
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>.
# .rst: .. command:: _SETUP_PROJECT_DIST
#
# .. _target-dist:
#
# Add a *dist* target to generate a tarball using ``git-archive``.
#
# Linux specific: use ``git-archive-all.sh`` to obtain a recursive
# ``git-archive`` on the project's submodule. Please note that
# ``git-archive-all.sh`` is not carefully written and create a temporary file in
# the source directory (which is then moved to the build directory).
macro(_SETUP_PROJECT_DIST)
if(UNIX)
find_program(TAR tar)
find_program(GPG gpg)
if(APPLE)
set(GIT_ARCHIVE_ALL ${PROJECT_JRL_CMAKE_MODULE_DIR}/git-archive-all.py)
else(APPLE)
set(GIT_ARCHIVE_ALL ${PROJECT_JRL_CMAKE_MODULE_DIR}/git-archive-all.sh)
endif(APPLE)
# Use git-archive-all.sh to generate distributable source code
if(NOT TARGET distdir)
add_custom_target(distdir COMMENT "Generating dist directory...")
endif()
# gersemi: off
add_custom_target(
${PROJECT_NAME}-distdir
COMMAND
rm -f /tmp/${PROJECT_NAME}.tar &&
${GIT_ARCHIVE_ALL} --prefix ${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}/
${PROJECT_NAME}.tar &&
cd ${PROJECT_BINARY_DIR}/ &&
(
test -d ${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION} &&
find ${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}/ -type d -print0 |
xargs -0 chmod a+w || true
) &&
rm -rf ${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}/ &&
${TAR} xf ${PROJECT_SOURCE_DIR}/${PROJECT_NAME}.tar &&
echo "${PROJECT_VERSION}" >
${PROJECT_BINARY_DIR}/${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}/.version &&
${PROJECT_JRL_CMAKE_MODULE_DIR}/gitlog-to-changelog --srcdir ${PROJECT_SOURCE_DIR} >
${PROJECT_BINARY_DIR}/${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}/ChangeLog &&
rm -f ${PROJECT_SOURCE_DIR}/${PROJECT_NAME}.tar
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generating dist directory for ${PROJECT_NAME}...")
# gersemi: on
add_dependencies(distdir ${PROJECT_NAME}-distdir)
# Create a tar.gz tarball for the project, and generate the signature
if(NOT TARGET dist_targz)
add_custom_target(
dist_targz
COMMENT "Generating tar.gz tarball and its signature..."
)
endif()
# gersemi: off
add_custom_target(
${PROJECT_NAME}-dist_targz
COMMAND
${TAR} -czf ${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.tar.gz
${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}/ &&
${GPG} --detach-sign --armor -o
${PROJECT_BINARY_DIR}/${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.tar.gz.sig
${PROJECT_BINARY_DIR}/${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.tar.gz
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT
"Generating tar.gz tarball and its signature for ${PROJECT_NAME}...")
# gersemi: on
add_dependencies(dist_targz ${PROJECT_NAME}-dist_targz)
# Create a tar.bz2 tarball for the project, and generate the signature
if(NOT TARGET dist_tarbz2)
add_custom_target(
dist_tarbz2
COMMENT "Generating tar.bz2 tarball and its signature..."
)
endif()
# gersemi: off
add_custom_target(
${PROJECT_NAME}-dist_tarbz2
COMMAND
${TAR} -cjf ${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.tar.bz2
${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}/ &&
${GPG} --detach-sign --armor -o
${PROJECT_BINARY_DIR}/${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.tar.bz2.sig
${PROJECT_BINARY_DIR}/${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.tar.bz2
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT
"Generating tar.bz2 tarball and its signature for ${PROJECT_NAME}...")
# gersemi: on
add_dependencies(dist_tarbz2 ${PROJECT_NAME}-dist_tarbz2)
# Create a tar.xz tarball for the project, and generate the signature
if(NOT TARGET dist_tarxz)
add_custom_target(
dist_tarxz
COMMENT "Generating tar.xz tarball and its signature..."
)
endif()
# gersemi: off
add_custom_target(
${PROJECT_NAME}-dist_tarxz
COMMAND
${TAR} -cJf ${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.tar.xz
${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}/ &&
${GPG} --detach-sign --armor -o
${PROJECT_BINARY_DIR}/${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.tar.xz.sig
${PROJECT_BINARY_DIR}/${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.tar.xz
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT
"Generating tar.xz tarball and its signature for ${PROJECT_NAME}...")
# gersemi: on
add_dependencies(dist_tarxz ${PROJECT_NAME}-dist_tarxz)
# Alias: dist = dist_targz (backward compatibility)
if(NOT TARGET dist)
add_custom_target(dist)
endif()
add_custom_target(${PROJECT_NAME}-dist DEPENDS ${PROJECT_NAME}-dist_targz)
add_dependencies(dist ${PROJECT_NAME}-dist)
# TODO: call this during `make clean`
if(NOT TARGET distclean)
add_custom_target(distclean COMMENT "Cleaning dist sources...")
endif()
# gersemi: off
add_custom_target(
${PROJECT_NAME}-distclean
COMMAND
rm -rf
${PROJECT_BINARY_DIR}/${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}/
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT "Cleaning dist sources for ${PROJECT_NAME}...")
# gersemi: on
add_dependencies(distclean ${PROJECT_NAME}-distclean)
if(NOT TARGET distorig)
add_custom_target(distorig COMMENT "Generating orig tarball...")
endif()
# gersemi: off
add_custom_target(
${PROJECT_NAME}-distorig
COMMAND
cmake -E copy ${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.tar.gz
${PROJECT_NAME}${PROJECT_SUFFIX}-${PROJECT_VERSION}.orig.tar.gz
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT "Generating orig tarball for ${PROJECT_NAME}...")
# gersemi: on
add_dependencies(distorig ${PROJECT_NAME}-distorig)
add_dependencies(${PROJECT_NAME}-dist_targz ${PROJECT_NAME}-distdir)
add_dependencies(${PROJECT_NAME}-dist_tarbz2 ${PROJECT_NAME}-distdir)
add_dependencies(${PROJECT_NAME}-dist_tarxz ${PROJECT_NAME}-distdir)
add_dependencies(${PROJECT_NAME}-distorig ${PROJECT_NAME}-dist)
else()
# FIXME: what to do here?
endif()
endmacro(_SETUP_PROJECT_DIST)