[evolution-data-server/wip/cmake] Extend DistTargets.cmake
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/wip/cmake] Extend DistTargets.cmake
- Date: Thu, 29 Sep 2016 16:52:52 +0000 (UTC)
commit 385f0bf6f557b3e46e07ee82003389cd577d81d3
Author: Milan Crha <mcrha redhat com>
Date: Thu Sep 29 18:53:06 2016 +0200
Extend DistTargets.cmake
CMakeLists.txt | 14 ++++++-
cmake/modules/DistTarget.cmake | 15 -------
cmake/modules/DistTargets.cmake | 86 +++++++++++++++++++++++++++++++++++++++
cmake/modules/GtkDoc.cmake | 1 +
cmake/verify-news-file.sh | 39 +++++++++++++++++
vala/CMakeLists.txt | 8 +++-
6 files changed, 145 insertions(+), 18 deletions(-)
---
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 843c242..509d951 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,6 +21,18 @@ set(API_VERSION 1.2)
set(GETTEXT_PACKAGE ${PROJECT_NAME}-${BASE_VERSION})
set(GETTEXT_PO_DIR ${CMAKE_SOURCE_DIR}/po)
+# Required for 'disttest' and 'ditcheck' of DistTarget module
+set(PROJECT_DISTCONFIGURE_PARAMS
+ -DENABLE_GOA=ON
+ -DENABLE_UOA=ON
+ -DENABLE_EXAMPLES=ON
+ -DENABLE_INTROSPECTION=ON
+ -DENABLE_VALA_BINDINGS=ON
+ -DENABLE_INSTALLED_TESTS=ON
+ -DENABLE_GTK_DOC=ON
+ -DWITH_PRIVATE_DOCS=ON
+)
+
# ******************************
# D-Bus versioning
# ******************************
@@ -212,7 +224,7 @@ unset(optupper)
include(CodeCoverageGCOV)
include(CheckTarget)
-include(DistTarget)
+include(DistTargets)
include(GLibTools)
include(GObjectIntrospection)
include(GtkDoc)
diff --git a/cmake/modules/DistTargets.cmake b/cmake/modules/DistTargets.cmake
new file mode 100644
index 0000000..029f782
--- /dev/null
+++ b/cmake/modules/DistTargets.cmake
@@ -0,0 +1,86 @@
+# DistTarget.cmake
+#
+# Defines custom targets related to distributing source code.
+# It requires to have populated 'PROJECT_NAME' and 'PROJECT_VERSION' variables,
+# possibly through the project() command. It also uses 'PROJECT_DISTCONFIGURE_PARAMS'
+# variable when configuring the unpacked distribution.
+#
+# Added targets:
+# dist - only creates a tarball
+# disttest - creates a tarball and 'make && make install' it to a temporary prefix
+# to verify that the code can be built and installed; it also verifies
+# that the first line of the NEWS file contains the same version as
+# the tarball and that it claims today's date.
+# distcheck - similar to 'disttest', only runs also 'make check' before installing
+
+# Filenames for tarball
+set(ARCHIVE_BASE_NAME ${PROJECT_NAME}-${PROJECT_VERSION})
+set(ARCHIVE_FULL_NAME ${ARCHIVE_BASE_NAME}.tar.xz)
+
+add_custom_target(dist
+ COMMAND ${CMAKE_COMMAND} -E echo "Creating '${ARCHIVE_FULL_NAME}'..."
+ COMMAND git archive --prefix=${ARCHIVE_BASE_NAME}/ HEAD | xz -z >
${CMAKE_BINARY_DIR}/${ARCHIVE_FULL_NAME}
+ COMMAND ${CMAKE_COMMAND} -E echo "Distribution tarball '${ARCHIVE_FULL_NAME}' created at
${CMAKE_BINARY_DIR}"
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+)
+
+set(disttest_extract_dir "${CMAKE_BINARY_DIR}/${ARCHIVE_BASE_NAME}")
+set(disttest_build_dir "${disttest_extract_dir}/_build")
+set(disttest_install_dir "${disttest_extract_dir}/_install")
+
+add_custom_command(OUTPUT ${disttest_build_dir}/Makefile
+ # remove any left-over directory
+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${disttest_extract_dir}
+
+ # extract the tarball
+ COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} tar -xf ${ARCHIVE_FULL_NAME}
+
+ # verify the NEWS file contains what it should contain
+ COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}
+ bash ${CMAKE_SOURCE_DIR}/cmake/verify-news-file.sh "${disttest_extract_dir}/NEWS"
"${PROJECT_VERSION}"
+
+ # create a _build sub-directory
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${disttest_build_dir}"
+
+ # configure the project with PROJECT_DISTCHECK_PARAMS
+ COMMAND ${CMAKE_COMMAND} -E chdir "${disttest_build_dir}"
+ ${CMAKE_COMMAND} -G "Unix Makefiles"
+ ${PROJECT_DISTCONFIGURE_PARAMS}
+ -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_INSTALL_PREFIX="${disttest_install_dir}"
+ ..
+
+ # 'make' the project
+ COMMAND ${CMAKE_COMMAND} -E chdir ${disttest_build_dir} make -j
+
+ DEPENDS dist
+)
+
+add_custom_target(distcheck
+ # 'make check' the project
+ COMMAND ${CMAKE_COMMAND} -E chdir ${disttest_build_dir} make -j check
+
+ # 'make install' the project
+ COMMAND ${CMAKE_COMMAND} -E chdir ${disttest_build_dir} make -j install
+
+ # if we get this far, then everything worked, thus clean up
+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${disttest_extract_dir}
+
+ # and show the good news
+ COMMAND ${CMAKE_COMMAND} -E echo "distcheck of '${ARCHIVE_FULL_NAME}' succeeded"
+
+ DEPENDS ${disttest_build_dir}/Makefile
+)
+
+add_custom_target(disttest
+ # 'make install' the project
+ COMMAND ${CMAKE_COMMAND} -E chdir ${disttest_build_dir} make -j install
+
+ # if we get this far, then everything worked, thus clean up
+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${disttest_extract_dir}
+
+ # and show the good news
+ COMMAND ${CMAKE_COMMAND} -E echo "disttest of '${ARCHIVE_FULL_NAME}' succeeded"
+
+ DEPENDS ${disttest_build_dir}/Makefile
+)
diff --git a/cmake/modules/GtkDoc.cmake b/cmake/modules/GtkDoc.cmake
index 3f4cb17..4aa286a 100644
--- a/cmake/modules/GtkDoc.cmake
+++ b/cmake/modules/GtkDoc.cmake
@@ -95,6 +95,7 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign
--extra-dir=..
--html-dir="${OUTPUT_DOCDIR}"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_module}-docs.sgml"
${_filedeps}
COMMENT "Generating ${_module} documentation"
diff --git a/cmake/verify-news-file.sh b/cmake/verify-news-file.sh
new file mode 100755
index 0000000..3ac8099
--- /dev/null
+++ b/cmake/verify-news-file.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# Verifies that the NEWS file's first line contains correct version and date.
+# Requires arguments:
+# $1 ... the NEWS file name, preferably with full path
+# $2 ... expected version string, like "1.2.3"
+#
+# The date is expected in a form of YYYY-MM-DD of the current local time.
+# The NEWS line is in form of "PROJECTNAME VERSION DATE".
+
+FILENAME=$1
+EXPVERSION=$2
+
+if [ ! -f "$FILENAME" ]; then
+ echo "File '$FILENAME' does not exist" 1>&2
+ exit 1
+fi
+
+if [ -z "$EXPVERSION" ]; then
+ echo "Expected version argument not given or empty, use format '1.2.3'" 1>&2
+ exit 1
+fi
+
+NEWSLINE=`head --lines=1 "$FILENAME"`
+EXPDATE=`date +%Y-%m-%d`
+
+NEWSVERSION="${NEWSLINE#* }"
+NEWSDATE="${NEWSVERSION#* }"
+NEWSVERSION="${NEWSVERSION% *}"
+
+if [ "$NEWSVERSION" != "$EXPVERSION" ]; then
+ echo "Read NEWS version '$NEWSVERSION' doesn't match expected version '$EXPVERSION'" 1>&2
+ exit 1
+fi
+
+if [ "$NEWSDATE" != "$EXPDATE" ]; then
+ echo "Read NEWS date '$NEWSDATE' doesn't match expected version '$EXPDATE'" 1>&2
+ exit 1
+fi
diff --git a/vala/CMakeLists.txt b/vala/CMakeLists.txt
index dbe3ef3..6798e1d 100644
--- a/vala/CMakeLists.txt
+++ b/vala/CMakeLists.txt
@@ -35,6 +35,7 @@ if(TARGET ${gir_deps})
--metadatadir=${CMAKE_CURRENT_SOURCE_DIR}
${gir_fullname}
DEPENDS camel-${API_VERSION}.deps
+ ${gir_deps}
${gir_fullname}
)
endif(TARGET ${gir_deps})
@@ -61,6 +62,7 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libedataserver-${API_VERSI
--metadatadir=${CMAKE_CURRENT_SOURCE_DIR}
${gir_fullname}
DEPENDS libedataserver-${API_VERSION}.deps
+ ${gir_deps}
${gir_fullname}
)
@@ -89,8 +91,9 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libebook-contacts-${API_VE
${CMAKE_CURRENT_SOURCE_DIR}/libebook-contacts-${API_VERSION}-custom.vala
DEPENDS libebook-contacts-${API_VERSION}.deps
libebook-contacts-${API_VERSION}-custom.vala
- ${gir_fullname}
${CMAKE_CURRENT_BINARY_DIR}/libedataserver-${API_VERSION}.vapi
+ ${gir_fullname}
+ ${gir_deps}
)
# ***********************************
@@ -118,9 +121,10 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libebook-${API_VERSION}.va
--metadatadir=${CMAKE_CURRENT_SOURCE_DIR}
${gir_fullname}
DEPENDS libebook-${API_VERSION}.deps
- ${gir_fullname}
${CMAKE_CURRENT_BINARY_DIR}/libedataserver-${API_VERSION}.vapi
${CMAKE_CURRENT_BINARY_DIR}/libebook-contacts-${API_VERSION}.vapi
+ ${gir_fullname}
+ ${gir_deps}
)
# ***********************************
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]