<pre style='margin:0'>
Aaron Madlon-Kay (amake) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/3ceb23013732a89800b6d15132d5e2751a14c536">https://github.com/macports/macports-ports/commit/3ceb23013732a89800b6d15132d5e2751a14c536</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 3ceb23013732a89800b6d15132d5e2751a14c536
</span>Author: Aaron Madlon-Kay <aaron@madlon-kay.com>
AuthorDate: Tue Feb 18 12:11:00 2025 +0900

<span style='display:block; white-space:pre;color:#404040;'>    pub-1.0: new portgroup
</span>---
 _resources/port1.0/group/pub-1.0.tcl | 115 +++++++++++++++++++++++++++++++++++
 1 file changed, 115 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/_resources/port1.0/group/pub-1.0.tcl b/_resources/port1.0/group/pub-1.0.tcl
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..929c6459576
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/_resources/port1.0/group/pub-1.0.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,115 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; truncate-lines: t -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This PortGroup supports the Dart pub build system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Usage:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# PortGroup     pub 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# pub.packages \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     foo  1.0.1  abcdef123456... \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     bar  2.5.0  fedcba654321...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The pub.packages option expects a list with 3-tuples consisting of name,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# version, and sha256 checksum. Only sha256 is supported at this time as the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# checksum will be reused by pub internally.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The list of packages and their checksums can be found in the pubspec.lock file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# in the upstream source code. The pub2port generator can be used to automate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# updates of this list for new releases.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/amake/pub2port
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Dependencies on packages not published on pub.dev are currently unsupported.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup                 dart 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    pub.home \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    pub.get_args \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    pub.packages
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default pub.home          {${workpath}/.home/.pub-cache}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default pub.get_args      {--offline --enforce-lockfile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default pub.packages      {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set pub_env {PUB_CACHE=${pub.home}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default build.env         ${pub_env}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default test.env          ${pub_env}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The distfiles of the main port will also be stored in this directory, but this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# is the only way to allow reusing the same packages across multiple ports.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default dist_subdir  {[expr {[llength ${pub.packages}] > 0 ? "pub-packages" : ${name}}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default extract.only {[pub::disttagclean ${distfiles}]}
</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;'>+# Internal procedures
</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;'>+namespace eval pub {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Based on rust::disttagclean from cargo_fetch-1.0.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc pub::disttagclean {list} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$list eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return $list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach fname $list {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set name [getdistname ${fname}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set is_pkg no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach {pname pversion chksum} [option pub.packages] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set pubfile ${pname}-${pversion}.tar.gz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${name} eq ${pubfile}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set is_pkg 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;'>+        if {!${is_pkg}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend val ${name}
</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;'>+    return $val
</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;'>+proc pub::handle_packages {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach {pname pversion chksum} [option pub.packages] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # The same package name can appear with multiple versions. Use a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # combination of crate name and checksum as unique identifier. As the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # :disttag cannot contain dots, the version number cannot be used.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set pubfile         ${pname}-${pversion}.tar.gz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set pubtag          pub-${pname}-${chksum}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        distfiles-append    ${pubfile}:${pubtag}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        master_sites-append https://pub.dev/api/archives/:${pubtag}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums-append    ${pubfile} sha256 ${chksum}
</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;'>+port::register_callback pub::handle_packages
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc pub::extract_package {pname pversion pubfile} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set targetdir "[option pub.home]/hosted/pub.dev/${pname}-${pversion}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file mkdir ${targetdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set tar [findBinary tar ${portutil::autoconf::tar_path}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    system -W ${targetdir} "${tar} -xf [shellescape [option distpath]/${pubfile}]"
</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;'>+proc pub::import_package {pname pversion chksum pubfile} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global pub.home
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    pub::extract_package ${pname} ${pversion} ${pubfile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set chkfile [open "${pub.home}/hosted-hashes/pub.dev/${pname}-${pversion}.sha256" "w"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts -nonewline ${chkfile} ${chksum}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    close ${chkfile}
</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;'>+post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength ${pub.packages}] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file mkdir ${pub.home}/hosted/pub.dev ${pub.home}/hosted-hashes/pub.dev
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach {pname pversion chksum} [option pub.packages] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set pubfile ${pname}-${pversion}.tar.gz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            pub::import_package ${pname} ${pversion} ${chksum} ${pubfile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        system -W ${worksrcpath} "PUB_CACHE=${pub.home} ${dart.bin} pub get ${pub.get_args}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span></pre><pre style='margin:0'>

</pre>