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 if [ -r .version ]; then 31 VERSION=`cat .version` 32 else 33 VERSION=0 34 echo 0 > .version 35 fi 36else 37 VERSION=$KBUILD_BUILD_VERSION 38fi 39 40if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then 41 TIMESTAMP=`date` 42else 43 TIMESTAMP=$KBUILD_BUILD_TIMESTAMP 44fi 45if test -z "$KBUILD_BUILD_USER"; then 46 LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/') 47else 48 LINUX_COMPILE_BY=$KBUILD_BUILD_USER 49fi 50if test -z "$KBUILD_BUILD_HOST"; then 51 LINUX_COMPILE_HOST=`hostname` 52else 53 LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST 54fi 55 56UTS_VERSION="#$VERSION" 57CONFIG_FLAGS="" 58if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi 59if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi 60UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP" 61 62# Truncate to maximum length 63 64UTS_LEN=64 65UTS_TRUNCATE="cut -b -$UTS_LEN" 66 67# Generate a temporary compile.h 68 69( echo /\* This file is auto generated, version $VERSION \*/ 70 if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi 71 72 echo \#define UTS_MACHINE \"$ARCH\" 73 74 echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\" 75 76 echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\" 77 echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\" 78 79 echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | grep ' version '`\" 80) > .tmpcompile 81 82# Only replace the real compile.h if the new one is different, 83# in order to preserve the timestamp and avoid unnecessary 84# recompilations. 85# We don't consider the file changed if only the date/time changed, 86# unless KBUILD_BUILD_TIMESTAMP was explicitly set (e.g. for 87# reproducible builds with that value referring to a commit timestamp). 88# A kernel config change will increase the generation number, thus 89# causing compile.h to be updated (including date/time) due to the 90# changed comment in the 91# first line. 92 93if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then 94 IGNORE_PATTERN="UTS_VERSION" 95else 96 IGNORE_PATTERN="NOT_A_PATTERN_TO_BE_MATCHED" 97fi 98 99if [ -r $TARGET ] && \ 100 grep -v $IGNORE_PATTERN $TARGET > .tmpver.1 && \ 101 grep -v $IGNORE_PATTERN .tmpcompile > .tmpver.2 && \ 102 cmp -s .tmpver.1 .tmpver.2; then 103 rm -f .tmpcompile 104else 105 vecho " UPD $TARGET" 106 mv -f .tmpcompile $TARGET 107fi 108rm -f .tmpver.1 .tmpver.2 109