On Mon, May 18, 2020 at 01:46:38PM +0200, Klemens Nanni wrote: > 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 , This lies, you also pass it to unzip.
I'm a bit queasy with the lack of -- in unzip > +e.g., shell brace expansion may apply, but > +.Xr glob 7 > +patterns must be escaped. Use ${EXTRACT_FILES:Q} ? > +Empty by default to extract all files. > .It Ev FAKE_FLAGS > Extra flags passed to ${MAKE_PROGRAM} during the > fake invocation. > >