[MacPorts] #19397: scipy not completely universal

vincent habchi vince at macports.org
Mon May 4 08:35:22 PDT 2009


Le 23 avr. 09 à 09:37, MacPorts a écrit :

> #19397: scipy not completely universal
> ------------------------------------------- 
> +--------------------------------
> Reporter:  daweonline@…                   |       Owner:  jmr@…
>    Type:  defect                         |      Status:  new
> Priority:  Normal                         |   Milestone:  Port Bugs
> Component:  ports                          |     Version:  1.7.1
> Keywords:  scipy python universal binary  |        Port:  py26-scipy
> ------------------------------------------- 
> +--------------------------------
>
> Comment(by daweonline@…):
>
> I've done modifying this line
>
> 265             for arch in ["i686", "x86_64"]:
>
> in
>
> /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/ 
> python2.6
> /site-packages/numpy/distutils/fcompiler/gnu.py
>
> and installing without macports... It should be said this way used
> gfortran-4.2 downloaded here
>
> [http://www.maths.otago.ac.nz/~fonnesbeck/gfortran-4.2.3.dmg]

This version of gfortran is also available here : http://r.research.att.com/tools/

But the way it handles the command line is buggy. For example :

-> /usr/local/bin/gfortran -arch i386
i686-apple-darwin8-gfortran-4.2: no input files
-> /usr/local/bin/gfortran -arch i386 -arch x86_64
->

Strange, no? If two archs flags are present, there is no stderr output.

Here is a way to build a universal scipy with this compiler located  
in /usr/local/bin:

1. Add this file in the ${portpath} file directory, it wraps /usr/ 
local/bin/gfortran-4.2, fixes the bug above and another one in the  
building process (automatic addition of -arch i686 and -arch ppc;  
why ???):

-> more files/gf.in
#!/bin/sh

NOF=yes
IGNORE=no
ARGS=

for i in $@ ; do
  if [ $IGNORE == 'yes' ]; then
    IGNORE=no
  else
    if [ $i == '-arch' ]; then
      IGNORE=yes
    else
      ARGS=`echo $ARGS " " $i`
      if [ $i == '-o' ]; then
        NOF=no
      fi
    fi
  fi
done

if [ $NOF == 'yes' ]; then
  /usr/local/bin/gfortran-4.2 $@
else
  /usr/local/bin/gfortran-4.2 XXX $ARGS
fi

2. Add this variant to Portfile

variant gf42univ conflicts gcc42 gcc43 gcc44 description "Use  
gfortan-4.2 from http://r.research.att.com/tools to build universal  
binaries" {

  if {! [file exists /usr/local/bin/gfortran-4.2]} then {
     puts "> Please install gfortran universal from http://// 
r.research.att.com//tools//"
     exit 1
  }

  set fc_options "build_clib --fcompiler=gnu95 build_ext -- 
fcompiler=gnu95 config_fc --fcompiler=gnu95 \
		  --f77exec ${portpath}/files/gf --f90exec ${portpath}/files/gf"

  set uarch ""
  foreach arch ${universal_archs} {
  	append uarch "-arch " ${arch} " "
  }

  delete ${portpath}/files/gf
  copy ${portpath}/files/gf.in ${portpath}/files/gf
  reinplace "s|XXX|${uarch}|" ${portpath}/files/gf

  build.cmd-append      ${fc_options}
  destroot.cmd-append   ${fc_options}
}

Vincent



More information about the macports-dev mailing list