<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.
</pre>
<p><a href="https://github.com/macports/macports-base/commit/dadc5335278f6f6f89233ad0f7d8b3a48552139f">https://github.com/macports/macports-base/commit/dadc5335278f6f6f89233ad0f7d8b3a48552139f</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit dadc5335278f6f6f89233ad0f7d8b3a48552139f
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sun Sep 25 14:20:25 2022 +1000
<span style='display:block; white-space:pre;color:#404040;'> Add startupitem.custom_file option
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> This can be used to specify a .plist file that should be installed
</span><span style='display:block; white-space:pre;color:#404040;'> rather than generating one. That was possible to do manually before,
</span><span style='display:block; white-space:pre;color:#404040;'> but required knowledge of the implementation details in order to put
</span><span style='display:block; white-space:pre;color:#404040;'> things in the right place.
</span>---
src/port1.0/portstartupitem.tcl | 65 ++++++++++++++++++++++++++---------------
1 file changed, 42 insertions(+), 23 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portstartupitem.tcl b/src/port1.0/portstartupitem.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index b568e50bd..69ebb1b21 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portstartupitem.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portstartupitem.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -81,16 +81,17 @@ namespace eval portstartupitem {
</span> }
options startupitems startupitem.autostart startupitem.debug \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- startupitem.create startupitem.executable \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- startupitem.user startupitem.group \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ startupitem.create startupitem.custom_file \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ startupitem.executable startupitem.group \
</span> startupitem.init startupitem.install startupitem.location \
startupitem.logevents startupitem.logfile startupitem.name \
startupitem.netchange startupitem.pidfile startupitem.plist \
startupitem.requires startupitem.restart startupitem.start \
startupitem.stop startupitem.type startupitem.uniquename \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- startupitem.daemondo.verbosity
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ startupitem.user startupitem.daemondo.verbosity
</span>
default startupitem.autostart no
<span style='display:block; white-space:pre;background:#e0ffe0;'>+default startupitem.custom_file ""
</span> default startupitem.debug no
default startupitem.executable ""
default startupitem.group ""
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -141,10 +142,10 @@ proc portstartupitem::get_startupitem_type {} {
</span> # each startupitem that has been defined in the portfile
proc portstartupitem::foreach_startupitem {body} {
global startupitems
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set vars [list autostart debug create executable group init install \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- location logevents logfile name netchange pidfile plist \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- requires restart start stop type uniquename user \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- daemondo.verbosity]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set vars [list autostart create custom_file debug executable group \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ init install location logevents logfile name netchange \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pidfile plist requires restart start stop type \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uniquename user daemondo.verbosity]
</span>
array set startupitems_dict {}
if {[info exists startupitems] && $startupitems ne ""} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -259,18 +260,42 @@ proc portstartupitem::add_notes {} {
</span> # Register the above procedure as a callback after Portfile evaluation
port::register_callback portstartupitem::add_notes
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Helper: link given .plist into the correct location
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portstartupitem::install_darwin_launchd {srcpath dstdir install} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global destroot prefix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[getuid] == 0 && $install} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file mkdir ${destroot}/Library/${dstdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -sf $srcpath ${destroot}/Library/${dstdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -sf $srcpath ${destroot}${prefix}/etc/${dstdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> proc portstartupitem::startupitem_create_darwin_launchd {attrs} {
global UI_PREFIX prefix destroot destroot.keepdirs subport macosx_deployment_target
array set si $attrs
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set scriptdir ${prefix}/etc/startup
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set itemname $si(name)
</span> set uniquename $si(uniquename)
set plistname $si(plist)
set daemondest $si(location)
set itemdir ${prefix}/etc/${daemondest}/${uniquename}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file mkdir ${destroot}${itemdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[getuid] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file attributes ${destroot}${itemdir} -owner root -group wheel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$si(custom_file) ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # The port is supplying its own plist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file copy $si(custom_file) ${destroot}${itemdir}/${plistname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ install_darwin_launchd ${itemdir}/${plistname} $daemondest $si(install)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set scriptdir ${prefix}/etc/startup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set itemname $si(name)
</span> set username $si(user)
set groupname $si(group)
set args [list \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -278,11 +303,6 @@ proc portstartupitem::startupitem_create_darwin_launchd {attrs} {
</span> "--label=${itemname}" \
]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- file mkdir ${destroot}${itemdir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[getuid] == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- file attributes ${destroot}${itemdir} -owner root -group wheel
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> if {$si(executable) ne "" &&
$si(init) eq "" &&
$si(start) eq "" &&
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -480,20 +500,19 @@ proc portstartupitem::startupitem_create_darwin_launchd {attrs} {
</span>
close ${plist}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[getuid] == 0 && $si(install)} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- file mkdir "${destroot}/Library/${daemondest}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ln -sf "${itemdir}/${plistname}" "${destroot}/Library/${daemondest}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ln -sf ${itemdir}/${plistname} ${destroot}${prefix}/etc/${daemondest}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ install_darwin_launchd ${itemdir}/${plistname} $daemondest $si(install)
</span> }
proc portstartupitem::startupitem_create {} {
global UI_PREFIX
foreach_startupitem {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${si_type} ne "none" && [tbool si_create]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_notice "$UI_PREFIX [msgcat::mc "Creating ${si_type} control script '$si_name'"]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${si_type} ne "none" && ([tbool si_create] || $si_custom_file ne "")} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[tbool si_create]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_notice "$UI_PREFIX [msgcat::mc "Creating ${si_type} control script '$si_name'"]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_notice "$UI_PREFIX [msgcat::mc "Installing ${si_type} control script '$si_name'"]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
switch -- ${si_type} {
launchd { startupitem_create_darwin_launchd [array get si_dict] }
</pre><pre style='margin:0'>
</pre>