#!/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 +"%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 <&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 <&9 trap "rm -f /tmp/mkvers.$$" 0 1 2 15 if [ -n "$snapshotdate" ]; then usedate="$(echo $snapshotdate | sed 's/-\\(..:..[^-]*\\).*$/ \1SNP/')" else usedate="$builddate" fi # # Finally, output the shared ID and set up the cygwin_version structure # for use by Cygwin itself. # cat <&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