Use the version info methods from HDRITools to get improved data.

metadata
Edgar Velazquez-Armendariz 2012-10-05 01:42:27 -04:00
parent 5f06699361
commit 2f8d848300
4 changed files with 218 additions and 13 deletions

View File

@ -35,25 +35,18 @@ endif()
# Load the required modules
include (MitsubaUtil)
include (MtsGetVersionInfo)
include (CheckCXXSourceCompiles)
include (CMakeDependentOption)
# Read version (MTS_VERSION) from include/mitsuba/core/version.h
file(STRINGS "include/mitsuba/core/version.h" MITSUBA_H REGEX "^#define MTS_VERSION \"[^\"]*\"$")
string(REGEX REPLACE "^.*MTS_VERSION \"([0-9]+).*$" "\\1" MTS_VERSION_MAJOR "${MITSUBA_H}")
string(REGEX REPLACE "^.*MTS_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" MTS_VERSION_MINOR "${MITSUBA_H}")
string(REGEX REPLACE "^.*MTS_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" MTS_VERSION_PATCH "${MITSUBA_H}")
set(MTS_VERSION "${MTS_VERSION_MAJOR}.${MTS_VERSION_MINOR}.${MTS_VERSION_PATCH}")
set(MITSUBA_H)
if("${MTS_VERSION_MAJOR}" MATCHES "[0-9]+" AND
"${MTS_VERSION_MINOR}" MATCHES "[0-9]+" AND
"${MTS_VERSION_PATCH}" MATCHES "[0-9]+")
message(STATUS "mitsuba ${MTS_VERSION}")
# Read the version information
MTS_GET_VERSION_INFO()
if (MTS_HAS_VALID_REV)
message(STATUS "mitsuba ${MTS_VERSION}-hg${MTS_REV_ID} (${MTS_DATE})")
else()
message(FATAL_ERROR "The mitsuba version could not be determined!")
message(STATUS "mitsuba ${MTS_VERSION} (${MTS_DATE})")
endif()
# Find the external libraries and setup the paths
include (MitsubaExternal)

View File

