blob: 5ec0172bc8df60668b18913108a0c3f57fbe17ba [file] [log] [blame]
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENSE.
#[=======================================================================[.rst:
Dist
-------
Provide ``dist`` and ``distcheck`` targets similar to
autoconf/automake functionality.
The ``dist`` target creates tarballs of the project in ``.tar.gz`` and
``.tar.xz`` formats.
The ``distcheck`` target extracts one of created tarballs, builds the
software using its defaults, and runs the tests.
Both targets use Unix shell commands.
The Dist target takes one argument, the file name (before the extension).
The ``distcheck`` target creates (and removes) ``${ARCHIVE_NAME}-build``
and ``${ARCHIVE_NAME}-dest``.
#]=======================================================================]
function(Dist ARCHIVE_NAME)
if(NOT TARGET dist AND NOT TARGET distcheck)
add_custom_target(dist
COMMAND git config tar.tar.xz.command "xz -c"
COMMAND git archive --prefix=${ARCHIVE_NAME}/ -o ${ARCHIVE_NAME}.tar.gz HEAD
COMMAND git archive --prefix=${ARCHIVE_NAME}/ -o ${ARCHIVE_NAME}.tar.xz HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_custom_target(distcheck
COMMAND chmod -R u+w ${ARCHIVE_NAME} ${ARCHIVE_NAME}-build ${ARCHIVE_NAME}-dest 2>/dev/null || true
COMMAND rm -rf ${ARCHIVE_NAME} ${ARCHIVE_NAME}-build ${ARCHIVE_NAME}-dest
COMMAND ${CMAKE_COMMAND} -E tar xf ${ARCHIVE_NAME}.tar.gz
COMMAND chmod -R u-w ${ARCHIVE_NAME}
COMMAND mkdir ${ARCHIVE_NAME}-build
COMMAND mkdir ${ARCHIVE_NAME}-dest
COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${ARCHIVE_NAME}-dest ${ARCHIVE_NAME} -B ${ARCHIVE_NAME}-build
COMMAND make -C ${ARCHIVE_NAME}-build -j4
COMMAND make -C ${ARCHIVE_NAME}-build test
COMMAND make -C ${ARCHIVE_NAME}-build install
# COMMAND make -C ${ARCHIVE_NAME}-build uninstall
# COMMAND if [ `find ${ARCHIVE_NAME}-dest ! -type d | wc -l` -ne 0 ]; then echo leftover files in ${ARCHIVE_NAME}-dest; false; fi
COMMAND make -C ${ARCHIVE_NAME}-build clean
COMMAND chmod -R u+w ${ARCHIVE_NAME} ${ARCHIVE_NAME}-build ${ARCHIVE_NAME}-dest
COMMAND rm -rf ${ARCHIVE_NAME} ${ARCHIVE_NAME}-build ${ARCHIVE_NAME}-dest
COMMAND echo "${ARCHIVE_NAME}.tar.gz is ready for distribution."
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_dependencies(distcheck dist)
endif()
endfunction()