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.