diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -221,3 +221,7 @@ .endif .endif .endif + +PORTSDB?= ports.db +db: + @${SH} ${.CURDIR}/Tools/make-ports-db.sh ${PORTSDB} diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk --- a/Mk/bsd.port.mk +++ b/Mk/bsd.port.mk @@ -618,6 +618,7 @@ # - 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-csv - Generate a CSV representation of the tree # 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. @@ -4399,6 +4400,65 @@ . endif # empty(FLAVORS) . endif +. if empty(FLAVORS) || defined(_DESCRIBE_WITH_FLAVOR) +. if defined(_DESCRIBE_WITH_FLAVOR) +_PORT_NAME="\"${FLAVOR}-${.CURDIR:T}\"" +. else +_PORT_NAME="\"${.CURDIR:T}\"" +. endif +describe-csv: + @(${ECHO_CMD} -n ${_PORT_NAME}, ;\ + ${ECHO_CMD} -n \"${USES:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${FLAVORS:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${OPTIONS_DEFAULT:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${FETCH_DEPENDS:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${EXTRACT_DEPENDS:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${PATCH_DEPENDS:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${BUILD_DEPENDS:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${LIB_DEPENDS:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${RUN_DEPENDS:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${TEST_DEPENDS:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${PKG_DEPENDS:ts,:Q}\", ;\ + ${ECHO_CMD} -n \"${COMPLETE_OPTIONS_LIST:ts,}\", ;\ + ${ECHO_CMD} -n \"${CATEGORIES:ts,}\", ;\ + ${ECHO_CMD} -n \"${LICENSE:ts,}\", ;\ + ${ECHO_CMD} -n \"${DEPRECATED:Q:S/"/\"\"/g}\", ;\ + ${ECHO_CMD} -n \"${BROKEN:Q:S/\"/\"\"/g}\", ;\ + ${ECHO_CMD} -n \"${DISTVERSION}\", ;\ + ${ECHO_CMD} -n \"${DISTVERSIONPREFIX}\", ;\ + ${ECHO_CMD} -n \"${DISTVERSIONSUFFIX}\", ;\ + ${ECHO_CMD} -n \"${EXPIRATION_DATE}\", ;\ + ${ECHO_CMD} -n \"${FLAVOR}\", ;\ + ${ECHO_CMD} -n \"${GH_ACCOUNT}\", ;\ + ${ECHO_CMD} -n \"${GH_PROJECT}\", ;\ + ${ECHO_CMD} -n \"${GH_TAGNAME}\", ;\ + ${ECHO_CMD} -n \"${GL_ACCOUNT}\", ;\ + ${ECHO_CMD} -n \"${GL_COMMIT}\", ;\ + ${ECHO_CMD} -n \"${GL_PROJECT}\", ;\ + ${ECHO_CMD} -n \"${GL_SITE}\", ;\ + ${ECHO_CMD} -n \"${MAINTAINER}\", ;\ + ${ECHO_CMD} -n \"${MAKEFILES}\", ;\ + ${ECHO_CMD} -n \"${PKGBASE}\", ;\ + ${ECHO_CMD} -n \"${PKGNAME}\", ;\ + ${ECHO_CMD} -n \"${PKGNAMESUFFIX}\", ;\ + ${ECHO_CMD} -n \"${PKGORIGIN}\", ;\ + ${ECHO_CMD} -n \"${COMMENT:Q:S/\"/\"\"/g}\", ;\ + ${ECHO_CMD} -n \"${PORTEPOCH}\", ;\ + ${ECHO_CMD} -n \"${PORTNAME}\", ;\ + ${ECHO_CMD} -n \"${PORTREVISION}\", ;\ + ${ECHO_CMD} -n \"${PORTVERSION}\", ;\ + ${ECHO_CMD} -n \"${USE_GITHUB}\", ;\ + ${ECHO_CMD} -n \"${USE_GITLAB}\", ;\ + ${ECHO_CMD} \"${WWW:Q}\" >> ${INDEX_OUT}) + #${ECHO_CMD} \"${WWW:Q}\") | ${SED} -e "s|a||g" >> ${INDEX_OUT} +. else # empty(FLAVORS) +describe-csv: ${FLAVORS:S/^/describe-csv-/} +. for f in ${FLAVORS} +describe-csv-${f}: + @cd ${.CURDIR} && ${SETENV} FLAVOR=${f} ${MAKE} -B -D_DESCRIBE_WITH_FLAVOR describe-csv +. endfor +. endif # empty(FLAVORS) + . if empty(FLAVORS) || defined(_DESCRIBE_WITH_FLAVOR) . if defined(_DESCRIBE_WITH_FLAVOR) diff --git a/Mk/bsd.port.subdir.mk b/Mk/bsd.port.subdir.mk --- a/Mk/bsd.port.subdir.mk +++ b/Mk/bsd.port.subdir.mk @@ -300,6 +300,22 @@ . endif .endif +_CSV_HEADER="NAME","USES","FLAVORS","OPTIONS_DEFAULT","FETCH_DEPENDS","EXTRACT_DEPENDS","PATCH_DEPENDS","BUILD_DEPENDS","LIB_DEPENDS","RUN_DEPENDS","TEST_DEPENDS","PKG_DEPENDS","COMPLETE_OPTIONS_LIST","CATEGORIES","LICENSE","DEPRECATED","BROKEN","DISTVERSION","DISTVERSIONPREFIX","DISTVERSIONSUFFIX","EXPIRATION_DATE","FLAVOR","GH_ACCOUNT","GH_PROJECT","GH_TAGNAME","GL_ACCOUNT","GL_COMMIT","GL_PROJECT","GL_SITE","MAINTAINER","MAKEFILES","PKGBASE","PKGNAME","PKGNAMESUFFIX","PKGORIGIN","COMMENT","PORTEPOCH","PORTNAME","PORTREVISION","PORTVERSION","USE_GITHUB","USE_GITLAB","WWW" +describe-csv: +.if defined(WITH_CSV_HEADER) + @(${ECHO_CMD} ${_CSV_HEADER:Q}) +.endif + @for sub in ${SUBDIR}; do \ + if ${TEST} -d ${.CURDIR}/$${sub}; then \ + cd ${.CURDIR}/$${sub}; \ + ${MAKE} -B describe-csv || \ + (${ECHO_CMD} "===> ${DIRPRFX}$${sub} failed" >&2; \ + exit 1) ;\ + else \ + ${ECHO_MSG} "===> ${DIRPRFX}$${sub} non-existent"; \ + fi; \ + done + # Store last subdir name _LAST_DIR = ${SUBDIR:[-1]} describe-json: diff --git a/Tools/make-ports-db.sh b/Tools/make-ports-db.sh new file mode 100644 --- /dev/null +++ b/Tools/make-ports-db.sh @@ -0,0 +1,9 @@ +#! /bin/sh +# +# $1 is the name of the ports database to be created + +PORTSDB=${1:-ports.db} + +rm "${PORTSDB}" 2>/dev/null + +make -DWITH_CSV_HEADER describe-csv | sqlite3 "${PORTSDB}" ".mode csv" ".import /dev/stdin ports"