[Bioc-devel] portable make syntax
Martin Morgan
mtmorgan at fredhutch.org
Tue Jan 27 13:04:21 CET 2015
On 01/27/2015 02:58 AM, Gordon Brown wrote:
> Hi, Martin et al,
>
> At the risk of revealing myself to be an idiot in public... I just cannot get
> back ticks to work on an "include" line in a "Makevars" file.
>
> The file contains these lines:
> -----------------------------------------
> SAMVARS = `echo 'cat(system.file("usretc", .Platform[["r_arch"]],"Rsamtools.mk",
> package="Rsamtools", mustWork=TRUE))' | "$(R_HOME)/bin/R" --vanilla --slave`
> include $(SAMVARS)
> -----------------------------------------
> as shown in the Rsamtools "Using samtools C libraries with Rsamtools" document.
> But the "include" line is parsed by make, which ignores the back ticks, not by
> the shell, as seen in the following snippet:
Also it seems like include() is an extension too (though used in the R source)?
I guess the backtick example from R-exts implies variable use in the target,
where shell processing occurs, rather than in the Makefile. So perhaps something
like
SAMTOOLS_PATH=\
`echo 'cat(system.file("usrlib", .Platform[["r_arch"]],\
package="Rsamtools", mustWork=TRUE))' |\
"${R_HOME}/bin/R" --vanilla --slave`
PKG_LIBS="$(SAMTOOLS_PATH)/libbam.a" "$(SAMTOOLS_PATH)/libbcf.a"\
"$(SAMTOOLS_PATH)/libtabix.a" -lz -pthread
PKG_CPPFLAGS=-D_USE_KNETFILE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
(which removes a level of indirection provided by SAMVARS= / include $(SAMVARS))
is closer to best practice?
Martin
> -----------------------------------------------------------------
> uk-cri-lsrv10 ~/packages $ R CMD build DiffBind
> * checking for file 'DiffBind/DESCRIPTION' ... OK
> * preparing 'DiffBind':
> * checking DESCRIPTION meta-information ... OK
> * cleaning src
> * installing the package to build vignettes
> -----------------------------------
> * installing *source* package 'DiffBind' ...
> ** libs
> Makevars:2: `echo: No such file or directory
> Makevars:2: 'cat(system.file("usretc",: No such file or directory
> Makevars:2: .Platform[["r_arch"]],"Rsamtools.mk",: No such file or directory
> Makevars:2: package="Rsamtools",: No such file or directory
> Makevars:2: mustWork=TRUE))': No such file or directory
> Makevars:2: |: No such file or directory
> Makevars:2: "/usr/local/lib64/R/bin/R": No such file or directory
> Makevars:2: --vanilla: No such file or directory
> Makevars:2: --slave`: No such file or directory
> make: *** No rule to make target `--slave`'. Stop.
> ERROR: compilation failed for package 'DiffBind'
> * removing '/tmp/RtmpJaAJ8I/Rinst297e5010e355/DiffBind'
> -----------------------------------
> ERROR: package installation failed
> -----------------------------------------------------------------
> Reading through the make source code, there doesn't seem to be any attempt to
> evaluate the back tick-ed expression after macro expansion but before splitting
> into filenames, as seems clear from the errors above. Nor can I see any
> POSIX-compatible way to force evaluation of the expression (reading from this
> page: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html ). I
> see the same behaviour if I use an actual Makefile as opposed to Makevars.
>
> As you noted, I was indeed following the instructions in the Samtools docs... I
> must be doing something simple wrong, but just can't see it. Can you give me a
> hint as to what I should be doing differently?
>
> Thanks in advance,
>
> - Gord Brown
>
> Details:
> R v3.1.2, and also the latest devel version
> gnu make 3.81, 3.82, 4.1
> centos linux 6.6
>
> *
> *
>
>
> Message: 3
> Date: Fri, 23 Jan 2015 19:36:46 -0800
> From: Martin Morgan <mtmorgan at fredhutch.org <mailto:mtmorgan at fredhutch.org>>
> To: Michael Lawrence <lawrence.michael at gene.com
> <mailto:lawrence.michael at gene.com>>, Kevin Ushey
> <kevinushey at gmail.com <mailto:kevinushey at gmail.com>>
> Cc: bioc-devel <bioc-devel at stat.math.ethz.ch
> <mailto:bioc-devel at stat.math.ethz.ch>>
> Subject: Re: [Bioc-devel] portable make syntax
> Message-ID: <54C3134E.8080604 at fredhutch.org
> <mailto:54C3134E.8080604 at fredhutch.org>>
> Content-Type: text/plain; charset="utf-8"; format=flowed
>
> On 01/23/2015 06:22 PM, Michael Lawrence wrote:
>
> Here is a quote from Brian's email to CRAN maintainers:
>
> ------------
>
> The set of make programs in use for R is shifting (BSD make seems to
> be no longer in use by Apple or FreeBSD; dmake and pmake variants are
> appearing) and we have taken the POSIX standard as the baseline for
> portability.
>
> ------------
>
> It sounds like this is a CRAN-specific requirement. Bioc of course is
> left to make its own decision on make support.
>
>
> I think that most make files can be made to conform easily to POSIX standards,
> which seems in general like a good idea (Linux flavored packages build from
> source, so the compilers on the Bioc build machines are a poor guide to those
> encountered in the wild).
>
>
> If we absolutely need GNU Make, we can add this to DESCRIPTION:
>
> SystemRequirements: GNU make
>
>
> ...remembering that this merely quietens the note, and we would rather address
> the issue.
>
> I haven't looked at the build reports, but the it looks like the following
> (including several apparently following poorly worded instructions in
> Rsamtools;
> aargh) can be easily brought into conformance through use of ` rather than
> $(shell).
>
> $ ls */src/Makevars|xargs grep -l shell
> ArrayExpressHTS/src/Makevars
> ChemmineR/src/Makevars
> DiffBind/src/Makevars
> eiR/src/Makevars
> flipflop/src/Makevars
> mosaics/src/Makevars
> qrqc/src/Makevars
> QuasR/src/Makevars
> VariantAnnotation/src/Makevars
>
> Martin
>
>
> On Fri, Jan 23, 2015 at 6:13 PM, Kevin Ushey <kevinushey at gmail.com
> <mailto:kevinushey at gmail.com>> wrote:
>
> On Fri, Jan 23, 2015 at 5:18 PM, Dan Tenenbaum
> <dtenenba at fredhutch.org <mailto:dtenenba at fredhutch.org>> wrote:
>
>
>
> ----- Original Message -----
>
> From: "Kevin Ushey" <kevinushey at gmail.com
> <mailto:kevinushey at gmail.com>>
> To: "Laurent Gatto" <lg390 at cam.ac.uk <mailto:lg390 at cam.ac.uk>>
> Cc: "bioc-devel" <bioc-devel at stat.math.ethz.ch
> <mailto:bioc-devel at stat.math.ethz.ch>>
> Sent: Friday, January 23, 2015 4:58:40 PM
> Subject: Re: [Bioc-devel] portable make syntax
>
> If I understand correctly, all versions of `make` on the
> BioC build
> systems will support GNU extensions to Makefiles, and so it's
> probably
> not worth your time to make this 'portable' -- just add the
> SystemRequirements bit.
>
>
> BTW, the warning was added in recent versions of R-devel and I
> don't know why it was added.
> It could be that GNU extensions may not be supported in future
> versions of Rtools (the windows
> toolchain maintained by Duncan Murdoch). I really have no idea.
> But since a warning was added, it's probably a good idea to find
> out why rather than to ignore it. So it might be worth a note to
> R-devel asking about the intention of that warning.
>
> Dan
>
>
> Very unlikely -- I am really not sure of what the motivation is,
> beyond R wanting to support platforms with versions of make that do
> not support GNU extensions (whichever those might be... BSD make? AT&T
> make on Solaris? See:
> http://cran.r-project.org/doc/manuals/r-release/R-exts.html#FOOT51)
>
> I am guessing that the Windows toolchain will continue to be based off
> of MinGW + GCC for the foreseeable future, and hence will continue to
> allow GNU extensions. In fact, R-exts specifically prescribes GNU
> extensions for Windows makefiles -- from R-exts,
>
> Since the only viable make for Windows is GNU make, it is
> permissible to use GNU extensions in files Makevars.win or
> Makefile.win.
>
> so I really doubt Windows would ever foresake GNU extensions.
>
> Kevin
>
> However, you could work around this by (following R-exts at
> http://cran.r-project.org/doc/manuals/r-release/R-exts.html#Writing-portable-packages)
> wrapping your shell command in backticks, e.g.
>
> R_HOME=`if test -z ${R_HOME}; then ...; else ...; fi`
>
> or something to that effect.
>
> On Fri, Jan 23, 2015 at 4:05 PM, Laurent Gatto
> <lg390 at cam.ac.uk <mailto:lg390 at cam.ac.uk>>
> wrote:
>
>
> Dear all,
>
> I have been using the following in various
> vignettes/Makefile
>
> ifeq (${R_HOME},)
> R_HOME= $(shell R RHOME)
> endif
>
> This syntax is GNU specific and now results in warnings when
> checking
> the package:
>
> * checking for GNU extensions in Makefiles ... WARNING
> Found the following file(s) containing GNU extensions:
> vignettes/Makefile
> Portable Makefiles do not use GNU extensions such as +=, :=,
> $(shell),
> $(wildcard), ifeq ... endif. See section ?Writing portable
> packages? in
> the ?Writing R Extensions? manual.
>
> I couldn't find anything in R-exts; does anyone know a more
> portable
> syntax?
>
> Alternatively, I could add
>
> SystemRequirements: GNU make
>
> to my DESCRIPTION file, which however does not seem ideal.
>
> Any suggestions?
>
> Thank you very much in advance.
>
> Laurent
>
> _______________________________________________
> Bioc-devel at r-project.org
> <mailto:Bioc-devel at r-project.org> mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>
>
> _______________________________________________
> Bioc-devel at r-project.org <mailto:Bioc-devel at r-project.org>
> mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>
>
> _______________________________________________
> Bioc-devel at r-project.org <mailto:Bioc-devel at r-project.org> mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>
>
> _______________________________________________
> Bioc-devel at r-project.org <mailto:Bioc-devel at r-project.org> mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>
>
>
> --
> Computational Biology / Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N.
> PO Box 19024 Seattle, WA 98109
>
> Location: Arnold Building M1 B861
> Phone: (206) 667-2793
>
>
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> Bioc-devel mailing list
> Bioc-devel at r-project.org <mailto:Bioc-devel at r-project.org>
> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>
>
> ------------------------------
>
> End of Bioc-devel Digest, Vol 130, Issue 26
> *******************************************
>
--
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109
Location: Arnold Building M1 B861
Phone: (206) 667-2793
More information about the Bioc-devel
mailing list