# -*- 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               active_variants 1.1
PortGroup               xcode 1.0

# FIXME: cannot build with Xcode gcc anymore, needs either makefile build
# or enabling modern gcc in old Xcode.
# Now also broken on any macOS with R 4.6.x:
# https://github.com/macports/macports-ports/commit/370ef5cf41e8d7e52069ba0d15925768db88c35c
known_fail              yes

name                    R-app

# Update for newer systems, keep pegged for older. Compatibility see in R.xcodeproj/project.pbxproj
if {${os.platform} eq "darwin" && ${os.major} > 12} {
    version             1.81
    set rel_r_ver       4.4.2
    revision            3
    # The version of R when this version of R-app was released, used for changing version
    # info of app bundle to match the actual R version. Should be updated for each R-app release,
    # and revbumped for each R release.
    worksrcdir          Mac-GUI
} else {
    # Version for older systems, including PPC. 1.73 still builds but freezes on quit.
    version             1.79
    set rel_r_ver       4.3.0
    revision            3
}
categories              math science aqua
maintainers             {me.com:kjell.konis @kjellpk} {i0ntempest @i0ntempest} openmaintainer
license                 GPL-2+

description             R GUI for Mac OS X
long_description        ${description}

homepage                http://R.research.att.com
platforms               macosx

master_sites            http://cran.rstudio.com/bin/macosx/ \
                        http://cran.us.r-project.org/bin/macosx/ \
                        https://cran.csie.ntu.edu.tw/bin/macosx/

distname                Mac-GUI-${version}

require_active_variants R aqua

if {${os.platform} eq "darwin" && ${os.major} > 12} {
    checksums           ${distname}.tar.gz \
                        rmd160  58e5e51ad820a447c5680b85ab783dcdc9388540 \
                        sha256  f94187304ffa5bcd61fc2e645b767c0c18e299188f07e78988926a98c7cf9a1f \
                        size    1399999
} else {
    checksums           ${distname}.tar.gz \
                        rmd160  44518e071c8e220dd02071ba0ded7899fc5c8924 \
                        sha256  10eff30befa2b60a880d5a8f08f81a941cd447fee5f37fccf54b422299870267 \
                        size    1299278
}

# Fix wrong macros in InfoPlist:
patchfiles-append       0001-InfoPlist.h-fix-MIN_VER.patch

if {${os.platform} eq "darwin" && ${os.major} < 11} {
    # We need to use xib files from older version, newer fail to build with Xcode 3.x.
    set legacy_ver      1.70
    set legacy_dist     Mac-GUI-${legacy_ver}.tar.gz
    set main_dist       ${distname}.tar.gz
    distfiles-append    ${legacy_dist}
    checksums-append    ${legacy_dist} \
                        rmd160  1d351ae2b736bb9f6bd26ce164c37c6926d0e171 \
                        sha256  8be56f2705c5d20ebecb36948e70fe0a89ba01a9fee214e5fe58f24c3f2eee48 \
                        size    1795622

    pre-patch {
        delete ${worksrcpath}/de.lproj
        delete ${worksrcpath}/English.lproj
        delete ${worksrcpath}/fr.lproj
        delete ${worksrcpath}/it.lproj
        delete ${worksrcpath}/ja.lproj
        delete ${worksrcpath}/nl.lproj

        move ${workpath}/Mac-GUI-${legacy_ver}/de.lproj ${worksrcpath}
        move ${workpath}/Mac-GUI-${legacy_ver}/English.lproj ${worksrcpath}
        move ${workpath}/Mac-GUI-${legacy_ver}/fr.lproj ${worksrcpath}
        move ${workpath}/Mac-GUI-${legacy_ver}/it.lproj ${worksrcpath}
        move ${workpath}/Mac-GUI-${legacy_ver}/ja.lproj ${worksrcpath}
        move ${workpath}/Mac-GUI-${legacy_ver}/nl.lproj ${worksrcpath}
    }
    # 1.79
    patchfiles-append   1001-Revert-suppress-IsMenuKeyEvent-in-stderr.patch
    # 1.76
    patchfiles-append   2001-Revert-remove-direct-function-calls-to-Obj-C-methods.patch \
                        2002-Revert-add-blank-touchbar-to-console.patch \
                        2003-Revert-Suppress-Expected-min-height-of-view-macOS-wa.patch \
                        2004-RDocumentWinCtrl.m-fix-compilation.patch \
                        2005-RScriptEditorTextStorage.m-fix-compilation.patch

    post-patch {
        # These are intended for 1.72 (see above). Other versions set different compatibility.
        if {${os.major} == 9} {
            reinplace "s|Xcode 3.2|Xcode 3.1|g" ${worksrcpath}/R.xcodeproj/project.pbxproj
        }
        reinplace "s|MACOSX_DEPLOYMENT_TARGET = 10.13|MACOSX_DEPLOYMENT_TARGET = ${macosx_deployment_target}|g" ${worksrcpath}/R.xcodeproj/project.pbxproj
    }
}

