You've already forked macports-ports
mirror of
https://github.com/encounter/macports-ports.git
synced 2026-03-30 11:29:27 -07:00
274 lines
10 KiB
Tcl
274 lines
10 KiB
Tcl
# -*- 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
|
|
}
|
|
}
|
|
}
|