[evolution-data-server/wip/cmake] Extend DistTargets.cmake



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]