<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/84d5040b7739311e75879d3afb4c4e1f464469d1">https://github.com/macports/macports-ports/commit/84d5040b7739311e75879d3afb4c4e1f464469d1</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 84d5040b773 samba4: Fix linking issues Closes: https://trac.macports.org/ticket/61385
</span>84d5040b773 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 84d5040b7739311e75879d3afb4c4e1f464469d1
</span>Author: Hamid Maadani <zetta22000@yahoo.com>
AuthorDate: Fri Oct 30 09:22:26 2020 -0700

<span style='display:block; white-space:pre;color:#404040;'>    samba4: Fix linking issues
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/61385
</span>---
 net/samba4/Portfile | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 120 insertions(+), 4 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/samba4/Portfile b/net/samba4/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 2f662083010..d1c8344778f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/samba4/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/samba4/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -72,12 +72,128 @@ destroot.cmd           ${configure.python} ./buildtools/bin/waf -v
</span> destroot.env-append       DESTDIR=${destroot}
 destroot.destdir
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# this will be used on Darwin, to correct the IDs of a binary's library dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# so that they will be found in the location where they are actually installed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options changelist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+changelist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> post-destroot {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # add a postfix of '4' to all executables to avoid file conflicts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   foreach dir {bin sbin} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           foreach bin [glob -directory "${destroot}${prefix}/${dir}" -type f *] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   file rename "${bin}" "${bin}4"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   platform darwin {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           # install a file missed by the build system:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           xinstall -m 755 ${worksrcpath}/bin/shared/private/libdnsserver-common-samba4.dylib ${destroot}${prefix}/lib/samba
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           # On Darwin the build system fails to set library install names AND uses absolute paths
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           # into the build directory (-o ${build.dir}/path/to/libfoo.dylib).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           # We want to run without need for ${build.dir} so we need to fix the IDs and the "rpaths".
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           proc canonical {lf} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   set l [file normalize ${lf}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   if {[file type ${l}] eq "link"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           set target [file readlink ${l}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           if {[file pathtype ${target}] eq "relative"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   return [file normalize [file join [file dirname ${l}] ${target}]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   return [file normalize ${target}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           return ${l}
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+           # First, find all .dylib files, record their current ID (in changelist) and correct it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           ui_msg "--->  Fixing dylib IDs"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           array set libdone {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           catch {exec -ignorestderr find ${destroot}${prefix} -regex {.*/lib[^.]*\.[0-9]\.dylib}} versioneddylibs err
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           foreach lf ${versioneddylibs} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   # we may get output from `find` that's not a file, so check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   if {[file exists ${lf}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           set l [canonical ${lf}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           if {[string first ${destroot} ${l}] < 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   # shouldn't happen but better safe than sorry
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   ui_warn "${lf} -> ${l} !"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   # NB: the install name is based on the symlink, not the target!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   set id [exec otool -D ${lf} | tail -1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   # the new install name == ID: the full path minus ${destroot}.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   set instname [string map [list ${destroot} ""] ${lf}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   if {${instname} ne ${id}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           system "install_name_tool -id ${instname} ${l}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           # the current ID must be changed to the new one in all files that depend on it:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           changelist-append -change ${id} ${instname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           # annoyingly some libraries will still their intermediate library ID
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           # and who knows if other binaries depend on those IDs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           # Just change both...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           if {[string last ".inst.dylib" ${id}] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                   set id2 "[file rootname [file rootname ${id}]].dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                   set id2 "[file rootname ${id}].inst.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           changelist-append -change ${id2} ${instname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   # mark the actual file we just processed as "done".
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   set libdone(${l}) yes
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+           # idem for the unversioned libraries - by finding all and then ignoring those already processed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           catch {exec -ignorestderr find ${destroot}${prefix} -name "*.dylib"} otherdylibs err
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           foreach lf ${otherdylibs} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   if {[file exists ${lf}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           set l [canonical ${lf}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           if {[string first ${destroot} ${l}] < 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   # shouldn't happen but better safe than sorry
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   ui_warn "${lf} -> ${l} !"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           } elseif {![info exists libdone(${l})]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   set id [exec otool -D ${lf} | tail -1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   set instname [string map [list ${destroot} ""] ${lf}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   if {${instname} ne ${id}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           system "install_name_tool -id ${instname} ${l}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           changelist-append -change ${id} ${instname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           if {[string last ".inst.dylib" ${id}] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                   set id2 "[file rootname [file rootname ${id}]].dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                   set id2 "[file rootname ${id}].inst.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           changelist-append -change ${id2} ${instname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   ui_debug "Library ${l} has already been fixed"
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+           ui_debug "Changelist:"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           ui_debug "${changelist}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           ui_msg "--->  Updating all binaries with the new IDs"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           # reset libdone
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           array unset libdone
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           catch {exec -ignorestderr find ${destroot}${prefix} -name "*.dylib" -o -name "*.so"} alllibs err
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           foreach lf ${alllibs} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   if {[file exists ${lf}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           set exe [canonical ${lf}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           if {![info exists libdone(${exe})]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   system "install_name_tool ${changelist} ${exe}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   set libdone(${exe}) yes
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+           foreach exe [glob ${destroot}${prefix}/bin/*] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   if {[file exists ${exe}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           # catch because we could encounter scripts
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           catch {system "install_name_tool ${changelist} ${exe}"}
</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;'>+           foreach exe [glob ${destroot}${prefix}/sbin/*] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   if {[file exists ${exe}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           # catch because we could encounter scripts
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           catch {system "install_name_tool ${changelist} ${exe}"}
</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;'>+           foreach exe [glob ${destroot}${prefix}/libexec/samba/*] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   if {[file exists ${exe}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           # catch because we could encounter scripts
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           catch {system "install_name_tool ${changelist} ${exe}"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   }
</span>           }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                # All done, "already"!
</span>   }
 }
 
</pre><pre style='margin:0'>

</pre>