diff options
author | rillig <rillig@pkgsrc.org> | 2007-01-06 17:10:42 +0000 |
---|---|---|
committer | rillig <rillig@pkgsrc.org> | 2007-01-06 17:10:42 +0000 |
commit | b0bdba276b3e60b9ee8dc06f2925d19e4d46cd38 (patch) | |
tree | dc6f857d04e74e3b899cc59893b7e52a8ca3cc54 | |
parent | 2748a7a44f3932977787450f4e8ff0297886b1ef (diff) | |
download | pkgsrc-b0bdba276b3e60b9ee8dc06f2925d19e4d46cd38.tar.gz |
Moved the make targets from the top-level Makefile to their own file,
mk/misc/toplevel.mk. Added a bit of documentation.
-rw-r--r-- | Makefile | 215 | ||||
-rw-r--r-- | mk/misc/toplevel.mk | 194 |
2 files changed, 219 insertions, 190 deletions
@@ -1,19 +1,31 @@ -# $NetBSD: Makefile,v 1.78 2006/12/29 19:02:25 joerg Exp $ +# $NetBSD: Makefile,v 1.79 2007/01/06 17:10:42 rillig Exp $ +# +# This is the top-level Makefile of pkgsrc. It contains a list of the +# categories of packages, as well as some targets that operate on the +# whole pkgsrc system. +# +# User-settable variables: +# +# SPECIFIC_PKGS +# (See mk/defaults/mk.conf) +# +# SITE_SPECIFIC_PKGS +# HOST_SPECIFIC_PKGS +# GROUP_SPECIFIC_PKGS +# USER_SPECIFIC_PKGS +# The specific packages that are to be built. +# +# XXX: Why are there four distinct variables? The same could be +# achieved using just SPECIFIC_PKGS as the list of packages and +# leaving the remaining details to the user. +# +# See also: +# mk/misc/toplevel.mk # - -# tools used by this Makefile -USE_TOOLS+= [ awk cat cmp echo env expr false fgrep grep mv rm sed \ - sort wc - -# additional tools used by bsd.pkg.subdir.mk -USE_TOOLS+= basename touch - -# additional tools used by bsd.bulk-pkg.mk -USE_TOOLS+= egrep find ls sh tee true tsort .include "mk/bsd.prefs.mk" -.ifdef SPECIFIC_PKGS +.if defined(SPECIFIC_PKGS) SUBDIR+= ${SITE_SPECIFIC_PKGS} SUBDIR+= ${HOST_SPECIFIC_PKGS} SUBDIR+= ${GROUP_SPECIFIC_PKGS} @@ -63,183 +75,6 @@ SUBDIR+= www SUBDIR+= x11 .endif -.ifdef USER_ADDITIONAL_PKGS SUBDIR+= ${USER_ADDITIONAL_PKGS} -.endif - -PKGSRCTOP= yes - - -# If PACKAGES is set to the default (${PKGSRCDIR}/packages), the current -# ${MACHINE_ARCH} and "release" (uname -r) will be used. Otherwise a directory -# structure of ...pkgsrc/packages/`uname -r`/${MACHINE_ARCH} is assumed. -# The PKG_URL is set from FTP_PKG_URL_* or CDROM_PKG_URL_*, depending on -# the target used to generate the README.html file. -.PHONY: README.html -_README_TYPE_FLAG?= none -README.html: .PRECIOUS -.if ${_README_TYPE_FLAG} == "--ftp" || ${_README_TYPE_FLAG} == "--cdrom" - ${SETENV} TMPDIR=${TMPDIR:U/tmp}/mkreadme \ - BMAKE=${MAKE} \ - ./mk/scripts/mkreadme --pkgsrc ${.CURDIR} \ - --packages ${PACKAGES} ${_README_TYPE_FLAG} \ - --prune -.else - @${ECHO} "ERROR: please do not use the README.html target directly." - @${ECHO} " Instead use either the \"readme\" or \"cdrom-readme\"" - @${ECHO} " target." - @${FALSE} -.endif - -.include "mk/bsd.pkg.subdir.mk" - -# the bulk-cache and clean-bulk-cache targets are a global-pkgsrc -# thing and thus it makes sense to run it from the top level pkgsrc -# directory. -.if make(bulk-cache) || make(clean-bulk-cache) -.include "${.CURDIR}/mk/bulk/bsd.bulk-pkg.mk" -.endif - -.PHONY: ${.CURDIR}/PKGDB -${.CURDIR}/PKGDB: - @${RM} -f ${.CURDIR}/PKGDB - @${ECHO_MSG} "Extracting complete dependency database. This may take a while..." - @DB=${.CURDIR}/PKGDB ; \ - PKGSRCDIR=${.CURDIR} ; \ - npkg=1; \ - list=`${GREP} '^[[:space:]]*'SUBDIR */Makefile | ${SED} 's,/Makefile.*=[[:space:]]*,/,'` ; \ - for pkgdir in $$list ; do \ - if [ ! -d $$pkgdir ]; then \ - echo " " ; \ - echo "WARNING: the package directory $$pkgdir is listed in" > /dev/stderr ; \ - echo $$pkgdir | ${SED} 's;/.*;/Makefile;g' > /dev/stderr ; \ - echo "but the directory does not exist. Please fix this!" > /dev/stderr ; \ - else \ - cd $$pkgdir ; \ - l=`${MAKE} print-summary-data` ; \ - if [ $$? != 0 ]; then \ - echo "WARNING (printdepends): the package in $$pkgdir had problem with" \ - > /dev/stderr ; \ - echo " ${MAKE} print-summary-data" > /dev/stderr ; \ - echo " database information for this package" > /dev/stderr ; \ - echo " will be dropped." > /dev/stderr ; \ - ${MAKE} print-summary-data 2>&1 > /dev/stderr ; \ - else \ - echo "$$l" >> $$DB ; \ - fi ; \ - fi ; \ - ${ECHO_N} "."; \ - if [ `${EXPR} $$npkg % 100 = 0` -eq 1 ]; then \ - echo " " ; \ - echo "$$npkg" ; \ - fi ; \ - npkg=`${EXPR} $$npkg + 1` ; \ - cd $$PKGSRCDIR ; \ - done - -.PHONY: index -index: - @${RM} ${.CURDIR}/INDEX - @${MAKE} ${.CURDIR}/INDEX - -${.CURDIR}/INDEX: - @${MAKE} ${.CURDIR}/PKGDB - @${RM} -f ${.CURDIR}/INDEX - @${AWK} -f ./mk/scripts/genindex.awk PKGSRCDIR=${.CURDIR} SORT=${SORT} ${.CURDIR}/PKGDB - @${RM} -f ${.CURDIR}/PKGDB - -print-index: ${.CURDIR}/INDEX - @${AWK} -F\| '{ printf("Pkg:\t%s\nPath:\t%s\nInfo:\t%s\nMaint:\t%s\nIndex:\t%s\nB-deps:\t%s\nR-deps:\t%s\nArch:\t%s\n\n", $$1, $$2, $$4, $$6, $$7, $$8, $$9, $$10); }' < ${.CURDIR}/INDEX - -search: ${.CURDIR}/INDEX -.if !defined(key) - @${ECHO} "The search target requires a keyword parameter," - @${ECHO} "e.g.: \"${MAKE} search key=somekeyword\"" -.else - @${GREP} ${key} ${.CURDIR}/INDEX | ${AWK} -F\| '{ printf("Pkg:\t%s\nPath:\t%s\nInfo:\t%s\nMaint:\t%s\nIndex:\t%s\nB-deps:\t%s\nR-deps:\t%s\nArch:\t%s\n\n", $$1, $$2, $$4, $$6, $$7, $$8, $$9, $$10); }' -.endif - -# -# Generate list of all packages by extracting information from -# the category/README.html pages -# -readme-all: - @if [ -f README-all.html ]; then \ - ${MV} README-all.html README-all.html.BAK ; \ - fi - @${MAKE} README-all.html - @if ${CMP} -s README-all.html README-all.html.BAK ; then \ - ${MV} README-all.html.BAK README-all.html ; \ - else \ - ${RM} -f README-all.html.BAK ; \ - fi - -README-all.html: - @${RM} -f $@.new - @${RM} -f $@.newsorted - @${ECHO_N} "Processing categories for $@:" -.for category in ${SUBDIR} - @if [ -f ${category}/README.html ]; then \ - ${ECHO_N} ' ${category}' ; \ - ${GREP} '^<TR>' ${category}/README.html \ - | ${SED} -e 's|"|"${category}/|' \ - -e 's| <TD>| <TD>(<A HREF="${category}/README.html">${category}</A>) <TD>|' \ - -e 's|<TR>|<TR VALIGN=TOP>|' \ - -e 's|<TD VALIGN=TOP>|<TD>|' \ - >> $@.new ; \ - fi -.endfor - @${ECHO} "." - @if [ ! -f $@.new ]; then \ - ${ECHO} "There are no categories with README.html files available."; \ - ${ECHO} "You need to run \`${MAKE} readme' to generate them before running this target."; \ - ${FALSE}; \ - fi - @${SORT} -f -t '">' +2 <$@.new >$@.newsorted - @${WC} -l $@.newsorted | ${AWK} '{ print $$1 }' >$@.npkgs - @${CAT} templates/README.all \ - | ${SED} \ - -e '/%%NPKGS%%/r$@.npkgs' \ - -e '/%%NPKGS%%/d' \ - -e '/%%PKGS%%/r$@.newsorted' \ - -e '/%%PKGS%%/d' \ - > $@ - @${RM} -f $@.npkgs - @${RM} -f $@.new - @${RM} -f $@.newsorted - -readme-ipv6: - @if [ -f README-IPv6.html ]; then \ - ${MV} README-IPv6.html README-IPv6.html.BAK ; \ - fi - @${MAKE} README-IPv6.html - @if ${CMP} -s README-IPv6.html README-IPv6.html.BAK ; then \ - ${MV} README-IPv6.html.BAK README-IPv6.html ; \ - else \ - ${RM} -f README-IPv6.html.BAK ; \ - fi - -README-IPv6.html: - @${GREP} -l -e '^BUILD_DEFS.*=.*USE_INET6' -e '^PKG_SUPPORTED_OPTIONS.*=.*inet6' \ - */*/Makefile */*/options.mk \ - | ${SED} -e s,Makefile,, -e s,options.mk,, >$@.pkgs - @${FGREP} -f $@.pkgs README-all.html | ${SORT} -t/ +1 >$@.trs - @${CAT} templates/README.ipv6 \ - | ${SED} \ - -e '/%%TRS%%/r$@.trs' \ - -e '/%%TRS%%/d' \ - >$@ - @${RM} $@.pkgs $@.trs - -show-host-specific-pkgs: - @${ECHO} "HOST_SPECIFIC_PKGS= \\"; \ - ${MAKE} show-pkgsrc-dir | ${AWK} '/^===/ { next; } { printf("%s \\\n", $$1) }'; \ - ${ECHO} "" -# list all packages that depend on a particular package; needs the INDEX file -# usage: 'make show-deps PKG=openssl' -# PKG: name of the package -show-deps: - @if [ ! -f "${.CURDIR}/INDEX" ]; then ${ECHO} "No index available -- please build it with 'make index'" >&2; ${FALSE}; fi - @if [ -z "${PKG}" ]; then ${ECHO} "PKG variable not set" >&2; ${FALSE}; fi - @${GREP} -E "^([^|]*\|){7}([^|]* |)${PKG}>=" ${.CURDIR}/INDEX | ${SED} -n 's/^[^|]*|\([^|]*\)|.*/\1/p' | ${SORT} +.include "${.PARSEDIR}/mk/misc/toplevel.mk" diff --git a/mk/misc/toplevel.mk b/mk/misc/toplevel.mk new file mode 100644 index 00000000000..827118c263e --- /dev/null +++ b/mk/misc/toplevel.mk @@ -0,0 +1,194 @@ +# $NetBSD: toplevel.mk,v 1.1 2007/01/06 17:10:42 rillig Exp $ +# +# This file contains the make targets that can be used from the +# top-level Makefile. They are in this separate file to keep the +# top-level file short and clean. +# +# + +# tools used by this Makefile +USE_TOOLS+= [ awk cat cmp echo env expr false fgrep grep mv rm sed \ + sort wc + +# additional tools used by bsd.pkg.subdir.mk +USE_TOOLS+= basename touch + +# additional tools used by bsd.bulk-pkg.mk +USE_TOOLS+= egrep find ls sh tee true tsort + +PKGSRCTOP= yes + + +# If PACKAGES is set to the default (${PKGSRCDIR}/packages), the current +# ${MACHINE_ARCH} and "release" (uname -r) will be used. Otherwise a directory +# structure of ...pkgsrc/packages/`uname -r`/${MACHINE_ARCH} is assumed. +# The PKG_URL is set from FTP_PKG_URL_* or CDROM_PKG_URL_*, depending on +# the target used to generate the README.html file. +.PHONY: README.html +_README_TYPE_FLAG?= none +README.html: .PRECIOUS +.if ${_README_TYPE_FLAG} == "--ftp" || ${_README_TYPE_FLAG} == "--cdrom" + ${SETENV} TMPDIR=${TMPDIR:U/tmp}/mkreadme \ + BMAKE=${MAKE} \ + ./mk/scripts/mkreadme --pkgsrc ${.CURDIR} \ + --packages ${PACKAGES} ${_README_TYPE_FLAG} \ + --prune +.else + @${ECHO} "ERROR: please do not use the README.html target directly." + @${ECHO} " Instead use either the \"readme\" or \"cdrom-readme\"" + @${ECHO} " target." + @${FALSE} +.endif + +.include "${.PARSEDIR}/../bsd.pkg.subdir.mk" + +# the bulk-cache and clean-bulk-cache targets are a global-pkgsrc +# thing and thus it makes sense to run it from the top level pkgsrc +# directory. +.if make(bulk-cache) || make(clean-bulk-cache) +.include "${.PARSEDIR}/../bulk/bsd.bulk-pkg.mk" +.endif + +.PHONY: ${.CURDIR}/PKGDB +${.CURDIR}/PKGDB: + @${RM} -f ${.CURDIR}/PKGDB + @${ECHO_MSG} "Extracting complete dependency database. This may take a while..." + @DB=${.CURDIR}/PKGDB ; \ + PKGSRCDIR=${.CURDIR} ; \ + npkg=1; \ + list=`${GREP} '^[[:space:]]*'SUBDIR */Makefile | ${SED} 's,/Makefile.*=[[:space:]]*,/,'` ; \ + for pkgdir in $$list ; do \ + if [ ! -d $$pkgdir ]; then \ + echo " " ; \ + echo "WARNING: the package directory $$pkgdir is listed in" > /dev/stderr ; \ + echo $$pkgdir | ${SED} 's;/.*;/Makefile;g' > /dev/stderr ; \ + echo "but the directory does not exist. Please fix this!" > /dev/stderr ; \ + else \ + cd $$pkgdir ; \ + l=`${MAKE} print-summary-data` ; \ + if [ $$? != 0 ]; then \ + echo "WARNING (printdepends): the package in $$pkgdir had problem with" \ + > /dev/stderr ; \ + echo " ${MAKE} print-summary-data" > /dev/stderr ; \ + echo " database information for this package" > /dev/stderr ; \ + echo " will be dropped." > /dev/stderr ; \ + ${MAKE} print-summary-data 2>&1 > /dev/stderr ; \ + else \ + echo "$$l" >> $$DB ; \ + fi ; \ + fi ; \ + ${ECHO_N} "."; \ + if [ `${EXPR} $$npkg % 100 = 0` -eq 1 ]; then \ + echo " " ; \ + echo "$$npkg" ; \ + fi ; \ + npkg=`${EXPR} $$npkg + 1` ; \ + cd $$PKGSRCDIR ; \ + done + +.PHONY: index +index: + @${RM} ${.CURDIR}/INDEX + @${MAKE} ${.CURDIR}/INDEX + +${.CURDIR}/INDEX: + @${MAKE} ${.CURDIR}/PKGDB + @${RM} -f ${.CURDIR}/INDEX + @${AWK} -f ./mk/scripts/genindex.awk PKGSRCDIR=${.CURDIR} SORT=${SORT} ${.CURDIR}/PKGDB + @${RM} -f ${.CURDIR}/PKGDB + +print-index: ${.CURDIR}/INDEX + @${AWK} -F\| '{ printf("Pkg:\t%s\nPath:\t%s\nInfo:\t%s\nMaint:\t%s\nIndex:\t%s\nB-deps:\t%s\nR-deps:\t%s\nArch:\t%s\n\n", $$1, $$2, $$4, $$6, $$7, $$8, $$9, $$10); }' < ${.CURDIR}/INDEX + +search: ${.CURDIR}/INDEX +.if !defined(key) + @${ECHO} "The search target requires a keyword parameter," + @${ECHO} "e.g.: \"${MAKE} search key=somekeyword\"" +.else + @${GREP} ${key} ${.CURDIR}/INDEX | ${AWK} -F\| '{ printf("Pkg:\t%s\nPath:\t%s\nInfo:\t%s\nMaint:\t%s\nIndex:\t%s\nB-deps:\t%s\nR-deps:\t%s\nArch:\t%s\n\n", $$1, $$2, $$4, $$6, $$7, $$8, $$9, $$10); }' +.endif + +# +# Generate list of all packages by extracting information from +# the category/README.html pages +# +readme-all: + @if [ -f README-all.html ]; then \ + ${MV} README-all.html README-all.html.BAK ; \ + fi + @${MAKE} README-all.html + @if ${CMP} -s README-all.html README-all.html.BAK ; then \ + ${MV} README-all.html.BAK README-all.html ; \ + else \ + ${RM} -f README-all.html.BAK ; \ + fi + +README-all.html: + @${RM} -f $@.new + @${RM} -f $@.newsorted + @${ECHO_N} "Processing categories for $@:" +.for category in ${SUBDIR} + @if [ -f ${category}/README.html ]; then \ + ${ECHO_N} ' ${category}' ; \ + ${GREP} '^<TR>' ${category}/README.html \ + | ${SED} -e 's|"|"${category}/|' \ + -e 's| <TD>| <TD>(<A HREF="${category}/README.html">${category}</A>) <TD>|' \ + -e 's|<TR>|<TR VALIGN=TOP>|' \ + -e 's|<TD VALIGN=TOP>|<TD>|' \ + >> $@.new ; \ + fi +.endfor + @${ECHO} "." + @if [ ! -f $@.new ]; then \ + ${ECHO} "There are no categories with README.html files available."; \ + ${ECHO} "You need to run \`${MAKE} readme' to generate them before running this target."; \ + ${FALSE}; \ + fi + @${SORT} -f -t '">' +2 <$@.new >$@.newsorted + @${WC} -l $@.newsorted | ${AWK} '{ print $$1 }' >$@.npkgs + @${CAT} templates/README.all \ + | ${SED} \ + -e '/%%NPKGS%%/r$@.npkgs' \ + -e '/%%NPKGS%%/d' \ + -e '/%%PKGS%%/r$@.newsorted' \ + -e '/%%PKGS%%/d' \ + > $@ + @${RM} -f $@.npkgs + @${RM} -f $@.new + @${RM} -f $@.newsorted + +readme-ipv6: + @if [ -f README-IPv6.html ]; then \ + ${MV} README-IPv6.html README-IPv6.html.BAK ; \ + fi + @${MAKE} README-IPv6.html + @if ${CMP} -s README-IPv6.html README-IPv6.html.BAK ; then \ + ${MV} README-IPv6.html.BAK README-IPv6.html ; \ + else \ + ${RM} -f README-IPv6.html.BAK ; \ + fi + +README-IPv6.html: + @${GREP} -l -e '^BUILD_DEFS.*=.*USE_INET6' -e '^PKG_SUPPORTED_OPTIONS.*=.*inet6' \ + */*/Makefile */*/options.mk \ + | ${SED} -e s,Makefile,, -e s,options.mk,, >$@.pkgs + @${FGREP} -f $@.pkgs README-all.html | ${SORT} -t/ +1 >$@.trs + @${CAT} templates/README.ipv6 \ + | ${SED} \ + -e '/%%TRS%%/r$@.trs' \ + -e '/%%TRS%%/d' \ + >$@ + @${RM} $@.pkgs $@.trs + +show-host-specific-pkgs: + @${ECHO} "HOST_SPECIFIC_PKGS= \\"; \ + ${MAKE} show-pkgsrc-dir | ${AWK} '/^===/ { next; } { printf("%s \\\n", $$1) }'; \ + ${ECHO} "" + +# list all packages that depend on a particular package; needs the INDEX file +# usage: 'make show-deps PKG=openssl' +# PKG: name of the package +show-deps: + @if [ ! -f "${.CURDIR}/INDEX" ]; then ${ECHO} "No index available -- please build it with 'make index'" >&2; ${FALSE}; fi + @if [ -z "${PKG}" ]; then ${ECHO} "PKG variable not set" >&2; ${FALSE}; fi + @${GREP} -E "^([^|]*\|){7}([^|]* |)${PKG}>=" ${.CURDIR}/INDEX | ${SED} -n 's/^[^|]*|\([^|]*\)|.*/\1/p' | ${SORT} |