[vlc-devel] [PATCH 1/2] package: macosx: forward ac_cv symbols to $@

Alexandre Janniaux ajanni at videolabs.io
Sun Feb 21 13:34:38 UTC 2021


Hi,

On Sun, Feb 21, 2021 at 01:41:10PM +0100, David Fuhrmann wrote:
>
>
> > Am 21.02.2021 um 13:22 schrieb Alexandre Janniaux <ajanni at videolabs.io>:
> >
> > Hi,
> >
> > On Sun, Feb 21, 2021 at 07:58:59AM +0100, david.fuhrmann at gmail.com <mailto:david.fuhrmann at gmail.com> wrote:
> >>
> >>
> >>> Am 20.02.2021 um 10:21 schrieb Alexandre Janniaux <ajanni at videolabs.io>:
> >>>
> >>> configure will store the command used when reconfiguring as long as the
> >>> ac_cv_ variables are passed as parameter to the configure execution
> >>> instead of being an environment variable.
> >>>
> >>> So as to stay compatible with other clients of this script, use export
> >>> as default command when no argument is given to keep the previous
> >>> behaviour.
> >>> ---
> >>> extras/package/macosx/env.build.sh | 54 +++++++++++++++++-------------
> >>> 1 file changed, 30 insertions(+), 24 deletions(-)
> >>>
> >>> diff --git a/extras/package/macosx/env.build.sh b/extras/package/macosx/env.build.sh
> >>> index ef1316465a..fd2f219a29 100755
> >>> --- a/extras/package/macosx/env.build.sh
> >>> +++ b/extras/package/macosx/env.build.sh
> >>> @@ -77,36 +77,42 @@ vlcSetBaseEnvironment() {
> >>> }
> >>>
> >>> vlcSetSymbolEnvironment() {
> >>> +    ARGS=( "$@" )
> >>> +    if [ "$#" -lt 2 ]; then
> >>> +        ARGS+=( export )
> >>> +    fi
> >>
> >> Hi, I do not really understand this logic here: why do you care about the arguments of the overall bash script when you are constructing the export line below?
> >>
> >> I think you should rather use a local parameter for this function to decide whether to use export or not. Or just return the list below here, and take care about export or no export in a different place...
> >>
> >
> > This patch is wrong as-is (ARGS not used, -lt 2 should be -lt 1),
> > I'll send a fixed version later with more comments.
> >
> > The logic behind ARGS is just to keep the previous behaviour right,
> > it can be removed later once every callsite would have been fixed.
> > This is because I didn't test on macosx, and to be fair I tested on
> > iOS but probably completely messed up the actual testing since it
> > wouldn't even work, I'm not sure how it resulted in a correct build
> > back then.
> >
> > The core idea of this change is to not use export anymore, and be
> > sure the configuration we are using is kept for later build, mostly
> > because I usually use make to build and it breaks when there is a
> > reconf and some files depending on the function where the detection
> > is overriden here is recompiled. As a side-effect, since I've
> > integrated the current buildsystem in some XCode project generation
> > tool, which will be using make, it prevents compilation from this
> > XCode project to fail randomly when it triggers a reconfiguration.
>
> Yes, I understood the general purpose of this patch, and if this works it would be very cool, indeed. :-)
> I just did not understand at all, why you need to use $@ and $# in this context.

With bash functions, $@ expands to all arguments of the function (and
not the script) and $# expands to the argument count for the function
(and thus not the script). The confusion might come first from here.

Then, the pattern is that using a variable for arguments is confusing
and not that portable, but function can provide this indirection in a
more comfortable way, though it needs a bit more understanding.

So it basically transforms

```
vlcSetSymbolEnvironment foo bar
```

Into

```
foo bar ac_cv_foo_bar=no ac_cv_baz=no....
```

Which is the reason I use $@.

Then, it's possible to do

```
vlcSetSymbolEnvironment export
```

Which will correctly expand to

```
export ac_cv_foo_bar=no ac_cv_baz=no
```

Since the previous usage of the function was just to call

```
vlcSetSymbolEnvironment
```

and expect it to export the environment, I use $# to know whether
arguments has been given to the function, and default to export
otherwise.

It can be written in a leaner form as the following, though it needs
understanding of default values in bash.

```
vlcSetSymbolEnvironment() {
    local cmd=${1:-export}; shift
    "${cmd}" "$@" \
        ac_cv_foo=no \
        ....
}
```

I'll make sure it's clearer in the next version

Regards,
--
Alexandre Janniaux
Videolabs


More information about the vlc-devel mailing list