summaryrefslogtreecommitdiffstats
path: root/packaging/macosx/ports/python
diff options
context:
space:
mode:
authorsu_v <suv-sf@users.sourceforge.net>2015-01-04 21:12:37 +0000
committer~suv <suv-sf@users.sourceforge.net>2015-01-04 21:12:37 +0000
commit33ce97544f661ed43923ed0ab32f28c4bad97f26 (patch)
tree8d86ad2e9bdbf788e7c9c521afbfc4c6e7454c96 /packaging/macosx/ports/python
parentUpdate for osx packaging (CFBundleDocumentTypes): rewrite mime-types, add mis... (diff)
downloadinkscape-33ce97544f661ed43923ed0ab32f28c4bad97f26.tar.gz
inkscape-33ce97544f661ed43923ed0ab32f28c4bad97f26.zip
packaging/macosx: add py-numpy port for Python2.7 too (upstream MacPorts now insists on requiring to compile a fortan compiler for py-numpy)
(bzr r13798.1.4)
Diffstat (limited to 'packaging/macosx/ports/python')
-rw-r--r--packaging/macosx/ports/python/py-numpy/Portfile211
-rw-r--r--packaging/macosx/ports/python/py-numpy/files/patch-f2py_setup.py.diff39
-rw-r--r--packaging/macosx/ports/python/py-numpy/files/patch-fcompiler_g95.diff15
-rw-r--r--packaging/macosx/ports/python/py-numpy/files/patch-numpy_core_setup.py.diff34
-rw-r--r--packaging/macosx/ports/python/py-numpy/files/patch-numpy_linalg_setup.py.diff20
-rwxr-xr-xpackaging/macosx/ports/python/py-numpy/files/wrapper-template143
6 files changed, 462 insertions, 0 deletions
diff --git a/packaging/macosx/ports/python/py-numpy/Portfile b/packaging/macosx/ports/python/py-numpy/Portfile
new file mode 100644
index 000000000..695841a56
--- /dev/null
+++ b/packaging/macosx/ports/python/py-numpy/Portfile
@@ -0,0 +1,211 @@
+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4
+# $Id: Portfile 127764 2014-11-03 14:01:21Z michaelld@macports.org $
+
+PortSystem 1.0
+PortGroup python 1.0
+PortGroup github 1.0
+
+github.setup numpy numpy 1.9.1 v
+name py-numpy
+categories-append math
+license BSD
+platforms darwin
+maintainers dh michaelld openmaintainer
+description The core utilities for the scientific library scipy for Python
+long_description ${description}
+
+checksums rmd160 c043ce0045166762e36c513458abc499d36bbcf5 \
+ sha256 504b7cbc3b47df592d683e0f3b992cfa4d29338f8d23fca07f040164018b607f
+
+python.versions 27 32 33 34
+
+if {${name} ne ${subport}} {
+ patchfiles patch-f2py_setup.py.diff \
+ patch-fcompiler_g95.diff \
+ patch-numpy_core_setup.py.diff
+
+ depends_lib-append port:fftw-3 \
+ port:py${python.version}-nose \
+ port:py${python.version}-cython
+
+ # http://trac.macports.org/ticket/34562
+ destroot.env-append \
+ CC="${configure.cc}" \
+ CFLAGS="${configure.cflags} [get_canonical_archflags cc]" \
+ CXX="${configure.cxx}" \
+ CXXFLAGS="${configure.cxxflags} [get_canonical_archflags cxx]" \
+ OBJC="${configure.objc}" \
+ OBJCFLAGS="${configure.objcflags} [get_canonical_archflags objc]" \
+ LDFLAGS="${configure.ldflags} [get_canonical_archflags ld]"
+
+ build.env-append ARCHFLAGS="[get_canonical_archflags ld]"
+ destroot.env-append ARCHFLAGS="[get_canonical_archflags ld]"
+
+ variant atlas description {Use the MacPorts' ATLAS libraries \
+ instead of Apple's Accelerate framework} {
+ depends_lib-append port:atlas
+
+ if {[variant_isset universal]} {
+ python.set_compiler no
+ }
+ }
+
+ # when using ATLAS (whether by default or specified by the user via
+ # the +atlas variant) ...
+ set gcc_version ""
+ if {[variant_isset atlas]} {
+
+ # see if the user has set -gcc4X to disable using MacPorts'
+ # compiler; if not, either use what the user set (as +gcc4X) or
+ # default to gcc48.
+
+ variant gcc43 conflicts gcc44 gcc45 gcc46 gcc47 gcc48 \
+ description {Use the gcc43 compiler (enables fortran linking)} {
+ configure.compiler macports-gcc-4.3
+ }
+
+ variant gcc44 conflicts gcc43 gcc45 gcc46 gcc47 gcc48 \
+ description {Use the gcc44 compiler (enables fortran linking)} {
+ configure.compiler macports-gcc-4.4
+ }
+
+ variant gcc45 conflicts gcc43 gcc44 gcc46 gcc47 gcc48 \
+ description {Use the gcc45 compiler (enables fortran linking)} {
+ configure.compiler macports-gcc-4.5
+ }
+
+ variant gcc46 conflicts gcc43 gcc44 gcc45 gcc47 gcc48 \
+ description {Use the gcc46 compiler (enables fortran linking)} {
+ configure.compiler macports-gcc-4.6
+ }
+
+ variant gcc47 conflicts gcc43 gcc44 gcc45 gcc46 gcc48 \
+ description {Use the gcc47 compiler (enables fortran linking)} {
+ configure.compiler macports-gcc-4.7
+ }
+
+ variant gcc48 conflicts gcc43 gcc44 gcc45 gcc46 gcc47 \
+ description {Use the gcc48 compiler (enables fortran linking)} {
+ configure.compiler macports-gcc-4.8
+ }
+
+ if {![variant_isset gcc43] && ![variant_isset gcc44] && ![variant_isset gcc45] && ![variant_isset gcc46] && ![variant_isset gcc47]} {
+ default_variants +gcc48
+ }
+
+ if {[variant_isset gcc43]} {
+ set gcc_version "4.3"
+ } elseif {[variant_isset gcc44]} {
+ set gcc_version "4.4"
+ } elseif {[variant_isset gcc45]} {
+ set gcc_version "4.5"
+ } elseif {[variant_isset gcc46]} {
+ set gcc_version "4.6"
+ } elseif {[variant_isset gcc47]} {
+ set gcc_version "4.7"
+ } elseif {[variant_isset gcc48]} {
+ set gcc_version "4.8"
+ }
+
+ # when using non-Apple GCC for universal install, it can
+ # create binaries only for the native OS architecture, at
+ # either 32 or 64 bits. Restrict the supported archs
+ # accordingly.
+ if {${os.arch} eq "i386"} {
+ supported_archs i386 x86_64
+ } elseif {${os.arch} eq "powerpc"} {
+ supported_archs ppc ppc64
+ }
+
+ # include all the correct GCC4X port
+ depends_lib-append port:gcc[join [split ${gcc_version} "."] ""]
+
+ # force LDFLAGS for correct linking of the linalg module
+ # for non-Apple GCC compilers
+ patchfiles-append patch-numpy_linalg_setup.py.diff
+
+ if {${gcc_version} == ""} {
+ # user specified -gcc4X but +atlas (either as default or
+ # explicitly); do not allow since it might lead to
+ # undetermined runtime execution.
+ return -code error \
+"\n\nWhen using the +atlas variant (either as the default or setting
+explicitly), one of the +gcc4X variants must be selected.\n"
+ }
+ }
+
+ post-patch {
+ reinplace "s|@@MPORTS_PYTHON@@|${python.bin}|" \
+ ${worksrcpath}/numpy/f2py/setup.py
+
+ if {[variant_isset universal] && [variant_isset atlas]} {
+ # Prepare wrappers
+ file copy -force ${filespath}/wrapper-template \
+ ${worksrcpath}/c-wrapper
+ file copy -force ${filespath}/wrapper-template \
+ ${worksrcpath}/f-wrapper
+ file copy -force ${filespath}/wrapper-template \
+ ${worksrcpath}/cxx-wrapper
+
+ reinplace "s|@@@|${configure.cc}|" ${worksrcpath}/c-wrapper
+ reinplace "s|---|\\\\.c|" ${worksrcpath}/c-wrapper
+ reinplace "s|&&&|${prefix}|" ${worksrcpath}/c-wrapper
+
+ reinplace "s|@@@|${configure.cxx}|" ${worksrcpath}/cxx-wrapper
+ reinplace "s#---#(\\\\.C|\\\\.cpp|\\\\.cc)#" \
+ ${worksrcpath}/cxx-wrapper
+ reinplace "s|&&&|${prefix}|" ${worksrcpath}/cxx-wrapper
+
+ reinplace "s|@@@|${configure.f90}|" ${worksrcpath}/f-wrapper
+ reinplace "s|---|\\\\.f|" ${worksrcpath}/f-wrapper
+ reinplace "s|&&&|${prefix}|" ${worksrcpath}/f-wrapper
+
+ build.env-append CC="${worksrcpath}/c-wrapper" \
+ CXX="${worksrcpath}/cxx-wrapper" \
+ F77="${worksrcpath}/f-wrapper" \
+ F90="${worksrcpath}/f-wrapper"
+
+ destroot.env-append CC="${worksrcpath}/c-wrapper" \
+ CXX="${worksrcpath}/cxx-wrapper" \
+ F77="${worksrcpath}/f-wrapper" \
+ F90="${worksrcpath}/f-wrapper"
+ }
+
+ if {[variant_isset atlas]} {
+ # We must link against libSatlas or libTatlas, not libAtlas
+ if {[file exists ${prefix}/lib/libtatlas.dylib]} {
+ reinplace -E \
+ "s|_lib_atlas = \\\['atlas'\\\]|_lib_atlas = \\\['tatlas'\\\]|" \
+ ${worksrcpath}/numpy/distutils/system_info.py
+ } elseif {[file exists ${prefix}/lib/libsatlas.dylib]} {
+ reinplace -E \
+ "s|_lib_atlas = \\\['atlas'\\\]|_lib_atlas = \\\['satlas'\\\]|" \
+ ${worksrcpath}/numpy/distutils/system_info.py
+ } else {
+ return -code error "Unable to find Atlas dylibs. Bailing out."
+ }
+ }
+ }
+
+ livecheck.type none
+
+ if {[variant_isset atlas]} {
+ build.env-append ATLAS=${prefix}/lib \
+ LAPACK=${prefix}/lib \
+ BLAS=${prefix}/lib
+ destroot.env-append ATLAS=${prefix}/lib \
+ LAPACK=${prefix}/lib \
+ BLAS=${prefix}/lib
+ } else {
+ build.env-append ATLAS=None \
+ LAPACK=/usr/lib \
+ BLAS=/usr/lib
+ destroot.env-append ATLAS=None \
+ LAPACK=/usr/lib \
+ BLAS=/usr/lib
+ }
+
+} else {
+ livecheck none
+ #livecheck.regex archive/[join ${github.tag_prefix} ""](\[\\d+(?:\\.\\d+)*"\]+)${extract.suffix}"
+}
diff --git a/packaging/macosx/ports/python/py-numpy/files/patch-f2py_setup.py.diff b/packaging/macosx/ports/python/py-numpy/files/patch-f2py_setup.py.diff
new file mode 100644
index 000000000..1e3164e73
--- /dev/null
+++ b/packaging/macosx/ports/python/py-numpy/files/patch-f2py_setup.py.diff
@@ -0,0 +1,39 @@
+--- numpy/f2py/setup.py
++++ numpy/f2py/setup.py
+@@ -41,21 +41,21 @@ def configuration(parent_package='',top_
+ )
+
+ config.make_svn_version_py()
+
+ def generate_f2py_py(build_dir):
+- f2py_exe = 'f2py'+os.path.basename(sys.executable)[6:]
++ f2py_exe = 'f2py'
+ if f2py_exe[-4:]=='.exe':
+ f2py_exe = f2py_exe[:-4] + '.py'
+ if 'bdist_wininst' in sys.argv and f2py_exe[-3:] != '.py':
+ f2py_exe = f2py_exe + '.py'
+ target = os.path.join(build_dir, f2py_exe)
+ if newer(__file__, target):
+ log.info('Creating %s', target)
+ f = open(target, 'w')
+ f.write('''\
+-#!%s
++#!@@MPORTS_PYTHON@@
+ # See http://cens.ioc.ee/projects/f2py2e/
+ import os, sys
+ for mode in ["g3-numpy", "2e-numeric", "2e-numarray", "2e-numpy"]:
+ try:
+ i=sys.argv.index("--"+mode)
+@@ -75,11 +75,11 @@ elif mode=="2e-numpy":
+ from numpy.f2py import main
+ else:
+ sys.stderr.write("Unknown mode: " + repr(mode) + "\\n")
+ sys.exit(1)
+ main()
+-'''%(sys.executable))
++''')
+ f.close()
+ return target
+
+ config.add_scripts(generate_f2py_py)
+
diff --git a/packaging/macosx/ports/python/py-numpy/files/patch-fcompiler_g95.diff b/packaging/macosx/ports/python/py-numpy/files/patch-fcompiler_g95.diff
new file mode 100644
index 000000000..b95a2609a
--- /dev/null
+++ b/packaging/macosx/ports/python/py-numpy/files/patch-fcompiler_g95.diff
@@ -0,0 +1,15 @@
+--- numpy/distutils/fcompiler/__init__.py
++++ numpy/distutils/fcompiler/__init__.py
+@@ -708,11 +708,11 @@
+ ('win32', ('gnu', 'intelv', 'absoft', 'compaqv', 'intelev', 'gnu95', 'g95',
+ 'intelvem', 'intelem')),
+ ('cygwin.*', ('gnu', 'intelv', 'absoft', 'compaqv', 'intelev', 'gnu95', 'g95')),
+ ('linux.*', ('gnu95', 'intel', 'lahey', 'pg', 'absoft', 'nag', 'vast', 'compaq',
+ 'intele', 'intelem', 'gnu', 'g95', 'pathf95')),
+- ('darwin.*', ('gnu95', 'nag', 'absoft', 'ibm', 'intel', 'gnu', 'g95', 'pg')),
++ ('darwin.*', ('gnu95', 'nag', 'absoft', 'ibm', 'intel', 'gnu', 'pg')),
+ ('sunos.*', ('sun', 'gnu', 'gnu95', 'g95')),
+ ('irix.*', ('mips', 'gnu', 'gnu95',)),
+ ('aix.*', ('ibm', 'gnu', 'gnu95',)),
+ # os.name mappings
+ ('posix', ('gnu', 'gnu95',)),
diff --git a/packaging/macosx/ports/python/py-numpy/files/patch-numpy_core_setup.py.diff b/packaging/macosx/ports/python/py-numpy/files/patch-numpy_core_setup.py.diff
new file mode 100644
index 000000000..1c9a09c34
--- /dev/null
+++ b/packaging/macosx/ports/python/py-numpy/files/patch-numpy_core_setup.py.diff
@@ -0,0 +1,34 @@
+--- numpy/core/setup.py.orig 2014-03-25 19:03:06.000000000 -0400
++++ numpy/core/setup.py 2014-03-25 19:03:26.000000000 -0400
+@@ -485,7 +485,14 @@
+ if isinstance(d, str):
+ target_f.write('#define %s\n' % (d))
+ else:
+- target_f.write('#define %s %s\n' % (d[0], d[1]))
++ if d[0]!='SIZEOF_LONG' and d[0]!='SIZEOF_PY_INTPTR_T':
++ target_f.write('#define %s %s\n' % (d[0], d[1]))
++ else:
++ target_f.write('#ifdef __LP64__\n')
++ target_f.write('#define %s %s\n' % (d[0], 8))
++ target_f.write('#else\n')
++ target_f.write('#define %s %s\n' % (d[0], 4))
++ target_f.write('#endif\n')
+
+ # define inline to our keyword, or nothing
+ target_f.write('#ifndef __cplusplus\n')
+@@ -585,7 +592,14 @@
+ if isinstance(d, str):
+ target_f.write('#define %s\n' % (d))
+ else:
+- target_f.write('#define %s %s\n' % (d[0], d[1]))
++ if d[0]!='NPY_SIZEOF_LONG' and d[0]!='NPY_SIZEOF_PY_INTPTR_T':
++ target_f.write('#define %s %s\n' % (d[0], d[1]))
++ else:
++ target_f.write('#ifdef __LP64__\n')
++ target_f.write('#define %s %s\n' % (d[0], 8))
++ target_f.write('#else\n')
++ target_f.write('#define %s %s\n' % (d[0], 4))
++ target_f.write('#endif\n')
+
+ # Define __STDC_FORMAT_MACROS
+ target_f.write("""
diff --git a/packaging/macosx/ports/python/py-numpy/files/patch-numpy_linalg_setup.py.diff b/packaging/macosx/ports/python/py-numpy/files/patch-numpy_linalg_setup.py.diff
new file mode 100644
index 000000000..848d46186
--- /dev/null
+++ b/packaging/macosx/ports/python/py-numpy/files/patch-numpy_linalg_setup.py.diff
@@ -0,0 +1,20 @@
+--- numpy/linalg/setup.py.orig 2013-11-16 08:30:31.000000000 -0500
++++ numpy/linalg/setup.py 2013-11-16 08:39:27.000000000 -0500
+@@ -37,7 +37,8 @@
+ config.add_extension('lapack_lite',
+ sources = [get_lapack_lite_sources],
+ depends = ['lapack_litemodule.c'] + lapack_lite_src,
+- extra_info = lapack_info
++ extra_info = lapack_info,
++ extra_link_args=['-undefined dynamic_lookup -bundle']
+ )
+
+ # umath_linalg module
+@@ -47,6 +48,7 @@
+ depends = ['umath_linalg.c.src'] + lapack_lite_src,
+ extra_info = lapack_info,
+ libraries = ['npymath'],
++ extra_link_args=['-undefined dynamic_lookup -bundle']
+ )
+
+ return config
diff --git a/packaging/macosx/ports/python/py-numpy/files/wrapper-template b/packaging/macosx/ports/python/py-numpy/files/wrapper-template
new file mode 100755
index 000000000..48936d107
--- /dev/null
+++ b/packaging/macosx/ports/python/py-numpy/files/wrapper-template
@@ -0,0 +1,143 @@
+#!/bin/sh
+COMPILER='@@@'
+SUFFIX='---'
+PREFIX='&&&'
+OUTPUT_O='NO'
+OUTPUT=''
+NAMED_OUTPUT=''
+LASTFILE=''
+INTEL='NO'
+SIZE32='NO'
+SIZE64='NO'
+NEWARGS=''
+
+SKIP='NO'
+
+for arg in $@
+do
+ if [ $SKIP = 'ARCH' ]; then
+ # intercept -arch option and set SIZEXX
+ SKIP='NO'
+ if [ $arg = 'x86_64' ] || [ $arg = 'ppc64' ]; then
+ SIZE64='YES'
+ else
+ SIZE32='YES'
+ fi
+
+ # which architecture are we compiling for?
+ if [ $arg = 'x86_64' ] || [ $arg = 'i386' ]; then
+ INTEL='YES'
+ fi
+
+ elif [ $arg = '-arch' ]; then
+ SKIP='ARCH'
+
+ elif [ $arg = '--version' ]; then
+ ${COMPILER} --version
+ exit 0
+
+ else
+ NEWARGS+="$arg "
+
+ # if the -c option is given, the output is .o
+ if [ $arg = '-c' ]; then
+ OUTPUT_O='YES'
+ fi
+
+ # if the output file is given by a -o option, record it
+ if [ $SKIP = 'O' ]; then
+ SKIP='NO'
+ NAMED_OUTPUT=$arg
+ fi
+
+ if [ $arg = '-o' ]; then
+ SKIP='O'
+ fi
+
+ # Note each file ending by ${SUFFIX} and remember the last one
+ # Transform them in .o
+ if `echo $arg | grep -q "${SUFFIX}$"`; then
+ LASTFILE=$arg
+ OUTPUT+=`echo $arg | sed "s/${SUFFIX}/\.o/"`
+ OUTPUT+=' '
+ fi
+ fi
+done
+
+# What is the output?
+
+if [ ${NAMED_OUTPUT}"X" != "X" ]; then
+ OUTPUT=$NAMED_OUTPUT
+
+elif [ $OUTPUT_O = 'NO' ]; then
+ # It is an executable whose is name is the LASTFILE without suffix
+ OUTPUT=`echo ${LASTFILE} | sed "s/${SUFFIX}//"`
+fi
+
+# Othewise, the output is just the ${OUTPUT} variable as computed before
+
+# For some reason, -dynamiclib and -lpython2.6 are missing when linking
+# .so files. Add them, except if -bundle is set (incompatible switches)
+if [ `echo $OUTPUT | sed -E 's|.*\.||'` = "so" ] && \
+ ! `echo $NEWARGS | grep -q bundle`; then
+ NEWARGS="${NEWARGS} ${PREFIX}/lib/libpython2.6.dylib -dynamiclib"
+fi
+
+# Now, compile
+
+if [ $SIZE32 = 'NO' ] && [ $SIZE64 = 'NO' ]; then
+ # No size indication given, just proceed with default
+ if `${COMPILER} $NEWARGS`; then
+ exit 0
+ else
+ exit 1
+ fi
+
+elif [ $SIZE32 = 'YES' ] && [ $SIZE64 = 'NO' ]; then
+ # 32-bit
+ if `${COMPILER} -m32 $NEWARGS`; then
+ exit 0
+ else
+ exit 1
+ fi
+
+elif [ $SIZE32 = 'NO' ] && [ $SIZE64 = 'YES' ]; then
+ # 64-bit
+ if `${COMPILER} -m64 $NEWARGS`; then
+ exit 0
+ else
+ exit 1
+ fi
+
+else
+ # Universal case
+ if `${COMPILER} -m32 $NEWARGS`; then
+ for filename in ${OUTPUT}
+ do
+ mv ${filename} ${filename}.32
+ done
+
+ if `${COMPILER} -m64 $NEWARGS`; then
+ for filename in ${OUTPUT}
+ do
+ mv ${filename} ${filename}.64
+ if [ $INTEL = 'YES' ]; then
+ lipo -create -arch x86_64 ${filename}.64 \
+ -arch i386 ${filename}.32 \
+ -output ${filename}
+ else
+ lipo -create -arch ppc64 ${filename}.64 \
+ -arch ppc ${filename}.32 \
+ -output ${filename}
+ fi
+
+ rm -f ${filename}.32 ${filename}.64
+ done
+ else
+ exit 1
+ fi
+ else
+ exit 1
+ fi
+fi
+exit 0