Martin Roth (gaumless@gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8428
-gerrit
commit 8802de6581aa5a85920ac3976053fc7ccc8a2289 Author: Martin Roth gaumless@gmail.com Date: Thu Feb 12 19:32:41 2015 -0700
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 --- Makefile.inc | 28 +------------- util/genbuild_h/genbuild_h.sh | 87 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 26 deletions(-)
diff --git a/Makefile.inc b/Makefile.inc index eb8b601..89a0553 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 0000000..e79e41b --- /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"