git: a507a7026c40 - main - packages: Set dependency origin in generate-ucl.lua

From: Lexi Winter <ivy_at_FreeBSD.org>
Date: Wed, 08 Oct 2025 03:54:26 UTC
The branch main has been updated by ivy:

URL: https://cgit.FreeBSD.org/src/commit/?id=a507a7026c402a4c10902f3aadb3c6a70c442964

commit a507a7026c402a4c10902f3aadb3c6a70c442964
Author:     Lexi Winter <ivy@FreeBSD.org>
AuthorDate: 2025-10-08 03:24:25 +0000
Commit:     Lexi Winter <ivy@FreeBSD.org>
CommitDate: 2025-10-08 03:24:25 +0000

    packages: Set dependency origin in generate-ucl.lua
    
    Commit 822fd5606748 changed the origin of packages from "base"
    to "base/<package name>", but the old origin was still used for
    dependencies.
    
    Aside from being wrong, this confuses pkg <= 2.3.1 and causes
    "pkg info -d" to show the dependencies as "<pkgname>-(null)"
    instead of the correct version string.
    
    Remove the explicit origin from dependencies in the UCL files,
    and instead populate this during the build in generate-ucl.lua.
    In the (very unlikely) case that an explicit origin is still
    needed, don't overwrite one if it's already present.
    
    MFC after:      1 day
    Fixes: 822fd5606748 ("pkgbase: set origin for each packages as base/FreeBSD-*")
    Reported by:    bapt
    Reviewed by:    cperciva, bapt
    Sponsored by:   https://www.patreon.com/bsdivy
    Differential Revision:  https://reviews.freebsd.org/D52892
---
 release/packages/generate-set-ucl.lua       | 10 +++++-----
 release/packages/generate-ucl.lua           |  4 +++-
 release/packages/set-template.ucl           |  2 +-
 release/packages/sets/base-dbg.ucl          |  2 --
 release/packages/sets/base-jail-dbg.ucl     |  2 --
 release/packages/sets/base-jail.ucl         |  3 ---
 release/packages/sets/base.ucl              |  3 ---
 release/packages/sets/optional-dbg.ucl      |  1 -
 release/packages/sets/optional-jail-dbg.ucl |  1 -
 release/packages/sets/optional-jail.ucl     |  1 -
 release/packages/sets/optional.ucl          |  1 -
 release/packages/ucl/at.ucl                 |  2 --
 release/packages/ucl/bluetooth.ucl          |  1 -
 release/packages/ucl/bsdconfig.ucl          |  1 -
 release/packages/ucl/bsdinstall.ucl         |  1 -
 release/packages/ucl/caroot.ucl             |  1 -
 release/packages/ucl/certctl.ucl            |  1 -
 release/packages/ucl/clang.ucl              |  2 --
 release/packages/ucl/devd.ucl               |  1 -
 release/packages/ucl/newsyslog.ucl          |  1 -
 release/packages/ucl/periodic.ucl           |  1 -
 release/packages/ucl/rc.ucl                 |  1 -
 release/packages/ucl/rcmds.ucl              |  1 -
 release/packages/ucl/sendmail.ucl           |  1 -
 release/packages/ucl/tests-all.ucl          |  3 ---
 release/packages/ucl/yp.ucl                 |  1 -
 26 files changed, 9 insertions(+), 40 deletions(-)

diff --git a/release/packages/generate-set-ucl.lua b/release/packages/generate-set-ucl.lua
index 3c8474bf8e68..ab8765c8cf2d 100755
--- a/release/packages/generate-set-ucl.lua
+++ b/release/packages/generate-set-ucl.lua
@@ -75,15 +75,15 @@ end
 -- Add dependencies from SET_DEPENDS.
 for dep in string.gmatch(pkgdeps, "[^%s]+") do
 	obj["deps"][dep] = {
-		["origin"] = "base"
+		["origin"] = "base/"..dep
 	}
 end
 
