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.

Reply via email to