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>
This commit is contained in:
Martin Roth 2015-02-12 19:32:41 -07:00
parent aab66b1dc7
commit e236204d53
2 changed files with 89 additions and 26 deletions

View File

@ -243,7 +243,7 @@ CBFS_PAYLOAD_COMPRESS_FLAG:=LZMA
endif endif
ifneq ($(CONFIG_LOCALVERSION),"") ifneq ($(CONFIG_LOCALVERSION),"")
COREBOOT_EXTRA_VERSION := -$(call strip_quotes,$(CONFIG_LOCALVERSION)) export COREBOOT_EXTRA_VERSION := -$(call strip_quotes,$(CONFIG_LOCALVERSION))
endif endif
CPPFLAGS_common := -Isrc -Isrc/include -I$(obj) CPPFLAGS_common := -Isrc -Isrc/include -I$(obj)
@ -274,31 +274,7 @@ additional-dirs := $(objutil)/cbfstool $(objutil)/romcc $(objutil)/ifdtool \
$(obj)/build.h: .xcompile $(obj)/build.h: .xcompile
@printf " GEN build.h\n" @printf " GEN build.h\n"
rm -f $(obj)/build.h rm -f $(obj)/build.h
printf "/* build system definitions (autogenerated) */\n" > $(obj)/build.ht util/genbuild_h/genbuild_h.sh > $(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
mv $(obj)/build.ht $(obj)/build.h mv $(obj)/build.ht $(obj)/build.h
$(obj)/ldoptions: $(obj)/config.h $(obj)/ldoptions: $(obj)/config.h

87
util/genbuild_h/genbuild_h.sh Executable file
View File

@ -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"