build scripts autodetect project version using 91d96387b359+ tip, and version is included in window title
authorTero Marttila <terom@fixme.fi>
Thu, 15 Jan 2009 21:33:54 +0200
changeset 396 e1a24791d192
parent 395 91d96387b359
child 397 13fa0546ef87
build scripts autodetect project version using 91d96387b359+ tip, and version is included in window title
CMakeLists.txt
build/mkcmake.sh
cmake/FindVersion.cmake
cmake/Modules/FindDoxygen.cmake
doc/CMakeLists.txt
src/Config.hh
src/config.h.in
--- a/CMakeLists.txt	Thu Jan 15 20:38:23 2009 +0200
+++ b/CMakeLists.txt	Thu Jan 15 21:33:54 2009 +0200
@@ -1,10 +1,6 @@
 set(PROJECT_SHORT_NAME "kg")
 set(PROJECT_LONG_NAME "Kisna Glista")
 
-# XXX: wrong
-set(PROJECT_VERSION_MAJOR 0)
-set(PROJECT_VERSION_MINOR 1)
-
 project(${PROJECT_SHORT_NAME})
 cmake_minimum_required(VERSION 2.6)
 
@@ -16,10 +12,6 @@
 # Where to find project source code (hh+cc)
 set(PROJECT_SOURCECODE_DIR "${CMAKE_SOURCE_DIR}/src")
 
-# Project version
-# XXX: hardcoded
-set(PROJECT_VERSION "0.1.0")
-
 # Where to install project data files
 set(PROJECT_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_SHORT_NAME}")
 
@@ -32,6 +24,12 @@
 	set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
 endif(NOT CMAKE_BUILD_TYPE)
 
+# include cmake stuff
+include ("cmake/FindVersion.cmake")
+
+# Determine PROJECT_VERSION
+FindProjectVersion ("${CMAKE_SOURCE_DIR}")
+
 # skip source code definitions if just building docs
 if (NOT KG_DOC_ONLY)
     add_subdirectory(src)
--- a/build/mkcmake.sh	Thu Jan 15 20:38:23 2009 +0200
+++ b/build/mkcmake.sh	Thu Jan 15 21:33:54 2009 +0200
@@ -26,7 +26,7 @@
 if [ -x /p/contrib/bin/doxygen ]; then
     echo "Detected doxygen in /p/contrib/bin/"
 
-    DOXYGEN_HOME=/p/contrib/bin
+    export DOXYGEN_HOME=/p/contrib/bin
 fi
 
 # output parameters
@@ -38,6 +38,6 @@
     -DCMAKE_BUILD_TYPE=${BUILD_TYPE}                \
     -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX          \
     -DCMAKE_CXX_FLAGS="-Wall -Wextra -Wconversion"  \
