summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/build-info.cmake42
-rw-r--r--scripts/build-info.h.in2
-rwxr-xr-xscripts/build-info.sh38
3 files changed, 66 insertions, 16 deletions
diff --git a/scripts/build-info.cmake b/scripts/build-info.cmake
index 5023b77a..e33f3349 100644
--- a/scripts/build-info.cmake
+++ b/scripts/build-info.cmake
@@ -2,6 +2,8 @@ set(TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/scripts/build-info.h.in")
set(HEADER_FILE "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h")
set(BUILD_NUMBER 0)
set(BUILD_COMMIT "unknown")
+set(BUILD_COMPILER "unknown")
+set(BUILD_TARGET "unknown")
# Look for git
find_package(Git)
@@ -41,11 +43,45 @@ if(Git_FOUND)
endif()
endif()
+if(GIT_HEAD_RESULT EQUAL 0 AND GIT_COUNT_RESULT EQUAL 0)
+ set(BUILD_COMMIT ${HEAD})
+ set(BUILD_NUMBER ${COUNT})
+endif()
+
+execute_process(
+ COMMAND sh -c "$@ --version | head -1" _ ${CMAKE_C_COMPILER}
+ OUTPUT_VARIABLE OUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE RES
+)
+if (RES EQUAL 0)
+ set(BUILD_COMPILER ${OUT})
+endif()
+
+execute_process(
+ COMMAND ${CMAKE_C_COMPILER} -dumpmachine
+ OUTPUT_VARIABLE OUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE RES
+)
+if (RES EQUAL 0)
+ set(BUILD_TARGET ${OUT})
+endif()
+
# Only write the header if it's changed to prevent unnecessary recompilation
if(EXISTS ${HEADER_FILE})
- file(STRINGS ${HEADER_FILE} CONTENTS REGEX "BUILD_COMMIT \"([^\"]*)\"")
- list(GET CONTENTS 0 EXISTING)
- if(NOT EXISTING STREQUAL "#define BUILD_COMMIT \"${BUILD_COMMIT}\"")
+ file(READ ${HEADER_FILE} CONTENTS)
+ string(REGEX MATCH "BUILD_COMMIT \"([^\"]*)\"" _ ${CONTENTS})
+ set(OLD_COMMIT ${CMAKE_MATCH_1})
+ string(REGEX MATCH "BUILD_COMPILER \"([^\"]*)\"" _ ${CONTENTS})
+ set(OLD_COMPILER ${CMAKE_MATCH_1})
+ string(REGEX MATCH "BUILD_TARGET \"([^\"]*)\"" _ ${CONTENTS})
+ set(OLD_TARGET ${CMAKE_MATCH_1})
+ if (
+ NOT OLD_COMMIT STREQUAL BUILD_COMMIT OR
+ NOT OLD_COMPILER STREQUAL BUILD_COMPILER OR
+ NOT OLD_TARGET STREQUAL BUILD_TARGET
+ )
configure_file(${TEMPLATE_FILE} ${HEADER_FILE})
endif()
else()
diff --git a/scripts/build-info.h.in b/scripts/build-info.h.in
index 75d1e16f..e996faef 100644
--- a/scripts/build-info.h.in
+++ b/scripts/build-info.h.in
@@ -3,5 +3,7 @@
#define BUILD_NUMBER @BUILD_NUMBER@
#define BUILD_COMMIT "@BUILD_COMMIT@"
+#define BUILD_COMPILER "@BUILD_COMPILER@"
+#define BUILD_TARGET "@BUILD_TARGET@"
#endif // BUILD_INFO_H
diff --git a/scripts/build-info.sh b/scripts/build-info.sh
index ed0d6c56..3c8b1fb8 100755
--- a/scripts/build-info.sh
+++ b/scripts/build-info.sh
@@ -1,23 +1,35 @@
#!/bin/sh
-BUILD_NUMBER="0"
-BUILD_COMMIT="unknown"
+CC=$1
-REV_LIST=$(git rev-list --count HEAD)
-if [ $? -eq 0 ]; then
- BUILD_NUMBER=$REV_LIST
+build_number="0"
+build_commit="unknown"
+build_compiler="unknown"
+build_target="unknown"
+
+if out=$(git rev-list --count HEAD); then
+ # git is broken on WSL so we need to strip extra newlines
+ build_number=$(printf '%s' "$out" | tr -d '\n')
+fi
+
+if out=$(git rev-parse --short HEAD); then
+ build_commit=$(printf '%s' "$out" | tr -d '\n')
+fi
+
+if out=$($CC --version | head -1); then
+ build_compiler=$out
fi
-REV_PARSE=$(git rev-parse --short HEAD)
-if [ $? -eq 0 ]; then
- BUILD_COMMIT=$REV_PARSE
+if out=$($CC -dumpmachine); then
+ build_target=$out
fi
echo "#ifndef BUILD_INFO_H"
echo "#define BUILD_INFO_H"
-echo ""
-echo "#define BUILD_NUMBER $BUILD_NUMBER" | tr -d '\n'
-echo ""
-echo "#define BUILD_COMMIT \"$BUILD_COMMIT\"" | tr -d '\n'
-echo ""
+echo
+echo "#define BUILD_NUMBER $build_number"
+echo "#define BUILD_COMMIT \"$build_commit\""
+echo "#define BUILD_COMPILER \"$build_compiler\""
+echo "#define BUILD_TARGET \"$build_target\""
+echo
echo "#endif // BUILD_INFO_H"