From ms6ep at cs.virginia.edu  Tue Mar  9 04:03:42 2010
From: ms6ep at cs.virginia.edu (Michael Spiegel)
Date: Mon, 8 Mar 2010 22:03:42 -0500
Subject: [Rd] (PR#14226) -- Re: libgfortran misplaced in Mac OS X R
	install
In-Reply-To: <alpine.LFD.2.00.1003041927500.11292@gannet.stats.ox.ac.uk>
References: <1901f69e1003030900v69b031feoab6828517af2255f@mail.gmail.com>
	<3214E67E-521A-49E7-A8FF-32EC723CA458@r-project.org>
	<alpine.LFD.2.00.1003041927500.11292@gannet.stats.ox.ac.uk>
Message-ID: <1901f69e1003081903p24eaae4t863f49ce64f03b2f@mail.gmail.com>

Thank you both for the advice.  It sounds like we have a solution for
our next binary release of the beta package.

--Michael

On Thu, Mar 4, 2010 at 2:44 PM, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:
> Another possibility is to link statically to libgfortran. ?That has pros and
> cons, but for libgfortran not many cons apart from space for multiple copies
> in sundry packages (and is what is done on Windows, BTW).
>
> There are several ways to arrange that. ?As far as I recall I temporarily
> removed /usr/local/lib/libgfortran*.dylib: another way is to edit FLIBS in
> Makeconf (but then you do need to know which copies of that file you need to
> edit).
>
> As far as I know we don't document in the standard manuals how to build
> distributable binary Mac packages, and perhaps we should do so in due course
> (or at least point at where the information can be found).
>
> On Thu, 4 Mar 2010, Simon Urbanek wrote:
>
>> Hi Michael,
>>
>> On Mar 3, 2010, at 12:01 , Michael Spiegel wrote:
>>
>>> I am the guy who compiles the OpenMx binaries. ?We would be delighted to
>>> place our package on CRAN, once the project is stable enough so that we are
>>> comfortable releasing it to the larger public. ?Let's try to track down
>>> where I made a mistake. ?Our Makevars.in file contains the line:
>>>
>>> PKG_LIBS=$(FLIBS) $(BLAS_LIBS) $(LAPACK_LIBS)
>>>
>>> In addition, on the build machine I noticed that a copy of
>>> libgfortran.2.dylib exists at /usr/local/lib. ?I believe the Xcode install
>>> placed a copy of it there.
>>
>> No, it is part of the GNU Fortran installation. Anything you compile with
>> a Fortran requires that you have that Fortran installed at run time, because
>> Fortran uses its own run-time libraries (if the Fortran you compiled with
>> used dynamic libraries). This implies that if you distribute your package
>> you have to tell users to install the same Fortran you used to compile it.
>>
>> However, unlike other unices Mac users don't necessarily have development
>> tools installed, so on CRAN we make an effort to modify the binaries such
>> that they work even without the tools they have been compiled with. There
>> are several possible approaches, but since R itself already uses the same
>> Fortran, we ship a copy of the Fortran libraries inside R and modify
>> packages such that they use it instead of the one from dev tools (see below
>> for details).
>>
>>
>>> To create the binary release, I run ?R CMD INSTALL --build.
>>
>> That is not sufficient to create a binary of your package, because it
>> contains a configure script (this is unrelated to the above - see R-admin
>> 2.6). What you want to use is something like this (assuming R 2.10.1 Leopard
>> build and Fortran from CRAN):
>>
>> R --arch=i386 CMD INSTALL OpenMx_0.2.9-1147.tar.gz
>> R --arch=x86_64 CMD INSTALL --libs-only OpenMx_0.2.9-1147.tar.gz
>> R --arch=ppc CMD INSTALL --libs-only OpenMx_0.2.9-1147.tar.gz
>> cd /Library/Frameworks/R.framework/Versions/2.10/Resources/library
>>
>> # fix the Fortran paths to point to R 2.10 instead
>> for lib in `ls OpenMx/libs/*/*.so`; do
>> install_name_tool -change /usr/local/lib/libgfortran.2.dylib \
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libgfortran.2.dylib
>> \
>> ?$lib
>> done
>>
>> # change permissions for distribution
>> sudo chown -Rh root:admin OpenMx
>> sudo chmod -R g+w OpenMx
>>
>> # pack it up
>> tar fvcz ~/OpenMx_0.2.9-1147.tgz OpenMx
>>
>>
>> You can check that you have the correct paths using otool -L:
>>
>> ginaz:library$ otool -L OpenMx/libs/*/*.so
>> OpenMx/libs/i386/OpenMx.so:
>> ? ? ? ?OpenMx.so (compatibility version 0.0.0, current version 0.0.0)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libgfortran.2.dylib
>> (compatibility version 3.0.0, current version 3.0.0)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libRblas.dylib
>> (compatibility version 0.0.0, current version 0.0.0)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libRlapack.dylib
>> (compatibility version 2.10.0, current version 2.10.1)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libR.dylib
>> (compatibility version 2.10.0, current version 2.10.1)
>>
>> ?/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
>> (compatibility version 150.0.0, current version 476.19.0)
>> ? ? ? ?/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current
>> version 1.0.0)
>> ? ? ? ?/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
>> version 111.1.4)
>> ? ? ? ?/System/Library/Frameworks/vecLib.framework/Versions/A/vecLib
>> (compatibility version 1.0.0, current version 242.0.0)
>> OpenMx/libs/ppc/OpenMx.so:
>> ? ? ? ?OpenMx.so (compatibility version 0.0.0, current version 0.0.0)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libgfortran.2.dylib
>> (compatibility version 3.0.0, current version 3.0.0)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libRblas.dylib
>> (compatibility version 0.0.0, current version 0.0.0)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libRlapack.dylib
>> (compatibility version 2.10.0, current version 2.10.1)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libR.dylib
>> (compatibility version 2.10.0, current version 2.10.1)
>>
>> ?/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
>> (compatibility version 150.0.0, current version 476.19.0)
>> ? ? ? ?/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current
>> version 1.0.0)
>> ? ? ? ?/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
>> version 111.1.4)
>> ? ? ? ?/System/Library/Frameworks/vecLib.framework/Versions/A/vecLib
>> (compatibility version 1.0.0, current version 242.0.0)
>> OpenMx/libs/x86_64/OpenMx.so:
>> ? ? ? ?OpenMx.so (compatibility version 0.0.0, current version 0.0.0)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libgfortran.2.dylib
>> (compatibility version 3.0.0, current version 3.0.0)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libRblas.dylib
>> (compatibility version 0.0.0, current version 0.0.0)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libRlapack.dylib
>> (compatibility version 2.10.0, current version 2.10.1)
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libR.dylib
>> (compatibility version 2.10.0, current version 2.10.1)
>>
>> ?/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
>> (compatibility version 150.0.0, current version 476.19.0)
>> ? ? ? ?/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current
>> version 1.0.0)
>> ? ? ? ?/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
>> version 111.1.4)
>> ? ? ? ?/System/Library/Frameworks/vecLib.framework/Versions/A/vecLib
>> (compatibility version 1.0.0, current version 242.0.0)
>>
>>
>> If you are dealing with only one R version, you can change the ID of your
>> Fortran library instead of touching the package files:
>>
>> install_name_tool -id \
>>
>> ?/Library/Frameworks/R.framework/Versions/2.10/Resources/lib/libgfortran.2.dylib
>> /usr/local/lib/libgfortran.2.0.0.dylib
>>
>> Note, however, that this will lead to (possibly silent) errors if you
>> forget to change it when switching to another R version, so I prefer to fix
>> the package instead.
>>
>> Cheers,
>> Simon
>>
>>
>>> The beta test users install the package using the following script:
>>> http://openmx.psyc.virginia.edu/getOpenMx.R.
>>>
>>
>>
>>
>>>
>>> On Wed, Mar 3, 2010 at 9:48 AM, Tim Brick <tbrick at virginia.edu> wrote:
>>>>
>>>>
>>>>> From: Simon Urbanek <simon.urbanek at r-project.org>
>>>>> Date: March 3, 2010 8:32:52 AM MST
>>>>> To: tbrick at virginia.edu
>>>>> Cc: r-devel at stat.math.ethz.ch, R-bugs at r-project.org
>>>>> Subject: Re: [Rd] libgfortran misplaced in Mac OS X R install
>>>>> (PR#14226)
>>>>>
>>>>> This is not an R bug so please don't abuse R-bugs. It is likely a bug
>>>>> in the way OpenMx binaries are distributed by someone (you didn't even say
>>>>> where you got them from) - OpenMx is not even on CRAN so take that to
>>>>> whoever gave you the binaries. On CRAN we use the correct paths.
>>>>>
>>>>> Cheers,
>>>>> Simon
>>>>>
>>>>>
>>>>> On Mar 2, 2010, at 11:45 , tbrick at virginia.edu wrote:
>>>>>
>>>>>> Full_Name: Timothy Brick
>>>>>> Version: 2.10
>>>>>> OS: Mac OS X (seen on both 10.6 and 10.5)
>>>>>> Submission from: (NULL) (63.255.24.5)
>>>>>>
>>>>>>
>>>>>> When using install.packages in R on Mac OS X, packages that require
>>>>>> gfortran
>>>>>> throws an error (Example below from installation of OpenMx package):
>>>>>>
>>>>>> Loading required package: OpenMx
>>>>>> Error in dyn.load(file, DLLpath = DLLpath, ...) :
>>>>>> unable to load shared library
>>>>>>
>>>>>> '/Library/Frameworks/R.framework/Resources/library/OpenMx/libs/i386/OpenMx.so':
>>>>>>
>>>>>> dlopen(/Library/Frameworks/R.framework/Resources/library/OpenMx/libs/i386/OpenMx.so,
>>>>>> 6): Library not loaded: /usr/local/lib/libgfortran.2.dylib
>>>>>> Referenced from:
>>>>>> /Library/Frameworks/R.framework/Resources/library/OpenMx/libs/i386/OpenMx.so
>>>>>> Reason: image not found
>>>>>>
>>>>>> libgfortran.2.dylib does exist, but in
>>>>>>
>>>>>> /Library/Frameworks/R.framework/Versions/2.10/Resouces/lib/libgfortran.2.dylib
>>>>>> (or /2.9/, depending on version installed).
>>>>>>
>>>>>> A workaround at present involves creating a symbolic link from the
>>>>>> above file to
>>>>>> /usr/local/lib/libgfortran.2.dylib, however this requires sudo access
>>>>>> and is
>>>>>> confusing for novice users.
>>>>>>
>>>>>> There is more discussion of this bug as it relates to OpenMx at:
>>>>>> http://openmx.psyc.virginia.edu/thread/316
>>>>>>
>>>>>> Posts on other forums indicate a similar issue with other packages
>>>>>> including
>>>>>> vegan and lme4:
>>>>>>
>>>>>> http://r-forge.r-project.org/forum/forum.php?thread_id=728&forum_id=194
>>>>>> https://stat.ethz.ch/pipermail/r-sig-mac/2009-May/006210.html
>>>>>>
>>>>>
>>>>> Those are very old posts and those were temporary issues in the CRAN
>>>>> build system that have been promptly resolved.
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>>
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> --
> Brian D. Ripley, ? ? ? ? ? ? ? ? ?ripley at stats.ox.ac.uk
> 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
>



[Rd] (PR#14226) -- Re: libgfortran misplaced in Mac OS X R install
Michael Spiegel