[Rd] Problem with Makefile.win and environment variable
cstrato
cstrato at aon.at
Fri Mar 21 19:14:32 CET 2008
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 $@..."
>> @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.
>>>>>
>>>>>
>>>>
>>>
>>
>
More information about the R-devel
mailing list