# -*- 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 py-numpy categories-append math license BSD platforms darwin maintainers {michaelld @michaelld} openmaintainer description The core utilities for the scientific library scipy for Python long_description ${description} github.setup numpy numpy 1.20.2 v checksums rmd160 ebd2823d4e33923c94ebec006f400b494ab69f41 \ sha256 ee3b17d100a9341c8270fb28a025314fdafde2ba7bca3d1f8ae39bb1e4e395e7 \ size 7354688 revision 1 if {${name} ne ${subport}} { # 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 35 36 37 38 39 # 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 < 910} # 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 # default livecheck github.livecheck.regex {(\d+(?:\.\d+)+)} if {${name} ne ${subport}} { set PATCH_PY_EXT "" if {${python.version} == 27} { github.setup numpy numpy 1.16.6 v checksums rmd160 cbb34cf0981ea142ff45722d05a9daad20a134ea \ sha256 2dce87065d5de1a83485cfb3de5e4e793787890f5c1dcc3536a9cabf2e1620af \ size 4691852 revision 2 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+)+)} } elseif {${python.version} == 35} { github.setup numpy numpy 1.18.5 v checksums rmd160 c14f2725afe0f7420d69a6f9ed5744639a2d2b31 \ sha256 4a421fdf82dbb3dce7e62400f69c43722b530db109c3321c6c95452f166560d9 \ size 5167349 revision 1 patchfiles-append patch-cpu-detection.py.35.patch set PATCH_PY_EXT ".35" livecheck.url https://numpy.org/doc/stable/release.html livecheck.regex {(1\.18(?:\.\d+)+)} } elseif {${python.version} == 36} { github.setup numpy numpy 1.19.5 v checksums rmd160 66861032bbd7c1f7e7741d913c9edf6c0b8be68a \ sha256 40e0a919cb8741556f8402cb7ec862b3b27903725ba59af44fd5b88620c5a7e1 \ size 7037758 revision 0 # because I pushed 1.20 and it requires Py37+ and so reverting back to 1.19 epoch 1 set PATCH_PY_EXT ".36" livecheck.url https://numpy.org/doc/stable/release.html livecheck.regex {(1\.19(?:\.\d+)+)} } 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 depends_lib-append port:fftw-3 \ port:py${python.version}-nose \ port:py${python.version}-cython 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 } # 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 if {![variant_isset atlas] && ![variant_isset openblas]} { 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 \ ATLAS=${prefix}/lib \ LAPACK=${prefix}/lib \ BLAS=${prefix}/lib destroot.env-append OPENBLAS=None \ ATLAS=${prefix}/lib \ LAPACK=${prefix}/lib \ BLAS=${prefix}/lib } elseif {[variant_isset openblas]} { # use MacPorts OpenBLAS build.env-append OPENBLAS=${prefix}/lib \ ATLAS=None destroot.env-append OPENBLAS=${prefix}/lib \ ATLAS=None } else { # use Accelerate BLAS build.env-append OPENBLAS=None \ ATLAS=None \ LAPACK=/usr/lib \ BLAS=/usr/lib destroot.env-append OPENBLAS=None \ ATLAS=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 } } }