On Mon, May 18, 2020 at 12:17:01PM +0100, Stuart Henderson wrote: > I like it, can you work up something for the bsd.port.mk(5) manual please? Diff below tries to lay out the inner workings without being too specific; a bit tricky to prevent common pitfalls without explaining basic shell syntax/behaviour.
> I agree the brace expansion is helpful for how this is used. Yup. Feedback? I'll also take OKs as the bsd.port.mk diff is a NOOP for every port not using EXTRACT_FILES. Index: share/man/man5/bsd.port.mk.5 =================================================================== RCS file: /cvs/src/share/man/man5/bsd.port.mk.5,v retrieving revision 1.530 diff -u -p -r1.530 bsd.port.mk.5 --- share/man/man5/bsd.port.mk.5 20 Apr 2020 16:07:43 -0000 1.530 +++ share/man/man5/bsd.port.mk.5 18 May 2020 11:30:05 -0000 @@ -1697,21 +1697,21 @@ for archive in ${EXTRACT_ONLY} do case $$archive in *.tar.xz|*.tar.lzma) - xzcat ${FULLDISTDIR}/$$archive| tar xf -;; + xzcat ${FULLDISTDIR}/$$archive| tar -xf - -- ${EXTRACT_FILES};; *.tar.lz) - lunzip -c ${FULLDISTDIR}/$$archive| tar xf -;; + lunzip -c ${FULLDISTDIR}/$$archive| tar -xf - -- ${EXTRACT_FILES};; *.zip) - unzip -q ${FULLDISTDIR}/$$archive -d ${WRKDIR};; + unzip -q ${FULLDISTDIR}/$$archive -d ${WRKDIR} ${EXTRACT_FILES};; *.tar.bz2|*.tbz2|*.tbz) - bzip2 -dc ${FULLDISTDIR}/$$archive| tar xf -;; + bzip2 -dc ${FULLDISTDIR}/$$archive| tar -xf - -- ${EXTRACT_FILES};; *.shar.gz|*.shar.Z|*.sh.Z|*.sh.gz) gzcat ${FULLDISTDIR}/$$archive | /bin/sh;; *.shar|*.sh) /bin/sh ${FULLDISTDIR}/$$archive;; *.tar) - tar xf ${FULLDISTDIR}/$$archive;; + tar -xf ${FULLDISTDIR}/$$archive -- ${EXTRACT_FILES};; *) - gzip -dc ${FULLDISTDIR}/$$archive | tar xf -;; + gzip -dc ${FULLDISTDIR}/$$archive | tar -xf - -- ${EXTRACT_FILES};; esac done .Ed @@ -1726,6 +1726,9 @@ Used to set DISTFILES default value to $ The decompression tool needed will be automatically added as .Ev BUILD_DEPENDS . Default value is .tar.gz. +.It Ev EXTRACT_FILES +Set to the list of files to actuall extract from distfiles. +Default is to extract all files. .It Ev FAKE_FLAGS Extra flags passed to ${MAKE_PROGRAM} during the fake invocation. Index: share/man/man5/bsd.port.mk.5 =================================================================== RCS file: /cvs/src/share/man/man5/bsd.port.mk.5,v retrieving revision 1.530 diff -u -p -r1.530 bsd.port.mk.5 --- share/man/man5/bsd.port.mk.5 20 Apr 2020 16:07:43 -0000 1.530 +++ share/man/man5/bsd.port.mk.5 18 May 2020 11:43:56 -0000 @@ -1697,21 +1697,21 @@ for archive in ${EXTRACT_ONLY} do case $$archive in *.tar.xz|*.tar.lzma) - xzcat ${FULLDISTDIR}/$$archive| tar xf -;; + xzcat ${FULLDISTDIR}/$$archive| tar -xf - -- ${EXTRACT_FILES};; *.tar.lz) - lunzip -c ${FULLDISTDIR}/$$archive| tar xf -;; + lunzip -c ${FULLDISTDIR}/$$archive| tar -xf - -- ${EXTRACT_FILES};; *.zip) - unzip -q ${FULLDISTDIR}/$$archive -d ${WRKDIR};; + unzip -q ${FULLDISTDIR}/$$archive -d ${WRKDIR} ${EXTRACT_FILES};; *.tar.bz2|*.tbz2|*.tbz) - bzip2 -dc ${FULLDISTDIR}/$$archive| tar xf -;; + bzip2 -dc ${FULLDISTDIR}/$$archive| tar -xf - -- ${EXTRACT_FILES};; *.shar.gz|*.shar.Z|*.sh.Z|*.sh.gz) gzcat ${FULLDISTDIR}/$$archive | /bin/sh;; *.shar|*.sh) /bin/sh ${FULLDISTDIR}/$$archive;; *.tar) - tar xf ${FULLDISTDIR}/$$archive;; + tar -xf ${FULLDISTDIR}/$$archive -- ${EXTRACT_FILES};; *) - gzip -dc ${FULLDISTDIR}/$$archive | tar xf -;; + gzip -dc ${FULLDISTDIR}/$$archive | tar -xf - -- ${EXTRACT_FILES};; esac done .Ed @@ -1726,6 +1726,18 @@ Used to set DISTFILES default value to $ The decompression tool needed will be automatically added as .Ev BUILD_DEPENDS . Default value is .tar.gz. +.It Ev EXTRACT_FILES +Set to the list of files to actually extract from distfiles. +Its content is subject to shell evaluation as part of +.Ev EXTRACT_CASES +and passed as +.Ar file ... +argument to +.Xr tar 1 , +e.g., shell brace expansion may apply, but +.Xr glob 7 +patterns must be escaped. +Empty by default to extract all files. .It Ev FAKE_FLAGS Extra flags passed to ${MAKE_PROGRAM} during the fake invocation.