# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4 PortSystem 1.0 PortGroup python 1.0 PortGroup github 1.0 PortGroup compilers 1.0 PortGroup compiler_blacklist_versions 1.0 name py27-numpy categories-append math license BSD maintainers {michaelld @michaelld} openmaintainer description The core utilities for the scientific library scipy for Python long_description {*}${description} github.setup numpy numpy 1.16.6 v checksums rmd160 cbb34cf0981ea142ff45722d05a9daad20a134ea \ sha256 2dce87065d5de1a83485cfb3de5e4e793787890f5c1dcc3536a9cabf2e1620af \ size 4691852 revision 4 set PATCH_PY_EXT ".27" patchfiles-append patch-cpu-detection.py.27.patch livecheck.url https://numpy.org/doc/stable/release.html livecheck.regex {(1\.16(?:\.\d+)+)} # the python PortGroup puts compiler names in build.env and destroot.env # for this to be done correctly, the following must be located before python.versions pre-build { set_compilers } pre-destroot { set_compilers } python.versions 27 # http://trac.macports.org/ticket/34562 python.consistent_destroot yes # TODO: Fix the +universal variant. This port is a fairly deep dependency and needs to be able to support +universal. # https://trac.macports.org/ticket/48263 #universal_variant no # some older Clang say they support SIMD when they don't compiler.blacklist-append {clang < 1100} # require a C/C++11 compliant compiler, to match SciPy and allow some # older macOS to build this port. compiler.c_standard 2011 compiler.cxx_standard 2011 # Versions prior to 1.26 don't build with Cython 3 depends_build-append port:py${python.version}-cython-compat set compat_path [string replace ${python.pkgd} 0 [string length ${python.prefix}]-1 ${prefix}/lib/py${python.version}-cython-compat] build.env-append PYTHONPATH=${compat_path} patchfiles-append patch-numpy_core_setup.py${PATCH_PY_EXT}.diff \ patch-numpy_tests_test_scripts.py${PATCH_PY_EXT}.diff \ patch-fcompiler_g95${PATCH_PY_EXT}.diff \ patch-arm64_min${PATCH_PY_EXT}.diff if {[variant_isset atlas] || [variant_isset openblas]} { # force LDFLAGS for correct linking of the modules # for non-Apple GCC compilers patchfiles-append patch-numpy_linalg_setup.py${PATCH_PY_EXT}.diff } compilers.setup -clang -gcc44 -gcc45 \ -gcc46 -gcc47 -gcc48 -g95 # https://trac.macports.org/ticket/67136 depends_run-append port:py${python.version}-oldest-supported-numpy depends_lib-append port:fftw-3 \ path:bin/cython-${python.branch}:py${python.version}-cython build.env-append SETUPTOOLS_USE_DISTUTILS=stdlib destroot.env-append SETUPTOOLS_USE_DISTUTILS=stdlib pre-build { build.env-append ARCHFLAGS=[get_canonical_archflags ld] } pre-destroot { destroot.env-append ARCHFLAGS=[get_canonical_archflags ld] } variant atlas conflicts openblas description "Use MacPorts ATLAS Libraries" { depends_lib-append port:atlas } variant openblas conflicts atlas description "Use MacPorts OpenBLAS Libraries" { depends_lib-append path:lib/libopenblas.dylib:OpenBLAS # See: https://trac.macports.org/ticket/66685 supported_archs arm64 ppc ppc64 x86_64 } # Make +openblas a default variant, at least temporarily, to # overcome issues with polyfit. see also: # https://trac.macports.org/ticket/56954 # https://github.com/numpy/numpy/issues/12230 # However, +gfortran+openblas is broken on i386, see above if {![variant_isset atlas] && ![variant_isset openblas] && ${configure.build_arch} ni {i386 arm64}} { default_variants-append +openblas } # when using ATLAS (whether by default or specified by the user via # the +atlas variant) ... if {[variant_isset atlas]} { # 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 } pre-fetch { # numpy needs fortran; so we only need to check if atlas is # compiled with +nofortran if {![catch {set result [active_variants atlas "" nofortran]}]} { if {!$result} { return -code error \ "You have selected the +atlas variant but atlas was built with +nofortran.\ numpy needs a fortran enabled atlas. Please rebuild atlas without the +nofortran\ variant." } } } # use MacPorts atlas build.env-append OPENBLAS=None \ MKLROOT=None \ ATLAS=${prefix}/lib \ LAPACK=${prefix}/lib \ BLAS=${prefix}/lib destroot.env-append OPENBLAS=None \ MKLROOT=None \ ATLAS=${prefix}/lib \ LAPACK=${prefix}/lib \ BLAS=${prefix}/lib } elseif {[variant_isset openblas]} { # use MacPorts OpenBLAS build.env-append OPENBLAS=${prefix}/lib \ MKLROOT=None \ ATLAS=None destroot.env-append OPENBLAS=${prefix}/lib \ MKLROOT=None \ ATLAS=None } else { # use Accelerate BLAS build.env-append OPENBLAS=None \ ATLAS=None \ MKLROOT=None \ LAPACK=/usr/lib \ BLAS=/usr/lib destroot.env-append OPENBLAS=None \ ATLAS=None \ MKLROOT=None \ LAPACK=/usr/lib \ BLAS=/usr/lib } platform darwin 8 { if {${python.version} < 37} { patchfiles-append patch-Tiger-without-dflcn-header.diff } } post-patch { # https://trac.macports.org/ticket/46392 if {${os.arch} eq "powerpc"} { reinplace "s,'-O3','-O2'," \ ${worksrcpath}/numpy/distutils/fcompiler/gnu.py } if { [use_wrapper] } { # 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 } 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." } } } if {![fortran_variant_isset]} { default_variants-append +gfortran } # determine if special wrapper values are needed for compiler names # a procedure is needed since variants from PortGroup compilers must # be evaluated before it can be determined if clang is being used proc use_wrapper {} { global configure.cc if {[variant_exists universal] && [variant_isset universal]} { if {[variant_isset atlas]} { # uses fortran as a linker, which does not handle multiple -arch values properly return 1 } if {![string match *clang* ${configure.cc}]} { # gcc compilers do not handle multiple -arch values properly return 1 } } return 0 } # set compiler names proc set_compilers {} { global configure.cc configure.cxx configure.fc worksrcpath if {[use_wrapper]} { # override values set in compilers PortGroup configure.cc ${worksrcpath}/c-wrapper configure.cxx ${worksrcpath}/cxx-wrapper configure.fc ${worksrcpath}/f-wrapper configure.f77 ${worksrcpath}/f-wrapper configure.f90 ${worksrcpath}/f-wrapper } }