From nobody Wed Oct 18 11:16:56 2023 X-Original-To: dev-commits-ports-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 4S9Swn1C8Sz4xsRP; Wed, 18 Oct 2023 11:16:57 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4S9Swn0P2mz4MTv; Wed, 18 Oct 2023 11:16:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1697627817; 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=mhv/qk8xkiGx8mB0ZJrl/2qgxNsC/PNBUYCi1ge/nwY=; b=QSFE6jbmCaby9Sz8TuXySjSMtP8F9wVTEwz6bgUChVuRDUaUYhX/3XZF+P4RTS6Qp2wr3J r9HjUGzQo8DNlaGLHFhEue1H/03R7ixzFEqzLnzit+StY6DU4n1Ni46iSIkZ4v1oLB1CII ssycDfYw/Lr/wkmIZ/ET/0EOevOsHjYGXGR3NzbrPSwB6jCe77x0KwTB/o4auODSXQgwQm 8m3YR+P6+VMahLm/OJgoBcKOXt2ZznJQyF1QJ72Nq87elGhI3n2YNAESCa/4x4ICkGWTTT JgnWdtmH2/P0+snwiW05tDAljm60z5o6rKeABn+Z1MoxcJS9aliI51vZFjpXAA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1697627817; a=rsa-sha256; cv=none; b=czUUB4bseFM7qpQU9F9Q4vzsZjEJWeUYs/1WLSPOd7vN5l25DK6hLnWExvkRVR7uTTPB6S xYAPCzv+IV6yFLE6rAR4FBMGcABebLbNOVanqJdW1w+5JkS9e01Bz5P33uEqSLfSDzbXNR m8brjqLbHjvRHnH+1+FeC+4YMlALJ6l/Fd2kNvss1VmFSN83W3Mt6+yNuta9tJfh3ImgjW UAxSYFgSMFm+WZX8lJoWQZ3LGhxOJz/L4O8Ri9wzA1eaaC0l9G1XGBqqz73s3+s3gYXzlD aoZFzpv63t6AYVRKMsvEtTErSlp2BfpSwGkQ/PCcyL0e29LNZ1YoqixBfSl4Sg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1697627817; 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=mhv/qk8xkiGx8mB0ZJrl/2qgxNsC/PNBUYCi1ge/nwY=; b=KkyAKuezZZx9O/AmegD8kPyadMQdNdR68PzM8/fOZn1Ydy/jZAqBWcJvkcI0ASsSeOUKu0 Df3F+AoWZebol7TZB97s+/s7D7+Sa32+UU+yE3dbz0t9svVT9BK0RUkT+VMoFG+T0stV5y yhJpBrIE3HuxOft2+rhP9khtTNYjeJsEZUol3h2z0k+CVcU3jMmfpmPabOagSG/D5KpN3E oF61ClsRqA4MIWQoQk7+7UrjVHjjsc/cMG57gCLe9USgJuCa8FJuXaRewvLuF+qxOxHFHn H3G1e/idqgEmu3jl3MeoYg3kjdG1PSyApDY0E5lmi7psumjc60kNNrzNEVIq4w== 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 4S9Swm6Y9yz14V7; Wed, 18 Oct 2023 11:16:56 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 39IBGuQ2058576; Wed, 18 Oct 2023 11:16:56 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 39IBGur1058573; Wed, 18 Oct 2023 11:16:56 GMT (envelope-from git) Date: Wed, 18 Oct 2023 11:16:56 GMT Message-Id: <202310181116.39IBGur1058573@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Fernando =?utf-8?Q?Apestegu=C3=ADa?= Subject: git: 3d9f300e01f5 - main - Mk/bsd.port.{subdir}.mk: create describe-json List-Id: Commit messages for all branches of the ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-all@freebsd.org X-BeenThere: dev-commits-ports-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: fernape X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3d9f300e01f5ecdb140027096c603623264ecc07 Auto-Submitted: auto-generated The branch main has been updated by fernape: URL: https://cgit.FreeBSD.org/ports/commit/?id=3d9f300e01f5ecdb140027096c603623264ecc07 commit 3d9f300e01f5ecdb140027096c603623264ecc07 Author: Fernando ApesteguĂ­a AuthorDate: 2023-09-27 15:32:12 +0000 Commit: Fernando ApesteguĂ­a CommitDate: 2023-10-18 11:16:36 +0000 Mk/bsd.port.{subdir}.mk: create describe-json Summary: Create "describe-json" target to get a JSON-compliant representation of the ports tree. It can be invoked from a single port directory, a category directory or from the ports tree top directory. It supports FLAVORS. E.g. It is possible to execute the following: cd math/qalculate-qt && make describe-json-qt6 Performance-wise it is equivalent to a simple "make describe" although it offers a more complete vision of the port in an easily parseable format. Times for describe: 1345.39 real 933.06 user 403.01 sys 1317.00 real 929.22 user 406.43 sys 1316.83 real 930.82 user 404.70 sys 1316.75 real 928.05 user 407.39 sys 1316.58 real 930.69 user 404.59 sys Times for describe-json: 1320.38 real 924.80 user 414.48 sys 1320.66 real 926.14 user 413.41 sys 1320.41 real 924.08 user 415.30 sys 1320.37 real 922.96 user 416.35 sys 1320.25 real 924.25 user 414.95 sys Some examples assuming the output is saved in the `describe.json` file. Show all ports in the "accessibility" category: jq '.accessibility' describe.json Show ports in the "accessibility" category with a USES=iconv dependency: jq '.accessibility.[] | select(.uses | index("iconv")) | .pkgorigin' describe.json Show ports in the tree that Uses=kmod: jq '.[].[] | select(.uses | index("kmod")) | .pkgorigin' describe.json Show ports having a LIB_DEPENDS on devel/binutils: jq '.[].[] | select(.lib_depends | map(test("devel/binutils")) | any) | .pkgorigin' describe.json Show ports in the "database" category which have no maintainer and are marked as deprecated: jq '.databases.[] | select(.maintainer=="ports@FreeBSD.org" and .deprecated!=" ") | .pkgorigin, .deprecated' describe.json Approved by: portmgr (bapt@) Differential Revision: https://reviews.freebsd.org/D42131 --- Mk/bsd.port.mk | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++ Mk/bsd.port.subdir.mk | 20 ++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk index 4679774d9640..6b3522d559a0 100644 --- a/Mk/bsd.port.mk +++ b/Mk/bsd.port.mk @@ -619,6 +619,7 @@ FreeBSD_MAINTAINER= portmgr@FreeBSD.org # - Create a package for a port and _all_ of its dependencies. # describe - Try to generate a one-line description for each port for # use in INDEX files and the like. +# describe-json - Generate a JSON-compliant representation of each port. # check-plist - Checks for files missing from the plist, and files in the plist # that are not installed by the port. # check-sanity - Perform some basic checks of the port layout. @@ -4406,6 +4407,78 @@ describe-${f}: . endif # empty(FLAVORS) . endif +. if empty(FLAVORS) || defined(_DESCRIBE_WITH_FLAVOR) + +. if defined(_DESCRIBE_WITH_FLAVOR) +_JSON_OBJ_NAME="\"${FLAVOR}-${.CURDIR:T}\":" +. endif + +describe-json: + @(${ECHO_CMD} "${_JSON_OBJ_NAME} { ";\ + ${ECHO_CMD} \"uses\":[\"${USES:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"flavors\":[\"${FLAVORS:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"options_default\":[\"${OPTIONS_DEFAULT:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"fetch_depends\":[\"${FETCH_DEPENDS:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"extract_depends\":[\"${EXTRACT_DEPENDS:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"patch_depends\":[\"${PATCH_DEPENDS:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"build_depends\":[\"${BUILD_DEPENDS:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"lib_depends\":[\"${LIB_DEPENDS:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"run_depends\":[\"${RUN_DEPENDS:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"test_depends\":[\"${TEST_DEPENDS:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"pkg_depends\":[\"${PKG_DEPENDS:ts,:Q:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"complete_options_list\":[\"${COMPLETE_OPTIONS_LIST:ts,:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"categories\":[\"${CATEGORIES:ts,:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"license\":[\"${LICENSE:ts,:S/,/\",\"/g}\"], ;\ + ${ECHO_CMD} \"deprecated\":\""${DEPRECATED:S/"/\\\"/g:S/\\\\*/*/g:S/\\\'/'/g}" \", ;\ + ${ECHO_CMD} \"broken\":\"${BROKEN:Q:S/"/\\\"/g:S/\\\\*/*/g:S/\\\'/'/g}\", ;\ + ${ECHO_CMD} \"distversion\":\"${DISTVERSION}\", ;\ + ${ECHO_CMD} \"distversionprefix\":\"${DISTVERSIONPREFIX}\", ;\ + ${ECHO_CMD} \"distversionsuffix\":\"${DISTVERSIONSUFFIX}\", ;\ + ${ECHO_CMD} \"expiration_date\":\"${EXPIRATION_DATE}\", ;\ + ${ECHO_CMD} \"flavor\":\"${FLAVOR}\", ;\ + ${ECHO_CMD} \"gh_account\":\"${GH_ACCOUNT}\", ;\ + ${ECHO_CMD} \"gh_project\":\"${GH_PROJECT}\", ;\ + ${ECHO_CMD} \"gh_tagname\":\"${GH_TAGNAME}\", ;\ + ${ECHO_CMD} \"gl_account\":\"${GL_ACCOUNT}\", ;\ + ${ECHO_CMD} \"gl_commit\":\"${GL_COMMIT}\", ;\ + ${ECHO_CMD} \"gl_project\":\"${GL_PROJECT}\", ;\ + ${ECHO_CMD} \"gl_site\":\"${GL_SITE}\", ;\ + ${ECHO_CMD} \"maintainer\":\"${MAINTAINER}\", ;\ + ${ECHO_CMD} \"makefiles\":\"${MAKEFILES}\", ;\ + ${ECHO_CMD} \"pkgbase\":\"${PKGBASE}\", ;\ + ${ECHO_CMD} \"pkgname\":\"${PKGNAME}\", ;\ + ${ECHO_CMD} \"pkgnamesuffix\":\"${PKGNAMESUFFIX}\", ;\ + ${ECHO_CMD} \"pkgorigin\":\"${PKGORIGIN}\", ;\ + ${ECHO_CMD} \"pkg_depends\":\"${PKG_DEPENDS}\", ;\ + ${ECHO_CMD} \"portepoch\":\"${PORTEPOCH}\", ;\ + ${ECHO_CMD} \"portname\":\"${PORTNAME}\", ;\ + ${ECHO_CMD} \"portrevision\":\"${PORTREVISION}\", ;\ + ${ECHO_CMD} \"portversion\":\"${PORTVERSION}\", ;\ + ${ECHO_CMD} \"use_github\":\"${USE_GITHUB}\", ;\ + ${ECHO_CMD} \"use_gitlab\":\"${USE_GITLAB}\", ;\ + ${ECHO_CMD} \"www\":\"${WWW:Q}\" ;\ + ${ECHO_CMD} "}" >> ${INDEX_OUT}) +. else # empty(FLAVORS) +describe-json: ${FLAVORS:S/^/describe-json-/} +_LAST_FLAVOR = ${FLAVORS:[-1]} +. for f in ${FLAVORS} +describe-json-${f}: + @if [ "${f}" == "${FLAVORS:[1]}" ]; then \ + ${ECHO_CMD} "{" ;\ + fi; + @cd ${.CURDIR} && ${SETENV} FLAVOR=${f} ${MAKE} -B -D_DESCRIBE_WITH_FLAVOR describe-json + @if [ "${f}" != "${_LAST_FLAVOR}" ]; then \ + ${ECHO_MSG} "," ;\ + else \ + ${ECHO_CMD} "}" ;\ + fi; \ + + +. endfor +. endif # empty(FLAVORS) + + + www-site: @${ECHO_CMD} ${_WWW} diff --git a/Mk/bsd.port.subdir.mk b/Mk/bsd.port.subdir.mk index 724fa4505f53..cc2cc81da01b 100644 --- a/Mk/bsd.port.subdir.mk +++ b/Mk/bsd.port.subdir.mk @@ -300,6 +300,26 @@ describe: . endif .endif +# Store last subdir name +_LAST_DIR = ${SUBDIR:[-1]} +describe-json: + @${ECHO_MSG} "{" + @for sub in ${SUBDIR}; do \ + if ${TEST} -d ${.CURDIR}/$${sub}; then \ + cd ${.CURDIR}/$${sub}; \ + ${ECHO_MSG} "\"$${sub}\": " ;\ + ${MAKE} -B describe-json || \ + (${ECHO_CMD} "===> ${DIRPRFX}$${sub} failed" >&2; \ + exit 1) ;\ + if [ "$${sub}" != "${_LAST_DIR}" ]; then \ + (${ECHO_MSG} ",") ; \ + fi; \ + else \ + ${ECHO_MSG} "===> ${DIRPRFX}$${sub} non-existent"; \ + fi; \ + done + @${ECHO_MSG} "}" + .if !target(readmes) . if defined(PORTSTOP) readmes: readme ${SUBDIR:S/^/_/:S/$/.readmes/}