1#!/bin/sh 2 3TARGET=$1 4ARCH=$2 5SMP=$3 6PREEMPT=$4 7CC=$5 8 9vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; } 10 11# If compile.h exists already and we don't own autoconf.h 12# (i.e. we're not the same user who did make *config), don't 13# modify compile.h 14# So "sudo make install" won't change the "compiled by <user>" 15# do "compiled by root" 16 17if [ -r $TARGET -a ! -O include/generated/autoconf.h ]; then 18 vecho " SKIPPED $TARGET" 19 exit 0 20fi 21 22# Do not expand names 23set -f 24 25# Fix the language to get consistent output 26LC_ALL=C 27export LC_ALL 28 29if [ -z "$KBUILD_BUILD_VERSION" ]; then 30 VERSION=$(cat .version 2>/dev/null || echo 1) 31else 32 VERSION=$KBUILD_BUILD_VERSION 33fi 34 35if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then 36 TIMESTAMP=`date` 37else 38 TIMESTAMP=$KBUILD_BUILD_TIMESTAMP 39fi 40if test -z "$KBUILD_BUILD_USER"; then 41 LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/') 42else 43 LINUX_COMPILE_BY=$KBUILD_BUILD_USER 44fi 45if test -z "$KBUILD_BUILD_HOST"; then 46 LINUX_COMPILE_HOST=`hostname` 47else 48 LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST 49fi 50 51UTS_VERSION="#$VERSION" 52CONFIG_FLAGS="" 53if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi 54if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi 55UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP" 56 57# Truncate to maximum length 58 59UTS_LEN=64 60UTS_TRUNCATE="cut -b -$UTS_LEN" 61 62# Generate a temporary compile.h 63 64( echo /\* This file is auto generated, version $VERSION \*/ 65 if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi 66 67 echo \#define UTS_MACHINE \"$ARCH\" 68 69 echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\" 70 71 echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\" 72 echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\" 73 74 echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | grep ' version ' | sed 's/[[:space:]]*$//'`\" 75) > .tmpcompile 76 77# Only replace the real compile.h if the new one is different, 78# in order to preserve the timestamp and avoid unnecessary 79# recompilations. 80# We don't consider the file changed if only the date/time changed. 81# A kernel config change will increase the generation number, thus 82# causing compile.h to be updated (including date/time) due to the 83# changed comment in the 84# first line. 85 86if [ -r $TARGET ] && \ 87 grep -v 'UTS_VERSION' $TARGET > .tmpver.1 && \ 88 grep -v 'UTS_VERSION' .tmpcompile > .tmpver.2 && \ 89 cmp -s .tmpver.1 .tmpver.2; then 90 rm -f .tmpcompile 91else 92 vecho " UPD $TARGET" 93 mv -f .tmpcompile $TARGET 94fi 95rm -f .tmpver.1 .tmpver.2 96