# HG changeset patch # User Tero Marttila # Date 1232059322 -7200 # Node ID 13fa0546ef877b1e84a33043b74becec362df2f9 # Parent e1a24791d1924d39b380e8391e65fda3194a070d hopefully version stuff is now run properly on every make... diff -r e1a24791d192 -r 13fa0546ef87 CMakeLists.txt --- a/CMakeLists.txt Thu Jan 15 21:33:54 2009 +0200 +++ b/CMakeLists.txt Fri Jan 16 00:42:02 2009 +0200 @@ -24,11 +24,8 @@ 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}") +# Compile-time version script +include ("cmake/BuildVersion.cmake") # skip source code definitions if just building docs if (NOT KG_DOC_ONLY) diff -r e1a24791d192 -r 13fa0546ef87 cmake/BuildVersion.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/BuildVersion.cmake Fri Jan 16 00:42:02 2009 +0200 @@ -0,0 +1,13 @@ +# +# Run a cmake script to update version info on every build +# +ADD_CUSTOM_COMMAND ( + OUTPUT "src/version.c" + COMMAND ${CMAKE_COMMAND} -DOUTPUT_PATH="${CMAKE_BINARY_DIR}/src/version.c" -P ${CMAKE_SOURCE_DIR}/cmake/VersionScript.cmake + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +) + +ADD_CUSTOM_TARGET (version_info ALL DEPENDS "src/version.c") + +MESSAGE (STATUS "Added custom command for src/version.c output") + diff -r e1a24791d192 -r 13fa0546ef87 cmake/FindTimestamp.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/FindTimestamp.cmake Fri Jan 16 00:42:02 2009 +0200 @@ -0,0 +1,14 @@ +# +# Function to get current timestamp. +# +# Sets PROJECT_BUILD_TIMESTAMP var +# +function (FindBuildTimestamp) + EXECUTE_PROCESS ( + COMMAND date --rfc-2822 + OUTPUT_VARIABLE timestamp_now + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + SET (PROJECT_BUILD_TIMESTAMP "${timestamp_now}" PARENT_SCOPE) +endfunction (FindBuildTimestamp) diff -r e1a24791d192 -r 13fa0546ef87 cmake/FindVersion.cmake --- a/cmake/FindVersion.cmake Thu Jan 15 21:33:54 2009 +0200 +++ b/cmake/FindVersion.cmake Fri Jan 16 00:42:02 2009 +0200 @@ -4,45 +4,48 @@ # 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 + # Mercurial + if (EXISTS ${project_path}/.hg) + # first, determine tag EXECUTE_PROCESS ( - COMMAND hg identify --id + COMMAND hg identify --tag WORKING_DIRECTORY "${project_path}" RESULT_VARIABLE hg_error_code - OUTPUT_VARIABLE hg_id + OUTPUT_VARIABLE hg_tag OUTPUT_STRIP_TRAILING_WHITESPACE ) - + if (hg_error_code) - MESSAGE (FATAL_ERROR "`hg identify --id` failed") + MESSAGE (FATAL_ERROR "`hg identify --tag` failed") endif (hg_error_code) - SET (PROJECT_VERSION "${hg_id}" PARENT_SCOPE) - MESSAGE (STATUS "Version: mercurial tip id: ${hg_id}") + # 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 + ) - else ("${hg_tag}" STREQUAL "tip") - SET (PROJECT_VERSION "${hg_tag}" PARENT_SCOPE) - MESSAGE (STATUS "Version: mercurial tag: ${hg_tag}") + if (hg_error_code) + MESSAGE (FATAL_ERROR "`hg identify --id` failed") + endif (hg_error_code) - endif ("${hg_tag}" STREQUAL "tip") + 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") + + else (EXISTS ${project_path}/.hg) + SET (PROJECT_VERSION "0.0" PARENT_SCOPE) + MESSAGE (STATUS "No version information available, assuming version ${PROJECT_VERSION}") + + endif (EXISTS ${project_path}/.hg) ENDFUNCTION (FindProjectVersion) diff -r e1a24791d192 -r 13fa0546ef87 cmake/VersionScript.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/VersionScript.cmake Fri Jan 16 00:42:02 2009 +0200 @@ -0,0 +1,21 @@ +# location of output version.c +SET (PROJECT_VERSION_FILE ${OUTPUT_PATH}) + +# include cmake stuff +include ("cmake/FindVersion.cmake") +include ("cmake/FindTimestamp.cmake") + +# determine PROJECT_VERSION +FindProjectVersion ("${CMAKE_SOURCE_DIR}") + +# build date +FindBuildTimestamp () + + +# create version.c +CONFIGURE_FILE ( + "src/version.c.in" ${PROJECT_VERSION_FILE} @ONLY +) + +MESSAGE (STATUS "wrote version.c -> ${PROJECT_VERSION_FILE}") + diff -r e1a24791d192 -r 13fa0546ef87 src/Application.cc --- a/src/Application.cc Thu Jan 15 21:33:54 2009 +0200 +++ b/src/Application.cc Fri Jan 16 00:42:02 2009 +0200 @@ -15,6 +15,7 @@ ARG_RESOLUTION = 'R', ARG_LIST_MODES = 0xff01, + ARG_VERSION = 0xff02, }; @@ -47,6 +48,9 @@ args.add_option(ARG_LIST_MODES, "list-modes", "", "output a list of available display modes and exit"); + args.add_option(ARG_VERSION, "version", "", + "output application version and exit"); + // set defaults arg_graphics = false; arg_port = NETWORK_PORT_STR; @@ -110,6 +114,10 @@ dump_display_modes(); return false; + case ARG_VERSION: + dump_version(); + return false; + case CL_CommandLine::REST_ARG: throw ArgumentError(args.get_argument()); @@ -150,6 +158,10 @@ for (std::vector::const_iterator it = modes.begin(); it != modes.end(); it++) std::cout << "\t" << it->get_resolution().width << "x" << it->get_resolution().height << std::endl; } + +void Main::dump_version (void) { + std::cout << PROJECT_LONG_NAME << " version " << PROJECT_VERSION << " built " << PROJECT_BUILD_TIMESTAMP << std::endl; +} /** * IT BEGAN IN AFRIKA diff -r e1a24791d192 -r 13fa0546ef87 src/Application.hh --- a/src/Application.hh Thu Jan 15 21:33:54 2009 +0200 +++ b/src/Application.hh Fri Jan 16 00:42:02 2009 +0200 @@ -66,6 +66,11 @@ * Print out a list of display modes */ void dump_display_modes (void); + + /** + * Print out our project version + */ + void dump_version (void); public: /** diff -r e1a24791d192 -r 13fa0546ef87 src/CMakeLists.txt --- a/src/CMakeLists.txt Thu Jan 15 21:33:54 2009 +0200 +++ b/src/CMakeLists.txt Fri Jan 16 00:42:02 2009 +0200 @@ -1,7 +1,8 @@ FILE(GLOB SOURCE_FILES "*.cc" "Network/*.cc") FILE(GLOB HEADER_FILES "*.hh" "Network/*.hh") -set(SOURCES ${SOURCE_FILES} ${HEADER_FILES}) +set_source_files_properties("version.c" PROPERTIES GENERATED true) +set(SOURCES ${SOURCE_FILES} ${HEADER_FILES} "version.c") # Generate config.h configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" @ONLY) diff -r e1a24791d192 -r 13fa0546ef87 src/Config.hh --- a/src/Config.hh Thu Jan 15 21:33:54 2009 +0200 +++ b/src/Config.hh Fri Jan 16 00:42:02 2009 +0200 @@ -113,7 +113,7 @@ const CL_Color COLOR_ROCK(132, 136, 135); // graphics params -const std::string GRAPHICS_WINDOW_TITLE = (PROJECT_LONG_NAME " : Version " PROJECT_VERSION); +const std::string GRAPHICS_WINDOW_TITLE = PROJECT_LONG_NAME; /* (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; diff -r e1a24791d192 -r 13fa0546ef87 src/config.h.in --- a/src/config.h.in Thu Jan 15 21:33:54 2009 +0200 +++ b/src/config.h.in Fri Jan 16 00:42:02 2009 +0200 @@ -7,7 +7,11 @@ #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@" + +/* + * Defined in version.c: + */ +extern const char *PROJECT_VERSION, *PROJECT_BUILD_TIMESTAMP; #endif diff -r e1a24791d192 -r 13fa0546ef87 src/version.c.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/version.c.in Fri Jan 16 00:42:02 2009 +0200 @@ -0,0 +1,4 @@ +/* This file is re-generated on each build */ +const char *PROJECT_VERSION = "@PROJECT_VERSION@"; +const char *PROJECT_BUILD_TIMESTAMP = "@PROJECT_BUILD_TIMESTAMP@"; +