summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Roth <gaumless@gmail.com>2015-02-12 19:32:41 -0700
committerMartin Roth <gaumless@gmail.com>2015-03-06 20:33:43 +0100
commite236204d537808180ace7b78c1dc293ed59d9878 (patch)
tree9fcf048547cb6627eab64d52ed1eacc468baf082
parentaab66b1dc7908366f35ed58b774bb2dbe214278c (diff)
Move generation of build.h into a shell script
Moving the routines that create build.h into a script offers several advantages. We can create more complex functions to run and we don't have to deal with both bash and Make at the same time. This script combines what is currently in Makefile.inc with a couple of updates. - Update how it determines whether to use git for the timestamp - Move the git revision string generation inside the routine that checks to see if we have git. - Add a timeout for the domain name check. Change-Id: I93c131e8d01a0099eb13db720fa865c627985750 Signed-off-by: Martin Roth <gaumless@gmail.com> Reviewed-on: http://review.coreboot.org/8428 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
-rw-r--r--Makefile.inc28
-rwxr-xr-xutil/genbuild_h/genbuild_h.sh87
2 files changed, 89 insertions, 26 deletions
diff --git a/Makefile.inc b/Makefile.inc
index eb8b6014f7..89a05534d6 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -243,7 +243,7 @@ CBFS_PAYLOAD_COMPRESS_FLAG:=LZMA
endif
ifneq ($(CONFIG_LOCALVERSION),"")
-COREBOOT_EXTRA_VERSION := -$(call strip_quotes,$(CONFIG_LOCALVERSION))
+export COREBOOT_EXTRA_VERSION := -$(call strip_quotes,$(CONFIG_LOCALVERSION))
endif
CPPFLAGS_common := -Isrc -Isrc/include -I$(obj)
@@ -274,31 +274,7 @@ additional-dirs := $(objutil)/cbfstool $(objutil)/romcc $(objutil)/ifdtool \
$(obj)/build.h: .xcompile
@printf " GEN build.h\n"
rm -f $(obj)/build.h
- printf "/* build system definitions (autogenerated) */\n" > $(obj)/build.ht
- printf "#ifndef __BUILD_H\n" >> $(obj)/build.ht
- printf "#define __BUILD_H\n\n" >> $(obj)/build.ht
- printf "#define COREBOOT_VERSION \"$(KERNELVERSION)\"\n" >> $(obj)/build.ht
- if git update-index -q --refresh >/dev/null; ! git diff-index --quiet HEAD; then \
- printf "/* `LANG= TZ=UTC git log --date=local --pretty=format:%cd -1` UTC */\n" >> $(obj)/build.ht; \
- printf "#define COREBOOT_VERSION_TIMESTAMP `LANG= git log --pretty=format:%ct -1`\n" >> $(obj)/build.ht; \
- else \
- printf "/* `LANG= TZ=UTC date` */\n" >> $(obj)/build.ht; \
- printf "#define COREBOOT_VERSION_TIMESTAMP `LANG= date +%s`\n" >> $(obj)/build.ht; \
- fi
- printf "#define COREBOOT_ORIGIN_GIT_REVISION \"`LANG= git log remotes/origin/master -1 --format=format:%h`\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_EXTRA_VERSION \"$(COREBOOT_EXTRA_VERSION)\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_BUILD \"`LANG= date`\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_BUILD_YEAR_BCD 0x`LANG= date +"%y"`\n" >> $(obj)/build.ht
- printf "#define COREBOOT_BUILD_MONTH_BCD 0x`LANG= date +"%m"`\n" >> $(obj)/build.ht
- printf "#define COREBOOT_BUILD_DAY_BCD 0x`LANG= date +"%d"`\n" >> $(obj)/build.ht
- printf "#define COREBOOT_BUILD_WEEKDAY_BCD 0x`LANG= date +"%w"`\n" >> $(obj)/build.ht
- printf "#define COREBOOT_DMI_DATE \"`LANG= date +"%m/%d/%Y"`\"\n" >> $(obj)/build.ht
- printf "\n" >> $(obj)/build.ht
- printf "#define COREBOOT_COMPILE_TIME \"`LANG= date +%T`\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_COMPILE_BY \"$(subst \,@,$(shell PATH=$$PATH:/usr/ucb whoami))\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_COMPILE_HOST \"$(shell hostname -s 2>/dev/null || hostname 2>/dev/null)\"\n" >> $(obj)/build.ht
- printf "#define COREBOOT_COMPILE_DOMAIN \"$(shell test `uname -s` = "Linux" && dnsdomainname || domainname 2>/dev/null)\"\n" >> $(obj)/build.ht
- printf "#endif\n" >> $(obj)/build.ht
+ util/genbuild_h/genbuild_h.sh > $(obj)/build.ht
mv $(obj)/build.ht $(obj)/build.h
$(obj)/ldoptions: $(obj)/config.h
diff --git a/util/genbuild_h/genbuild_h.sh b/util/genbuild_h/genbuild_h.sh
new file mode 100755
index 0000000000..e79e41b3e1
--- /dev/null
+++ b/util/genbuild_h/genbuild_h.sh
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+# This file is part of the coreboot project.
+#
+# Copyright (C) 2014 Sage Electronic Engineering, LLC.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+#get the domain name without hanging the build for an extended period if
+#the build system doesn't return a domain name as can happen with the
+#dnsdomainname or domainname commands by themselves.
+get_domainname() {
+ MAX_DELAY=1 #maximum time to wait in seconds
+ TIMEOUT_HOSTNAME_TEXT=unknown.domain #text to return if domain name is not found
+ TEMPFILE_NAME=coreboot_hostname.txt #temp file to put the domain name into
+
+ # Find the domain name
+ if [ "$(uname -s)" = "Linux" ]
+ then
+ dnsdomainname 2>/dev/null > "$TEMPFILE_NAME" &
+ else
+ domainname 2>/dev/null >"$TEMPFILE_NAME" &
+ fi
+
+ # Get ready to kill the process if it's taking too long
+ PID=$!
+ sleep "$MAX_DELAY" && kill "$PID" 2>/dev/null &
+ wait "$PID" 2>/dev/null
+
+ # See what was found, print our timeout text if the process was killed
+ # or the domain name if we found one.
+ HN=$(cat "$TEMPFILE_NAME")
+ if [ "$HN" = "" ]
+ then
+ printf "%s" "$TIMEOUT_HOSTNAME_TEXT"
+ else
+ printf "%s" "$HN"
+ fi
+
+ # Clean up and exit.
+ rm -f "$TEMPFILE_NAME"
+}
+
+#Print out the information that goes into build.h
+printf "/* build system definitions (autogenerated) */\n"
+printf "#ifndef __BUILD_H\n"
+printf "#define __BUILD_H\n\n"
+printf "#define COREBOOT_VERSION %s\n" "\"$KERNELVERSION\""
+
+#See if the build is running in a git repo and the git command is available
+if [ -d "${top}/.git" ] && [ -f "$(command -v git)" ]; then
+ printf "/* %s UTC */\n" "$(LANG= TZ=UTC git log --date=local --pretty=format:%cd -1)"
+ printf "#define COREBOOT_VERSION_TIMESTAMP %s\n" "$(LANG= git log --pretty=format:%ct -1)"
+ printf "#define COREBOOT_ORIGIN_GIT_REVISION \"%s\"\n" "$(LANG= git log remotes/origin/master -1 --format=format:%h)"
+else
+ printf "/* `LANG= TZ=UTC date` */\n"
+ printf "#define COREBOOT_VERSION_TIMESTAMP %s\n" "$(LANG= date +%s)"
+ printf "#define COREBOOT_ORIGIN_GIT_REVISION \"Unknown\"\n"
+fi
+
+printf "#define COREBOOT_EXTRA_VERSION \"%s\"\n" "$COREBOOT_EXTRA_VERSION"
+printf "#define COREBOOT_BUILD \"%s\"\n" "$(date)"
+printf "#define COREBOOT_BUILD_YEAR_BCD 0x%s\n" "$(date +%y)"
+printf "#define COREBOOT_BUILD_MONTH_BCD 0x%s\n" "$(date +%m)"
+printf "#define COREBOOT_BUILD_DAY_BCD 0x%s\n" "$(date +%d)"
+printf "#define COREBOOT_BUILD_WEEKDAY_BCD 0x%s\n" "$(date +%w)"
+printf "#define COREBOOT_DMI_DATE \"%s\"\n" "$(date +%m/%d/%Y)"
+printf "\n"
+printf "#define COREBOOT_COMPILE_TIME \"%s\"\n" "$(date +%T)"
+printf "#define COREBOOT_COMPILE_BY \"%s\"\n" "$(whoami)"
+printf "#define COREBOOT_COMPILE_HOST \"%s\"\n" "$(hostname -s 2>/dev/null)"
+printf "#define COREBOOT_COMPILE_DOMAIN \""
+get_domainname
+printf "\"\n"
+printf "#endif\n"