# -*- 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           legacysupport 1.1
PortGroup           texlive 1.0

name                asymptote
version             3.05
revision            0

categories          graphics
maintainers         nomaintainer
description         A vector graphics language
long_description    Asymptote is a powerful descriptive \
                    vector graphics language that provides a natural \
                    coordinate-based framework for technical drawing. \
                    Labels and equations are typeset with LaTeX, for \
                    high-quality PostScript output.
homepage            https://asymptote.sourceforge.net
license             LGPL-3+
# libpaper is a dependency of ghostscript that's only used at runtime
license_noconflict  libpaper

set python.branch   3.13
set python.version  [join [split ${python.branch} "."] ""]
set python.bin      ${prefix}/bin/python${python.branch}

master_sites        sourceforge:project/${name}/${version}/
extract.suffix      .src.tgz

checksums           rmd160  bbd87aeba562d998e04f5a42650aebc5cdda9d13 \
                    sha256  35c16d0a3bdd869a56e4efff4638f81c3a88b2f6b664d196471015dbf4c69a87 \
                    size    31175573

# FileNotFoundError: [Errno 2] No such file or directory: 'ccache /opt/local/bin/g++-mp-14'
configure.ccache    no

# On Lion the default clang fails with
# ../base/graph_splinetype.asy: 13.10: arrays have different lengths: 24 != 25
compiler.blacklist  {clang < 500}
# error: invalid use of template-name 'std::unordered_set' without an argument list
compiler.cxx_standard   2017

configure.args-append \
                    --with-latex=${texlive_texmfports}/tex/latex \
                    --with-context=${texlive_texmfports}/tex/context/third \
                    --mandir=${prefix}/share/man \
                    --disable-lsp

configure.cxxflags-append \
                    -std=c++17

build.env-append     PYTHON=${python.bin}

# texlive-latex-recommended and texinfo are only used for building the docs
# other relevant packages are:
# - texlive-common
# - texlive-bin
# - texlive-basic
# - texlive-latex
# but they are already a dependency of latex-recommended
#
# one day we could split that into a separate +docs variant
# or fetch the PDF from somewhere
depends_build-append \
                    port:ghostscript \
                    path:bin/pkg-config:pkgconfig \
                    port:texinfo \
                    port:texlive-fonts-recommended \
                    port:texlive-latex-recommended \
                    port:texlive-latex-extra
#                   port:py${python.version}-pyqt5

depends_lib-append  port:fftw-3 \
                    port:glm \
                    port:gsl \
                    port:libsigsegv \
                    port:ncurses \
                    port:readline

# Runtime dependencies really depend on user preferences.
# Asy can draw graphics without any TeX or without LaTeX,
# so one might just as well remove all deps (or add more)
#
# The hierarchy of dependencies goes as:
# - texlive-latex-recommended [common, bin, basic, latex]
# - texlive-latex             [common, bin, basic]
# - texlive-basic             [common, bin]
#
# But then asy also supports luatex, context, etc.
depends_run         port:ghostscript \
                    port:texlive-basic \
                    port:py${python.version}-pycson
#                   port:py${python.version}-pyqt5
# TODO: python dependencies for xasy should be optional

depends_skip_archcheck-append \
                    port:ghostscript \
                    port:texinfo \
                    port:texlive-basic \
                    port:texlive-bin \
                    port:texlive-latex-recommended

post-destroot {
    reinplace "s|#!/usr/bin/env python.*|#!${python.bin}|" \
        {*}[glob -directory ${destroot}${prefix}/share/${name}/GUI *.py]
}

post-activate {
    # run `mktexlsr` to make sure the asymptote files are found:
    system "mktexlsr"
}
post-deactivate {
    system "mktexlsr"
}

notes "If you want to use xasy, install py${python.version}-pyqt5."
