Create Dist.cmake and move dist and distcheck target creation there.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6b6931f..8f2f0dc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -76,36 +76,8 @@
endif()
endif()
-set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${CMAKE_PROJECT_VERSION})
-
-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()
+include(Dist)
+Dist(${CMAKE_PROJECT_NAME}-${CMAKE_PROJECT_VERSION})
#ADD_CUSTOM_TARGET(uninstall
# COMMAND cat ${PROJECT_BINARY_DIR}/install_manifest.txt | xargs rm
diff --git a/cmake/Dist.cmake b/cmake/Dist.cmake
new file mode 100644
index 0000000..5ec0172
--- /dev/null
+++ b/cmake/Dist.cmake
@@ -0,0 +1,54 @@
+# 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()