Add support for Trilinos_version_date.h and TRILINOS_VERSION_DATE macro (#4532)
Created by: bartlettroscoe
Adds default support for Trilinos_version_date.h
and TRILINOS_VERSION_DATE
macro as per #4532 (closed). When the .git/ directory exists and git 2.10.0 or greater is found, the file Trilinos_version_date.h
will get generated automatically and installed along with the other header files for Trilinos. This allows us to get SPARC working again (see #4693 (closed)) and will enable all future customers to know the exact Trilinos version.
The documentation for this feature is in:
and is documented in the generated file Trilinos_version_date.h
which, as of this PR branch looks like:
/* TRILINOS_VERSION_DATE
*
* This macro gives the version date of the Trilinos git repository at
* the time it was configured. It gives the date YYYY-MM-DD and the 2-digit
* (24) hour hh of the commit as a 10-digit integer:
*
* YYYYYMMDDhh
*
* As long as the branch for the git repo is not hard reset, the first-parent
* history should give a monotonically increasing 10-digit integer. This
* 10-digit date/time integer YYYYMMDDhh will fit in a signed 32-bit integer
* with a maximum value of 2^32 / 2 - 1 = 2147483647. Therefore, the maximum
* date that can be handled is the year 2147 with the max date/time of 2147 12
* 31 23 = 2147123123. Modern C/C++ compilers (and other implementations of
* the C preprocesor) should be able to handle 32-bit integers.
*
* This header file is meant to be included by downstream codes to determine
* the version of Trilinos being used and allows
* TRILINOS_VERSION_DATE to be used in C/C++ ifdefs like:
*
* #if defined(TRILINOS_VERSION_DATE) && TRILINOS_VERSION_DATE >= 2019032704
* // The version is newer than 2019-03-27 04:00:00 UTC
* ...
* #else
* // The version is older than 2019-03-27 04:00:00 UTC
* ...
* #endif
*
* This allows downstream codes to know the fine-grained version of
* Trilinos at configure and build time to adjust for the addition of
* new features, deprecation of code, or breaks in backward compatibility
* (which occur in specific commits with unique commit dates).
*
*/
#define TRILINOS_VERSION_DATE 2019032810
There is strong automated testing for this feature in TriBITS (see https://github.com/TriBITSPub/TriBITS/pull/283).
I also tested this branch '4532-version-date' on my machine 'crf450' using:
$ cd ~/Trilinos.base/BUILDS/ATDM/CHECKIN/
$ ./checkin-test-atdm.sh sems-rhel6-gnu-7.2.0-openmp-release-debug \
--enable-packages=Kokkos,Teuchos \
--extra-cmake-options=-DCMAKE_INSTALL_PREFIX=${PWD}/sems-rhel6-gnu-7.2.0-openmp-release-debug/install \
--configure
$ cd sems-rhel6-gnu-7.2.0-openmp-release-debug/
$ ninja -j16 &> make.out
$ ninja -j16 install &> make.install.out
That installed the correct file with the correct version date:
$ grep "define TRILINOS_VERSION_DATE" install/include/Trilinos_version_date.h
#define TRILINOS_VERSION_DATE 2019032810
That looks correct given:
$ cd Trilinos/
$ env TZ=GMT git log --format="%cd" --date=iso-local -1 HEAD
2019-03-28 10:11:25 +0000
NOTE: This also brings in some other unrelated stuff on TriBITS 'master' due to the snapshotting process (see here).