summaryrefslogtreecommitdiff
path: root/ports/winnt/scripts/mkver.bat
diff options
context:
space:
mode:
Diffstat (limited to 'ports/winnt/scripts/mkver.bat')
-rwxr-xr-xports/winnt/scripts/mkver.bat439
1 files changed, 439 insertions, 0 deletions
diff --git a/ports/winnt/scripts/mkver.bat b/ports/winnt/scripts/mkver.bat
new file mode 100755
index 000000000000..7b448299607d
--- /dev/null
+++ b/ports/winnt/scripts/mkver.bat
@@ -0,0 +1,439 @@
+@echo off
+GOTO PROG
+
+see notes/remarks directly below this header:
+######################################################################
+#
+# Revision: mkver.bat
+# Author: Frederick Czajka
+# Date: 02/10/2000
+# Purpose: Provide a NT Shell script to replace the perl script
+# that replaced the UNIX mkver shell script.
+#
+#
+#
+# Notes: I had two goals with this script one to only use native
+# NT Shell commands and two was too emulate the PERL style
+# output. This required some work for the DATE format as
+# you will see and TIME was really tricky to get a format
+# matching PERLs!
+#
+#
+# Changes:
+# 02/23/2011 David J Taylor - Use reg instead of regedit so "run as
+# administrator" is not required.
+# 12/21/2009 Dave Hart
+# - packageinfo.sh uses prerelease= now not
+# releasecandidate=
+# 08/28/2009 Dave Hart
+# - support for building using per-compiler subdirs of winnt
+# 08/08/2006 Heiko Gerstung
+# - bugfixed point / rcpoint errors leading to a wrong
+# version string
+# - added a few cases for uppercase strings
+# 03/09/2005 Heiko Gerstung
+# - added UTC offset to version time information
+# - bugfixed several issues preventing this script to be used on NT4
+# - removed an obsolete warning
+#
+# 03/08/2005 Danny Mayer
+# - bugfixed NOBK label position
+#
+# 03/08/2005 Heiko Gerstung
+# - bugfixed BK detection and support for multiple ChangeSets
+#
+# 02/24/2005 Heiko Gerstung
+# - check if BK is installed and do not try to call it if not
+#
+#
+# 02/03/2005 Heiko Gerstung
+# - now getting NTP version from version.m4 (not configure)
+# - added BK ChangeSet revision and Openssl-Indicator (-o)
+# to the version number
+# - major rework of the time and date recognition routines
+# in order to reflect international settings and OS-
+# dependand formats
+#
+######################################################################
+
+Notes/Howtos:
+
+If you spot an error stating that bk.exe could not be found or executed
+although it is installed on your computer, you should try to add the path
+to your BK binary in your IDE configuration (for VisualStudio see
+Tools/Options/Directories/Executables).
+
+Alternatively you can create a file called 'version' in the root path of
+your ntp source tree which holds a string that is added to the version number.
+
+
+:PROG
+IF {%1} == {} GOTO USAGE
+IF {%1} == {-H} GOTO USAGE
+IF {%2} == {} GOTO USAGE
+IF {%1} == {-P} GOTO BEGIN
+
+
+
+REM *****************************************************************************************************************
+REM For any other bizarre permutation...
+REM *****************************************************************************************************************
+GOTO USAGE
+
+:BEGIN
+
+SET GENERATED_PROGRAM=%2
+
+REM *****************************************************************************************************************
+REM Reimplemented from orginal Unix Shell script
+REM *****************************************************************************************************************
+ IF NOT EXIST .version ECHO 0 > .version
+ FOR /F %%i IN (.version) do @SET RUN=%%i
+ SET /A RUN=%RUN%+1
+ ECHO %RUN% > .version
+
+REM *****************************************************************************************************************
+REM Resetting variables
+REM *****************************************************************************************************************
+ SET VER=
+ SET CSET=
+ SET SSL=
+ SET MYDATE=
+ SET MYTIME=
+ SET DAY=99
+ SET NMM=99
+ SET YEAR=0
+ SET HOUR=
+ SET MIN=
+ SET MMIN=
+ SET SEC=
+ SET SUBSEC=
+ SET DATEDELIM=
+ SET TIMEDELIM=
+ SET DATEFORMAT=
+ SET TIMEFORMAT=
+ SET UTC=
+ SET ACTIVEBIAS=
+
+REM *****************************************************************************************************************
+REM Check if DATE and TIME environment variables are available
+REM *****************************************************************************************************************
+
+ SET MYDATE=%DATE%
+ SET MYTIME=%TIME%
+
+ REM ** Not available (huh? Are you older than NT4SP6A, grandpa?)
+ IF "%MYDATE%" == "" FOR /F "TOKENS=1 DELIMS=" %%a IN ('date/t') DO SET MYDATE=%%a
+ IF "%MYTIME%" == "" FOR /F "TOKENS=1 DELIMS=" %%a IN ('time/t') DO SET MYTIME=%%a
+
+REM *****************************************************************************************************************
+REM Try to find out UTC offset
+REM *****************************************************************************************************************
+
+ REM *** Start with setting a dummy value which is used when we are not able to find out the real UTC offset
+ SET UTC=(LOCAL TIME)
+ SET UTC_HR=
+ SET UTC_MIN=
+ SET UTC_SIGN=
+
+ REM *** Now get the timezone settings from the registry
+ reg export "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" %TEMP%\TZ-%GENERATED_PROGRAM%.TMP
+ REM was: regedit /e %TEMP%\TZ-%GENERATED_PROGRAM%.TMP "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation"
+ IF NOT EXIST %TEMP%\TZ-%GENERATED_PROGRAM%.TMP GOTO NOTZINFO
+
+ for /f "Tokens=1* Delims==" %%a in ('type %TEMP%\TZ-%GENERATED_PROGRAM%.TMP') do if %%a == "ActiveTimeBias" SET ACTIVEBIAS=%%b
+ for /f "Tokens=1* Delims=:" %%a in ('echo %ACTIVEBIAS%') do ( SET ACTIVEBIAS=%%b & SET PARTYP=%%a )
+
+ REM *** Clean up temporary file
+ IF EXIST %TEMP%\TZ-%GENERATED_PROGRAM%.TMP DEL %TEMP%\TZ-%GENERATED_PROGRAM%.TMP
+
+ REM *** Check if we really got a dword value from the registry ...
+ IF NOT "%PARTYP%"=="dword " goto NOTZINFO
+
+ REM *** Check if we are in UTC timezone, then we can avoid some stress...
+ if "%ACTIVEBIAS%" == "00000000" SET UTC=(UTC) & GOTO NOTZINFO
+
+ SET HI=0x%ACTIVEBIAS:~0,4%
+ SET LO=0x%ACTIVEBIAS:~4,4%
+
+ if "%HI%"=="0xffff" ( SET /A ACTIVEBIAS=%LO% - %HI% - 1 ) ELSE ( SET /A ACTIVEBIAS=%LO%)
+ SET /A UTC_HR="%ACTIVEBIAS%/60"
+ SET /A UTC_MIN="%ACTIVEBIAS% %% 60"
+ SET UTC_SIGN=%ACTIVEBIAS:~0,1%
+
+ REM *** check the direction in which the local timezone alters UTC time
+ IF NOT "%UTC_SIGN%"=="-" SET UTC_SIGN=+
+ IF "%UTC_SIGN%"=="-" SET UTC_HR=%UTC_HR:~1,2%
+
+ REM *** Now turn the direction, because we need to know it from the viewpoint of UTC
+ IF "%UTC_SIGN%"=="+" (SET UTC_SIGN=-) ELSE (SET UTC_SIGN=+)
+
+ REM *** Put the values in a "00" format
+ IF %UTC_HR% LEQ 9 SET UTC_HR=0%UTC_HR%
+ IF %UTC_MIN% LEQ 9 SET UTC_MIN=0%UTC_MIN%
+
+ REM *** Set up UTC offset string used in version string
+ SET UTC=(UTC%UTC_SIGN%%UTC_HR%:%UTC_MIN%)
+
+
+:NOTZINFO
+echo off
+
+REM *****************************************************************************************************************
+REM Now grab the Version number out of the source code (using the packageinfo.sh file...)
+REM *****************************************************************************************************************
+
+ REM First, get the main NTP version number. In recent versions this must be extracted
+ REM from a packageinfo.sh file while in earlier versions the info was available from
+ REM a version.m4 file.
+ SET F_PACKAGEINFO_SH=..\..\..\..\packageinfo.sh
+ IF EXIST %F_PACKAGEINFO_SH% goto VER_FROM_PACKAGE_INFO
+ REM next two lines can go away when all windows compilers are building under
+ rem ports\winnt\<compiler dir>\<binary name dir> (ports\winnt\vs2008\ntpd)
+ rem rather than ports\winnt\<binary name dir> (ports\winnt\ntpd)
+ SET F_PACKAGEINFO_SH=..\..\..\packageinfo.sh
+ IF EXIST %F_PACKAGEINFO_SH% goto VER_FROM_PACKAGE_INFO
+ goto ERRNOVERF
+
+:VER_FROM_PACKAGE_INFO
+ REM Get version from packageinfo.sh file, which contains lines reading e.g.
+
+ TYPE %F_PACKAGEINFO_SH% | FIND /V "rcpoint=" | FIND /V "betapoint=" | FIND "point=" > point.txt
+ SET F_POINT_SH=point.txt
+
+ FOR /F "eol=# TOKENS=2 DELIMS==" %%a IN ('findstr "proto=" %%F_PACKAGEINFO_SH%%') DO SET PROTO=%%a
+ FOR /F "eol=# TOKENS=2 DELIMS==" %%a IN ('findstr "major=" %%F_PACKAGEINFO_SH%%') DO SET MAJOR=%%a
+ FOR /F "eol=# TOKENS=2 DELIMS==" %%a IN ('findstr "minor=" %%F_PACKAGEINFO_SH%%') DO SET MINOR=%%a
+
+ FOR /F "eol=# TOKENS=2 DELIMS==" %%a IN ('findstr "point=" %%F_POINT_SH%%') DO SET POINT=%%a
+ IF "%POINT%"=="NEW" set POINT=
+ IF NOT "%POINT%"=="" set POINT=p%POINT%
+
+ FOR /F "eol=# TOKENS=2 DELIMS==" %%a IN ('findstr "betapoint=" %%F_PACKAGEINFO_SH%%') DO SET BETAPOINT=%%a
+
+ FOR /F "eol=# TOKENS=2 DELIMS==" %%a IN ('findstr "rcpoint=" %%F_PACKAGEINFO_SH%%') DO SET RCPOINT=%%a
+
+ FOR /F "eol=# TOKENS=2 DELIMS==" %%a IN ('findstr "special=" %%F_PACKAGEINFO_SH%%') DO SET SPECIAL=%%a
+ IF NOT "%SPECIAL%"=="" set SPECIAL=-%SPECIAL%
+
+ FOR /F "eol=# TOKENS=2 DELIMS==" %%a IN ('findstr "prerelease=" %%F_PACKAGEINFO_SH%%') DO SET PRERELEASE=%%a
+ IF /I "%PRERELEASE%"=="beta" set PR_SUF=-beta
+ IF /I "%PRERELEASE%"=="rc" set PR_SUF=-RC
+
+ FOR /F "eol=# TOKENS=2 DELIMS==" %%a IN ('findstr "repotype=" %%F_PACKAGEINFO_SH%%') DO SET REPOTYPE=%%a
+ IF /I "%REPOTYPE%"=="stable" set REPOTYPE=STABLE
+
+ IF NOT "%REPOTYPE%"=="STABLE" SET RCPOINT=
+ IF "%PR_SUF%"=="-RC" set PR_POINT=%RCPOINT%
+ IF "%PR_SUF%"=="-beta" set PR_POINT=%BETAPOINT%
+
+ SET VER=%PROTO%.%MAJOR%.%MINOR%%POINT%%SPECIAL%%PR_SUF%%PR_POINT%
+
+ REM Now we have the version info, try to add a BK ChangeSet version number
+
+ REM ** Check if BK is installed ...
+ bk -R prs -hr+ -nd:I: ChangeSet 2> NUL > NUL
+ IF ERRORLEVEL 1 GOTO NOBK
+
+ REM ** Try to get the CSet rev directly from BK
+ FOR /F "TOKENS=1 DELIMS==" %%a IN ('bk.exe -R prs -hr+ -nd:I: ChangeSet') DO @SET CSET=%%a
+
+:NOBK
+ REM ** If that was not successful, we'll take a look into a version file, if available
+ IF EXIST ..\..\..\..\sntp\scm-rev (
+ IF "%CSET%"=="" FOR /F "TOKENS=1" %%a IN ('type ..\..\..\..\sntp\scm-rev') DO @SET CSET=%%a
+ )
+ REM next if block can go away once all windows compilers are building in
+ REM ports\winnt\<compiler dir>\<binary name dir> (ports\winnt\vs2008\ntpd)
+ IF EXIST ..\..\..\sntp\scm-rev (
+ IF "%CSET%"=="" FOR /F "TOKENS=1" %%a IN ('type ..\..\..\sntp\scm-rev') DO @SET CSET=%%a
+ )
+
+ REM ** Now, expand our version number with the CSet revision, if we managed to get one
+ IF NOT "%CSET%"=="" SET VER=%VER%@%CSET%
+
+ REM We can add a "crypto" identifier (-o) if we see that Crypto support is included in our build
+ REM we always include openssl on windows...
+ SET VER=%VER%-o
+
+
+REM *****************************************************************************************************************
+REM Check for user settings regarding the time and date format, we use the registry to find out...
+REM *****************************************************************************************************************
+
+
+ REM Any temporary files left from a previous run? Go where you belong...
+ IF exist userset.reg del userset.reg
+ IF exist userset.txt del userset.txt
+
+ reg export "HKEY_CURRENT_USER\Control Panel\International" userset.reg
+ REM was: regedit /E userset.reg "HKEY_CURRENT_USER\Control Panel\International"
+ IF not exist userset.reg goto ERRNOREG
+
+ rem *** convert from unicode to ascii if necessary
+ type userset.reg > userset.txt
+
+
+ FOR /F "TOKENS=1-9 DELIMS== " %%a IN ('findstr "iDate" userset.txt') DO SET DATEFORMAT=%%b
+ FOR /F "TOKENS=1-9 DELIMS== " %%a IN ('findstr "iTime" userset.txt') DO SET TIMEFORMAT=%%b
+
+ FOR /F "TOKENS=1-9 DELIMS== " %%a IN ('findstr /R "sDate\>" userset.txt') DO SET DATEDELIM=%%b
+ FOR /F "TOKENS=1-9 DELIMS== " %%a IN ('findstr /R "sTime\>" userset.txt') DO SET TIMEDELIM=%%b
+
+ IF "%TIMEFORMAT%"=="" GOTO ERRNOTIME
+ IF "%DATEFORMAT%"=="" GOTO ERRNODATE
+ IF "%TIMEDELIM%"=="" GOTO ERRNOTIME
+ IF "%DATEDELIM%"=="" GOTO ERRNODATE
+
+ SET TIMEDELIM=%TIMEDELIM:~1,1%
+ SET DATEDELIM=%DATEDELIM:~1,1%
+ SET TIMEFORMAT=%TIMEFORMAT:~1,1%
+ SET DATEFORMAT=%DATEFORMAT:~1,1%
+
+REM *****************************************************************************************************************
+REM Well, well. Its time to look at the time and format it in a standard way (if possible)
+REM *****************************************************************************************************************
+
+
+ FOR /F "TOKENS=1-4 DELIMS=%TIMEDELIM% " %%a IN ('echo %MYTIME%') DO SET AA=%%a&SET BB=%%b&SET CC=%%c&SET DD=%%d
+
+ REM 12H Format
+ IF "%TIMEFORMAT%" == "0" (
+ SET HOUR=%AA%
+ SET MIN=%BB%
+ FOR /F "USEBACKQ TOKENS=1 DELIMS=ap" %%a IN ('%BB%') DO SET MMIN=%%a
+ SET SEC=%CC%
+ SET SUBSEC=%DD%
+ )
+
+ REM Get rid of the "a" or "p" if we have one of these in our minute string
+ IF NOT "%MMIN%"=="%MIN%" FOR /F "USEBACKQ TOKENS=1 DELIMS=ap " %%a IN ('%MIN%') DO SET MIN=%%a
+
+ REM 24H Format
+ IF "%TIMEFORMAT%" == "1" (
+ SET HOUR=%AA%
+ SET MIN=%BB%
+ SET SEC=%CC%
+ SET SUBSEC=%DD%
+ )
+
+ IF "%HOUR%"=="" GOTO ERRNOTIME
+ IF "%MIN%"=="" GOTO ERRNOTIME
+
+ IF "%SEC%"=="" SET SEC=00
+ IF "%SUBSEC%"=="" SET SUBSEC=00
+
+
+REM *****************************************************************************************************************
+REM It's time to format the date :-)
+REM *****************************************************************************************************************
+
+
+ FOR /F "TOKENS=1-4 DELIMS=./- " %%a IN ('ECHO %MYDATE%') DO SET AA=%%a&SET BB=%%b&SET CC=%%c&SET DD=%%d
+
+ IF "%DD%" == "" (
+ REM No Day of Week in Date
+ ( IF "%DATEFORMAT%" == "0" SET DOW=_&SET DAY=%BB%&SET NMM=%AA%&SET YEAR=%CC% )
+ ( IF "%DATEFORMAT%" == "1" SET DOW=_&SET DAY=%AA%&SET NMM=%BB%&SET YEAR=%CC% )
+ ( IF "%DATEFORMAT%" == "2" SET DOW=_&SET DAY=%CC%&SET NMM=%BB%&SET YEAR=%AA% )
+ ) ELSE (
+ ( IF "%DATEFORMAT%" == "0" SET DOW=%AA%&SET DAY=%CC%&SET NMM=%BB%&SET YEAR=%DD% )
+ ( IF "%DATEFORMAT%" == "1" SET DOW=%AA%&SET DAY=%BB%&SET NMM=%CC%&SET YEAR=%DD% )
+ ( IF "%DATEFORMAT%" == "2" SET DOW=%AA%&SET DAY=%DD%&SET NMM=%CC%&SET YEAR=%BB% )
+ )
+
+ REM Something went wrong, we weren't able to get a valid date
+ IF NOT "%YEAR%" == "0" GOTO DATEOK
+ goto ERRNODATE
+
+:DATEOK
+
+ REM Clean up any temporary files we may have created...
+ REM IF exist userset.reg del userset.reg
+ REM IF exist userset.txt del userset.txt
+
+ IF "%NMM%" == "01" SET MONTH=Jan
+ IF "%NMM%" == "02" SET MONTH=Feb
+ IF "%NMM%" == "03" SET MONTH=Mar
+ IF "%NMM%" == "04" SET MONTH=Apr
+ IF "%NMM%" == "05" SET MONTH=May
+ IF "%NMM%" == "06" SET MONTH=Jun
+ IF "%NMM%" == "07" SET MONTH=Jul
+ IF "%NMM%" == "08" SET MONTH=Aug
+ IF "%NMM%" == "09" SET MONTH=Sep
+ IF "%NMM%" == "10" SET MONTH=Oct
+ IF "%NMM%" == "11" SET MONTH=Nov
+ IF "%NMM%" == "12" SET MONTH=Dec
+
+ IF NOT {%MONTH%} == {} GOTO DATE_OK
+
+ REM *** Not US date format! Assume ISO: yyyy-mm-dd
+
+ FOR /F "TOKENS=1-4 DELIMS=/- " %%a IN ('date/t') DO SET DAY=%%a&SET yyyy=%%b&SET nmm=%%c&SET dd=%%d
+
+ echo a=%%a b=%%b c=%%c d=%%d
+ IF "%NMM%" == "01" SET MONTH=Jan
+ IF "%NMM%" == "02" SET MONTH=Feb
+ IF "%NMM%" == "03" SET MONTH=Mar
+ IF "%NMM%" == "04" SET MONTH=Apr
+ IF "%NMM%" == "05" SET MONTH=May
+ IF "%NMM%" == "06" SET MONTH=Jun
+ IF "%NMM%" == "07" SET MONTH=Jul
+ IF "%NMM%" == "08" SET MONTH=Aug
+ IF "%NMM%" == "09" SET MONTH=Sep
+ IF "%NMM%" == "10" SET MONTH=Oct
+ IF "%NMM%" == "11" SET MONTH=Nov
+ IF "%NMM%" == "12" SET MONTH=Dec
+
+:DATE_OK
+ IF "%SS" == "" SET SS="00"
+
+
+REM *****************************************************************************************************************
+REM Now create a valid version.c file ...
+REM *****************************************************************************************************************
+
+ ECHO Version %VER% Build %RUN% date %MONTH%/%DAY%/%YEAR% time %HOUR%:%MIN%:%SEC% %UTC%
+ ECHO char * Version = "%GENERATED_PROGRAM% %VER% %MONTH% %DAY% %HOUR%:%MIN%:%SEC% %UTC% %YEAR% (%RUN%)" ; > version.c
+ GOTO EOF
+
+
+REM *****************************************************************************************************************
+REM Here are the error messages I know
+REM *****************************************************************************************************************
+:ERRNOREG
+ ECHO "Error: Registry could not be read (check if reg.exe is available and works as expected)"
+ GOTO EOF
+
+
+:ERRNODATE
+ ECHO "Error: Dateformat unknown (check if contents of userset.txt are correctly, especially for iDate and sDate)"
+ GOTO EOF
+
+:ERRNOTIME
+ ECHO "Error: Timeformat unknown (check if contents of userset.txt are correctly, especially for iTime and sTime)"
+ GOTO EOF
+
+:ERRNOVERF
+ ECHO "Error: Version file not found (searching for ..\..\..\..\packageinfo.sh)"
+ GOTO EOF
+
+
+REM *****************************************************************************************************************
+REM Show'em how to run (me)
+REM *****************************************************************************************************************
+:USAGE
+
+ ECHO Usage: mkver.bat [ -P <Program Name> -H ]
+ ECHO -P Database Name
+ ECHO -H Help on options
+
+REM *****************************************************************************************************************
+REM All good things come to an end someday. Time to leave
+REM *****************************************************************************************************************
+:EOF
+
+REM *** Cleaning up
+IF EXIST point.txt DEL point.txt
+IF EXIST userset.txt DEL userset.txt
+IF EXIST userset.reg DEL userset.reg