[Rd] non-digits in svnversion output mess up windows build if USE_SVNVERSION=yes (PR#11339)

Duncan Murdoch murdoch at stats.uwo.ca
Tue Apr 29 22:07:51 CEST 2008


This is not a bug, it's a feature.

It stops me from distributing versions with unintentional uncommitted 
changes.

Duncan Murdoch

On 29/04/2008 2:30 PM, bill at insightful.com wrote:
> Full_Name: Bill Dunlap
> Version: 2.8.0dev
> OS: Windows XP
> Submission from: (NULL) (70.98.76.47)
> 
> 
> I tried for the first time to build R from source on Windows, where I
> got the source code via svn.  Per the Installation and Administration
> manual, I altered src\gnuwin32\MkRules so it had the the locally
> correct paths to HTML Help Workshop and Inno Setup 5.  I also set
> USE_SVNVERSION=yes, as suggested in MkRules itself.  Then, while in
> the directory src/gnuwin32 I ran 'make all recommended' and got an
> error from windres very early in the build:
> 
>   E:\R\R-svn\r-devel\src\gnuwin32>make all recommended
>   make --no-print-directory -C front-ends Rpwd
>   make -C ../../include -f Makefile.win version
>   make Rpwd.exe
>   gcc  -std=gnu99 -I../../include  -O3 -Wall -pedantic  -c rpwd.c -o rpwd.o
>   windres --preprocessor="gcc -E -xc -DRC_INVOKED"   -i rcico.rc -o rcico.o
>   c:\Rtools\MinGW\bin\windres.exe: rcico.rc:9: syntax error
>   make[3]: *** [rcico.o] Error 1
>   make[2]: *** [Rpwd] Error 2
>   make[1]: *** [front-ends/Rpwd.exe] Error 2
>   make: *** [all] Error 2
> 
> Line 9 of src\gnuwin32\front-ends\rcico.rc is
>   FILEVERSION R_FILEVERSION
> The problem was that my change to MkRules caused 'svnversion' to put an
> 'M' (modified) on the end of the svn version it reports.  This svn
> version number is used in the R_FILEVERSION macro, which is used in in
> the *.rc files.  The resource file compiler, windres, appears to choke on
> non-digits in R_FILEVERSION.  (A comment in tools\GETVERSION indicates
> it might choke on leading 0's as well.)
> 
> svnversion can also output a string of the form "123:125"
> to mean the current source is from a variety of svn revisions,
> between 123 through 125.  An "M" or "S" may also be appended.
> If you don't have Subversion installed then you might get
> a svn version of "unknown".  None of these non-digits is
> acceptble to windres.
> 
> I patched tools/GETVERSION to fix up this problem.  It removes
> the trailing M or S and removes anything up to an including a
> colon, so it reports the highest version in the range.  If there
> are still non-digits in there it makes the version string "0"
> (not useful, but doesn't kill the build with a noninformative
> error message).
> 
> I ran into another problem with the trailing 'M' from svnversion
> when doing 'make rinstaller' in R_HOME/src/gnuwin32:
>    E:\R\R-svn\r-devel\src\gnuwin32\installer>type R-2.8.0dev.log
>    Inno Setup 5 Command-Line Compiler
>    ...
>    Compiler engine version: Inno Setup 5.2.3 (ISPP 5.2.3.0)
>    ...
>    [ISPP] Preprocessing.
>    ...
>    [ISPP] Preprocessed.
>    Parsing [Setup] section, line 10
>    ...
>    Parsing [Setup] section, line 20
>    Error on line 12 in e:\R\R-svn\r-devel\src\gnuwin32\installer\R.iss: Value of
> [Setup] section directive "VersionInfoVersion" is invalid.
>    Compile aborted.
> The offending line 12 in R.iss is
>     12  VersionInfoVersion=2.8.0.45381M
> and it is put there by src/gnuwin32/installer/JRins.pl.
> 
> I patched JRins.pl to ensure the svn revision consisted
> of only digits.
> 
> Then I could build R on Windows (make distribution)
> with USE_SVNVERSION=yes set in src/gnuwin32/MkRules
> and with a variety of svn revision settings.
> 
> Index: src/gnuwin32/installer/JRins.pl
> ===================================================================
> --- src/gnuwin32/installer/JRins.pl     (revision 45553)
> +++ src/gnuwin32/installer/JRins.pl     (working copy)
> @@ -44,6 +44,11 @@
>  $SVN = <ver>;
>  close ver;
>  $SVN =~s/Revision: //;
> +## inno setup requires that SVN be all numeric, not 123M, 120:123, "unknown",
> or empty
> +$SVN =~s/[MS]* *$//;
> +$SVN =~s/^.*://;
> +$SVN =~s/[^0-9]//g;
> +$SVN =~s/^$/0/;
>  $RVER0 .= "." . $SVN;
> 
>  open insfile, "> R.iss" || die "Cannot open R.iss\n";
> Index: tools/GETVERSION
> ===================================================================
> --- tools/GETVERSION    (revision 45479)
> +++ tools/GETVERSION    (working copy)
> @@ -24,6 +24,7 @@
>      y1=6
>      svn_rev=unknown
>    fi
> +  all_numeric_svn_rev=`echo ${svn_rev}|sed -e 's/[MS]*$//' -e 's/^.*://' -e
> 's/[^0-9]//g' -e 's/^$/0/'`
>    echo "/* Rversion.h.  Generated automatically. */"
>    echo "#ifndef R_VERSION_H"
>    echo "#define R_VERSION_H"
> @@ -43,7 +44,7 @@
>    echo "#define R_SVN_REVISION \"${svn_rev}\""
>  ## Using 1-digit year stops problems with leading zeros
>  #  echo "#define R_FILEVERSION    ${maj},${pl}${sl},${y1}${m}${d},0"
> -  echo "#define R_FILEVERSION    ${maj},${pl}${sl},${svn_rev},0"
> +  echo "#define R_FILEVERSION    ${maj},${pl}${sl},${all_numeric_svn_rev},0"
>    echo
>    echo '#ifdef __cplusplus'
>    echo '}'
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list