[Rd] Building R on Windows: mkdir of Rtools creates directories with read-only permissions [WEIRD]
Milan Bouchet-Valat
nalimilan at club.fr
Mon Jun 30 10:44:13 CEST 2014
On Thu Jan 9 2014 03:47 Henrik Bengtsson wrote:
> This is is an issue that bugged me for a while. I encountered a year
> ago (April 2012) when I first tried to build R from source on Windows.
> I never figured out what the solution is or if I'm doing something
> wrong myself (but I have found a tedious workaround). I'm still on
> the same Windows 7 Ultimate machine with NTFS, but I now made sure I
> started from scratch so I have a completely fresh setup (see details
> at the end).
>
> PROBLEM:
> At the very first step I do:
>
> C:\R\src\gnuwin32>make all
> [... Waiting. No errors until ...]
> cp R.dll ../../bin/i386
> -------- Building ../../../bin/i386/Rblas.dll --------
> gcc -std=gnu99 -shared -o ../../../bin/i386/Rblas.dll blas.o
> cmplxblas.o ../../gnuwin32/dllversion.o Rblas.def -L../../../bin/i386
> -lR -lgfortran
> c:/rtools/gcc-4.6.3/bin/../lib/gcc/i686-w64-mingw32/4.6.3/../../../../i686-w64-mingw32/bin/ld.exe:
> cannot find -lR
> collect2: ld returned 1 exit status
> make[2]: *** [../../../bin/i386/Rblas.dll] Error 1
> make[1]: *** [Rblas] Error 2
> make: *** [rbuild] Error 2
>
> However:
>
> C:\R\src\gnuwin32>dir ..\..\bin\i386\
> Volume in drive C is Windows7_OS
> Volume Serial Number is E038-51CC
>
> Directory of C:\R\bin\i386
>
> 01/08/2014 06:18 PM <DIR> .
> 01/08/2014 06:18 PM <DIR> ..
> 01/08/2014 06:18 PM 3,059,712 R.dll
> 01/08/2014 06:18 PM 348,995 Rgraphapp.dll
> 01/08/2014 06:18 PM 102,975 Riconv.dll
> 01/08/2014 06:18 PM 154,917 Rzlib.dll
> 4 File(s) 3,666,599 bytes
> 2 Dir(s) 22,424,739,840 bytes free
>
> What's weird is that these files have **read permission disabled**:
>
> C:\R\src\gnuwin32>file ..\..\bin\i386\*.dll
> ..\..\bin\i386\R.dll: writable, executable, regular file, no
> read permission
> ..\..\bin\i386\Rgraphapp.dll: writable, executable, regular file, no
> read permission
> ..\..\bin\i386\Riconv.dll: writable, executable, regular file, no
> read permission
> ..\..\bin\i386\Rzlib.dll: writable, executable, regular file, no
> read permission
>
> What is going on? Have anyone else seen this? I've also tried
> running as Administrator - no difference.
Hi Henrik,
Old thread, but I think I'm experiencing exactly the same problem. I
tried running as administrator and as a normal user, and no luck. I
noticed, though, that resetting permissions on the build tree makes the
error go away, and replaces it with another one stating that headers in
include/ could not be created due to permission issues.
This is on a machine where I was able to build R 3.0.1 successfully,
though I also remember having permission issues I eventually fixed by
resetting permissions on the build tree. Not sure what's changed since
then...
To add bit of information to the debugging you've already done: I
noticed that when opening the directory/file property dialog, a user
with a very long name including letters and numbers appears in the
permissions list for a second, and then disappears. This user reappears
every time I run 'make'. So maybe 'mkdir' or other tools use wrong user
IDs, creating bogus users. Just a guess.
Have you found a solution or workaround since January? I really need to
build an R installer and I seem to be stuck...
Thanks for your help
> TROUBLESHOOTING / WORKAROUND:
> It appears that 'mkdir' (of Rtools) causes this problem, because if I
> manually pre-create 'C:\R\src\gnuwin32\bin\i386' using Windows' mkdir
> it works, e.g.
>
> C:\R\src\gnuwin32>rm -fR ..\..\bin\
> C:\R\src\gnuwin32>cmd /C mkdir ..\..\bin\i386
> C:\R\src\gnuwin32>make rbuild
> [...]
> -------- Building ../../../bin/i386/Rblas.dll --------
> gcc -std=gnu99 -shared -o ../../../bin/i386/Rblas.dll blas.o
> cmplxblas.o ../../gnuwin32/dllversion.o Rblas.def -L../../../bin/i386
> -lR -lgfortran
> make --no-print-directory -C front-ends
> mkdir -p ../../../bin/i386
> cp Rgui.exe ../../../bin/i386/Rgui.exe
> mkdir -p ../../../bin/i386
> cp Rterm.exe ../../../bin/i386/Rterm.exe
> mkdir -p ../../../bin/i386
> cp Rcmd.exe ../../../bin/i386/Rcmd.exe
> mkdir -p ../../../bin/i386
> cp RSetReg.exe ../../../bin/i386/RSetReg.exe
> mkdir -p ../../../bin/i386
> cp R.exe ../../../bin/i386/R.exe
> mkdir -p ../../../bin/i386
> cp Rscript.exe ../../../bin/i386/Rscript.exe
> mkdir -p ../../../bin/i386
> cp open.exe ../../../bin/i386/open.exe
> mkdir -p ../../../bin
> cp Rfe.exe ../../../bin/R.exe
> mkdir -p ../../../bin
> cp Rfe.exe ../../../bin/Rscript.exe
> make[1]: `COPYRIGHTS' is up to date.
> make --no-print-directory -C ../modules -f Makefile.win \
> CFLAGS='-O3 -Wall -pedantic -mtune=core2' FFLAGS='-O3 -mtune=core2'
> gcc -std=gnu99 -shared -s -o ../../../bin/i386/Rlapack.dll dlamch.o
> dlapack.o cmplx.o init_win.o Rlapackrc.o -L../../../bin/i386 -lR
> -lRblas -lgfortran
> cp lapack.dll ../../../modules/i386/lapack.dll
>
> and there is (obviously) read permissions on those files:
>
> C:\R\src\gnuwin32>file ..\..\bin\i386\*.dll
> ..\..\bin\i386\R.dll: PE32 executable for MS Windows (DLL)
> (GUI) Intel 80386 32-bit
> ..\..\bin\i386\Rblas.dll: PE32 executable for MS Windows (DLL)
> (console) Intel 80386 32-bit
> ..\..\bin\i386\Rgraphapp.dll: PE32 executable for MS Windows (DLL)
> (GUI) Intel 80386 32-bit
> ..\..\bin\i386\Riconv.dll: PE32 executable for MS Windows (DLL)
> (console) Intel 80386 32-bit
> ..\..\bin\i386\Rlapack.dll: PE32 executable for MS Windows (DLL)
> (console) Intel 80386 32-bit
> ..\..\bin\i386\Rzlib.dll: PE32 executable for MS Windows (DLL)
> (console) Intel 80386 32-bit
>
> Pre-creating the proper directories is tedious and only works up to
> the point of 'make distribution', where I haven't found a similar
> workaround (without modifying the Makefiles). Note, I can get to the
> point where I have build and check everything (including recommended
> packages).
>
>
> Just to convince you that mkdir is the problem, I can reproduce the
> problem from this point, by removing the bin/ directory again and
> relying on Rtools mkdir again;
>
> C:\R\src\gnuwin32>rm -fR ..\..\bin
> C:\R\src\gnuwin32>make rbuild
> make[3]: Nothing to be done for `svnonly'.
> installing C headers
> make[1]: `libRblas.dll.a' is up to date.
> make[4]: Nothing to be done for `svnonly'.
> installing C headers
> make --no-print-directory -C ../extra/intl CFLAGS='-O3 -Wall -pedantic
> -mtune=core2' -f Makefile.win
> make --no-print-directory -C ../appl CFLAGS='-O3 -Wall -pedantic
> -mtune=core2' FFLAGS='-O3 -mtune=core2' -f Makefile.win
> make --no-print-directory -C ../nmath CFLAGS='-O3 -Wall -pedantic
> -mtune=core2' FFLAGS='-O3 -mtune=core2' -f Makefile.win
> make --no-print-directory -C ../main CFLAGS='-O3 -Wall -pedantic
> -mtune=core2' FFLAGS='-O3 -mtune=core2' malloc-DEFS='-DLEA_MALLOC' -f
> Makefile.win
> make --no-print-directory -C ./getline CFLAGS='-O3 -Wall -pedantic -mtune=core2'
>
> make[3]: `gl.a' is up to date.
> make -f Makefile.win makeMakedeps
> make -f Makefile.win libpcre.a
> make[4]: `libpcre.a' is up to date.
> make[3]: Nothing to be done for `all'.
> make -f Makefile.win makeMakedeps
> make -f Makefile.win libtre.a
> make[4]: `libtre.a' is up to date.
> make[3]: Nothing to be done for `all'.
> make[4]: `stamp' is up to date.
> make[4]: `liblzma.a' is up to date.
> make[2]: `R.dll' is up to date.
> cp R.dll ../../bin/i386
> -------- Building ../../../bin/i386/Rblas.dll --------
> gcc -std=gnu99 -shared -o ../../../bin/i386/Rblas.dll blas.o
> cmplxblas.o ../../gnuwin32/dllversion.o Rblas.def -L../../../bin/i386
> -lR -lgfortran
> c:/rtools/gcc-4.6.3/bin/../lib/gcc/i686-w64-mingw32/4.6.3/../../../../i686-w64-mingw32/bin/ld.exe:
> cannot find -lR
> collect2: ld returned 1 exit status
> make[2]: *** [../../../bin/i386/Rblas.dll] Error 1
> make[1]: *** [Rblas] Error 2
> make: *** [rbuild] Error 2
>
>
> MORE TROUBLESHOOTING:
> The MD5 checksum when it fails (reproducible):
> C:\R\src\gnuwin32>md5sum ../../bin/i386/*.dll
> 75b2e64d3847e768631681922df5a81d *../../bin/i386/R.dll
> 12a35b63a28ad0e0fee8cae04f76e907 *../../bin/i386/Rgraphapp.dll
> e2c40ae15d13dc17af33c1367f78817d *../../bin/i386/Riconv.dll
> c5ea5a5cd2b7d3c07970f5314ce7296a *../../bin/i386/Rzlib.dll
>
> The MD5 checksum when it works (reproducible):
> C:\R\src\gnuwin32>md5sum ../../bin/i386/*.dll
> 75b2e64d3847e768631681922df5a81d *../../bin/i386/R.dll
> 12a35b63a28ad0e0fee8cae04f76e907 *../../bin/i386/Rgraphapp.dll
> e2c40ae15d13dc17af33c1367f78817d *../../bin/i386/Riconv.dll
> c5ea5a5cd2b7d3c07970f5314ce7296a *../../bin/i386/Rzlib.dll
> +
> c81b3399027ec9c24ca80ba92199327c *../../bin/i386/Rblas.dll
> 20d32cee2e561d1826af1a538844472b *../../bin/i386/Rlapack.dll
>
>
> Thanks for any help,
>
> Henrik
>
>
> SETUP:
> 1. Downloaded/svn checkout the R source to C:\R\.
> 2. Installed most recent Rtools to C:\Rtools (completely removed previously)
> (3. Modifying the MkRules.* files has no impact for reproducing this
> problem. Same with 'make rsync-recommended')
>
> C:\R\src\gnuwin32>path
> PATH=;C:\Rtools\bin;C:\Rtools\gcc-4.6.3\bin;C:\Windows;C:\Windows\system32
>
> C:\R\src\gnuwin32>cat C:\Rtools\VERSION.txt
> Rtools version 3.1.0.1939
>
> C:\R\src\gnuwin32>ls ../..
> COPYING Makefile.fw VERSION configure.ac po tmp
> ChangeLog Makefile.in VERSION-NICK doc share tools
> INSTALL README config.site etc src
> Makeconf.in Tcl configure m4 tests
More information about the R-devel
mailing list