<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>