--- Add a version key to all dependencies, otherwise pkg doesn't like it.
+-- Add a version and origin key to all dependencies, otherwise pkg
+-- doesn't like it.
 for dep, opts in pairs(obj["deps"]) do
-	if obj["deps"][dep]["version"] == nil then
-		obj["deps"][dep]["version"] = pkgversion
-	end
+	obj["deps"][dep]["origin"] = obj["deps"][dep]["origin"] or "base/"..dep
+	obj["deps"][dep]["version"] = obj["deps"][dep]["version"] or pkgversion
 end
 
 -- If there are no dependencies, remove the deps key, otherwise pkg raises an
diff --git a/release/packages/generate-ucl.lua b/release/packages/generate-ucl.lua
index c61cbb251d8b..d9125182a1a4 100755
--- a/release/packages/generate-ucl.lua
+++ b/release/packages/generate-ucl.lua
@@ -161,7 +161,7 @@ if add_gen_dep(pkgname, pkggenname) then
 	end
 	obj["deps"][pkggenname] = {
 		["version"] = pkgversion,
-		["origin"] = "base"
+		["origin"] = "base/"..pkgprefix.."-"..pkggenname,
 	}
 end
 
@@ -217,6 +217,8 @@ if pkgprefix ~= nil and obj["deps"] ~= nil then
 	newdeps = {}
 	for dep, opts in pairs(obj["deps"]) do
 		local newdep = pkgprefix .. "-" .. dep
+		-- Make sure origin is set.
+		opts["origin"] = opts["origin"] or "base/"..newdep
 		newdeps[newdep] = opts
 	end
 	obj["deps"] = newdeps
diff --git a/release/packages/set-template.ucl b/release/packages/set-template.ucl
index b7ea2b830168..ff2c2d3e6057 100644
--- a/release/packages/set-template.ucl
+++ b/release/packages/set-template.ucl
@@ -4,7 +4,7 @@
 
 name = "${PKG_NAME_PREFIX}-set-${PKGNAME}"
 prefix = "/"
-origin = "base"
+origin = "base/${PKG_NAME_PREFIX}-set-${PKGNAME}"
 categories = [ base ]
 version = "${VERSION}"
 maintainer = "${PKG_MAINTAINER}"
diff --git a/release/packages/sets/base-dbg.ucl b/release/packages/sets/base-dbg.ucl
index d9eeb2c49677..79e5de22522e 100644
--- a/release/packages/sets/base-dbg.ucl
+++ b/release/packages/sets/base-dbg.ucl
@@ -25,10 +25,8 @@ EOD
 deps {
 	"set-minimal-dbg" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 	"set-devel-dbg" {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
diff --git a/release/packages/sets/base-jail-dbg.ucl b/release/packages/sets/base-jail-dbg.ucl
index 7996b9afbb21..56a130367fa3 100644
--- a/release/packages/sets/base-jail-dbg.ucl
+++ b/release/packages/sets/base-jail-dbg.ucl
@@ -25,10 +25,8 @@ EOD
 deps {
 	"set-minimal-jail-dbg" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 	"set-devel-dbg" {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
diff --git a/release/packages/sets/base-jail.ucl b/release/packages/sets/base-jail.ucl
index d1dc17bc9860..88861510f954 100644
--- a/release/packages/sets/base-jail.ucl
+++ b/release/packages/sets/base-jail.ucl
@@ -28,14 +28,11 @@ EOD
 deps {
 	"set-minimal-jail" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 	"set-optional-jail" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 	"set-devel" {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
diff --git a/release/packages/sets/base.ucl b/release/packages/sets/base.ucl
index 823e2342fab8..6a970668c13e 100644
--- a/release/packages/sets/base.ucl
+++ b/release/packages/sets/base.ucl
@@ -31,14 +31,11 @@ EOD
 deps {
 	"set-minimal" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 	"set-optional" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 	"set-devel" {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
diff --git a/release/packages/sets/optional-dbg.ucl b/release/packages/sets/optional-dbg.ucl
index a221327518f9..882469c3ad57 100644
--- a/release/packages/sets/optional-dbg.ucl
+++ b/release/packages/sets/optional-dbg.ucl
@@ -26,6 +26,5 @@ EOD
 deps {
 	"set-minimal-dbg" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 }
diff --git a/release/packages/sets/optional-jail-dbg.ucl b/release/packages/sets/optional-jail-dbg.ucl
index 84c76fa407fe..54e7309abdf1 100644
--- a/release/packages/sets/optional-jail-dbg.ucl
+++ b/release/packages/sets/optional-jail-dbg.ucl
@@ -26,6 +26,5 @@ EOD
 deps {
 	"set-minimal-jail-dbg" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 }
diff --git a/release/packages/sets/optional-jail.ucl b/release/packages/sets/optional-jail.ucl
index da6d5fb00825..877023a10eed 100644
--- a/release/packages/sets/optional-jail.ucl
+++ b/release/packages/sets/optional-jail.ucl
@@ -29,6 +29,5 @@ EOD
 deps {
 	"set-minimal-jail" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 }
diff --git a/release/packages/sets/optional.ucl b/release/packages/sets/optional.ucl
index f50fa17e4297..8b44dfe1f3ea 100644
--- a/release/packages/sets/optional.ucl
+++ b/release/packages/sets/optional.ucl
@@ -28,6 +28,5 @@ EOD
 deps {
 	"set-minimal" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 }
diff --git a/release/packages/ucl/at.ucl b/release/packages/ucl/at.ucl
index 25724adfd7af..1e2495028b30 100644
--- a/release/packages/ucl/at.ucl
+++ b/release/packages/ucl/at.ucl
@@ -20,13 +20,11 @@ deps {
 	# atrun relies on cron to work.
 	"cron" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 
 	# at(1) passes the command to /bin/sh
 	"runtime" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 }
 
diff --git a/release/packages/ucl/bluetooth.ucl b/release/packages/ucl/bluetooth.ucl
index c87d5e9c8420..e9c4787fdbfb 100644
--- a/release/packages/ucl/bluetooth.ucl
+++ b/release/packages/ucl/bluetooth.ucl
@@ -20,7 +20,6 @@ deps {
 	# rfcomm_pppd(8) uses ppp(8)
 	"ppp" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 }
 
diff --git a/release/packages/ucl/bsdconfig.ucl b/release/packages/ucl/bsdconfig.ucl
index 752c352ae904..98981f65bea4 100644
--- a/release/packages/ucl/bsdconfig.ucl
+++ b/release/packages/ucl/bsdconfig.ucl
@@ -20,6 +20,5 @@ deps {
 	# bsdconfig is written in shell script, so it needs /bin/sh
 	"runtime" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 }
diff --git a/release/packages/ucl/bsdinstall.ucl b/release/packages/ucl/bsdinstall.ucl
index 6e5cbce4e342..7fe8898b9427 100644
--- a/release/packages/ucl/bsdinstall.ucl
+++ b/release/packages/ucl/bsdinstall.ucl
@@ -20,6 +20,5 @@ deps {
 	# bsdinstall is written in shell script, so it needs /bin/sh
 	"runtime" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 }
diff --git a/release/packages/ucl/caroot.ucl b/release/packages/ucl/caroot.ucl
index 4d2b52d300fc..e43c9d0771f2 100644
--- a/release/packages/ucl/caroot.ucl
+++ b/release/packages/ucl/caroot.ucl
@@ -1,7 +1,6 @@
 deps {
 	"certctl": {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
 scripts: {
diff --git a/release/packages/ucl/certctl.ucl b/release/packages/ucl/certctl.ucl
index f12158459c5e..d2b4790946ec 100644
--- a/release/packages/ucl/certctl.ucl
+++ b/release/packages/ucl/certctl.ucl
@@ -19,6 +19,5 @@
 deps {
 	"openssl": {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
diff --git a/release/packages/ucl/clang.ucl b/release/packages/ucl/clang.ucl
index 956b769a1ee7..3c15d9b7ef03 100644
--- a/release/packages/ucl/clang.ucl
+++ b/release/packages/ucl/clang.ucl
@@ -1,11 +1,9 @@
 deps {
 	"lld" {
 		version = "${VERSION}"
-		origin = "base"
 	}
 
 	"libcompiler_rt-dev" {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
diff --git a/release/packages/ucl/devd.ucl b/release/packages/ucl/devd.ucl
index 8d83ab9ee020..c5fcfef1c368 100644
--- a/release/packages/ucl/devd.ucl
+++ b/release/packages/ucl/devd.ucl
@@ -20,6 +20,5 @@ deps {
 	# devd uses /bin/sh to invoke hooks.
 	"runtime" {
 		version = "${VERSION}"
-		origin = "base"
 	},
 }
diff --git a/release/packages/ucl/newsyslog.ucl b/release/packages/ucl/newsyslog.ucl
index b1dfa8253737..27b212a42b77 100644
--- a/release/packages/ucl/newsyslog.ucl
+++ b/release/packages/ucl/newsyslog.ucl
@@ -2,6 +2,5 @@ deps {
 	# newsyslog uses bzip2 to compress log files.
 	"bzip2" {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
diff --git a/release/packages/ucl/periodic.ucl b/release/packages/ucl/periodic.ucl
index c8b8ac57c676..2a8a482f959f 100644
--- a/release/packages/ucl/periodic.ucl
+++ b/release/packages/ucl/periodic.ucl
@@ -19,6 +19,5 @@
 deps {
 	"cron" {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
diff --git a/release/packages/ucl/rc.ucl b/release/packages/ucl/rc.ucl
index 1a734aaa187c..854963a81ca1 100644
--- a/release/packages/ucl/rc.ucl
+++ b/release/packages/ucl/rc.ucl
@@ -19,7 +19,6 @@
 deps {
 	"runtime": {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
 
diff --git a/release/packages/ucl/rcmds.ucl b/release/packages/ucl/rcmds.ucl
index b572ff25e6c3..de608487e07d 100644
--- a/release/packages/ucl/rcmds.ucl
+++ b/release/packages/ucl/rcmds.ucl
@@ -20,7 +20,6 @@ deps {
 	# The RPC daemons require rpcbind.
 	"utilities" {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
 
diff --git a/release/packages/ucl/sendmail.ucl b/release/packages/ucl/sendmail.ucl
index 62d0a1f2bc61..318fd5aabbe5 100644
--- a/release/packages/ucl/sendmail.ucl
+++ b/release/packages/ucl/sendmail.ucl
@@ -20,6 +20,5 @@ deps {
 	# sendmail requires make to build its configuration file.
 	"bmake": {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
diff --git a/release/packages/ucl/tests-all.ucl b/release/packages/ucl/tests-all.ucl
index 1f3b027b7037..3ad2d0f50e6b 100644
--- a/release/packages/ucl/tests-all.ucl
+++ b/release/packages/ucl/tests-all.ucl
@@ -27,20 +27,17 @@ deps {
 	# Nearly all the tests require atf to run.
 	"atf": {
 		version = "${VERSION}"
-		origin = "base"
 	},
 
 	# The test framework requires Kyua.
 	"kyua": {
 		version = "${VERSION}"
-		origin = "base"
 	},
 
 	# Since the purpose of the tests is to test the base system, the base
 	# system must be installed.
 	"set-base": {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }
 
diff --git a/release/packages/ucl/yp.ucl b/release/packages/ucl/yp.ucl
index be4310c85591..9babdbe98fb1 100644
--- a/release/packages/ucl/yp.ucl
+++ b/release/packages/ucl/yp.ucl
@@ -20,6 +20,5 @@ deps {
 	# YP requires bmake to rebuild the database.
 	"bmake": {
 		version = "${VERSION}"
-		origin = "base"
 	}
 }