Skip to content

Commit ff69b94

Browse files
committed
add Git tracability example in CMake (TODO: Meson)
1 parent 5398655 commit ff69b94

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ add_subdirectory(block)
2323
add_subdirectory(character)
2424
add_subdirectory(coarray)
2525
add_subdirectory(contiguous)
26+
add_subdirectory(git)
2627
add_subdirectory(io)
2728
add_subdirectory(debug)
2829
add_subdirectory(lapack95)

git/CMakeLists.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
find_package(Git)
2+
3+
set(git_version ${GIT_VERSION_STRING})
4+
if(GIT_FOUND)
5+
# git branch --show-current requires Git >= 2.22, June 2019
6+
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
7+
OUTPUT_VARIABLE git_branch OUTPUT_STRIP_TRAILING_WHITESPACE)
8+
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
9+
OUTPUT_VARIABLE git_rev OUTPUT_STRIP_TRAILING_WHITESPACE)
10+
execute_process(COMMAND ${GIT_EXECUTABLE} status --porcelain
11+
OUTPUT_VARIABLE git_porcelain OUTPUT_STRIP_TRAILING_WHITESPACE)
12+
string(REGEX REPLACE "\n" " " git_porcelain ${git_porcelain})
13+
else()
14+
set(git_branch)
15+
set(git_rev)
16+
set(git_porcelain)
17+
endif()
18+
19+
message(STATUS "${PROJECT_NAME} git revision: ${git_rev} git_branch: ${git_branch} git_porcelain: ${git_porcelain}")
20+
21+
# example
22+
configure_file(main.in.f90 main.f90)
23+
add_executable(git_rev ${CMAKE_CURRENT_BINARY_DIR}/main.f90)
24+
add_test(NAME git:revision COMMAND $<TARGET_FILE:git_rev>)

git/main.in.f90

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
program git_demo
2+
3+
implicit none (type, external)
4+
5+
character(:), allocatable :: git_version, branch, rev, porcelain
6+
7+
git_version = "@git_version@"
8+
branch = "@git_branch@"
9+
rev = "@git_rev@"
10+
porcelain = "@git_porcelain@"
11+
12+
print *, "MyProgram git_version:", git_version, " git_branch: ", branch, " git revision: ", rev
13+
14+
if (len(porcelain) > 0) print *, " git_porcelain:", porcelain
15+
!! could also use this to set a warning or other logical flag
16+
17+
end program

0 commit comments

Comments
 (0)