@ -0,0 +1,160 @@
# ============================================================================
# HDRITools - High Dynamic Range Image Tools
# Copyright 2008-2011 Program of Computer Graphics, Cornell University
#
# Distributed under the OSI-approved MIT License (the "License");
# see accompanying file LICENSE for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
# ---------------------------------------------------------------------------
# Primary author:
# Edgar Velazquez-Armendariz <cs#cornell#edu - eva5>
# ============================================================================
# - Sets up the version info variables
# This module provides a function intended to be called ONLY from the root dir:
# MTS_GET_VERSION_INFO()
# This function will read the "include/mitsuba/core/version.h" file and execute
# "hg", setting the following variables:
# MTS_VERSION - Full version string: <major>.<minor>.<patch>
# MTS_VERSION_MAJOR
# MTS_VERSION_MINOR
# MTS_VERSION_PATCH
# MTS_VERSION_BUILD - Simple build number based on MTS_DATE,
# encoded as YYYYMMDD
# MTS_HAS_VALID_REV - Flag to indicate whether MTS_REV_ID is set
# MTS_REV_ID - First 12 digits of the mercurial revision ID
# MTS_DATE - Represents the code date as YYYY.MM.DD
# MTS_MACLS_VERSION - A version for Mac Launch Services from the version and
# code date, in the format nnnnn.nn.nn[hgXXXXXXXXXXXX]
function(MTS_GET_VERSION_INFO)
# Simple, internal macro for zero padding values. Assumes that the number of
# digits is enough. Note that this method overwrites the variable!
macro(ZERO_PAD NUMBER_VAR NUM_DIGITS)
set(_val ${${NUMBER_VAR}})
set(${NUMBER_VAR} "")
foreach(dummy_var RANGE 1 ${NUM_DIGITS})
math(EXPR _digit "${_val} % 10")
set(${NUMBER_VAR} "${_digit}${${NUMBER_VAR}}")
math(EXPR _val "${_val} / 10")
endforeach()
unset(_val)
unset(_digit)
endmacro()
# Uses hg to get the version string and the date of such revision
# Based on info from:
# http://mercurial.selenic.com/wiki/VersioningWithMake (January 2011)
# Try to directly get the information assuming the source is within a repo
find_program(HG_CMD hg DOC "Mercurial command line executable")
mark_as_advanced(HG_CMD)
if (HG_CMD)
execute_process(
COMMAND "${HG_CMD}" -R "${PROJECT_SOURCE_DIR}"
parents --template "{node|short},{date|shortdate}"
OUTPUT_VARIABLE HG_INFO
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (HG_INFO)
# Extract the revision ID and the date
string(REGEX REPLACE "(.+),.+" "\\1" MTS_REV_ID "${HG_INFO}")
string(REGEX REPLACE ".+,(.+)-(.+)-(.+)" "\\1.\\2.\\3"
MTS_DATE "${HG_INFO}")
set(MTS_REV_ID ${MTS_REV_ID} PARENT_SCOPE)
set(MTS_DATE ${MTS_DATE} PARENT_SCOPE)
endif()
endif()
# If that failed, try grabbing the id from .hg_archival.txt, in case a tarball
# made by "hg archive" is being used
if (NOT MTS_REV_ID)
set(HG_ARCHIVAL_FILENAME "${CMAKE_CURRENT_SOURCE_DIR}/.hg_archival.txt")
# Try to read from the file generated by "hg archive"
if (EXISTS "${HG_ARCHIVAL_FILENAME}")
file(READ "${HG_ARCHIVAL_FILENAME}" HG_ARCHIVAL_TXT)
# Extract just the first 12 characters of the node
string(REGEX REPLACE ".*node:[ \\t]+(............).*" "\\1"
MTS_REV_ID "${HG_ARCHIVAL_TXT}")
set(MTS_REV_ID ${MTS_REV_ID} PARENT_SCOPE)
endif()
endif()
if (NOT MTS_DATE)
# The Windows "date" command output depends on the regional settings
if (WIN32)
set(GETDATE_CMD "${PROJECT_SOURCE_DIR}/data/windows/getdate.exe")
set(GETDATE_ARGS "")
else()
set(GETDATE_CMD "date")
set(GETDATE_ARGS "+'%Y.%m.%d'")
endif()
execute_process(COMMAND "${GETDATE_CMD}" ${GETDATE_ARGS}
OUTPUT_VARIABLE MTS_DATE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (NOT MTS_DATE)
message(FATAL_ERROR "Unable to get a build date!")
endif()
set(MTS_DATE ${MTS_DATE} PARENT_SCOPE)
endif()
if (MTS_REV_ID)
set (MTS_HAS_VALID_REV 1)
else()
message(WARNING "Unable to find the mercurial revision id.")
set (MTS_HAS_VALID_REV 0)
endif()
set(MTS_HAS_VALID_REV ${MTS_HAS_VALID_REV} PARENT_SCOPE)
# Read version (MTS_VERSION) from include/mitsuba/core/version.h
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/include/mitsuba/core/version.h" MITSUBA_H REGEX "^#define MTS_VERSION \"[^\"]*\"$")
if (MITSUBA_H MATCHES "^.*MTS_VERSION \"([0-9]+)\\.([0-9]+)\\.([0-9]+).*$")
set(MTS_VERSION_MAJOR ${CMAKE_MATCH_1})
set(MTS_VERSION_MINOR ${CMAKE_MATCH_2})
set(MTS_VERSION_PATCH ${CMAKE_MATCH_3})
set(MTS_VERSION "${MTS_VERSION_MAJOR}.${MTS_VERSION_MINOR}.${MTS_VERSION_PATCH}" PARENT_SCOPE)
set(MTS_VERSION_MAJOR ${MTS_VERSION_MAJOR} PARENT_SCOPE)
set(MTS_VERSION_MINOR ${MTS_VERSION_MINOR} PARENT_SCOPE)
set(MTS_VERSION_PATCH ${MTS_VERSION_PATCH} PARENT_SCOPE)
else()
message(FATAL_ERROR "The mitsuba version could not be determined!")
endif()
# Make a super simple build number from the date
if (MTS_DATE MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
set(MTS_VERSION_BUILD
"${CMAKE_MATCH_1}${CMAKE_MATCH_2}${CMAKE_MATCH_3}" PARENT_SCOPE)
# Now make a Mac Launch Services version number based on version and date.
# Based on specs from:
# http://lists.apple.com/archives/carbon-dev/2006/Jun/msg00139.html (Feb 2011)
if (MTS_VERSION_MAJOR GREATER 30 OR
MTS_VERSION_MINOR GREATER 14 OR
MTS_VERSION_PATCH GREATER 14 OR
${CMAKE_MATCH_1} GREATER 2032)
message(AUTHOR_WARNING "Mitsuba version violates the Mac LS assumptions")
endif()
math(EXPR _MACLS_MAJOR "(${MTS_VERSION_MAJOR}+1)*256 + (${MTS_VERSION_MINOR}+1)*16 + ${MTS_VERSION_PATCH}+1")
math(EXPR _MACLS_MINOR "((${CMAKE_MATCH_1}-2008)*4) + ((${CMAKE_MATCH_2}-1)*32 + ${CMAKE_MATCH_3})/100")
math(EXPR _MACLS_BUILD "((${CMAKE_MATCH_2}-1)*32 + ${CMAKE_MATCH_3})%100")
ZERO_PAD(_MACLS_MAJOR 4)
ZERO_PAD(_MACLS_MINOR 2)
ZERO_PAD(_MACLS_BUILD 2)
set(MTS_MACLS_VERSION "${_MACLS_MAJOR}.${_MACLS_MINOR}.${_MACLS_BUILD}")
if(MTS_HAS_VALID_REV)
set(MTS_MACLS_VERSION "${MTS_MACLS_VERSION}hg${MTS_REV_ID}")
endif()
set(MTS_MACLS_VERSION ${MTS_MACLS_VERSION} PARENT_SCOPE)
else()
message(FATAL_ERROR
"Mitsuba date has an unexpected format: ${MTS_DATE}")
endif()
endfunction()

52
data/windows/getdate.c Normal file
View File

@ -0,0 +1,52 @@
/*============================================================================
HDRITools - High Dynamic Range Image Tools
Copyright 2008-2011 Program of Computer Graphics, Cornell University
Distributed under the OSI-approved MIT License (the "License");
see accompanying file LICENSE for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
-----------------------------------------------------------------------------
Primary author:
Edgar Velazquez-Armendariz <cs#cornell#edu - eva5>
============================================================================*/
#include <stdio.h>
#include <time.h>
int main(int argc, char **argv)
{
time_t ltime;
struct tm *today;
FILE *of;
#if _MSC_VER >= 1400
struct tm timebuf;
#endif
if (argc != 2) {
of = stdout;
} else {
#if _MSC_VER >= 1400
if (fopen_s(&of, argv[1], "w") != 0) return 3;
#else
of = fopen(argv[1], "w");
if (!of) return 3;
#endif
}
time(&ltime);
#if _MSC_VER >= 1400
if (localtime_s(&timebuf, &ltime) != 0) return 1;
today = &timebuf;
#else
today = localtime(&ltime);
if (!today) return 1;
#endif
fprintf(of, "%d.%02d.%02d", (today->tm_year + 1900),
(today->tm_mon + 1), today->tm_mday);
if (of != stdout) fclose(of);
return 0;
}

BIN
data/windows/getdate.exe Normal file

Binary file not shown.