-    -DDOXYGEN_HOME=${DOXYGEN_HOME}                  \
+#    -DDOXYGEN_HOME=${DOXYGEN_HOME}                  \
     ${EXTRA_OPTS}
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake/FindVersion.cmake	Thu Jan 15 21:33:54 2009 +0200
@@ -0,0 +1,48 @@
+#
+# CMake build script to determine project version number.
+#
+# this will set PROJECT_VERSION to a string
+#
+FUNCTION (FindProjectVersion project_path)
+    # XXX: only support mercurial for now
+
+    MESSAGE (STATUS "project_path=${project_path}")
+
+    # first, determine tag
+    EXECUTE_PROCESS (
+        COMMAND hg identify --tag
+        WORKING_DIRECTORY "${project_path}"
+        RESULT_VARIABLE hg_error_code 
+        OUTPUT_VARIABLE hg_tag
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    
+    if (hg_error_code)
+        MESSAGE (FATAL_ERROR "`hg identify --tag` failed")
+    endif (hg_error_code)
+
+    # if tag is other than tip, use that
+    if ("${hg_tag}" STREQUAL "tip")
+        # use the revision hash
+        EXECUTE_PROCESS (
+            COMMAND hg identify --id
+            WORKING_DIRECTORY "${project_path}"
+            RESULT_VARIABLE hg_error_code 
+            OUTPUT_VARIABLE hg_id
+            OUTPUT_STRIP_TRAILING_WHITESPACE
+        )
+
+        if (hg_error_code)
+            MESSAGE (FATAL_ERROR "`hg identify --id` failed")
+        endif (hg_error_code)
+
+        SET (PROJECT_VERSION "${hg_id}" PARENT_SCOPE)
+        MESSAGE (STATUS "Version: mercurial tip id: ${hg_id}")
+
+    else ("${hg_tag}" STREQUAL "tip")
+        SET (PROJECT_VERSION "${hg_tag}" PARENT_SCOPE)
+        MESSAGE (STATUS "Version: mercurial tag: ${hg_tag}")
+
+    endif ("${hg_tag}" STREQUAL "tip")
+
+ENDFUNCTION (FindProjectVersion)
--- a/cmake/Modules/FindDoxygen.cmake	Thu Jan 15 20:38:23 2009 +0200
+++ b/cmake/Modules/FindDoxygen.cmake	Thu Jan 15 21:33:54 2009 +0200
@@ -27,18 +27,16 @@
 FIND_PROGRAM (DOXYGEN_EXECUTABLE
     NAMES doxygen
     DOC "Path to doxygen binary"
-    PATHS 
-    $ENV{DOXYGEN_HOME}
+    PATHS $ENV{DOXYGEN_HOME}
 )
-#MESSAGE("DBG DOXYGEN_EXECUTABLE=${DOXYGEN_EXECUTABLE}")
+#MESSAGE(STATUS "DBG DOXYGEN_EXECUTABLE=${DOXYGEN_EXECUTABLE}")
 
 FIND_PROGRAM (DOXYGEN_DOT_EXECUTABLE
     NAMES dot
     DOC "Path to dot binary from Graphiz (for doxygen)"
-    PATHS  
-    $ENV{DOT_HOME}
+    PATHS $ENV{DOT_HOME}
 )
-#MESSAGE("DBG DOXYGEN_DOT_EXECUTABLE=${DOXYGEN_DOT_EXECUTABLE}")
+#MESSAGE(STATUS "DBG DOXYGEN_DOT_EXECUTABLE=${DOXYGEN_DOT_EXECUTABLE}")
 
 IF (DOXYGEN_EXECUTABLE)
     SET (DOXYGEN_FOUND TRUE)
--- a/doc/CMakeLists.txt	Thu Jan 15 20:38:23 2009 +0200
+++ b/doc/CMakeLists.txt	Thu Jan 15 21:33:54 2009 +0200
@@ -28,5 +28,8 @@
     
     MESSAGE (STATUS "Doxygen: output will be installed in ${PROJECT_DOXYGEN_DIR}")
 
+ELSE (DOXYGEN_FOUND)
+    MESSAGE (STATUS "Doxygen: not found :(")    
+
 ENDIF (DOXYGEN_FOUND)
 
--- a/src/Config.hh	Thu Jan 15 20:38:23 2009 +0200
+++ b/src/Config.hh	Thu Jan 15 21:33:54 2009 +0200
@@ -113,7 +113,7 @@
 const CL_Color COLOR_ROCK(132, 136, 135);
 
 // graphics params
-const std::string GRAPHICS_WINDOW_TITLE = "Kisna Glista";
+const std::string GRAPHICS_WINDOW_TITLE = (PROJECT_LONG_NAME " : Version " PROJECT_VERSION);
 const uint32_t GRAPHICS_RESOLUTION_WIDTH = 800;
 const uint32_t GRAPHICS_RESOLUTION_HEIGHT = 600;
 const uint16_t GRAPHICS_UPDATE_INTERVAL_MS = 20;
--- a/src/config.h.in	Thu Jan 15 20:38:23 2009 +0200
+++ b/src/config.h.in	Thu Jan 15 21:33:54 2009 +0200
@@ -7,7 +7,7 @@
 #define PROJECT_DATA_DIR "@PROJECT_DATA_DIR@"
 #define PROJECT_SHORT_NAME "@PROJECT_SHORT_NAME@"
 #define PROJECT_LONG_NAME "@PROJECT_LONG_NAME@"
-#define PROJECT_VERSION "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@"
+#define PROJECT_VERSION "@PROJECT_VERSION@"
 
 #endif