[Phylobase-devl] New phylobase build approach using static libncl (Was: Rcpp and OS X compiliation)

François Michonneau francois.michonneau at gmail.com
Sat Jan 30 22:59:29 CET 2010


Thanks Dirk!

Also, now we can remove the Rcpp folder in pkg/src, right?

  -- François

On Sat, Jan 30, 2010 at 16:54, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> (previous attempt failed as over 40kb -- here is an edited version)
>
> Hi all,
>
> I was being busy with Rcpp, and I just this minute pushed Rcpp_0.7.4 -- with
> the final fix for OS X builds -- to CRAN and Debian.  So back to phylobase.
>
> On 30 January 2010 at 15:47, Peter Cowan wrote:
> | Thanks Dirk, Mark, Romain, Simon and others who have worked on this. Getting this fixed has been on my wish list for a long time, but well beyond my abilities.
> |
> | I recently found some time to attempt building phylobase on my mac (10.6.2) w/ 64bit R 2.10.1 and phylobase r725.  I haven't been able to compile the package, it looks like it might be a configure issue, any suggestions for what I should look into changing?
> |
> | Peter
> |
> | a directory
> | * installing to library ‘/Library/Frameworks/R.framework/Resources/library’
> | * created lock directory ‘/Library/Frameworks/R.framework/Resources/library/00LOCK’
> | * build_help_types=
> | * DBG: R CMD INSTALL' now doing do_install
> | * installing *source* package ‘phylobase’ ...
> | ** backing up earlier installation
> | configure command: ‘ ./configure ’
> | checking whether the C++ compiler works... yes
> |  checking for C++ compiler default output file name... a.out
> |  checking for suffix of executables...
> |  checking whether we are cross compiling... no
> |  checking for suffix of object files... o
> |  checking whether we are using the GNU C++ compiler... yes
> |  checking whether g++-4.2 -arch x86_64 accepts -g... yes
> |  checking how to run the C++ preprocessor... g++-4.2 -arch x86_64 -E
> |  checking for R... yes
> |  checking for Rscript... yes
> |  configure: starting to build libncl.a in ncl
>
> All good so far. The previous line is my addition to configure.  What follows
> are error when configure is running --> from the top of my head I say NCL is
> broken if it lets its configure do this.
>
> | ./configure: line 620: test: too many arguments
> [...]
> | ./configure: line 19691: sed: No such file or directory
>
> But then it proceeds. Weird.  Also, for what it is worth, I do NOT get this
> noise on Linux. Maybe your configure does not respond to '--quiet' ?  That
> ball is in the OS X crowd's court.
>
> |  make  all-recursive
> [...]
> |  libtool: link: ( cd ".libs" && rm -f "libncl.la" && ln -s "../libncl.la"  "libncl.la" )
>
> Ok so far for 'make'.
>
> |  Making all in example
> [...]
> |  libtool: install: ranlib /private/tmp/tmpIdDKYW/src/ncl/../lib/ncl/libncl.a
>
> This is what matters: We get libncl.a out of this. Success so far.
>
> | ranlib: file: /private/tmp/tmpIdDKYW/src/ncl/../lib/ncl/libncl.a(nxsdistancedatum.o) has no symbols
> |  ----------------------------------------------------------------------
> |  Libraries have been installed in:
> |     /private/tmp/tmpIdDKYW/src/ncl/../lib/ncl
> |
> |  If you ever happen to want to link against installed libraries
> |  in a given directory, LIBDIR, you must either use libtool, and
> |  specify the full pathname of the library, or use the `-LLIBDIR'
> |  flag during linking and do at least one of the following:
> |     - add LIBDIR to the `DYLD_LIBRARY_PATH' environment variable
> |       during execution
> |
> |  See any operating system documentation about shared libraries for
> |  more information, such as the ld(1) and ld.so(8) manual pages.
> |  ----------------------------------------------------------------------
>
> I get this line noise too. Seem harmless.
>
> |  test -z "/private/tmp/tmpIdDKYW/src/ncl/../include/ncl" || ../config/install-sh -c -d "/private/tmp/tmpIdDKYW/src/ncl/../include/ncl"
> [...]
> | about to run R CMD SHLIB -o phylobase.so NCLInterface.cpp ReadWithNCL.cpp ancestors.c descendants.c phyloXX.c reorderBinary.c reorderRobust.c
> |  g++-4.2 -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64  -I/usr/local/include   -I/Library/Frameworks/R.framework/Resources/library/Rcpp/lib/x86_64 -Iinclude/ncl -fPIC  -mtune=core2 -g -O2 -c NCLInterface.cpp -o NCLInterface.o
>
> This has -Iinclude/ncl, maybe we need -Iinclude now ?
>
> [ Starting to build at my end ]  Yes, fails for me too.
>
> Fix is easy -- it was an intersection of my change to configure and the update
> to a newer NCL and we simply needed our two phylobase files to do
>
>   #include <ncl/ncl.h>
>
> instead of
>
>   #include <ncl.h>
>
> as everything else in NCL-land includes via  #include <ncl/somefile.h>
>
> for good measure I also silenced the build output from
> NCL via a  'make 2>&1 > /dev/null'
>
> For what it is worth, on my end it is now simply these 40-some lines:
>
> edd at ron:~/svn/phylobase/pkg$ R CMD INSTALL .
> * installing to library ‘/usr/local/lib/R/site-library’
> * installing *source* package ‘phylobase’ ...
> checking whether the C++ compiler works... yes
> checking for C++ compiler default output file name... a.out
> checking for suffix of executables...
> checking whether we are cross compiling... no
> checking for suffix of object files... o
> checking whether we are using the GNU C++ compiler... yes
> checking whether g++ accepts -g... yes
> checking how to run the C++ preprocessor... g++ -E
> checking for R... yes
> checking for Rscript... yes
> configure: starting to build libncl.a in src/ncl
> configure: finished building libncl.a in src/ncl
> configure: creating ./config.status
> config.status: creating src/Makevars
> ** libs
> g++ -I/usr/share/R/include     -I/usr/local/lib/R/site-library/Rcpp/lib -Iinclude -fpic  -g -O3 -Wall -pipe -c NCLInterface.cpp -o NCLInterface.o
> In file included from include/ncl/ncl.h:102,
>                 from NCLInterface.cpp:25:
> include/ncl/nxscharactersblock.h: In member function ‘int NxsDiscreteDatatypeMapper::GetStateCodeStored(char) const’:
> include/ncl/nxscharactersblock.h:929: warning: array subscript has type ‘char’
> g++ -I/usr/share/R/include     -I/usr/local/lib/R/site-library/Rcpp/lib -Iinclude -fpic  -g -O3 -Wall -pipe -c ReadWithNCL.cpp -o ReadWithNCL.o
> In file included from include/ncl/ncl.h:102,
>                 from ReadWithNCL.cpp:38:
> include/ncl/nxscharactersblock.h: In member function ‘int NxsDiscreteDatatypeMapper::GetStateCodeStored(char) const’:
> include/ncl/nxscharactersblock.h:929: warning: array subscript has type ‘char’
> gcc -std=gnu99 -I/usr/share/R/include      -fpic  -g -O3 -Wall -pipe -c ancestors.c -o ancestors.o
> gcc -std=gnu99 -I/usr/share/R/include      -fpic  -g -O3 -Wall -pipe -c descendants.c -o descendants.o
> gcc -std=gnu99 -I/usr/share/R/include      -fpic  -g -O3 -Wall -pipe -c phyloXX.c -o phyloXX.o
> gcc -std=gnu99 -I/usr/share/R/include      -fpic  -g -O3 -Wall -pipe -c reorderBinary.c -o reorderBinary.o
> gcc -std=gnu99 -I/usr/share/R/include      -fpic  -g -O3 -Wall -pipe -c reorderRobust.c -o reorderRobust.o
> g++ -shared -o phylobase.so NCLInterface.o ReadWithNCL.o ancestors.o descendants.o phyloXX.o reorderBinary.o reorderRobust.o -L/usr/local/lib/R/site-library/Rcpp/lib -lRcpp -Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib -Llib/ncl -lncl -L/usr/lib/R/lib -lR
> ** R
> ** data
> ** inst
> ** preparing package for lazy loading
> Creating a new generic function for "plot" in "phylobase"
> ** help
> *** installing help indices
> ** building package indices ...
> * DONE (phylobase)
> edd at ron:~/svn/phylobase/pkg$
>
> Looks better :)  [ And on OS X you will not see the -Wl,rpath,... as Rcpp
> uses a static lib ]
>
> Fix committed as rev726.  Feedback welcome.
>
> Dirk
>
> --
> Three out of two people have difficulties with fractions.
> _______________________________________________
> Phylobase-devl mailing list
> Phylobase-devl at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/phylobase-devl
>


More information about the Phylobase-devl mailing list