Fix for definitions for CINT
[u/mrichter/AliRoot.git] / cmake / CheckGitVersion.cmake
1 # **************************************************************************
2 # * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
3 # *                                                                        *
4 # * Author: The ALICE Off-line Project.                                    *
5 # * Contributors are mentioned in the code where appropriate.              *
6 # *                                                                        *
7 # * Permission to use, copy, modify and distribute this software and its   *
8 # * documentation strictly for non-commercial purposes is hereby granted   *
9 # * without fee, provided that the above copyright notice appears in all   *
10 # * copies and that both the copyright notice and this permission notice   *
11 # * appear in the supporting documentation. The authors make no claims     *
12 # * about the suitability of this software for any purpose. It is          *
13 # * provided "as is" without express or implied warranty.                  *
14 # **************************************************************************
15
16 # Configure ARVerion.h using Git informatiion
17 # Sets 4 git variables
18 #  - GIT_REFSPEC - complete name of the current reference
19 #  - ALIROOT_BRANCH - name of the branch or tag extracted from the current reference
20 #  - GIT_SHA1 - current hash in the long format
21 #  - GIT_SHORT_SHA1 - current hash in the short format
22 if(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
23     include(GetGitRevisionDescription)
24     
25     find_package(Git)
26     
27     if(GIT_FOUND)
28         get_git_head_revision(GIT_REFSPEC GIT_SHA1)
29
30         # GIT_REFSPEC is empty for detached mode = tags in detached mode or checkout to specific hash
31
32         # returns the closest reference to the current hash
33         # name of the current tag or heads/branch in the case of branches
34         git_describe(ALIROOT_GIT_TAG "--all" "--abbrev=0")
35
36         STRING(REGEX REPLACE "^(.+/)(.+)/(.*)$" "\\2" BRANCH_TYPE "${GIT_REFSPEC}" )
37         
38         # the revision is not set in the case of a branch, it means we are doing development
39         # and the revision will trigger a reconfiguration
40         if(BRANCH_TYPE STREQUAL "heads")
41             set(ALIROOT_REVISION "ThisIsaBranchNoRevisionProvided")
42             STRING(REGEX REPLACE "^(.+/)(.+/)(.*)$" "\\3" SHORT_BRANCH "${GIT_REFSPEC}" )
43         else()
44             set(SHORT_BRANCH ${ALIROOT_GIT_TAG})
45             set(ALIROOT_REVISION ${GIT_SHA1})
46         endif()
47
48         set(ALIROOT_BRANCH ${SHORT_BRANCH})
49   
50         # generate the short version of the revision hash
51         execute_process(COMMAND git rev-parse --short ${GIT_SHA1} 
52                           WORKING_DIRECTORY ${AliRoot_SOURCE_DIR} 
53                           OUTPUT_STRIP_TRAILING_WHITESPACE 
54                           RESULT_VARIABLE res
55                           OUTPUT_VARIABLE GIT_SHORT_SHA1)
56
57         # if the rev-parse fails we set the short sha to the long initial one
58         if(NOT res EQUAL 0)
59             set(GIT_SHORT_SHA1 ${GIT_SHA1})
60         endif()
61   
62         message(STATUS "Aliroot branch/tag: \"${ALIROOT_BRANCH}\" - Revision:  \"${GIT_SHORT_SHA1}\" ")
63
64     else()
65         message(STATUS "Git not installed. I can't tell you which revision you are using!")
66     endif(GIT_FOUND)
67 else()
68     message("AliRoot sources not downloaded from a Version Control System. I can't tell which revision you are using!")
69 endif(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
70
71 configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_BINARY_DIR}/version/ARVersion.h @ONLY)
72 install(FILES ${PROJECT_BINARY_DIR}/version/ARVersion.h DESTINATION include)
73
74 string (REPLACE "-" "." ALIROOT_BRANCH_SPEC "${ALIROOT_BRANCH}")