Annotation of pkgsrc/mk/bsd.pkg.readme.mk, Revision 1.1
1.1 ! jlam 1: # $NetBSD$
! 2: #
! 3: # This Makefile fragment is included by bsd.pkg.mk and encapsulates the
! 4: # code to produce README.html files in each package directory.
! 5: #
! 6: # The following are the "public" targets provided by this module.
! 7: #
! 8: # readme This target generates a README.html file suitable
! 9: # for being served via FTP.
! 10: #
! 11: # cdrom-readme This target generates a README.html file suitable
! 12: # for being served from a mounted CD-ROM.
! 13: #
! 14: # The following are the user-settable variables that may be defined in
! 15: # /etc/mk.conf.
! 16: #
! 17: # FTP_PKG_URL_HOST is the host portion of the URL to embed in each
! 18: # README.html file to be served via FTP, and defaults to
! 19: # "ftp://ftp.NetBSD.org".
! 20: #
! 21: # FTP_PKG_URL_DIR is the directory portion of the URL to embed in each
! 22: # README.html file to be served via FTP, and defaults to
! 23: # "/pub/NetBSD/packages".
! 24: #
! 25: # CDROM_PKG_URL_HOST is the host portion of the URL to embed in each
! 26: # README.html file to be served from a mounted CD-ROM, and defaults
! 27: # to "file://localhost".
! 28: #
! 29: # CDROM_PKG_URL_DIR is the directory portion of the URL to embed in each
! 30: # README.html file to be served from a mounted CD-ROM, and defaults
! 31: # to "/usr/pkgsrc/packages".
! 32: #
! 33:
! 34: # Set to "html" by the README.html target to generate HTML code,
! 35: # or to "svr4" to print SVR4 (Solaris, ...) short package names, from
! 36: # SVR4_PKGNAME variable.
! 37: # This variable is passed down via build-depends-list and run-depends-list
! 38: PACKAGE_NAME_TYPE?= name
! 39:
! 40: _HTML_PKGNAME= ${PKGNAME:S/&/\&/g:S/>/\>/g:S/</\</g}
! 41: _HTML_PKGPATH= ${PKGPATH:S/&/\&/g:S/>/\>/g:S/</\</g}
! 42: _HTML_PKGLINK= <a href="../../${_HTML_PKGPATH}/README.html">${_HTML_PKGNAME}</a>
! 43:
! 44: .PHONY: package-name
! 45: .if !target(package-name)
! 46: package-name:
! 47: . if (${PACKAGE_NAME_TYPE} == "html")
! 48: @${ECHO} ${_HTML_PKGLINK:Q}
! 49: . elif (${PACKAGE_NAME_TYPE} == "svr4")
! 50: @${ECHO} ${SVR4_PKGNAME}
! 51: . else
! 52: @${ECHO} ${PKGNAME}
! 53: . endif # PACKAGE_NAME_TYPE
! 54: .endif # !target(package-name)
! 55:
! 56: .PHONY: make-readme-html-help
! 57: .if !target(make-readme-html-help)
! 58: make-readme-html-help:
! 59: @${ECHO} '${PKGNAME:S/&/\&/g:S/>/\>/g:S/</\</g}</a>: <TD>'${COMMENT:S/&/\&/g:S/>/\>/g:S/</\</g:Q}
! 60: .endif # !target(make-readme-html-help)
! 61:
! 62: # Show (non-recursively) all the packages this package depends on.
! 63: # If PACKAGE_DEPENDS_WITH_PATTERNS is set, print as pattern (if possible)
! 64: PACKAGE_DEPENDS_WITH_PATTERNS?=true
! 65: .PHONY: run-depends-list
! 66: .if !target(run-depends-list)
! 67: run-depends-list:
! 68: . for dep in ${DEPENDS}
! 69: @pkg="${dep:C/:.*//}"; \
! 70: dir="${dep:C/[^:]*://}"; \
! 71: cd ${.CURDIR}; \
! 72: if ${PACKAGE_DEPENDS_WITH_PATTERNS}; then \
! 73: ${ECHO} "$$pkg"; \
! 74: else \
! 75: if cd $$dir 2>/dev/null; then \
! 76: ${MAKE} ${MAKEFLAGS} package-name PACKAGE_NAME_TYPE=${PACKAGE_NAME_TYPE}; \
! 77: else \
! 78: ${ECHO_MSG} "Warning: \"$$dir\" non-existent -- @pkgdep registration incomplete" >&2; \
! 79: fi; \
! 80: fi
! 81: . endfor
! 82: .endif # target(run-depends-list)
! 83:
! 84: .PHONY: build-depends-list
! 85: .if !target(build-depends-list)
! 86: build-depends-list:
! 87: @for dir in `${MAKE} ${MAKEFLAGS} show-all-depends-dirs-excl`; \
! 88: do \
! 89: (cd ../../$$dir && \
! 90: ${MAKE} ${MAKEFLAGS} package-name) \
! 91: done
! 92: .endif
! 93:
! 94: # If PACKAGES is set to the default (../../pkgsrc/packages), the current
! 95: # ${MACHINE_ARCH} and "release" (uname -r) will be used. Otherwise a directory
! 96: # structure of ...pkgsrc/packages/`uname -r`/${MACHINE_ARCH} is assumed.
! 97: # The PKG_URL is set from FTP_PKG_URL_* or CDROM_PKG_URL_*, depending on
! 98: # the target used to generate the README.html file.
! 99: .PHONY: binpkg-list
! 100: .if !target(binpkg-list)
! 101: binpkg-list:
! 102: @if ${TEST} -d ${PACKAGES}; then \
! 103: cd ${PACKAGES}; \
! 104: case ${.CURDIR} in \
! 105: */pkgsrc/packages) \
! 106: for pkg in ${PKGREPOSITORYSUBDIR}/${PKGWILDCARD}${PKG_SUFX} ; \
! 107: do \
! 108: if [ -f "$$pkg" ] ; then \
! 109: pkgname=`${ECHO} $$pkg | ${SED} 's@.*/@@'`; \
! 110: ${ECHO} "<TR><TD>${MACHINE_ARCH}:<TD><a href=\"${PKG_URL}/$$pkg\">$$pkgname</a><TD>(${OPSYS} ${OS_VERSION})"; \
! 111: fi ; \
! 112: done ; \
! 113: ;; \
! 114: *) \
! 115: cd ${PACKAGES}/../..; \
! 116: for i in [1-9].*/*; do \
! 117: if cd ${PACKAGES}/../../$$i/${PKGREPOSITORYSUBDIR} 2>/dev/null; then \
! 118: for j in ${PKGWILDCARD}${PKG_SUFX}; \
! 119: do \
! 120: if [ -f "$$j" ]; then \
! 121: ${ECHO} $$i/$$j;\
! 122: fi; \
! 123: done; \
! 124: fi; \
! 125: done | ${AWK} -F/ ' \
! 126: { \
! 127: release = $$1; \
! 128: arch = $$2; \
! 129: pkg = $$3; \
! 130: gsub("\\.tgz","", pkg); \
! 131: if (arch != "m68k" && arch != "mipsel") { \
! 132: if (arch in urls) \
! 133: urls[arch "/" pkg "/" release] = "<a href=\"${PKG_URL}/" release "/" arch "/${PKGREPOSITORYSUBDIR}/" pkg "${PKG_SUFX}\">" pkg "</a>, " urls[arch]; \
! 134: else \
! 135: urls[arch "/" pkg "/" release] = "<a href=\"${PKG_URL}/" release "/" arch "/${PKGREPOSITORYSUBDIR}/" pkg "${PKG_SUFX}\">" pkg "</a> "; \
! 136: } \
! 137: } \
! 138: END { \
! 139: for (av in urls) { \
! 140: split(av, ava, "/"); \
! 141: arch=ava[1]; \
! 142: pkg=ava[2]; \
! 143: release=ava[3]; \
! 144: print "<TR><TD>" arch ":<TD>" urls[av] "<TD>(${OPSYS} " release ")"; \
! 145: } \
! 146: }' | ${SORT} \
! 147: ;; \
! 148: esac; \
! 149: fi
! 150: .endif
! 151:
! 152: # This target generates an index entry suitable for aggregation into
! 153: # a large index. Format is:
! 154: #
! 155: # distribution-name|package-path|installation-prefix|comment| \
! 156: # description-file|maintainer|categories|build deps|run deps|for arch| \
! 157: # not for opsys
! 158: #
! 159: .PHONY: describe
! 160: .if !target(describe)
! 161: describe:
! 162: @${ECHO_N} "${PKGNAME}|${.CURDIR}|"; \
! 163: ${ECHO_N} "${PREFIX}|"; \
! 164: ${ECHO_N} ${COMMENT:Q}; \
! 165: if [ -f ${DESCR_SRC} ]; then \
! 166: ${ECHO_N} "|${DESCR_SRC}"; \
! 167: else \
! 168: ${ECHO_N} "|/dev/null"; \
! 169: fi; \
! 170: ${ECHO_N} "|${MAINTAINER}|${CATEGORIES}|"; \
! 171: case "A${BUILD_DEPENDS}B${DEPENDS}C" in \
! 172: ABC) ;; \
! 173: *) cd ${.CURDIR} && ${ECHO_N} `${MAKE} ${MAKEFLAGS} build-depends-list | ${SORT} -u`;; \
! 174: esac; \
! 175: ${ECHO_N} "|"; \
! 176: if [ "${DEPENDS}" != "" ]; then \
! 177: cd ${.CURDIR} && ${ECHO_N} `${MAKE} ${MAKEFLAGS} run-depends-list | ${SORT} -u`; \
! 178: fi; \
! 179: ${ECHO_N} "|"; \
! 180: if [ "${ONLY_FOR_PLATFORM}" = "" ]; then \
! 181: ${ECHO_N} "any"; \
! 182: else \
! 183: ${ECHO_N} "${ONLY_FOR_PLATFORM}"; \
! 184: fi; \
! 185: ${ECHO_N} "|"; \
! 186: if [ "${NOT_FOR_PLATFORM}" = "" ]; then \
! 187: ${ECHO_N} "any"; \
! 188: else \
! 189: ${ECHO_N} "not ${NOT_FOR_PLATFORM}"; \
! 190: fi; \
! 191: ${ECHO} ""
! 192: .endif
! 193:
! 194: .PHONY: readmes
! 195: .if !target(readmes)
! 196: readmes: readme
! 197: .endif
! 198:
! 199: # This target is used to generate README.html files
! 200: .PHONY: readme
! 201: .if !target(readme)
! 202: FTP_PKG_URL_HOST?= ftp://ftp.NetBSD.org
! 203: FTP_PKG_URL_DIR?= /pub/NetBSD/packages
! 204:
! 205: readme:
! 206: @cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} README.html PKG_URL=${FTP_PKG_URL_HOST}${FTP_PKG_URL_DIR}
! 207: .endif
! 208:
! 209: # This target is used to generate README.html files, very like "readme"
! 210: # However, a different target was used for ease of use.
! 211: .PHONY: cdrom-readme
! 212: .if !target(cdrom-readme)
! 213: CDROM_PKG_URL_HOST?= file://localhost
! 214: CDROM_PKG_URL_DIR?= /usr/pkgsrc/packages
! 215:
! 216: cdrom-readme:
! 217: @cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} README.html PKG_URL=${CDROM_PKG_URL_HOST}${CDROM_PKG_URL_DIR}
! 218: .endif
! 219:
! 220: README_NAME= ${TEMPLATES}/README.pkg
! 221:
! 222: # set up the correct license information as a sed expression
! 223: .if defined(LICENSE)
! 224: SED_LICENSE_EXPR= -e 's|%%LICENSE%%|<p>Please note that this package has a ${LICENSE} license.</p>|'
! 225: .else
! 226: SED_LICENSE_EXPR= -e 's|%%LICENSE%%||'
! 227: .endif
! 228:
! 229: # set up the "more info URL" information as a sed expression
! 230: .if defined(HOMEPAGE)
! 231: SED_HOMEPAGE_EXPR= -e 's|%%HOMEPAGE%%|<p>This package has a home page at <a HREF="${HOMEPAGE}">${HOMEPAGE}</a>.</p>|'
! 232: .else
! 233: SED_HOMEPAGE_EXPR= -e 's|%%HOMEPAGE%%||'
! 234: .endif
! 235:
! 236: .PHONY: show-vulnerabilities-html
! 237: show-vulnerabilities-html:
! 238: ${_PKG_SILENT}${_PKG_DEBUG} \
! 239: if [ -f ${PKGVULNDIR}/pkg-vulnerabilities ]; then \
! 240: ${AWK} '/^${PKGBASE}[-<>=]+[0-9]/ { gsub("\<", "\\<", $$1); \
! 241: gsub("\>", "\\>", $$1); \
! 242: printf("<LI><STRONG>%s has a %s exploit (see <a href=\"%s\">%s</a> for more details)</STRONG></LI>\n", $$1, $$2, $$3, $$3) }' \
! 243: ${PKGVULNDIR}/pkg-vulnerabilities; \
! 244: fi
! 245:
! 246:
! 247: # If PACKAGES is set to the default (../../packages), the current
! 248: # ${MACHINE_ARCH} and "release" (uname -r) will be used. Otherwise a directory
! 249: # structure of ...pkgsrc/packages/`uname -r`/${MACHINE_ARCH} is assumed.
! 250: # The PKG_URL is set from FTP_PKG_URL_* or CDROM_PKG_URL_*, depending on
! 251: # the target used to generate the README.html file.
! 252: .PHONY: README.html
! 253: README.html: .PRECIOUS
! 254: @${SETENV} AWK=${AWK} BMAKE=${MAKE} ../../mk/scripts/mkdatabase -f $@.tmp1
! 255: @if ${TEST} -d ${PACKAGES}; then \
! 256: cd ${PACKAGES}; \
! 257: case `${PWD_CMD}` in \
! 258: ${PKGSRCDIR}/packages) \
! 259: MULTIARCH=no; \
! 260: ;; \
! 261: *) \
! 262: MULTIARCH=yes; \
! 263: ;; \
! 264: esac; \
! 265: cd ${.CURDIR} ; \
! 266: fi; \
! 267: ${AWK} -f ../../mk/scripts/genreadme.awk \
! 268: builddependsfile=/dev/null \
! 269: dependsfile=/dev/null \
! 270: AWK=${AWK:Q} \
! 271: CMP=${CMP:Q} \
! 272: DISTDIR=${DISTDIR:Q} \
! 273: GREP=${GREP:Q} \
! 274: PACKAGES=${PACKAGES:Q} \
! 275: PKG_INFO=${PKG_INFO:Q} \
! 276: PKG_SUFX=${PKG_SUFX:Q} \
! 277: PKG_URL=${PKG_URL:Q} \
! 278: PKGSRCDIR=${.CURDIR:C|/[^/]*/[^/]*$||:Q} \
! 279: SED=${SED:Q} \
! 280: SETENV=${SETENV:Q} \
! 281: SORT=${SORT:Q} \
! 282: TMPDIR=${TMPDIR:U/tmp:Q} \
! 283: SINGLEPKG=${PKGPATH:Q} \
! 284: $@.tmp1
! 285: @${RM} $@.tmp1
! 286:
! 287: .PHONY: print-build-depends-list
! 288: .if !target(print-build-depends-list)
! 289: print-build-depends-list:
! 290: . if !empty(BUILD_DEPENDS) || !empty(DEPENDS)
! 291: @${ECHO_N} 'This package requires package(s) "'
! 292: @${ECHO_N} `${MAKE} ${MAKEFLAGS} build-depends-list | ${SORT} -u`
! 293: @${ECHO} '" to build.'
! 294: . endif
! 295: .endif
! 296:
! 297: .PHONY: print-run-depends-list
! 298: .if !target(print-run-depends-list)
! 299: print-run-depends-list:
! 300: . if !empty(DEPENDS)
! 301: @${ECHO_N} 'This package requires package(s) "'
! 302: @${ECHO_N} `${MAKE} ${MAKEFLAGS} run-depends-list | ${SORT} -u`
! 303: @${ECHO} '" to run.'
! 304: . endif
! 305: .endif
! 306:
! 307: # This target is used by the mk/scripts/mkreadme script to generate
! 308: # README.html files
! 309: .PHONY: print-summary-data
! 310: .if !target(print-summary-data)
! 311: print-summary-data:
! 312: @${ECHO} depends ${PKGPATH} ${DEPENDS:Q}
! 313: @${ECHO} build_depends ${PKGPATH} ${BUILD_DEPENDS:Q}
! 314: @${ECHO} conflicts ${PKGPATH} ${CONFLICTS:Q}
! 315: @${ECHO} index ${PKGPATH} ${PKGNAME:Q}
! 316: @${ECHO} htmlname ${PKGPATH} ${_HTML_PKGLINK:Q}
! 317: @${ECHO} homepage ${PKGPATH} ${HOMEPAGE:Q}
! 318: @${ECHO} wildcard ${PKGPATH} ${PKGWILDCARD:Q}
! 319: @${ECHO} comment ${PKGPATH} ${COMMENT:Q}
! 320: @${ECHO} license ${PKGPATH} ${LICENSE:Q}
! 321: @if [ "${ONLY_FOR_PLATFORM}" = "" ]; then \
! 322: ${ECHO} "onlyfor ${PKGPATH} any"; \
! 323: else \
! 324: ${ECHO} "onlyfor ${PKGPATH} ${ONLY_FOR_PLATFORM}"; \
! 325: fi
! 326: @if [ "${NOT_FOR_PLATFORM}" = "" ]; then \
! 327: ${ECHO} "notfor ${PKGPATH} any"; \
! 328: else \
! 329: ${ECHO} "notfor ${PKGPATH} not ${NOT_FOR_PLATFORM}"; \
! 330: fi;
! 331: @${ECHO} "maintainer ${PKGPATH} ${MAINTAINER}"
! 332: @${ECHO} "categories ${PKGPATH} ${CATEGORIES}"
! 333: @if [ -f ${DESCR_SRC} ]; then \
! 334: ${ECHO} "descr ${PKGPATH} ${DESCR_SRC:S;${PKGSRCDIR}/;;g}"; \
! 335: else \
! 336: ${ECHO} "descr ${PKGPATH} /dev/null"; \
! 337: fi
! 338: @${ECHO} "prefix ${PKGPATH} ${PREFIX}"
! 339: .endif
CVSweb <webmaster@jp.NetBSD.org>