Opened 14 years ago
Closed 12 years ago
#1149 closed enhancement (fixed)
WinGrass - load R-installation-path dynamically into PATH
Reported by: | hellik | Owned by: | |
---|---|---|---|
Priority: | normal | Milestone: | 7.0.0 |
Component: | Startup | Version: | svn-trunk |
Keywords: | wingrass, path, R | Cc: | |
CPU: | x86-32 | Platform: | MSWindows Vista |
Description
Hi,
at the moment the WinGrass-Installer reads the Windows-registry during installation for the R-installation-path
http://trac.osgeo.org/grass/browser/grass/trunk/mswindows/GRASS-Installer.nsi#L219
ReadRegStr $R_HKLM_INSTALL_PATH HKLM "Software\R-core\R" "InstallPath" ReadRegStr $R_HKCU_INSTALL_PATH HKCU "Software\R-core\R" "InstallPath"
and writes this, if found, to the grassXX.bat
http://trac.osgeo.org/grass/browser/grass/trunk/mswindows/GRASS-Installer.nsi#L728
${If} $R_HKLM_INSTALL_PATH != "" FileWrite $0 'set PATH=$R_HKLM_INSTALL_PATH\bin;%PATH%$\r$\n' ${EndIf} ${If} $R_HKCU_INSTALL_PATH != "" FileWrite $0 'set PATH=$R_HKCU_INSTALL_PATH\bin;%PATH%$\r$\n' ${EndIf}
this is a very statically approach to get the R-installation-path into the %PATH% and R working in the Grass-delivered command-line. that means, if R is upadated/upgraded, the Grass-delivered command-line can't find R in the %PATH% anymore.
a dynamically approach to add the R-installation-path to %PATH% would be better.
from the R-Windows-FAQ: http://cran.r-project.org/bin/windows/base/rw-FAQ.html#Does-R-use-the-Registry_003f
2.17 Does R use the Registry? Not when R itself is running. When you run the R installer, there are options (under `Select Additional Tasks') to `Save version number in registry' and (for Administrator installs) `Associate R with .RData files'. If you tick the first option, the following string entries are added to the Windows registry: * HKEY_LOCAL_MACHINE\Software\R-core\R\Current Version contains the version number, currently 2.11.1. * HKEY_LOCAL_MACHINE\Software\R-core\R\[version]\InstallPath (where [version] is currently 2.11.1) contains the path to the R home directory. If you do not have administrative privileges on the machine while running the installer, then the entries are created under HKEY_CURRENT_USER. As from R 2.11.0 the same entries are also created under Software\R-core\R32 or Software\R-core\R64, for 32- and 64-bit R respectively. If you tick the second option (shown with administrative privileges only) (`Associate R with .RData files') then entries are created under HKEY_CLASSES_ROOT\.RData and HKEY_CLASSES_ROOT\RWorkspace. After installation you can add the Registry entries in by running RSetReg.exe in the bin folder, and remove them by running this with argument /U. Note that this requires administrative privileges unless run with argument /Personal and neither sets up nor removes the file associations.
the following code lines in the windows-command-line outputs the R installation path:
reg query "HKLM\Software\R-core\R" /v "InstallPath"
or
reg query "HKCU\Software\R-core\R" /v "InstallPath"
in the following way:
C:\data\private\compiling_gis\detect_R_in_Dos>reg query "HKLM\Software\R-core\R" /v "InstallPath" HKEY_LOCAL_MACHINE\Software\R-core\R InstallPath REG_SZ C:\Program Files\R\R-2.11.1
following line of code extract from the above output the R-installation path and set a variable which could be added to %PATH%
set RegCommand=reg query "HKLM\Software\R-core\R" /v "InstallPath" FOR /f "tokens=1-2* delims= " %%a IN ( ' %RegCommand% ^| find "InstallPath" ' ) do set R_HKLM_INSTALL_PATH=%%c
or
set RegCommand2=reg query "HKCU\Software\R-core\R" /v "InstallPath" FOR /f "tokens=1-2* delims= " %%a IN ( ' %RegCommand2% ^| find "InstallPath" ' ) do set R_HKCU_INSTALL_PATH=%%c
but if there is no value in registry, following error comes up:
C:\data\private\compiling_gis\detect_R_in_Dos>FOR /F "tokens=1-2* delims= " %a IN (' reg query "HKCU\Software\R-core\R" /v "InstallPath" | find "InstallPath" ' ) do set R_HKCU_INSTALL_PATH=%c ERROR: registry key or value couldn't be found.
following questions:
- which of in the R-Windows-FAQ mentioned registry entries should be tested?
- how could the above mentioned lines of code be added to grassXX.bad? (I'm not really familiar with this kind of coding)
this would be nice in order to have a R-session working in the Grass-delivered command line, independently if the R-installation has changed.
best regards Helmut
Attachments (5)
Change History (17)
follow-up: 2 comment:1 by , 14 years ago
follow-up: 3 comment:2 by , 14 years ago
Replying to glynn:
Replying to hellik:
- which of in the R-Windows-FAQ mentioned registry entries should be tested?
HKCU first, then HKLM if nothing found under HKCU.
I have R 2.12.0 installed in C:\Program Files\R\R-2.12.0.
according to the R-Windows-FAQ, the R-binaries are installed
in a Win32-installation: C:\Program Files\R\R-2.12.0\bin\i386\
in a Win64-installation: C:\Program Files\R\R-2.12.0\bin\x64\
If I write following search-routine in a bat-file (for example c:\temp\addrtopath.bat) for all possible cases
set RegCommandHKCU32=reg query "HKCU\Software\R-core\R32" /v "InstallPath" >nul 2>&1 FOR /f "tokens=1-2* delims= " %%a IN ('%RegCommandHKCU32% ^| find "InstallPath"') do set R_HKCU32_INSTALL_PATH=%%c >nul 2>&1 IF "%R_HKCU32_INSTALL_PATH%" NEQ "" (PATH=%PATH%;%R_HKCU32_INSTALL_PATH%\bin\i386) >nul 2>&1 set RegCommandHKCU64=reg query "HKCU\Software\R-core\R64" /v "InstallPath" >nul 2>&1 FOR /f "tokens=1-2* delims= " %%a IN ('%RegCommandHKCU64% ^| find "InstallPath"') do set R_HKCU64_INSTALL_PATH=%%c >nul 2>&1 IF "%R_HKCU64_INSTALL_PATH%" NEQ "" (PATH=%PATH%;%R_HKCU64_INSTALL_PATH%\bin\x64) >nul 2>&1 rem Test if R is registered in HKLM set RegCommandHKLM32=reg query "HKLM\Software\R-core\R32" /v "InstallPath" >nul 2>&1 FOR /f "tokens=1-2* delims= " %%a IN ('%RegCommandHKLM32% ^| find "InstallPath"') do set R_HKLM32_INSTALL_PATH=%%c >nul 2>&1 IF "%R_HKLM32_INSTALL_PATH%" NEQ "" (PATH=%PATH%;%R_HKLM32_INSTALL_PATH%\bin\i386) >nul 2>&1 set RegCommandHKLM64=reg query "HKLM\Software\R-core\R64" /v "InstallPath" >nul 2>&1 FOR /f "tokens=1-2* delims= " %%a IN ('%RegCommandHKLM64% ^| find "InstallPath"') do set R_HKLM64_INSTALL_PATH=%%c >nul 2>&1 IF "%R_HKLM64_INSTALL_PATH%" NEQ "" (PATH=%PATH%;%R_HKLM64_INSTALL_PATH%\bin\x64) >nul 2>&1
and start that bat-file on my winvista32-box in a normal windows-cmd, the R-installation is found correctly and in my case C:\Program Files\R\R-2.12.0\bin\i386\ is added to path and I can start R by typing R in the windows-cmd where I have run the bat-file.
If I add these line of code above into C:\Program Files\GRASS-70-SVN\grass70svn.bat (Wingrass70-starting script), R isn't added to the path.
any hints?
best regards Helmut
by , 14 years ago
Attachment: | dynamic_test_if_R_is_installed.bat added |
---|
Dynamic check where R lives and added to path
follow-up: 4 comment:3 by , 14 years ago
Replying to hellik:
Replying to glynn:
set RegCommandHKCU32=reg query "HKCU\Software\R-core\R32" /v "InstallPath" >nul 2>&1 FOR /f "tokens=1-2* delims= " %%a IN ('%RegCommandHKCU32% ^| find "InstallPath"') do set R_HKCU32_INSTALL_PATH=%%c >nul 2>&1 IF "%R_HKCU32_INSTALL_PATH%" NEQ "" (PATH=%PATH%;%R_HKCU32_INSTALL_PATH%\bin\i386) >nul 2>&1 set RegCommandHKCU64=reg query "HKCU\Software\R-core\R64" /v "InstallPath" >nul 2>&1 FOR /f "tokens=1-2* delims= " %%a IN ('%RegCommandHKCU64% ^| find "InstallPath"') do set R_HKCU64_INSTALL_PATH=%%c >nul 2>&1 IF "%R_HKCU64_INSTALL_PATH%" NEQ "" (PATH=%PATH%;%R_HKCU64_INSTALL_PATH%\bin\x64) >nul 2>&1 rem Test if R is registered in HKLM set RegCommandHKLM32=reg query "HKLM\Software\R-core\R32" /v "InstallPath" >nul 2>&1 FOR /f "tokens=1-2* delims= " %%a IN ('%RegCommandHKLM32% ^| find "InstallPath"') do set R_HKLM32_INSTALL_PATH=%%c >nul 2>&1 IF "%R_HKLM32_INSTALL_PATH%" NEQ "" (PATH=%PATH%;%R_HKLM32_INSTALL_PATH%\bin\i386) >nul 2>&1 set RegCommandHKLM64=reg query "HKLM\Software\R-core\R64" /v "InstallPath" >nul 2>&1 FOR /f "tokens=1-2* delims= " %%a IN ('%RegCommandHKLM64% ^| find "InstallPath"') do set R_HKLM64_INSTALL_PATH=%%c >nul 2>&1 IF "%R_HKLM64_INSTALL_PATH%" NEQ "" (PATH=%PATH%;%R_HKLM64_INSTALL_PATH%\bin\x64) >nul 2>&1
sorry above isn't really working.
I've attached instead a simple working bat-file to check dynamically if and where R is installed and added to the path.
but if these lines are added to grass70svn.bat, they are not working correctly.
any hints what have to be changed?
Helmut
by , 14 years ago
Attachment: | grass64svn_add_dynamically_R_path.patch added |
---|
Add dynamically R to Path for WinGrass64svn
by , 14 years ago
Attachment: | grass65_add_dynamically_R_path.patch added |
---|
Add dynamically R to Path for WinGrass65
follow-up: 5 comment:4 by , 14 years ago
Replying to hellik:
I've attached instead a simple working bat-file to check dynamically if and where R is installed and added to the path.
I've attached working patches for WinGrass64svn and WinGrass65.
tested with a patched WinGrass6.4.1RC2, it's working now. R can be started within a WinGrass-text-mode-session.
the improvement is that R is added to %PATH% dynamically instead of the actually very static approach which detects R only during wingrass-installation and, after installing new R-versions, it's not possible anymore to start a R-session within a wingrass-session because of the false path.
any opinion for not adding it to grass65 and after some testing to grass64svn?
Helmut
by , 14 years ago
Attachment: | grass70_add_dynamically_R_path.patch added |
---|
Add dynamically R to Path for WinGrass70
follow-up: 6 comment:5 by , 14 years ago
Replying to hellik:
I've attached working patches for WinGrass64svn and WinGrass65.
also now attached a working tested patch for WinGrass70.
after some cleaning of the messages, it would be nice to have it in all branches.
I'm often coupling R and grass inside a grass-session in windows, it's a very nice feature for analysing gis-data to have.
Helmut
follow-up: 7 comment:6 by , 14 years ago
Replying to hellik:
Replying to hellik:
I've attached working patches for WinGrass64svn and WinGrass65.
also now attached a working tested patch for WinGrass70.
after some cleaning of the messages, it would be nice to have it in all branches.
I'm often coupling R and grass inside a grass-session in windows, it's a very nice feature for analysing gis-data to have.
see also Windows batchfiles for use with R
follow-ups: 8 9 comment:7 by , 14 years ago
Replying to hellik:
Replying to hellik:
Replying to hellik:
I've attached working patches for WinGrass64svn and WinGrass65.
also now attached a working tested patch for WinGrass70.
after some cleaning of the messages, it would be nice to have it in all branches.
I'm often coupling R and grass inside a grass-session in windows, it's a very nice feature for analysing gis-data to have.
see also Windows batchfiles for use with R
I've tested following in my win32-vista-box
- installed nightly build WinGRASS-7.0.SVN-r46330-1-Setup.exe
- copied the batch-files from http://code.google.com/p/batchfiles/ into C:\Program Files\GRASS 7.0.SVN\extrabin
- started "GRASS 7.0.SVN with MSYS" by the desktop-shortcut
- in the windows-command-line of "GRASS 7.0.SVN with MSYS" it's possible to start a R-session within a Grass-session (recognizing all Grass-environment-variables) by typing cmd R.bat
- in the windows-command-line of "GRASS 7.0.SVN with MSYS" it's possible to start a R-GUI-session within a Grass-session (recognizing all Grass-environment-variables) by typing cmd Rgui.bat
so I strongly recommend using the bat-files from http://code.google.com/p/batchfiles/ for a smoothly WinGrass-R-integration.
the bat-files are gpl'ed, so there's maybe no problem to include them in an wingrass-selfinstaller?
after some tweaking (i.e. starting from the wxgui, ...), this would be a great and an all-time improvement coupling wonderfull GIS- and (geo-)statistic- software in the windows environment.
Helmut
comment:8 by , 14 years ago
Replying to hellik:
Replying to hellik:
Replying to hellik:
Replying to hellik:
I've attached working patches for WinGrass64svn and WinGrass65.
also now attached a working tested patch for WinGrass70.
after some cleaning of the messages, it would be nice to have it in all branches.
I'm often coupling R and grass inside a grass-session in windows, it's a very nice feature for analysing gis-data to have.
see also Windows batchfiles for use with R
I've tested following in my win32-vista-box
- installed nightly build WinGRASS-7.0.SVN-r46330-1-Setup.exe
- copied the batch-files from http://code.google.com/p/batchfiles/ into C:\Program Files\GRASS 7.0.SVN\extrabin
- started "GRASS 7.0.SVN with MSYS" by the desktop-shortcut
- in the windows-command-line of "GRASS 7.0.SVN with MSYS" it's possible to start a R-session within a Grass-session (recognizing all Grass-environment-variables) by typing cmd R.bat
- in the windows-command-line of "GRASS 7.0.SVN with MSYS" it's possible to start a R-GUI-session within a Grass-session (recognizing all Grass-environment-variables) by typing cmd Rgui.bat
so I strongly recommend using the bat-files from http://code.google.com/p/batchfiles/ for a smoothly WinGrass-R-integration.
the bat-files are gpl'ed, so there's maybe no problem to include them in an wingrass-selfinstaller?
after some tweaking (i.e. starting from the wxgui, ...), this would be a great and an all-time improvement coupling wonderfull GIS- and (geo-)statistic- software in the windows environment.
a small correction
- start "GRASS 7.0.SVN with MSYS"
- type in the command-line-window cmd for enabling a windows-command-line
- type R.bat for starting a R-commandline-session within a wingrass-session or type Rgui.bat for starting a R-GUI-session within a winggrass-session (in both cases recognizing all Grass-environment-variables)
Helmut
follow-up: 10 comment:9 by , 12 years ago
Replying to hellik:
so I strongly recommend using the bat-files from http://code.google.com/p/batchfiles/ for a smoothly WinGrass-R-integration.
the bat-files are gpl'ed, so there's maybe no problem to include them in an wingrass-selfinstaller?
answer from Gabor Grothendieck, author of "Windows batchfiles for use with R".
Von: Gabor Grothendieck <...> Betreff: Re: WinGRASS GIS-R-integration via "Windows batchfiles for use with R" Datum: Thu, 23. Aug 2012 23:06:30 Hi, If the entire project is GPL'd or subject to reasonably similar license(s) then there is no reason you could not distribute additional GPL'd software like the batchfiles with it. I think the license only requires preservation of authorship and maintaining the free status. Regards.
the batch-files are:
PROGRAM LIST Legend: h = no args gives help 0 = common usage is to enter command name without arguments d = in development 2.11 = only works with R 2.11 * = all files marked with one star are the same. Program checks name by which its called to determine action. ** = all files marked with two stars are the same. Program checks name by which its called to determine action. #Rscript.bat - put at top of R file to make it a batch file (h) (*) clip2r.js - pastes clipboard into Rgui. See comments in file for use from vim. (0)(d) copydir.bat - copy a library from one version of R to another (h) el.js - run elevated - Vista and up, e.g. el Rgui runs R elevated find-miktex.hta - GUI to find MiKTeX (0) kopy.bat - copy Rcmd to other batch files (h)(d) movedir.bat - move library from one version of R to another (h) R.bat - like R.exe but finds R from registry (0) (*) Rcmd.bat - like Rcmd.exe but finds R from registry (h) (*) Rgui.bat - like Rgui.exe but finds R from registry (0) (*) RguiStart.bat - like Rgui.bat but arg1 defines folder to start R in (*) Rscript.bat - run .R script (h) (*) Rterm.bat - like rterm.exe but finds R from registry (h) (*) Rtidy.bat - reformat a .R file, e.g. Rtidy myfile.R > outfile.R (d) Rtools.bat - place Rtools on path for remainder of console session (0) (*) Rversions.bat - list R and set R version in registry, e.g. on Vista: el cmd/c Rversions R-2.10.1 (0) Rversions.hta - GUI interface to RSetReg. List and set R version, e.g. on Vista: el cmd /c Rversions.hta (0)(2.11) show-svn-info.hta - show svn info if current folder is an svn checkout (0) Stangle.bat - run arg1 through Stangle (h) (**) Sweave.bat - run arg1 through Sweave (h) (**)
the entire README of rbatch-files attached to this ticket.
so may I propose to integrate the batch files in the GRASS GIS source in
\src\grass_trunk\mswindows\external\rbatch
and the standalone WinGrass-installer installing the files in
C:\Program Files (x86)\GRASS GIS 7.0.svn\extrabin
tested here locally, it's working.
this would be a great and an all-time improvement coupling wonderfull GIS- and (geo-)statistic- software in the windows world.
any opinions, objections, hints ...?
Helmut
follow-ups: 11 12 comment:10 by , 12 years ago
comment:11 by , 12 years ago
comment:12 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Replying to hellik:
HKCU first, then HKLM if nothing found under HKCU.