[68322] trunk/dports/math/arpack/Portfile
mmoll at macports.org
mmoll at macports.org
Tue Jun 1 11:32:57 PDT 2010
Revision: 68322
http://trac.macports.org/changeset/68322
Author: mmoll at macports.org
Date: 2010-06-01 11:32:52 -0700 (Tue, 01 Jun 2010)
Log Message:
-----------
math/arpack: allow universal, shared libs. add gcc45 variant. closes #25066
Modified Paths:
--------------
trunk/dports/math/arpack/Portfile
Modified: trunk/dports/math/arpack/Portfile
===================================================================
--- trunk/dports/math/arpack/Portfile 2010-06-01 12:47:55 UTC (rev 68321)
+++ trunk/dports/math/arpack/Portfile 2010-06-01 18:32:52 UTC (rev 68322)
@@ -1,10 +1,11 @@
# $Id$
PortSystem 1.0
+PortGroup muniversal 1.0
name arpack
version 1
-revision 3
+revision 4
categories math
platforms darwin
maintainers mmoll
@@ -21,63 +22,164 @@
use_configure no
worksrcdir ARPACK
patchfiles patch-arpack.diff
-post-patch {
- if {[variant_isset g95]} {
- reinplace "s|-ff2c||" ${worksrcpath}/ARmake.inc
- }
-}
+
use_parallel_build no
-build.args all home=${worksrcpath}
-destroot {
- xinstall -m 644 -v -W ${worksrcpath} libarpack.a ${destroot}${prefix}/lib
+
+# Fortran compilers can not cross-compile
+if { ${os.arch}=="i386" } {
+ set universal_archs_supported "i386 x86_64"
+} else {
+ set universal_archs_supported "ppc ppc64"
}
-post-destroot {
- system "ranlib ${destroot}${prefix}/lib/libarpack.a"
+
+if { ! [variant_isset universal]} {
+ build.args-append home=${worksrcpath}
+ if { ${build_arch}=="x86_64" || ${build_arch}=="ppc64" } {
+ build.args-append FFLAGS='-O2 -m64'
+ } else {
+ build.args-append FFLAGS='-O2 -m32'
+ }
+} else {
+ foreach arch {x86_64 i386 ppc ppc64} {
+ set merger_build_args(${arch}) home=${worksrcpath}-${arch}
+ if { ${arch}=="x86_64" || ${arch}=="ppc64" } {
+ lappend merger_build_args(${arch}) FFLAGS='-O2 -m64'
+ } else {
+ lappend merger_build_args(${arch}) FFLAGS='-O2 -m32'
+ }
+ }
+
}
-variant gcc42 description {build with gfortran-mp-4.2} conflicts gcc43 gcc44 g95 {
- build.args-append FC=${prefix}/bin/gfortran-mp-4.2
+proc make_dylib { name lib_dir arch libs curVer } {
+ global destroot prefix gccnumber
+
+ set comVer [join [lrange [split ${curVer} '.'] 0 0] '.']
+
+ set cmd "\
+ /usr/bin/ld -arch ${arch} -dynamic -dylib -single_module -dead_strip \
+ -x -all_load -L. -L${prefix}/lib/gcc${gccnumber}/${arch} -L${prefix}/lib/gcc${gccnumber} -L${prefix}/lib \
+ -dylib_install_name ${prefix}/lib/lib${name}.${comVer}.dylib \
+ -current_version ${curVer} \
+ -compatibility_version ${comVer} \
+ lib${name}.a -o lib${name}.${curVer}.dylib ${libs}"
+
+ system "cd ${lib_dir} && ${cmd}"
+}
+
+pre-build {
+ build.args-append FC=${configure.fc} MAKE=${build.cmd}
+}
+
+post-build {
+ set curVer ${version}
+ set comVer [join [lrange [split ${version} '.'] 0 1 ] '.']
+
+ if { ![variant_isset universal] } {
+ set archs ${build_arch}
+ } else {
+ set archs ${universal_archs_to_use}
+ }
+
+ foreach arch ${archs} {
+ if { ![variant_isset universal] } {
+ set dir ${worksrcpath}
+ } else {
+ set dir ${worksrcpath}-${arch}
+ }
+
+ make_dylib arpack ${dir} ${arch} "-latlas -llapack -lgfortran -lSystem" ${version}
+
+ if { [variant_isset mpi] } {
+ make_dylib parpack ${dir} ${arch} "-llapack -lblas -lgfortran -lmpi_f77 -lSystem -larpack.1" ${version}
+ }
+ }
+}
+
+post-configure {
+ if { [variant_isset mpi] } {
+ set stlibs "libarpack.a libparpack.a"
+ set shlibs "libarpack.1.dylib libparpack.1.dylib"
+ } else {
+ set stlibs "libarpack.a"
+ set shlibs "libarpack.1.dylib"
+ }
+
+ if { ![variant_isset universal] } {
+ set fl [open ${worksrcpath}/Makefile "a"]
+ puts ${fl} "\n.PHONY install"
+ puts ${fl} "\t.install: ${stlibs} ${shlibs}"
+ foreach lib ${stlibs} {
+ puts ${fl} "\tinstall -m 644 -v ${lib}"
+ }
+ foreach lib ${shlibs} {
+ puts ${fl} "\tinstall -m 755 -v ${lib}"
+ }
+ close ${fl}
+ } else {
+ foreach arch ${universal_archs_to_use} {
+ set fl [open ${worksrcpath}-${arch}/Makefile "a"]
+ puts ${fl} "\n.PHONY: install"
+ puts ${fl} "install: ${stlibs} ${shlibs}"
+ foreach lib ${stlibs} {
+ puts ${fl} "\tinstall -m 644 -v ${lib} ${destroot}-${arch}${prefix}/lib"
+ }
+ foreach lib ${shlibs} {
+ puts ${fl} "\tinstall -m 755 -v ${lib} ${destroot}-${arch}${prefix}/lib"
+ }
+ close ${fl}
+ }
+ }
+}
+
+variant gcc42 description {build with gfortran-mp-4.2} conflicts gcc43 gcc44 gcc45 universal {
depends_build-append port:gcc42
+ configure.fc ${prefix}/bin/gfortran-mp-4.2
}
-variant gcc43 description {build with gfortran-mp-4.3} conflicts gcc42 gcc44 g95 {
- build.args-append FC=${prefix}/bin/gfortran-mp-4.3
+variant gcc43 description {build with gfortran-mp-4.3} conflicts gcc42 gcc44 gcc45 universal {
depends_build-append port:gcc43
+ configure.fc ${prefix}/bin/gfortran-mp-4.3
}
-variant gcc44 description {build with gfortran-mp-4.4} conflicts gcc42 gcc43 g95 {
- build.args-append FC=${prefix}/bin/gfortran-mp-4.4
+variant gcc44 description {build with gfortran-mp-4.4} conflicts gcc42 gcc43 gcc45 {
depends_build-append port:gcc44
+ configure.fc ${prefix}/bin/gfortran-mp-4.4
}
-variant g95 description {build with g95} conflicts gcc42 gcc43 gcc44 {
- build.args-append FC=${prefix}/bin/g95
- depends_build-append port:g95
+variant gcc45 description {build with gfortran-mp-4.5} conflicts gcc42 gcc43 gcc44 {
+ depends_build-append port:gcc44
+ configure.fc ${prefix}/bin/gfortran-mp-4.5
}
-variant mpi description {build PARPACK, the parallel eigenvalue solver library} {
+if { [variant_isset gcc42] } {
+ set gccversion 4.2
+} elseif { [variant_isset gcc43] } {
+ set gccversion 4.3
+} elseif { [variant_isset gcc44] } {
+ set gccversion 4.4
+} else {
+ set gccversion 4.5
+}
+set gccnumber [join [split ${gccversion} .] ""]
+
+variant mpi description {build PARPACK, the parallel eigenvalue solver library} conflicts universal {
distfiles-append parpack96.tar.gz ppatch.tar.gz
checksums-append parpack96.tar.gz md5 598d0453b938ccd99a078246be5927f3 \
ppatch.tar.gz md5 e6f0d70dd99f719c0efee351d0875c96
pre-fetch {
if {![file exists ${prefix}/bin/openmpif77]} {
- return -code error "Please install one of the following variants of the openmpi port: gcc42, gcc43, gcc44, g95."
+ return -code error "Please install one of the following variants of the openmpi port: gcc42, gcc43, gcc44, gcc45."
}
}
pre-build { foreach entry [glob -directory ${worksrcpath}/PARPACK */MPI/mpif.h] { delete $entry } }
+
depends_build port:openmpi
- build.args all FC=${prefix}/bin/openmpif77 home=${worksrcpath}
- destroot {
- xinstall -m 644 -v -W ${worksrcpath} libarpack.a libparpack.a ${destroot}${prefix}/lib
- }
- post-destroot {
- system "ranlib ${destroot}${prefix}/lib/libarpack.a"
- system "ranlib ${destroot}${prefix}/lib/libparpack.a"
- }
+ configure.fc ${prefix}/bin/openmpif77
}
-if { ![variant_isset gcc42] && ![variant_isset gcc43] && ![variant_isset gcc44] && ![variant_isset g95] } {
- default_variants +gcc43
+if { ![variant_isset gcc42] && ![variant_isset gcc43] && ![variant_isset gcc44] && ![variant_isset gcc45] } {
+ default_variants +gcc44
}
livecheck.type none
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20100601/89fe2a46/attachment.html>
More information about the macports-changes
mailing list