Thanks Prof. Ripley. I did see your post about installing XCode 4.6 & 5 but incorrectly assumed that it would be better to compile and build packages with the latest version of XCode 5 (September 2013) rather than install the old compilers. Hence the interest in auto-detecting and specifying the currently installed compiler during package build time. However, I did not realize the potential problems that could occur if R and package binaries were built using different compilers - thank you Kasper for alerting me :)
I also did see this portion in the R-admin manual: http://cran.r-project.org/doc/manuals/r-patched/R-admin.html#OS-X-packages I think I just expected that if you could set the value of CXX in ~/.R/Makevars, that you would also be able to set the value of CXX in the package-specific Makevars (src/Makevars) file as well. I have not be able to do this successfully but I suppose this is probably by design. Cheers, -Rob On Oct 9, 2013, at 1:03 AM, Prof Brian Ripley <[email protected]> wrote: > This is documented in the current manuals: please read them. I posted how to > get the compilers used for the CRAN binary, on this list when Xcode 5 was > released (it is for Mountain Lion only): > > https://stat.ethz.ch/pipermail/r-sig-mac/2013-September/010327.html > > Otherwise see e.g. > http://cran.r-project.org/doc/manuals/r-patched/R-admin.html#OS-X-packages . > > > On 09/10/2013 08:07, Robert Bruggner wrote: >> Hi Kasper, >> >> Thank you very much for your reply. >> >> Just to clarify, the situation I'm describing is one in which a user has >> downloaded XCode 5 and installed the command line tools so that they can, in >> theory, compile and install packages from source. However, the compiler >> supplied by XCode5 (Apple LLVM 5.0) is different from the one specified in >> the R 3.0.2 binary Makeconf file (llvm-g++4.2) and hence, despite having an >> installed compiler, they cannot build packages because R attempts to use >> llvm-g++4.2 (which does not exist, even with the XCode command line tools >> installed). I don't know if this is a big problem but I suspect that any Mac >> OS X user who now starts with a fresh install binary install of R and XCode5 >> command line tools will not be able to build and install C/C++ packages from >> source without first modifying the Makeconf file (or ~/.R/Makeconf) to point >> to the new compiler supplied by XCode5. >> >> What I was hoping to use configure for was to detect the compiler (Apple >> LLVM 5.0) that is now distributed with XCode5 and thus, enable users to >> compile packages from source after they'd installed the XCode command line >> tools. However, I don't think I appreciated the problems with compiling a >> package with a compiler different from that which was used to build the R >> binary - thank you for that info. Does that mean that the only good option >> is to submit the package to CRAN so it can be compiled into a binary with >> the same compiler that's used to build the Mac OS X R binary distribution? >> >> Thank you again for all your help! >> >> Cheers, >> >> -Rob >> >> >> On Oct 8, 2013, at 5:57 PM, Kasper Daniel Hansen >> <[email protected]> wrote: >> >>> Rob, >>> >>> What you should do, is _always_ inherit the compiler which was used to >>> build R. That is the 'Right' way to go and it is what will happen per >>> default if you are using Makevars to compile you package. If you need to >>> use configure, there are hints in R-exts and we can help more specifically, >>> preferably you have a package somewhere. This way you do not run into >>> (weird) problems which can arise when you use different compilers for R and >>> your package. >>> >>> The issue you are seeing right now on the Mac is that some users will not >>> be able to compile packages from source using their system. For most >>> users, if you distribute your package via CRAN / Bioconductor they will >>> have the option of receiving a binary version of the package and therefore >>> do not need a C++ compiler. In addition, even if you want them to install >>> from source, using a configure script will (most likely) not really help at >>> all - if they don't have the Xcode supplied compiler, they are extremely >>> unlikely to have any other compiler installed on their system. And really, >>> if a user is using the CRAN binary of R and wants to install a package from >>> source, it is really their responsibility to setup their system to do so. >>> In summary, I don't think you will help anyone with a configure step trying >>> to locate an alternative compiler. >>> >>> Finally, you can get the Xcode compiler by starting up Xcode, go to >>> preferences -> Downloads and then click on "install command line tools". >>> It is irritating you have to do this, but that is the situation. >>> >>> Best, >>> Kasper >>> >>> >>> On Tue, Oct 8, 2013 at 3:00 PM, Robert Bruggner <[email protected]> wrote: >>> Hi all, >>> >>> I'm developing a package that needs to be compiled on installation but am >>> unsure how to ensure that the proper C++ compiler is invoked when >>> installing this package from source. Is there anyway to, at build time, >>> auto-detect and set the available compiler using configure / Makevars? >>> >>> More specifically, I'm using the CRAN-provided binary of R 3.02 running on >>> Mac OS 10.8.5 with XCode 5 installed. By default, the Makeconf included >>> with the R installation ($RHOME/Resources/Makeconf) has CXX set as: >>> >>> CXX = llvm-g++-4.2 -arch x86_64 >>> >>> However, as llvm-g++-4.2 is no longer distributed with XCode5, package >>> installation fails when I attempt to install from source with an expected >>> "llvm-g++-4.2: command not found" message. >>> >>> I see that one solution is to manually set CXX in the ~/.R/Makevars file. >>> However, I'm wondering if it's possible to have the combination of a >>> configure script / Makevars.in automatically detect and set the CXX >>> variable upon installation. >>> >>> As I have it specified currently, my configure.ac script use the >>> AC_PROG_CXX macro to detect and set CXX. >>> https://github.com/nolanlab/Rclusterpp/blob/dev/configure.ac >>> >>> Then, in my Makevars.in, I attempt to specify the value of CXX detected by >>> the configure script >>> https://github.com/nolanlab/Rclusterpp/blob/dev/src/Makevars.in >>> >>> I can then run the configure script manually and, in the produced Makevars >>> file, it appears to detect and set CXX to the proper complier, i.e.: >>> >>> CXX=g++ -arch x86_64 >>> >>> However, when I then try and install the package, it seems to default back >>> to the using llvm-g++-4.2 as the compiler and thus, installation fails. >>> >>> I of course could be approaching this in completely the wrong way. Any >>> suggestions on how I might be able to auto-detect and set the appropriate >>> compiler at build time? >>> >>> -Rob >>> >>> _______________________________________________ >>> R-SIG-Mac mailing list >>> [email protected] >>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac >>> >> >> >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> R-SIG-Mac mailing list >> [email protected] >> https://stat.ethz.ch/mailman/listinfo/r-sig-mac >> > > > -- > Brian D. Ripley, [email protected] > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) > 1 South Parks Road, +44 1865 272866 (PA) > Oxford OX1 3TG, UK Fax: +44 1865 272595 _______________________________________________ R-SIG-Mac mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-sig-mac
