summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
authorjlam <jlam>2001-12-19 23:14:01 +0000
committerjlam <jlam>2001-12-19 23:14:01 +0000
commit4a3fe1a1330b3427217e04912350c4a9ac62ab7e (patch)
treee2721e488e87508d8ef5daf7088b6fa01418fc8e /mk
parent3a931c45561ff71715796e2f6319de3c61fb212d (diff)
downloadpkgsrc-4a3fe1a1330b3427217e04912350c4a9ac62ab7e.tar.gz
Teach bsd.pkg.mk how to extract all files in ${EXTRACT_ONLY} that end in
suffices listed in ${_EXTRACT_SUFFICES}. Currently, _EXTRACT_SUFFICES has .tar.bz2, .tbz, .tar.gz, .tgz, .tar, .zip, .lzh, and .lha. If the file doesn't end in any of these suffices, then we use the old code to do the extraction. This rids us of the mild annoyance where if you have several distfiles, some ending in .tar.bz2, some in .tar.gz, and others in .zip, then you have to create a post-extract target to extract all of the ones not ending in the suffix that you designate in EXTRACT_SUFX. I've tested this with some representative packages: archivers/gtar-base, print/cups, www/surfraw, and print/ghostscript-nox11.
Diffstat (limited to 'mk')
-rw-r--r--mk/bsd.pkg.mk123
1 files changed, 83 insertions, 40 deletions
diff --git a/mk/bsd.pkg.mk b/mk/bsd.pkg.mk
index e044a60d550..95c8f957a55 100644
--- a/mk/bsd.pkg.mk
+++ b/mk/bsd.pkg.mk
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.pkg.mk,v 1.883 2001/12/19 20:02:41 wiz Exp $
+# $NetBSD: bsd.pkg.mk,v 1.884 2001/12/19 23:14:01 jlam Exp $
#
# This file is in the public domain.
#
@@ -363,32 +363,9 @@ PATCH_DIST_ARGS+= --batch
PATCH_ARGS+= -V simple ${_PATCH_BACKUP_ARG} .orig
PATCH_FUZZ_FACTOR?= -F0 # Default to zero fuzz
-# If the distfile has a tar.bz2 suffix, use bzcat in preference to gzcat,
-# pulling in the "bzip2" package if necessary. [Note: this is only for
-# the benefit of pre 1.5 NetBSD systems. "gzcat" on newer systems happily
-# decodes bzip2.] Do likewise for ".zip" and ".lha" distfiles.
EXTRACT_SUFX?= .tar.gz
-.if ${EXTRACT_SUFX} == ".tar.bz2" || ${EXTRACT_SUFX} == ".tbz"
-. if exists(/usr/bin/bzcat)
-BZCAT= /usr/bin/bzcat <
-. else
-BZCAT= ${LOCALBASE}/bin/bzcat
-BUILD_DEPENDS+= bzip2>=0.9.0b:../../archivers/bzip2
-. endif # !exists bzcat
-DECOMPRESS_CMD?= ${BZCAT}
-.elif ${EXTRACT_SUFX} == ".tar"
-DECOMPRESS_CMD?= ${CAT}
-.elif ${EXTRACT_SUFX} == ".zip"
-BUILD_DEPENDS+= unzip-*:../../archivers/unzip
-EXTRACT_CMD?= unzip -Laq ${DOWNLOADED_DISTFILE}
-.elif ${EXTRACT_SUFX} == ".lzh" || ${EXTRACT_SUFX} == ".lha"
-BUILD_DEPENDS+= lha-*:../../archivers/lha
-EXTRACT_CMD?= lha xq ${DOWNLOADED_DISTFILE}
-.else
-DECOMPRESS_CMD?= ${GZCAT}
-.endif
-# Also need bzip2 for PATCHFILES with .bz2 suffix.
+# We need bzip2 for PATCHFILES with .bz2 suffix.
.if defined(PATCHFILES)
. if ${PATCHFILES:E} == "bz2" && ${EXTRACT_SUFX} != ".tar.bz2"
. if exists(/usr/bin/bzcat)
@@ -400,18 +377,6 @@ BUILD_DEPENDS+= bzip2>=0.9.0b:../../archivers/bzip2
. endif
.endif # defined(PATCHFILES)
-# If this is empty, then everything gets extracted.
-EXTRACT_ELEMENTS?=
-
-# If EXTRACT_USING_PAX is defined, use pax in preference to (GNU) tar,
-# and append 2 tar blocks of zero bytes on the end, in case the archive
-# was written with a buggy version of GNU tar.
-.if defined(EXTRACT_USING_PAX)
-EXTRACT_CMD?= { ${DECOMPRESS_CMD} ${DOWNLOADED_DISTFILE} ; dd if=/dev/zero bs=10k count=2; } | ${PAX} -r ${EXTRACT_ELEMENTS}
-.else
-EXTRACT_CMD?= ${DECOMPRESS_CMD} ${DOWNLOADED_DISTFILE} | ${GTAR} -xf - ${EXTRACT_ELEMENTS}
-.endif
-
# Figure out where the local mtree file is
.if !defined(MTREE_FILE)
. if defined(USE_IMAKE) || defined(USE_X11BASE)
@@ -1396,8 +1361,70 @@ show-pkgsrc-dir:
# Extract
+_EXTRACT_SUFFICES= .tar.gz .tgz .tar.bz2 .tbz .tar .zip .lzh .lha
+
+# If the distfile has a tar.bz2 suffix, use bzcat in preference to gzcat,
+# pulling in the "bzip2" package if necessary. [Note: this is only for
+# the benefit of pre-1.5 NetBSD systems. "gzcat" on newer systems happily
+# decodes bzip2.] Do likewise for ".zip" and ".lha" distfiles.
+#
+.if !empty(EXTRACT_ONLY:M*.tar.bz2) || !empty(EXTRACT_ONLY:M*.tbz)
+. if exists(/usr/bin/bzcat)
+BZCAT= /usr/bin/bzcat <
+. else
+BUILD_DEPENDS+= bzip2>=0.9.0b:../../archivers/bzip2
+BZCAT= ${LOCALBASE}/bin/bzcat
+. endif
+.endif
+.if !empty(EXTRACT_ONLY:M*.zip)
+BUILD_DEPENDS+= unzip-*:../../archivers/unzip
+.endif
+.if !empty(EXTRACT_ONLY:M*.lzh) || !empty(EXTRACT_ONLY:M*.lha)
+BUILD_DEPENDS+= lha-*:../../archivers/lha
+.endif
+
+DECOMPRESS_CMD.tar.gz?= ${GZCAT}
+DECOMPRESS_CMD.tgz?= ${DECOMPRESS_CMD.tar.gz}
+DECOMPRESS_CMD.tar.bz2?= ${BZCAT}
+DECOMPRESS_CMD.tbz?= ${DECOMPRESS_CMD.tar.bz2}
+DECOMPRESS_CMD.tar?= ${CAT}
+
+DECOMPRESS_CMD?= ${GZCAT}
+.for __suffix__ in ${_EXTRACT_SUFFICES}
+. if !defined(DECOMPRESS_CMD${__suffix__})
+DECOMPRESS_CMD${__suffix__}?= ${DECOMPRESS_CMD}
+. endif
+.endfor
+
+# If this is empty, then everything gets extracted.
+EXTRACT_ELEMENTS?= # empty
+
DOWNLOADED_DISTFILE= ${_DISTDIR}/$$file
+EXTRACT_CMD.zip?= ${LOCALBASE}/bin/unzip -Laq ${DOWNLOADED_DISTFILE}
+EXTRACT_CMD.lzh?= ${LOCALBASE}/bin/lha xq ${DOWNLOADED_DISTFILE}
+EXTRACT_CMD.lha?= ${EXTRACT_CMD.lzh}
+
+# If EXTRACT_USING_PAX is defined, use pax in preference to (GNU) tar,
+# and append 2 tar blocks of zero bytes on the end, in case the archive
+# was written with a buggy version of GNU tar.
+#
+.if defined(EXTRACT_USING_PAX)
+EXTRACT_CMD?= { ${DECOMPRESS_CMD} ${DOWNLOADED_DISTFILE} ; dd if=/dev/zero bs=10k count=2; } | ${PAX} -r ${EXTRACT_ELEMENTS}
+.else
+EXTRACT_CMD?= ${DECOMPRESS_CMD} ${DOWNLOADED_DISTFILE} | ${GTAR} -xf - ${EXTRACT_ELEMENTS}
+.endif
+
+.for __suffix__ in ${_EXTRACT_SUFFICES}
+. if !defined(EXTRACT_CMD${__suffix__})
+. if defined(EXTRACT_USING_PAX)
+EXTRACT_CMD${__suffix__}?= { ${DECOMPRESS_CMD${__suffix__}} ${DOWNLOADED_DISTFILE} ; dd if=/dev/zero bs=10k count=2; } | ${PAX} -r ${EXTRACT_ELEMENTS}
+. else
+EXTRACT_CMD${__suffix__}?= ${DECOMPRESS_CMD${__suffix__}} ${DOWNLOADED_DISTFILE} | ${GTAR} -xf - ${EXTRACT_ELEMENTS}
+. endif
+. endif
+.endfor
+
.if !target(do-extract)
do-extract:
. ifndef KEEP_WRKDIR
@@ -1411,11 +1438,27 @@ do-extract:
${ECHO} "${WRKDIR_BASENAME} -> ${WRKDIR}"; \
fi
. endif # WRKOBJDIR
+. for __file__ in ${EXTRACT_ONLY}
+. for __suffix__ in ${_EXTRACT_SUFFICES}
+ ${_PKG_SILENT}${_PKG_DEBUG} \
+ if [ ! -f ${WRKDIR}/.extracted ]; then \
+ case "${__file__}" in \
+ *${__suffix__}) \
+ file="${__file__}"; \
+ { cd ${WRKDIR} && ${EXTRACT_CMD${__suffix__}}; }; \
+ ${ECHO} "$$file" > ${WRKDIR}/.extracted; \
+ ;; \
+ esac; \
+ fi
+. endfor
${_PKG_SILENT}${_PKG_DEBUG} \
- for file in "" ${EXTRACT_ONLY}; do \
- if [ "X$$file" = X"" ]; then continue; fi; \
+ if [ ! -f ${WRKDIR}/.extracted ]; then \
+ file="${__file__}"; \
{ cd ${WRKDIR} && ${EXTRACT_CMD}; }; \
- done
+ else \
+ ${RM} -f ${WRKDIR}/.extracted; \
+ fi
+. endfor
.endif
# Patch