bill at insightful.com
2008-Apr-29 18:30 UTC
[Rd] non-digits in svnversion output mess up windows build if USE_SVNVERSION=yes (PR#11339)
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 '}'
Duncan Murdoch
2008-Apr-29 20:07 UTC
[Rd] non-digits in svnversion output mess up windows build if USE_SVNVERSION=yes (PR#11339)
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
Maybe Matching Threads
- non-digits in svnversion output mess up windows build if (PR#11340)
- non-digits in svnversion output mess up windows build if (PR#11341)
- nondigits in R_FILEVERSION mess up Windows build
- problems with package tutorial
- error when going through Alan Lenarcic's package Tutorial