Dear Prof. Ripley Prof Brian Ripley wrote: > You have $(ROOTSYS), not ${ROOTSYS} as I had. Thank you very much, changing the braces did the trick, now everything works! > > Also, the output you show is missing the quotes, which is unlikely if > this was the Makefile.win version used. This is correct, since I did add the quote only after receiving your mail suggesting this correction. > > To summarize: > > 1) Use ${ROOTSYS} (with braces). > 2) Either use forward slashes and no spaces or ensure the path is > quoted in the cl call. > > The error from the example you showed is the second. > > The shell you use to can Rcmd INSTALL is not relevant: our software > ensures that a POSIX shell is used for the make. (This is quite > different from nmake.) > > Thank you once again and "Happy Eastern" Best regards Christian > > On Fri, 21 Mar 2008, cstrato wrote: > >> Dear Prof. Ripley >> >> Here is the Makefile.win, which contains already your suggestion for >> spaces (thank you), but contains only 3 of 14 header files: >> >> #------------------------------------------------------------------------------ >> >> >> >> ROOTSYS = C:\\root >> #ROOTSYS = ${ROOTSYS} >> >> LDOPT = -opt:noref >> LDFLAGS = $(LDOPT) $(conlflags) -nologo >> -include:_G__cpp_setupG__Hist \ >> -include:_G__cpp_setupG__Graf1 >> -include:_G__cpp_setupG__G3D \ >> -include:_G__cpp_setupG__GPad >> -include:_G__cpp_setupG__Tree \ >> -include:_G__cpp_setupG__Rint >> -include:_G__cpp_setupG__PostScript \ >> -include:_G__cpp_setupG__Matrix >> -include:_G__cpp_setupG__Physics >> SOFLAGS = $(dlllflags:-pdb:none=) >> ROOTLIBS = "$(ROOTSYS)/lib/libCore.lib" \ >> "$(ROOTSYS)/lib/libCint.lib" >> "$(ROOTSYS)/lib/libHist.lib" \ >> "$(ROOTSYS)/lib/libGraf.lib" >> "$(ROOTSYS)/lib/libGraf3d.lib" \ >> "$(ROOTSYS)/lib/libGpad.lib" >> "$(ROOTSYS)/lib/libTree.lib" \ >> "$(ROOTSYS)/lib/libRint.lib" >> "$(ROOTSYS)/lib/libPostscript.lib" \ >> "$(ROOTSYS)/lib/libMatrix.lib" >> "$(ROOTSYS)/lib/libPhysics.lib" \ >> "$(ROOTSYS)/lib/libNet.lib" "$(ROOTSYS)/lib/libRIO.lib" >> LIBS = $(ROOTLIBS) >> GLIBS = $(LIBS) "$(ROOTSYS)/lib/libGui.lib" >> "$(ROOTSYS)/lib/libGraf.lib" \ >> "$(ROOTSYS)/lib/libGpad.lib" >> LIBSALL = $(ROOTLIBS) >> >> #------------------------------------------------------------------------------ >> >> >> >> MYHDR = TMLMath.h TStat.h StatUtils.h >> MYSRC = TMLMath.cxx TStat.cxx StatUtils.cxx >> MYOBJ = TMLMath.obj TStat.obj StatUtils.obj xpsDict.obj >> >> xps.dll: $(MYOBJ) >> link /dll /def:xps.def /out:xps.dll fp10.obj $(SOFLAGS) $(LDFLAGS) >> $(GLIBS) *.obj >> TMLMath.obj: TMLMath.h TMLMath.cxx >> cl /I"$(ROOTSYS)/include" /MT /EHsc /Ox /D "MSVC" /D "WIN32" /c >> TMLMath.cxx >> >> TStat.obj: TStat.h TStat.cxx >> cl /I"$(ROOTSYS)/include" /MT /EHsc /Ox /D "MSVC" /D "WIN32" /c >> TStat.cxx >> StatUtils.obj: StatUtils.h StatUtils.cxx >> cl /I"$(ROOTSYS)/include" /MT /EHsc /Ox /D "MSVC" /D "WIN32" /c >> StatUtils.cxx >> xpsDict.cxx: $(MYHDR) xpsLinkDef.h >> @echo "Generating dictionary [EMAIL PROTECTED]" >> @rootcint -f $@ -c $(MYHDR) xpsLinkDef.h >> xpsDict.obj: xpsDict.cxx xpsDict.h >> cl /I"$(ROOTSYS)/include" /MT /EHsc /Ox /D "MSVC" /D "WIN32" /c >> xpsDict.cxx >> >> clean: >> rm -f $(MYOBJ) *.a *.d *.rc >> >> clobber: >> rm -f $(RLIB) $(MYOBJ) *.a *.d *.rc *.dll >> #------------------------------------------------------------------------------ >> >> >> >> Uncommenting "ROOTSYS = ${ROOTSYS}" results still in the >> self-reference error, but it works definitely with "ROOTSYS = C:\\root". >> >> I forgot to mention that I use the DOS command shell on WinXP to run >> "R CMD INSTALL". >> Could this be the problem? >> >> Thank you. >> Best regards >> Christian >> _._._._._._._._._._._._._._._._ >> C.h.i.s.t.i.a.n S.t.r.a.t.o.w.a >> V.i.e.n.n.a A.u.s.t.r.i.a >> _._._._._._._._._._._._._._._._ >> >> >> Prof Brian Ripley wrote: >>>> cl /Ic:\root/include /MT /EHsc /Ox /D "MSVC" /D "WIN32" /c TMLMath.cxx >>> >>> will AFAIK not work when passed to the shell used (which is ash), >>> and in any case will not work for paths with spaces in. >>> >>> You still haven't shown us the Makefile.win, but probably you need >>> >>> cl /I"${ROOTSYS}/include" /MT /EHsc /Ox /D MSVC /D WIN32 /c TMLMath.cxx >>> >>> >>> On Fri, 21 Mar 2008, cstrato wrote: >>> >>>> Dear Prof. Ripley >>>> >>>> Thank you for your fast reply and sorry for being not specific enough. >>>> >>>> My problem is that I need to use MS VC++ for the WinXP port of my >>>> package (xps at BioC): >>>> >>>> Here is my concrete problem and what I did: >>>> - installed MS Visual Studio Express 2008 >>>> - installed binary of ROOT framework compiled with VC++ (thus the >>>> need for VC++) >>>> - set ROOT environment variable: ROOTSYS=C:\root (the default >>>> install dir) >>>> - installed Rtools >>>> - installed binary of R-2.6.2 >>>> - created Makefile.win for VC++ which compiles my source code and >>>> includes ROOT libraries >>>> - created config.win to check for presence of VC++, ROOT, ROOTSYS >>>> >>>> Everything works fine, I can install my package on WinXP as long as >>>> "Makefile.win" contains the line "ROOTSYS=C:\\root" >>>> >>>> When I follow your suggestion "ROOTSYS=${ROOTSYS}" (which I tried >>>> already before) I get the following error: >>>> running src/Makefile.win ... >>>> Makefile.win:64: *** Recursive variable `ROOTSYS' references itself >>>> (eventually). Stop. >>>> make[2]: *** [srcDynlib] Error 2 >>>> make[1]: *** [all] Error 2 >>>> >>>> When I try "ROOTSYSX=${ROOTSYS}" I get the usual error: >>>> running src/Makefile.win ... >>>> cl /Ic:\root/include /MT /EHsc /Ox /D "MSVC" /D "WIN32" /c TMLMath.cxx >>>> Microsoft (R) 32-bit C/C++ Optimizing Compiler Version >>>> 15.00.21022.08 for 80x86 >>>> Copyright (C) Microsoft Corporation. All rights reserved. >>>> TMLMath.cxx >>>> TMLMath.cxx(51) : fatal error C1083: Cannot open include file: >>>> 'TMath.h': No such file or >>>> directory >>>> make[3]: *** [TMLMath.obj] Error 2 >>>> make[2]: *** [srcDynlib] Error 2 >>>> make[1]: *** [all] Error 2 >>>> >>>> As you see, everything works but this final problem. >>>> I have checked the examples in a couple of R packages, e.g. >>>> ROracle which also reqires VC++, but I could not find any solution >>>> to this last problem. >>>> Do you have some other ideas which I could test? >>>> >>>> Thank you. >>>> Best regards >>>> Christian >>>> _._._._._._._._._._._._._._._._ >>>> C.h.i.s.t.i.a.n S.t.r.a.t.o.w.a >>>> V.i.e.n.n.a A.u.s.t.r.i.a >>>> _._._._._._._._._._._._._._._._ >>>> >>>> >>>> Prof Brian Ripley wrote: >>>>> On Fri, 21 Mar 2008, cstrato wrote: >>>>> >>>>>> >>>>>> Dear all, >>>>>> >>>>>> When porting my package to WinXP I have the following problem: >>>>>> I need to create an environment variable "MYVAR=c:\mypath" which >>>>>> I have >>>>>> saved in the control panel "System->My Computer" (under the >>>>>> `Advanced' tab). >>>>>> >>>>>> I have two files which need to access MYVAR: config.win, >>>>>> Makefile.win >>>>>> >>>>>> While "config.win" does recognize MYVAR correctly, "Makefile.win" >>>>>> is not >>>>>> able to recognize MYVAR, when I do: >>>>>> "R CMD INSTALL mypkg". >>>>>> I need to add the line "MYVAR=C:\\mypath" to "Makefile.win" for >>>>>> "R CMD >>>>>> INSTALL" to work. >>>>>> >>>>>> Interestingly, when I "cd ./src" and call from the DOS command line: >>>>>> "NMAKE /f "Makefile.win" CFG="Release" >>>>>> then "Makefile.win" does recognize MYVAR correctly. >>>>>> >>>>>> Do you know what I need to do so that "Makefile.win" recognizes >>>>>> MYVAR? >>>>> >>>>> Well, how are you asking it to recognize it? (We do expect you to >>>>> provide enough details to avoid such questions.) $(MYVAR) is a >>>>> make variable, and ${MYVAR} is an environment variable. Quite >>>>> possibly >>>>> >>>>> MYVAR=${MYVAR} >>>>> >>>>> is all you need to add. >>>>> >>>>> BTW, there are dozens of examples in the packages on CRAN -- RGtk2 >>>>> is one. >>>>> And we strongly discourage the use of Makefile.win: Makevars.win >>>>> suffices for all but expert developers. >>>>> >>>>> >>>> >>> >> >
______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel