From nobody Tue Jul 15 05:12:55 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bh6lC4kryz61wxk; Tue, 15 Jul 2025 05:12:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bh6lC2Rs4z3m5x; Tue, 15 Jul 2025 05:12:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1752556375; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=211UZmxpjBGKvO+FiFJ00fmuL/4RPBSLdENxgUVTvFw=; b=vWfrZgwoC00ktx1FWvsPPladpriteEImkxLIHFF8lVE4+aEHiAZN+ochUarzIa5rAlgE+z wjRGZgBZZEiUIZGCItFNv01XIeZiOCmMcF2qLjp1dicMPG0nIpoRoHsu/1k3JuBC0FkJc5 0v/BEoXbYNbdMBgLr8AGOmJPAZ+7IrTnXka+T3H4MY0U9PB95LHQL/8xscsp7SW/XMZsMT VUkmNFk8B8H3AraJaYs0FjQXcQ6Qp8IhkefsBbLx9wHM5chtVXXeEdxtj9dwNbRZ0w6AOT UrbQoMKj3cEWfc6etJ8LEPciInmDoUuDeNhp/0OpIeCoawUytaLCLCBx+5lT2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1752556375; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=211UZmxpjBGKvO+FiFJ00fmuL/4RPBSLdENxgUVTvFw=; b=bYuPLXccQB3KG3OAOnwvC2h+sXRO5Niwx6mcwJ+kLN8+pTD7CpuWbkI93dkAJ8el9ocXrd 6Dz0Xda5peW9AgXchA3brZcywCtnnCuu6Lg2b33KnxcgkcjH1N9hlMzbk/PzOk5J79pDSY Jh9CMcjfRss6KJ/1GVsSZXW0lV1ZtE2JLJPnvqxsxH/SK6v2T1FIwB5OYsdirKoCYT3jFH YEbm5T2D/txQcdSYhmbYsxaYE5joAgPIaASEu2vf0jS99jW9yx7TEMGocO1U7KTqicGpwx PywEjwifA7IoUQbXeQkzOOI60N2TLrs06Fxh0TZQ1f4QTg63h3SYndenlnGeUA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1752556375; a=rsa-sha256; cv=none; b=J54DlTQasT3kvvCo/sS8RC/eJXN01lrTz8v1WMLbNwLl0MxDakyDcynrLDUPDlNnYtWNHX cTCUy+4zKk+Z9zt2qvdjUMO7zMHC2lVtE3h/pMQ7lkz4Lp5N3UOadEb+fuQOX291kcXwiC ZZbVIgxlNc1UqM7nWLXUE5FPnACIFG0qmmGSdE7BcmIe/+cDomXChF1SK9NWRrOLnj/q3x Hjm0EnLKKCaOGXKPacHgfQaUreZ8NVViA801QWers+ds0J4tBAe6bax0Nu6VSD1uYQsvJ6 xCCobDTR40T0MSmJOdyUM65A714bi9rc63O4QW71q0Rljd8qEWAZivJf4X79EA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bh6lC22ybz9sX; Tue, 15 Jul 2025 05:12:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 56F5Cthm079771; Tue, 15 Jul 2025 05:12:55 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 56F5CtCM079768; Tue, 15 Jul 2025 05:12:55 GMT (envelope-from git) Date: Tue, 15 Jul 2025 05:12:55 GMT Message-Id: <202507150512.56F5CtCM079768@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Lexi Winter Subject: git: d9c11f0799b5 - main - packages: handle dependencies in ucl List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ivy X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d9c11f0799b546e8a244af2125ded27aa1ce05b8 Auto-Submitted: auto-generated The branch main has been updated by ivy: URL: https://cgit.FreeBSD.org/src/commit/?id=d9c11f0799b546e8a244af2125ded27aa1ce05b8 commit d9c11f0799b546e8a244af2125ded27aa1ce05b8 Author: Lexi Winter AuthorDate: 2025-07-07 13:38:23 +0000 Commit: Lexi Winter CommitDate: 2025-07-15 05:12:44 +0000 packages: handle dependencies in ucl For packages with specific dependencies, add the dependencies in their UCL files instead of listing them in generate-ucl.sh. generate-ucl.sh has logic to add automatic subpackage dependencies, so e.g. "FreeBSD-foo-dev" depends on "FreeBSD-foo". Move this into generate-ucl.lua instead. This means we no longer need to pre-process the UCL in generate-ucl.sh, and we can undo the hack where it calls generate-ucl.lua with the same filename as both input and output file. Reviewed by: des, bapt Approved by: des (mentor) Differential Revision: https://reviews.freebsd.org/D50283 --- release/packages/generate-ucl.lua | 70 ++++++++++++++++++++++++++++++++++++++- release/packages/generate-ucl.sh | 56 +------------------------------ release/packages/ucl/certctl.ucl | 12 +++++++ release/packages/ucl/clang.ucl | 11 ++++++ release/packages/ucl/periodic.ucl | 6 ++++ release/packages/ucl/rcmds.ucl | 8 +++++ 6 files changed, 107 insertions(+), 56 deletions(-) diff --git a/release/packages/generate-ucl.lua b/release/packages/generate-ucl.lua index 0d18e1dc0120..0557e8e8cc23 100755 --- a/release/packages/generate-ucl.lua +++ b/release/packages/generate-ucl.lua @@ -14,6 +14,42 @@ template.ucl. local ucl = require("ucl") +-- Hardcode a list of packages which don't get the automatic pkggenname +-- dependency because the base package doesn't exist. We should have a better +-- way to handle this. +local no_gen_deps = { + ["libcompat-dev"] = true, + ["libcompat-dev-lib32"] = true, + ["libcompat-man"] = true, + ["libcompiler_rt-dev"] = true, + ["libcompiler_rt-dev-lib32"] = true, + ["liby-dev"] = true, + ["liby-dev-lib32"] = true, +} + +-- Return true if the package 'pkgname' should have a dependency on the package +-- pkggenname. +function add_gen_dep(pkgname, pkggenname) + if pkgname == pkggenname then + return false + end + if pkgname == nil or pkggenname == nil then + return false + end + if no_gen_deps[pkgname] ~= nil then + return false + end + if pkggenname == "kernel" then + return false + end + + return true +end + +local pkgname = nil +local pkggenname = nil +local pkgprefix = nil +local pkgversion = nil local comment_suffix = nil local desc_suffix = nil @@ -31,10 +67,18 @@ for i = 2, #arg - 2, 2 do local varname = arg[i - 1] local varvalue = arg[i] - if varname == "COMMENT_SUFFIX" and #varvalue > 0 then + if varname == "PKGNAME" and #varvalue > 0 then + pkgname = varvalue + elseif varname == "PKGGENNAME" and #varvalue > 0 then + pkggenname = varvalue + elseif varname == "VERSION" and #varvalue > 0 then + pkgversion = varvalue + elseif varname == "COMMENT_SUFFIX" and #varvalue > 0 then comment_suffix = varvalue elseif varname == "DESC_SUFFIX" and #varvalue > 0 then desc_suffix = varvalue + elseif varname == "PKG_NAME_PREFIX" and #varvalue > 0 then + pkgprefix = varvalue end parser:register_variable(varname, varvalue) @@ -49,6 +93,30 @@ end local obj = parser:get_object() +-- If pkgname is different from pkggenname, add a dependency on pkggenname. +-- This means that e.g. -dev packages depend on their respective base package. +if add_gen_dep(pkgname, pkggenname) then + if obj["deps"] == nil then + obj["deps"] = {} + end + obj["deps"][pkggenname] = { + ["version"] = pkgversion, + ["origin"] = "base" + } +end + +-- If PKG_NAME_PREFIX is provided, rewrite the names of dependency packages. +-- We can't do this in UCL since variable substitution doesn't work in array +-- keys. +if pkgprefix ~= nil and obj["deps"] ~= nil then + newdeps = {} + for dep, opts in pairs(obj["deps"]) do + local newdep = pkgprefix .. "-" .. dep + newdeps[newdep] = opts + end + obj["deps"] = newdeps +end + -- Add comment and desc suffix. if comment_suffix ~= nil then obj["comment"] = obj["comment"] .. comment_suffix diff --git a/release/packages/generate-ucl.sh b/release/packages/generate-ucl.sh index 3d3f67ed365c..57fe181ec5bb 100755 --- a/release/packages/generate-ucl.sh +++ b/release/packages/generate-ucl.sh @@ -59,81 +59,40 @@ main() { shift $(( ${OPTIND} - 1 )) case "${outname}" in - bootloader) - pkgdeps="" - ;; - certctl) - pkgdeps="caroot openssl" - ;; - clang) - pkgdeps="lld libcompiler_rt-dev" - ;; - periodic) - pkgdeps="cron" - ;; - rcmds) - # the RPC daemons require rpcbind - pkgdeps="utilities" - ;; - - # -dev packages that have no corresponding non-dev package - # as a dependency. - libcompat-dev|libcompiler_rt-dev|liby-dev) - outname=${outname%%-dev} - comment_suffix="$devcx" - desc_suffix="$devdx" - ;; - libcompat-dev-lib32|libcompiler_rt-dev-lib32|liby-dev-lib32) - outname=${outname%%-dev-lib32} - comment_suffix="$dev32cx" - desc_suffix="$dev32dx" - ;; - libcompat-man|libelftc-man) - outname=${outname%%-man} - comment_suffix="$mancx" - desc_suffix="$mandx" - ;; *-dev) outname="${outname%%-dev}" comment_suffix="$devcx" desc_suffix="$devdx" - pkgdeps="${outname}" ;; *-dbg) outname="${outname%%-dbg}" comment_suffix="$dbgcx" desc_suffix="$dbgdx" - pkgdeps="${outname}" ;; *-dev-lib32) outname="${outname%%-dev-lib32}" comment_suffix="$dev32cx" desc_suffix="$dev32dx" - pkgdeps="${outname}" ;; *-dbg-lib32) outname="${outname%%-dbg-lib32}" comment_suffix="$dbg32cx" desc_suffix="$dbg32dx" - pkgdeps="${outname}" ;; *-man-lib32) outname="${outname%%-man-lib32}" comment_suffix="$lib32mancx" desc_suffix="$lib32mandx" - pkgdeps="${outname}" ;; *-lib32) outname="${outname%%-lib32}" comment_suffix="$lib32cx" desc_suffix="$lib32dx" - pkgdeps="${outname}" ;; *-man) outname="${outname%%-man}" comment_suffix="$mancx" desc_suffix="$mandx" - pkgdeps="${outname}" ;; ${origname}) ;; @@ -163,19 +122,6 @@ main() { echo "" fi - cp "${uclsource}" "${uclfile}" - if [ -n "${pkgdeps}" ]; then - echo 'deps: {' >> ${uclfile} - for dep in ${pkgdeps}; do - cat <> ${uclfile} - ${PKG_NAME_PREFIX}-${dep}: { - origin: "base", - version: "${PKG_VERSION}" - } -EOF - done - echo '}' >> ${uclfile} - fi cap_arg="$( make -f ${srctree}/share/mk/bsd.endian.mk -VCAP_MKDB_ENDIAN )" ${srctree}/release/packages/generate-ucl.lua \ VERSION "${PKG_VERSION}" \ @@ -188,7 +134,7 @@ EOF PKG_WWW "${PKG_WWW}" \ PKG_MAINTAINER "${PKG_MAINTAINER}" \ UCLFILES "${srctree}/release/packages/ucl" \ - ${uclfile} ${uclfile} + ${uclsource} ${uclfile} return 0 } diff --git a/release/packages/ucl/certctl.ucl b/release/packages/ucl/certctl.ucl index 664a6d139585..300aa55fabda 100644 --- a/release/packages/ucl/certctl.ucl +++ b/release/packages/ucl/certctl.ucl @@ -1,3 +1,15 @@ +deps { + "caroot": { + version = "${VERSION}" + origin = "base" + } + + "openssl": { + version = "${VERSION}" + origin = "base" + } +} + scripts: { # XXX If pkg picks up a mechanism to detect in the post-install script # files being added or removed, we should use it instead to gate the diff --git a/release/packages/ucl/clang.ucl b/release/packages/ucl/clang.ucl new file mode 100644 index 000000000000..956b769a1ee7 --- /dev/null +++ b/release/packages/ucl/clang.ucl @@ -0,0 +1,11 @@ +deps { + "lld" { + version = "${VERSION}" + origin = "base" + } + + "libcompiler_rt-dev" { + version = "${VERSION}" + origin = "base" + } +} diff --git a/release/packages/ucl/periodic.ucl b/release/packages/ucl/periodic.ucl new file mode 100644 index 000000000000..6f85d2ab744b --- /dev/null +++ b/release/packages/ucl/periodic.ucl @@ -0,0 +1,6 @@ +deps { + "cron" { + version = "${VERSION}" + origin = "base" + } +} diff --git a/release/packages/ucl/rcmds.ucl b/release/packages/ucl/rcmds.ucl new file mode 100644 index 000000000000..88a4916675dc --- /dev/null +++ b/release/packages/ucl/rcmds.ucl @@ -0,0 +1,8 @@ +deps { + # The RPC daemons require rpcbind. + "utilities" { + version = "${VERSION}" + origin = "base" + } +} +