Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
451 lines (379 sloc) 18 KB
# -*- 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
# Please keep the minivmac and minivmac-devel ports as similar as possible.
set my_name minivmac
set my_suffix -devel
name ${my_name}${my_suffix}
set my_subport [regsub -- {-devel$} ${subport} {}]
conflicts [lsearch -all -inline -not -exact [list ${my_subport} ${my_subport}-devel] ${subport}]
epoch 4
version 36.04
set my_version [strsed ${version} {g/^.*-20//}]
categories emulators aqua
maintainers {ryandesign @ryandesign}
license GPL-2
homepage http://www.gryphel.org/c/minivmac/beta.html
platforms macosx
dist_subdir ${my_name}
description an emulator of the Macintosh Plus and other \
early Macintosh models
long_description Mini vMac emulates early Macintosh computers \
that use Motorola's 680x0 processors, sold by \
Apple from 1984 to 1996.
options my_variations
default my_variations {}
if {${my_subport} eq ${my_name}} {
livecheck.type regex
livecheck.url ${homepage}
livecheck.version ${my_version}
livecheck.regex ${my_name}-?(\[0-9.-\]+)\\.src
long_description-append The best-tested variation emulates a Macintosh \
Plus, but it can also emulate a Macintosh \
128K, 512K, 512Ke, SE, SE FDHD, Classic, or \
Macintosh II.
revision 0
supported_archs noarch
depends_run port:${my_name}-plus${my_suffix}
distfiles
use_configure no
build {}
destroot {
xinstall -d ${destroot}${prefix}/share/doc/${my_subport}
system "echo ${subport} is a stub port > ${destroot}${prefix}/share/doc/${my_subport}/README"
}
notes "
The ${subport} stub port is not meant to be installed. Instead,\
install one (or more) of the available subports corresponding to the\
Macintosh model(s) you wish to emulate. Use `port info --subports\
${subport}\' to see the list of available subports.
"
} else {
livecheck.type none
revision 0
supported_archs i386 ppc x86_64
distname ${my_name}-${my_version}
master_sites http://www.gryphel.org/d/minivmac/minivmac-${my_version}/:minivmacsource \
sourceforge:project/minivmac/minivmac-extras/extras6:minivmacextras6
set my_src ${distname}.src
set my_src_distfile ${my_src}.tgz
set my_icons icnsosx-1.0.0
set my_icons_distfile ${my_icons}.zip
distfiles ${my_src_distfile}:minivmacsource \
${my_icons_distfile}:minivmacextras6
extract.only ${my_src_distfile}
checksums ${my_src_distfile} \
rmd160 613534f9aa4fd779d245f5511731617df4da3bb6 \
sha256 9b7343cec87723177a203e69ad3baf20f49b4e8f03619e366c4bf2705167dfa4 \
size 500742 \
${my_icons_distfile} \
rmd160 cef6d7d7578464538d0042b0d98379ae7f18fab7 \
sha256 968a0bad51903c9cd3b08476ec5a6572856dc44eedf9ff9b174eb9c59b7b7117 \
size 60373
depends_extract-append bin:unzip:unzip
depends_skip_archcheck unzip
patchfiles configuration.patch \
exit.patch
set my_app_dir "${applications_dir}/Mini vMac"
set mnvm_target(i386) imch
set mnvm_target(ppc) mach
set mnvm_target(x86_64) mc64
# Options that are the same for every variation.
configure.pre_args -api cco \
-gse 1 \
-sony-sum 1 \
-sony-tag 1
# Options set by variations.
configure.args
# Options set by variants.
configure.post_args
worksrcdir ${my_name}
build.dir ${workpath}/build
post-extract {
system -W ${workpath} "unzip -q '${distpath}/${my_icons_distfile}'"
}
post-patch {
# Tell the build system what the Xcode version is; theoretically
# this lets it use flags better suited to that Xcode version.
if [info exists xcodeversion] {
set xcodeversion_split [concat [split ${xcodeversion} {.}] {0 0 0}]
set ide_vers [lindex ${xcodeversion_split} 0][string range [join [lrange ${xcodeversion_split} 1 end] {}] 0 2]
} else {
set ide_vers 9410
}
reinplace "s|@IDE_VERS@|${ide_vers}|g" ${worksrcpath}/setup/CONFIGUR.i
# Use prettier icons.
foreach icon {App Dsk Rom} {
move -force ${workpath}/${my_icons}/icons/${icon}Icon.icns \
${worksrcpath}/src/ICON[string toupper ${icon}]O.icns
}
delete ${workpath}/${my_icons}
}
configure {
# Build the setup tool.
system -W ${worksrcpath}/setup "${configure.cc} ${configure.optflags} tool.c -o ../setup_t"
xinstall -W ${filespath} configure ${worksrcpath}
set my_variation_dirs {}
# Delete remnants from possible previous run.
delete ${build.dir}
# Configure all variations.
foreach my_arch [get_canonical_archs] {
foreach {my_machine my_variation_options} ${my_variations} {
set my_variation ${my_version}_${revision}-[strsed [string tolower ${my_machine}] {g/[^a-z0-9_-]//}]-$mnvm_target(${my_arch})
ui_debug "Configuring ${my_variation}"
set my_variation_dir ${my_arch}/${my_machine}
file mkdir ${build.dir}/${my_variation_dir}
configure.args -t $mnvm_target(${my_arch}) \
-n ${my_variation} \
@ \
{*}${my_variation_options}
set all_configure_args [concat ${configure.pre_args} ${configure.args} ${configure.post_args}]
# Run the configuration program.
system -W ${build.dir}/${my_variation_dir} "${worksrcpath}/configure ${all_configure_args}"
lappend my_variation_dirs [strsed ${my_variation_dir} {g/ /\\\\ /}]
# Use the right compiler.
reinplace "s|gcc|${configure.cc}|g" ${build.dir}/${my_variation_dir}/Makefile
# Use the right deployment target.
reinplace -E {s|-mmacosx-version-min=[0-9.]+||g} ${build.dir}/${my_variation_dir}/Makefile
# Use the right SDK.
if {${configure.sdkroot} eq {}} {
set sdkflags {}
} else {
set sdkflags "-isysroot${configure.sdkroot}"
}
reinplace -E "s|-isysroot *\[^ \]+|${sdkflags}|g" ${build.dir}/${my_variation_dir}/Makefile
# Prevent merge error.
if {[variant_exists universal] && [variant_isset universal]} {
reinplace "s|$mnvm_target(${my_arch})|umch|" ${build.dir}/${my_variation_dir}/cfg/Info.plist
}
}
}
# Set up the global Makefile.
xinstall ${filespath}/Makefile.in ${build.dir}/Makefile
reinplace "s|@SUBDIRS@|[join ${my_variation_dirs}]|" ${build.dir}/Makefile
}
destroot {
foreach my_arch [get_canonical_archs] {
if {[variant_exists universal] && [variant_isset universal]} {
set my_dest ${workpath}/pre-dest/${my_arch}
} else {
set my_dest ${destroot}
}
xinstall -d ${my_dest}${my_app_dir}
foreach {my_machine unused} ${my_variations} {
copy ${build.dir}/${my_arch}/${my_machine}/minivmac.app \
"${my_dest}${my_app_dir}/Mini vMac ${my_machine}.app"
}
}
if {[variant_exists universal] && [variant_isset universal]} {
merge ${workpath}/pre-dest
}
foreach {my_machine unused} ${my_variations} {
set my_dest_mnvm_dat "${destroot}${my_app_dir}/Mini vMac ${my_machine}.app/Contents/mnvm_dat"
destroot.keepdirs-append ${my_dest_mnvm_dat}
}
}
pre-activate {
if {![catch {set installed [lindex [registry_active ${name}] 0]}]} {
set installed_version [lindex ${installed} 1]
set installed_revision [lindex ${installed} 2]
set installed_epoch [lindex ${installed} 5]
if {[vercmp ${installed_epoch} 4] < 0 || (
[vercmp ${installed_epoch} 4] == 0 && (
[vercmp ${installed_version} 36.00alpha-20180506] < 0 || (
[vercmp ${installed_version} 36.00alpha-20180506] == 0 && [vercmp ${installed_revision} 1] < 0
)
)
)} {
registry_deactivate_composite ${name} "" [list ports_nodepcheck 1]
}
}
}
}
set default_screen_size 512x342
set default_speed 8x
subport ${my_name}-128k${my_suffix} {
my_variations {128K} {-m 128K}
}
subport ${my_name}-512k${my_suffix} {
my_variations {512K} {-m 128K -mem 512K}
}
subport ${my_name}-512ke${my_suffix} {
my_variations {512Ke} {-m 512Ke}
}
subport ${my_name}-plus${my_suffix} {
my_variations {Plus} {-m Plus}
default_variants +icon_master
}
subport ${my_name}-se${my_suffix} {
my_variations {SE} {-m SE}
}
subport ${my_name}-sefdhd${my_suffix} {
my_variations {SE FDHD} {-m SEFDHD}
}
subport ${my_name}-classic${my_suffix} {
my_variations {Classic} {-m Classic}
}
subport ${my_name}-ii${my_suffix} {
my_variations {II} {-m II}
set default_color_depth 256
set default_screen_size 640x480
set default_speed 4x
}
subport ${my_name}-custom${my_suffix} {
long_description-append This subport allows the user to compile custom \
variations of Mini vMac.
archive_sites
set custom_conf_name custom.conf
set custom_conf ${prefix}/etc/${my_name}/${custom_conf_name}
set local_custom_conf ${worksrcpath}/${custom_conf_name}
pre-configure {
if {[file exists ${custom_conf}]} {
copy -force ${custom_conf} ${local_custom_conf}
} else {
delete ${local_custom_conf}
}
setup_custom_variations
}
pre-destroot {
setup_custom_variations
}
proc custom_variation_error {err} {
global name
ui_error "For instructions, see"
ui_error " https://github.com/macports/macports-ports/blob/master/emulators/${name}/files/README-custom.md"
return -code error ${err}
}
proc add_custom_variation {variation_name variation_options} {
if {${variation_options} ne {}} {
my_variations-append ${variation_name} ${variation_options}
}
}
proc setup_custom_variations {} {
global custom_conf custom_conf_name local_custom_conf filespath
if {![file exists ${local_custom_conf}]} {
ui_error "This subport allows you to compile custom variations. Copy"
ui_error " ${filespath}/${custom_conf_name}.sample"
ui_error "to"
ui_error " ${custom_conf}"
ui_error "and then edit ${custom_conf_name}."
custom_variation_error "missing ${custom_conf_name}"
}
my_variations
set fp [open ${local_custom_conf} r]
set custom_data [read ${fp}]
close ${fp}
set custom_lines [split ${custom_data} "\n"]
set custom_name {Custom}
set custom_options {}
set custom_line_number 0
set custom_line_continue no
foreach custom_line ${custom_lines} {
incr custom_line_number
if [regexp -- {^\s*[;#]} ${custom_line}] {
continue
} elseif ${custom_line_continue} {
set custom_line_continue [regsub -- {^(.*)\\$} ${custom_line} {\1} custom_line]
append custom_${custom_key} " [string trim ${custom_line}]"
} elseif [regexp -- {^([^=]+)=(.*)$} ${custom_line} -> custom_key custom_value] {
set custom_line_continue [regsub -- {^(.*)\\$} ${custom_value} {\1} custom_value]
set custom_key [string trim ${custom_key}]
set custom_${custom_key} [string trim ${custom_value}]
} elseif [regexp -- {^\s*\[([^\]]+)\]\s*$} ${custom_line} -> new_custom_name] {
add_custom_variation ${custom_name} ${custom_options}
set custom_name ${new_custom_name}
set custom_options {}
} elseif ![regexp -- {^\s*$} ${custom_line}] {
ui_error "Syntax error on line ${custom_line_number} of ${custom_conf_name}: '${custom_line}'"
custom_variation_error "syntax error in ${custom_conf_name}"
}
}
add_custom_variation ${custom_name} ${custom_options}
if {[option my_variations] eq {}} {
ui_error "No custom variations defined in ${custom_conf_name}."
custom_variation_error "no variations in ${custom_conf_name}"
}
}
}
if {${my_subport} ni [list "${my_name}" "${my_name}-custom"]} {
description a Macintosh [lindex ${my_variations} 0] emulator
long_description-append This subport emulates a Macintosh \
[lindex ${my_variations} 0].
if {[lindex ${my_variations} 0] eq "Plus"} {
long_description-append This is the best-tested variation.
}
long_description-append There are other subports that emulate other Macintosh \
models.
variant icon_master description {Take ownership of disk image files and ROM image files; at most one copy of Mini vMac should do this} {
configure.post_args-append \
-im 1
}
variant min_extensions description {Disable extensions not needed for most situations, including clipboard import/export and file/disk image creation} {
configure.post_args-append \
-min-extn
}
if {${my_subport} eq "${my_name}-ii"} {
set color_depths {
0 bw {Black and white only}
1 4 {4 colors or black and white}
2 16 {16 colors or black and white}
3 256 {256 colors or black and white}
4 thousands {Thousands of colors or black and white}
5 millions {Millions of colors or black and white}
}
foreach {color_depth color_depth_name color_depth_description} ${color_depths} {
lappend color_depth_variants colors_${color_depth_name}
}
set set_default_color_depth_variant yes
foreach {color_depth color_depth_name color_depth_description} ${color_depths} {
set color_depth_variant colors_${color_depth_name}
variant ${color_depth_variant} conflicts {*}[lsearch -all -inline -not -exact ${color_depth_variants} ${color_depth_variant}] description ${color_depth_description} "
configure.post_args-append -depth ${color_depth}
"
if [variant_isset ${color_depth_variant}] {
set set_default_color_depth_variant no
}
}
if ${set_default_color_depth_variant} {
default_variants +colors_${default_color_depth}
}
}
set screen_sizes {512x342 512x384}
if {${my_subport} ne "${my_name}-128k"} {
lappend screen_sizes 640x480 800x600 1024x768
}
foreach screen_size ${screen_sizes} {
lappend screen_size_variants screen_${screen_size}
}
set set_default_screen_size_variant yes
foreach screen_size ${screen_sizes} {
set screen_hres [lindex [split ${screen_size} {x}] 0]
set screen_vres [lindex [split ${screen_size} {x}] 1]
set screen_size_variant screen_${screen_size}
variant ${screen_size_variant} conflicts {*}[lsearch -all -inline -not -exact ${screen_size_variants} ${screen_size_variant}] description "Screen size ${screen_size}" "
configure.post_args-append -hres ${screen_hres} -vres ${screen_vres}
"
if [variant_isset ${screen_size_variant}] {
set set_default_screen_size_variant no
}
}
if ${set_default_screen_size_variant} {
default_variants +screen_${default_screen_size}
}
set speeds {z 1x 1 2x 2 4x 3 8x 4 16x 5 32x a unlimited}
foreach {speed speed_name} ${speeds} {
lappend speed_variants speed_${speed_name}
}
set set_default_speed_variant yes
foreach {speed speed_name} ${speeds} {
set speed_variant speed_${speed_name}
variant ${speed_variant} conflicts {*}[lsearch -all -inline -not -exact ${speed_variants} ${speed_variant}] description "Default CPU speed ${speed_name}" "
configure.post_args-append -speed ${speed}
"
if [variant_isset ${speed_variant}] {
set set_default_speed_variant no
}
}
if ${set_default_speed_variant} {
default_variants +speed_${default_speed}
}
}
You can’t perform that action at this time.