diff options
Diffstat (limited to 'winsup/cygwin/scripts/mkvers.sh')
-rwxr-xr-x | winsup/cygwin/scripts/mkvers.sh | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/winsup/cygwin/scripts/mkvers.sh b/winsup/cygwin/scripts/mkvers.sh new file mode 100755 index 000000000..b2db73cc7 --- /dev/null +++ b/winsup/cygwin/scripts/mkvers.sh @@ -0,0 +1,196 @@ +#!/bin/sh +# mkvers.sh - Make version information for cygwin DLL +# +# This file is part of Cygwin. +# +# This software is a copyrighted work licensed under the terms of the +# Cygwin license. Please consult the file "CYGWIN_LICENSE" for +# details. + +exec 9> version.cc + +# +# Arg 1 is the name of the version include file +# +incfile="$1"; shift +rcfile="$1"; shift +windres="$1"; shift +iflags= +# Find header file locations +while [ -n "$*" ]; do + case "$1" in + -I*) + iflags="$iflags $1" + ;; + -idirafter) + shift + iflags="$iflags -I$1" + ;; + esac + shift +done + +[ -r $incfile ] || { + echo "**** Couldn't open file '$incfile'. Aborting." +} + +parse_preproc_flags() { + # Since we're manually specifying the preprocessor, pass the default flags + # normally defined. + ccflags="--preprocessor=$1 --preprocessor-arg=-E \ + --preprocessor-arg=-xc-header --define=RC_INVOKED " + shift + while [ -n "$*" ]; do + case "$1" in + # We need to be able to find the just-built cc1 binary. + -B*) + ccflags="$ccflags --preprocessor-arg=$1" + ;; + esac + shift + done +} + +parse_preproc_flags $CC + + + +# +# Load the current date so we can work on individual fields +# +set -$- $(date -u +"%m %d %Y %H:%M") +m=$1 d=$2 y=$3 hhmm=$4 +# +# Set date into YYYY-MM-DD HH:MM:SS format +# +builddate="$y-$m-$d $hhmm" +echo "$builddate" + +set -$- '' + +# +# Output the initial part of version.cc +# +cat <<EOF 1>&9 +#include "config.h" +#include "cygwin_version.h" + +#define strval(x) #x +#define str(x) strval(x) +#define shared_data_version str(CYGWIN_VERSION_SHARED_DATA) + +const char *cygwin_version_strings = + "BEGIN_CYGWIN_VERSION_INFO\n" +EOF + +# +# Split version file into dir and filename components +# +dir=$(dirname $incfile) +fn=$(basename $incfile) + +# +# Look in the include file CVS directory for a CVS Tag file. This file, +# if it exists, will contain the name of the sticky tag associated with +# the current build. Save that for output later. +# +cvs_tag="$(sed -e '/dontuse/d' -e 's%^.\(.*\)%\1%' $dir/CVS/Tag 2>/dev/null)" + +wv_cvs_tag="$cvs_tag" +[ -n "$cvs_tag" ] && cvs_tag=" CVS tag"' +'"$cvs_tag" + +# +# Look in the source directory containing the include/cygwin/version.h +# and set dir accordingly. +dir=$(echo $dir | sed -e 's%/include/cygwin.*$%%' -e 's%include/cygwin.*$%.%') + +# Look in $dir for a a ".snapshot-date" file. If one is found then this +# information will be saved for output to the DLL. +# +if [ -r "$dir/.snapshot-date" ]; then + read snapshotdate < "$dir/.snapshot-date" + snapshot="snapshot date +$snapshotdate" +fi + +# +# Scan the version.h file for strings that begin with CYGWIN_INFO or +# CYGWIN_VERSION. Perform crude parsing on the lines to get the values +# associated with these values and then pipe it into a while loop which +# outputs these values in C palatable format for inclusion in the DLL +# with a '%% ' identifier that will introduce "interesting" strings. +# These strings are strictly for use by a user to scan the DLL for +# interesting information. +# +( + sed -n -e 's%#define CYGWIN_INFO_\([A-Z_]*\)[ ][ ]*\([a-zA-Z0-9"][^/]*\).*%_\1\ +\2%p' -e 's%#define CYGWIN_VERSION_\([A-Z_]*\)[ ][ ]*\([a-zA-Z0-9"][^/]*\).*%_\1\ +\2%p' $incfile | sed -e 's/["\\]//g' -e '/^_/y/ABCDEFGHIJKLMNOPQRSTUVWXYZ_/abcdefghijklmnopqrstuvwxyz /'; + echo ' build date'; echo $build_date; + [ -n "$cvs_tag" ] && echo "$cvs_tag"; + [ -n "$snapshot" ] && echo "$snapshot" +) | while read var; do + read val +cat <<EOF + "%%% Cygwin $var: $val\n" +EOF +done | tee /tmp/mkvers.$$ 1>&9 + +trap "rm -f /tmp/mkvers.$$" 0 1 2 15 + +if [ -n "$snapshotdate" ]; then + usedate="$(echo $snapshotdate \ + | sed -e 's/\(....\)\(..\)\(..\)-\(..:..\).*$/\1-\2-\3 \4SNP/')" +else + usedate="$builddate" +fi + +# +# Finally, output the shared ID and set up the cygwin_version structure +# for use by Cygwin itself. +# +cat <<EOF 1>&9 +#ifdef DEBUGGING + "%%% Cygwin shared id: " CYGWIN_VERSION_DLL_IDENTIFIER "S" shared_data_version "-$builddate\n" +#else + "%%% Cygwin shared id: " CYGWIN_VERSION_DLL_IDENTIFIER "S" shared_data_version "\n" +#endif + "END_CYGWIN_VERSION_INFO\n\0"; +cygwin_version_info cygwin_version = +{ + CYGWIN_VERSION_API_MAJOR, CYGWIN_VERSION_API_MINOR, + CYGWIN_VERSION_DLL_MAJOR, CYGWIN_VERSION_DLL_MINOR, + CYGWIN_VERSION_SHARED_DATA, + CYGWIN_VERSION_MOUNT_REGISTRY, + "$usedate", +#ifdef DEBUGGING + CYGWIN_VERSION_DLL_IDENTIFIER "S" shared_data_version "-$builddate" +#else + CYGWIN_VERSION_DLL_IDENTIFIER "S" shared_data_version +#endif +}; +EOF + +# +# Generate winver.o using cygwin/version.h information. +# Turn the cygwin major number from some large number to something like 1.1.0. +# +eval $(sed -n 's/^.*dll \(m[ai][jn]or\): \([0-9]*\)[^0-9]*$/\1=\2/p' /tmp/mkvers.$$) +cygverhigh=$(expr $major / 1000) +cygverlow=$(expr $major % 1000) +cygwin_ver="$cygverhigh.$cygverlow.$minor" +if [ -n "$cvs_tag" ] +then + cvs_tag="$(echo $wv_cvs_tag | sed -e 's/-branch.*//')" + cygwin_ver="$cygwin_ver-$cvs_tag" +fi + +echo "Version $cygwin_ver" +set -$- $builddate +$windres $iflags $ccflags \ + --define CYGWIN_BUILD_DATE="$1" \ + --define CYGWIN_BUILD_TIME="$2" \ + --define CYGWIN_BUILD_YEAR=$y \ + --define CYGWIN_VERSION='"'"$cygwin_ver"'"' \ + $rcfile winver.o |