# -*- 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           cxx11                       1.1
PortGroup           github                      1.0
PortGroup           mpi                         1.0
PortGroup           compiler_blacklist_versions 1.0

name                py-pytorch
version             1.1.0
revision            0
github.setup        pytorch pytorch ${version} v
fetch.type          git

platforms           darwin
supported_archs     x86_64

license             BSD

maintainers         {jonesc @cjones051073} openmaintainer

description         Tensors and dynamic neural networks in Python with strong GPU acceleration
long_description    ${description}

homepage            https://pytorch.org/

# Support python versions.
python.versions     27 35 36 37
python.default_version 37

patch.pre_args      -p1

mpi.setup           -gcc44 -gcc45 -clang33 -clang34 -clang37 -clang39 -clang40 -gfortran -g95

# Compiler selection
compiler.blacklist-append *gcc* {clang < 800} macports-clang-3.3 macports-clang-3.4 \
                          macports-clang-3.7 macports-clang-4.0 macports-clang-3.9
compiler.whitelist clang macports-clang-8.0 macports-clang-7.0 macports-clang-6.0 macports-clang-5.0

variant mkl description {Enable Intel Math Kernel Library support} { }
# enable MKL by default on 10.12 and newer
if {${os.major} >= 16} {
    default_variants-append +mkl
}

if {${name} ne ${subport}} {

    depends_build-append \
        port:cctools \
        path:bin/cmake:cmake \
        port:py${python.version}-setuptools

    depends_lib-append \
        port:eigen3 \
        port:gmp \
        port:mpfr \
        port:OpenBLAS \
        port:opencv \
        port:zmq \
        port:zstd \
        port:py${python.version}-cffi \
        port:py${python.version}-gmpy \
        port:py${python.version}-numpy \
        port:py${python.version}-pybind11 \
        port:py${python.version}-yaml \
        port:py${python.version}-torchvision \
        port:py${python.version}-torchtext
    
    if {${python.version} < 35} {
        depends_lib-append \
            port:py${python.version}-typing
    }

    post-fetch { system -W ${worksrcpath} "git submodule update --init" }

    set t_build_env "USE_OPENCV=ON USE_OPENMP=ON USE_CUDA=OFF USE_ZSTD=ON USE_ZMQ=ON CMAKE_LIBRARY_PATH=${prefix}:${prefix}/libomp LIBRARY_PATH=${prefix}:${prefix}/libomp"

    set PythonVersionWithDot [join [split ${python.version} ""] "."]
    set py_lib_root ${prefix}/Library/Frameworks/Python.framework/Versions/${PythonVersionWithDot}

    # Use Intel Math kernel Library 
    if {[variant_isset mkl]} {
        patchfiles-append FindMKL-OMP.patch
        pre-build {
            # Hacks to get search paths into builds
            reinplace "s|/opt/intel/mkl|${py_lib_root}|g"     cmake/Modules/FindMKL.cmake
            reinplace "s|mklvers \"intel64\"|mklvers \"\"|g"  cmake/Modules/FindMKL.cmake
            reinplace "s|MACPORTS_PREFIX|${prefix}|g"         cmake/Modules/FindMKL.cmake
        }
        depends_lib-append   port:py${python.version}-mkl
        depends_build-append port:py${python.version}-mkl-include
    }
    
    build.cmd    "${t_build_env} ${python.bin} setup.py"
    destroot.cmd "${t_build_env} ${python.bin} setup.py install"

    post-destroot {
        set py_torch_root ${py_lib_root}/lib/python${PythonVersionWithDot}/site-packages/torch
        foreach slib [glob -directory ${destroot}${py_torch_root} *.so] {
            system "install_name_tool -add_rpath ${py_torch_root}/lib ${slib}"
        }
    }

    livecheck.type none 

}