TARGET=$1
ARCH=$2
SMP=$3
PREEMPT=$4
CC=$5

# If compile.h exists already and we don't own autoconf.h
# (i.e. we're not the same user who did make *config), don't
# modify compile.h
# So "sudo make install" won't change the "compiled by <user>"
# do "compiled by root"

if [ -r $TARGET -a ! -O include/linux/autoconf.h ]; then
  echo "  SKIPPED $TARGET"
  exit 0
fi

# Do not expand names
set -f

if [ -r .version ]; then
  VERSION=`cat .version`
else
  VERSION=0
  echo 0 > .version
fi


UTS_VERSION="#$VERSION"
CONFIG_FLAGS=""
if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi
if [ -n "$BUILD_TIMESTAMP" ]; then
  TIMESTAMP="`LC_ALL=C LANG=C date -d "$BUILD_TIMESTAMP"`"
else
  TIMESTAMP="`LC_ALL=C LANG=C date`"
fi
UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP"

# Truncate to maximum length

UTS_LEN=64
UTS_TRUNCATE="sed -e s/\(.\{1,$UTS_LEN\}\).*/\1/"
LINUX_COMPILE_VERSION_ID="__linux_compile_version_id__`hostname | tr -c '[0-9A-Za-z\n]' '__'`_`LANG=C date | tr -c '[0-9A-Za-z\n]' '_'`"
# Generate a temporary compile.h

( echo /\* This file is auto generated, version $VERSION \*/
  if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi
  
  echo \#define UTS_MACHINE \"$ARCH\"

  echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"

  echo \#define LINUX_COMPILE_TIME \"`LC_ALL=C LANG=C date +%T`\"
  echo \#define LINUX_COMPILE_BY \"geeko\"
  echo \#define LINUX_COMPILE_HOST \"buildhost\"
  echo \#define LINUX_COMPILE_DOMAIN \"suse.de\"

  echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | tail -n 1`\"
  echo \#define LINUX_COMPILE_VERSION_ID $LINUX_COMPILE_VERSION_ID
  echo \#define LINUX_COMPILE_VERSION_ID_TYPE typedef char* "$LINUX_COMPILE_VERSION_ID""_t"
) > .tmpcompile

# Only replace the real compile.h if the new one is different,
# in order to preserve the timestamp and avoid unnecessary
# recompilations.
# We don't consider the file changed if only the date/time changed.
# A kernel config change will increase the generation number, thus
# causing compile.h to be updated (including date/time) due to the 
# changed comment in the
# first line.

grep='grep -v UTS_VERSION\|LINUX_COMPILE_\(TIME\|VERSION_ID\)'

if [ -r $TARGET ] && \
      $grep $TARGET > .tmpver.1 && \
      $grep .tmpcompile > .tmpver.2 && \
      cmp -s .tmpver.1 .tmpver.2; then
   rm -f .tmpcompile
else
   echo "  UPD     $TARGET"
   mv -f .tmpcompile $TARGET
fi
rm -f .tmpver.1 .tmpver.2
