#!/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"
