holzer@stat.math.ethz.ch
2001-Mar-26 13:32 UTC
[Rd] Problems with R CMD COMPILE within Makefile (PR#885)
Dear R-developpers This concerns a problem I posted about half a year ago on the R-help list and to which I got some answer by Duncan Temple Lang (see below), but the basic problem still continues. Even though I managed a workaround which is sufficient for me Martin Maechler asked me to send a toy example of the problem to R-bugs. So that's what I try here. The following Makefile will not work: ---------------------------------------- .PHONY: tst.o tst.o: tst.c R CMD COMPILE tst.c ---------------------------------------- It results in: ---------------------------------------- cd /u/holzer/CurrentWork/algen/C/temp/ make R CMD COMPILE tst.c make[1]: Entering directory `/users/u1/staff/holzer/CurrentWork/algen/C/temp' R CMD COMPILE tst.c make[2]: Entering directory `/users/u1/staff/holzer/CurrentWork/algen/C/temp' make[2]: *** No rule to make target `w'. Stop. make[2]: Leaving directory `/users/u1/staff/holzer/CurrentWork/algen/C/temp' make[1]: *** [tst.o] Error 2 make[1]: Leaving directory `/users/u1/staff/holzer/CurrentWork/algen/C/temp' make: *** [tst.o] Error 2 Compilation exited abnormally with code 2 at Mon Mar 26 15:10:07 ---------------------------------------- The following alternative ends in an infinite loop: ---------------------------------------- .PHONY: tst.o tst.o: tst.c MAKEFLAGS="CFLAGS=" R CMD COMPILE tst.c ---------------------------------------- ---------------------------------------- cd /u/holzer/CurrentWork/algen/C/temp/ make MAKEFLAGS="CFLAGS=" R CMD COMPILE tst.c make[1]: Entering directory `/users/u1/staff/holzer/CurrentWork/algen/C/temp' MAKEFLAGS="CFLAGS=" R CMD COMPILE tst.c make[2]: Entering directory `/users/u1/staff/holzer/CurrentWork/algen/C/temp' MAKEFLAGS="CFLAGS=" R CMD COMPILE tst.c make[3]: Entering directory `/users/u1/staff/holzer/CurrentWork/algen/C/temp' MAKEFLAGS="CFLAGS=" R CMD COMPILE tst.c make[4]: Entering directory `/users/u1/staff/holzer/CurrentWork/algen/C/temp' ... ---------------------------------------- (My workaround consists in using R SHLIB instead of R COMPILE (which works perfectly) and removing the files that disturb or that I don't need.) I work under Linux. tst.c consists just of one line: int x() {return(1);} platform i686-pc-linux-gnu arch i686 os linux-gnu system i686, linux-gnu status major 1 minor 2.2 year 2001 month 02 day 26 language R Here is Duncan's answer:>> I took a quick look at the R COMPILE problem and it seems that there >> are in fact two problems. One is the problem with the attempt to >> build a target `w'. And the other is that if that error didn't arise, >> you would have an infinite loop. >> >> Here is quick fix to your problem. Add the line >> >> include $(R_HOME)/etc/Makeconf >> >> to your Makefile. Then, make will compile imageio.o with the correct flags. >> >> eyore[RCompile-174]>make >> gcc -I/home2/FlowData/AltProjects/R-shared//include -I/usr/local/include -mieee-fp -D__NO_MATH_INLINES -fPIC -g -O2 -c imageio.c -o imageio.o >> >> >> That should be enough to get things working. The more detailed >> explanation is as follows. >> >> a) The rule >> imageio.o: imageio.c >> R COMPILE imageio.c >> >> is executed by the first call to make. >> The COMPILE script expands this to call >> >> make -f $R_HOME/etc/Makeconf -f Makefile imageio.o >> >> At this point, this second make process sees the same rule, and does >> the same thing. Hence, you have infinite recursion. >> >> >> >> b) The problem about the target `w' is a problem resulting from the R >> COMPILE script being called recursively from a make process. The >> second make process getting called via the COMPILE script is getting >> the value of the make variable MAKEFLAG from the top-level make you >> executed manually. This is implicitly set to w (meaning to print >> directory information before and after the makefile is "executed") >> and not -w. At this point, I am not certain whether this is an >> R oversight or a GNU make bug.Peter ____________________________________________________________ Peter Holzer phone: + 41 1 632 46 34 Seminar fuer Statistik, LEO C14 fax: + 41 1 632 12 28 (Leonhardstr. 27) <holzer@stat.math.ethz.ch> ETH (Federal Inst. Technology) 8092 Zurich http://stat.ethz.ch/~holzer/ -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Kurt Hornik
2001-Apr-08 14:34 UTC
[Rd] Problems with R CMD COMPILE within Makefile (PR#885)
>>>>> holzer writes:> Dear R-developpers> This concerns a problem I posted about half a year ago on the R-help > list and to which I got some answer by Duncan Temple Lang (see below), > but the basic problem still continues. Even though I managed a > workaround which is sufficient for me Martin Maechler asked me to send > a toy example of the problem to R-bugs. So that's what I try here.> The following Makefile will not work: > ---------------------------------------- > .PHONY: tst.o> tst.o: tst.c > R CMD COMPILE tst.c > ----------------------------------------> ...I am not sure this is a bug: R CMD COMPILE is not documented to work when called from inside a Makefile. Currently, R CMD COMPILE calls Make based on information in Makevars if this exists R_HOME/etc/Makeconf Makefile if this exists Conversely, R CMD SHLIB only uses Makevars but not Makefile. As R CMD COMPILE is not documented to use a Makefile in the local dir, I would propose to fix the problem by eliminating if test -r Makefile; then makefiles="${makefiles} -f Makefile" fi from the COMPILE script. There is a more general problem, though. We read Makevars before the default configuration from R_HOME/etc/Makeconf. This is to ensure that the PKG_* variables are set when the ALL_* variables are expanded. But unfortunately this has the effect that global settings override the local ones. Is it safe to assume that we can reverse the order with all versions of Make around? -k -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._