post-patch {
    reinplace "s|/Library/Frameworks/R.framework|${frameworks_dir}/R.framework|g" \
        ${worksrcpath}/R.xcodeproj/project.pbxproj
    set r_ver [lindex [split [exec ${prefix}/bin/R --version | head -n1] " "] 2]
    reinplace "s|${rel_r_ver}|${r_ver}|g" ${worksrcpath}/InfoPlist.h
    set rev_file [open ${worksrcpath}/updateSVN r]
    set r_rev [lindex [split [lsearch -inline [split [read $rev_file] "\n"] "SVNREV=*"] "="] 1]
    close $rev_file
    reinplace "s|%SVN%|${r_rev}|g" ${worksrcpath}/Info.plist
}

use_configure           no

depends_lib             port:R

universal_variant       no

xcode.project           R.xcodeproj
xcode.target            R
xcode.configuration     Release

xcode.build.settings    FRAMEWORK_SEARCH_PATHS=${frameworks_dir}
xcode.destroot.settings FRAMEWORK_SEARCH_PATHS=${frameworks_dir}

if {[vercmp ${xcodeversion} 10.0] >= 0} {
    destroot.pre_args  -UseNewBuildSystem=NO
}

post-destroot {
    delete ${destroot}${applications_dir}/sush

    # https://trac.macports.org/ticket/67042
    if {${configure.cxx_stdlib} ne "libc++"} {
            set rexec ${applications_dir}/R.app/Contents/MacOS/R
            set rgui ${prefix}/bin/R-gui

            set  wrapper    [open "${destroot}${rgui}" w 0755]
            puts ${wrapper} "#!/bin/bash"
            puts ${wrapper} ""
            puts ${wrapper} {if [ -n "$DYLD_LIBRARY_PATH" ]; then}
            puts ${wrapper} "   DYLD_LIBRARY_PATH=${prefix}/lib/libgcc:\${DYLD_LIBRARY_PATH}"
            puts ${wrapper} {else}
            puts ${wrapper} "   DYLD_LIBRARY_PATH=${prefix}/lib/libgcc"
            puts ${wrapper} {fi}
            puts ${wrapper} {export DYLD_LIBRARY_PATH}
            puts ${wrapper} ""
            puts ${wrapper} "   PATH=${prefix}/bin:${prefix}/sbin:\$PATH"
            puts ${wrapper} {export PATH}
            puts ${wrapper} ""
            puts ${wrapper} "exec ${rexec} \"\$@\""
            close $wrapper
    }
}

if {${configure.cxx_stdlib} ne "libc++"} {
    notes "
    A wrapper script to launch the app has been installed into ${prefix}/bin.
    Please start the app from command line as `R-gui`.
    "
}

livecheck.name          Mac-GUI
