Files

125 lines
5.2 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 app 1.1
PortGroup github 1.0
PortGroup java 1.0
github.setup AppleCommander AppleCommander 1.9.0
revision 0
set gradle_version 7.3.1
java.version 11+
categories emulators
platforms {darwin any}
maintainers {ryandesign @ryandesign} openmaintainer
license GPL-2+
supported_archs arm64 x86_64
description GUI and CLI for manipulating Apple II disk images
long_description ${name} is a GUI and command line for manipulating \
Apple DOS 3.3, ProDOS, and other formats of Apple \
II disk images. ${name} can read and display \
information about disk images, export files of \
various types, create disk images, import files \
into disk images, and has a rudimentary compiler. \
${name} incorporates support for cc65, an improved \
command-line tool, and even an Ant interface.
homepage https://applecommander.github.io
github.tarball_from archive
set main_distfile ${distfiles}
set gradle_distfile gradle-${gradle_version}-bin.zip
extract.only ${main_distfile}
master_sites-append https://services.gradle.org/distributions/:gradle
distfiles-append ${gradle_distfile}:gradle
checksums ${main_distfile} \
rmd160 836569f8f8d835fa2a6b5dd473ca9bbf98bdff5e \
sha256 9047e79af4de04f65e958ee6db46ca6134ae29a30857525214a15f68362a0640 \
size 6744978 \
${gradle_distfile} \
rmd160 e32e691e3eec2132e2b4f2b2ba19f9f8b7f2b14f \
sha256 9afb3ca688fc12c761a0e9e4321e4d24e977a4a8916c8a768b1fe05ddb4d6b66 \
size 115766550
proc percent_encode {str} {
return [subst [regsub -all {[^a-zA-Z0-9/.~_-]} $str {%[format %02x [scan {&} %c]]}]]
}
set gradle_home ${workpath}/gradle
set swt_arch [string map [list arm64 aarch64] ${configure.build_arch}]
set dirs [list cli-ac cli-acx gui-swt-macosx-${swt_arch}]
set jars [list ac acx macosx-${swt_arch}]
set guiwrapper gui
set cliwrappers [list ac acx]
set wrappers [concat ${cliwrappers} ${guiwrapper}]
post-extract {
# Upstream documentation shows how to create shell wrappers for the
# jars but the build system doesn't make them so we do it ourselves.
foreach f ${wrappers} {
copy ${filespath}/${f}.in ${workpath}/${f}
}
}
patchfiles gradle-wrapper.properties.patch
post-patch {
reinplace -W ${workpath} \
"s|@SWT_ARCH@|${swt_arch}|g;s|@VERSION@|${version}|g" \
{*}${wrappers}
reinplace "s|@DISTPATH@|[percent_encode ${distpath}]|g" \
${build.dir}/gradle/wrapper/gradle-wrapper.properties
}
use_configure no
build.env "GRADLE_USER_HOME=${gradle_home}"
# This uses a local copy of a specific version of gradle. Ideally we
# should use the MacPorts gradle port but this build system is currently
# incompatible with gradle 8 or later:
# https://github.com/AppleCommander/AppleCommander/pull/105
build.cmd ./gradlew
# Build only the modules we want (i.e. not the Linux and Windows GUIs).
build.target {*}[lmap dir ${dirs} {expr {":app:${dir}:build"}}]
# The developer instructions show what Java command to run to start the
# GUI and the distribution includes a macOS icns file and other evidence
# that an application bundle could at one time be generated but that
# part of the build system has been neglected (was not converted from
# ant to gradle) and does not appear to be usable at this time.
# https://github.com/AppleCommander/AppleCommander/issues/112
app.executable ${workpath}/${guiwrapper}
app.icon ${build.dir}/mac/AppleCommander.icns
app.identifier io.github.${name}
set appdir ${applications_dir}/${app.name}.app
set contentsdir ${appdir}/Contents
set javadir ${contentsdir}/Java
set macosdir ${contentsdir}/MacOS
destroot {
# Upstream suggests installing the CLI programs as "ac" and "acx".
# There is already an "ac" program included in macOS:
# https://github.com/AppleCommander/AppleCommander/issues/57
# so up to 1.7.0 Homebrew used to install it as "applecommander"
# instead and MacPorts did as well. 1.7.0 introduced a second CLI
# program "acx" and at that time the Homebrew formula changed the
# old CLI program to "ac" and repurposed "applecommander" to launch
# the GUI (which had previously been "applecommander-gui").
foreach f ${cliwrappers} {
xinstall ${workpath}/${f} ${destroot}${macosdir}
ln -s ${macosdir}/${f} ${destroot}${prefix}/bin
}
# Retain the old "applecommander" name as an alias.
ln -s ac ${destroot}${prefix}/bin/applecommander
xinstall -d ${destroot}${javadir}
xinstall -W ${destroot.dir}/app \
{*}[lmap dir ${dirs} jar ${jars} {expr {"${dir}/build/libs/${name}-${jar}-${version}.jar"}}] \
${destroot}${javadir}
}