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.
> 
> 

Reply via email to