[vlc-devel] [PATCH v3] package/win32: use VLC_EXTRA_CFLAGS environment variable to pass CFLAGS

Steve Lhomme robux4 at ycbcr.xyz
Tue Dec 17 13:00:55 CET 2019


On 2019-12-17 12:10, Marvin Scholz wrote:
> 
> 
> On 17 Dec 2019, at 8:36, Steve Lhomme wrote:
> 
>> So that Meson doesn't try to pick them.
>>
>> When cross-compiling Meson uses the environment variables to test the 
>> native
>> compiler (even if it will never be used). Passing clang options meant to
>> produce PDB files will be rejected by the host gcc compiler and Meson 
>> will
>> refuse to compile (with the cross compiler).
>>
>> Similar to 5c76f3478cb038a550de21f6267d57c55c963391 on macos.
>> ---
>>  extras/package/win32/build.sh | 37 ++++++++++++++++++++++++++++++++++-
>>  1 file changed, 36 insertions(+), 1 deletion(-)
>>
>> diff --git a/extras/package/win32/build.sh 
>> b/extras/package/win32/build.sh
>> index 9607fcfe058..6b19f0b629e 100755
>> --- a/extras/package/win32/build.sh
>> +++ b/extras/package/win32/build.sh
>> @@ -106,6 +106,34 @@ else
>>      COMPILING_WITH_CLANG=0
>>  fi
>>
>> +# Write config.mak for contribs
>> +# Globals:
>> +#   VLC_EXTRA_CFLAGS
>> +#   VLC_EXTRA_CXXFLAGS
>> +#   VLC_EXTRA_LDFLAGS
>> +write_config_mak()
>> +{
>> +    # Flags to be used for C-like compilers (C, C++, Obj-C)
>> +    local clike_flags="$VLC_EXTRA_CFLAGS"
>> +
>> +    # local vlc_cppflags="-arch $ARCH"
> Just remove this?
> 
>> +    local vlc_cflags="$clike_flags"
>> +    local vlc_cxxflags="$VLC_EXTRA_CXXFLAGS $clike_flags"
>> +    local vlc_objcflags="$clike_flags"
> This can be removed.
> 
>> +
>> +    local vlc_ldflags="$VLC_EXTRA_LDFLAGS"
>> +
>> +    echo "Creating makefile..."
>> +    test -e config.mak && unlink config.mak
>> +    exec 3>config.mak || return $?
>> +
>> +    printf '# This file was automatically generated!\n\n' >&3
>> +    printf '%s := %s\n' "CFLAGS" "${vlc_cflags}" >&3
>> +    printf '%s := %s\n' "CXXFLAGS" "${vlc_cxxflags}" >&3
>> +    printf '%s := %s\n' "OBJCFLAGS" "${vlc_objcflags}" >&3
> This can be removed as well.
> 
>> +    printf '%s := %s\n' "LDFLAGS" "${vlc_ldflags}" >&3
>> +}
>> +
> 
> You probably dont want to set the clfags to cxxflags either, as the 
> reason this
> was done in the iOS script is that the variable I used there only contains
> flags that I know work for C, CXX and OBJC and its provided by the 
> script, no
> external means.
> So the whole thing can be greatly simplified to this:
> 
> write_config_mak()
> {
>      echo "Creating makefile..."
>      test -e config.mak && unlink config.mak
>      exec 3>config.mak || return $?
> 
>      printf '# This file was automatically generated!\n\n' >&3
>      printf '%s := %s\n' "CFLAGS" "${VLC_EXTRA_CFLAGS}" >&3
>      printf '%s := %s\n' "CXXFLAGS" "${VLC_EXTRA_CXXFLAGS}" >&3
>      printf '%s := %s\n' "LDFLAGS" "${VLC_EXTRA_LDFLAGS}" >&3
> }

By the way, does it make sense to write empty values in config.mak if 
the environment contains no VLC_EXTRA_CFLAGS ? There might be some 
CFLAGS in the environment that will go through with Meson. So there's no 
reason to force people to use VLC_EXTRA_xxx if they don't have to.

>>  info "Building extra tools"
>>  mkdir -p extras/tools
>>  cd extras/tools
>> @@ -147,6 +175,11 @@ fi
>>  if [ "$RELEASE" != "yes" ]; then
>>       CONTRIBFLAGS="$CONTRIBFLAGS --disable-optim"
>>  fi
>> +
>> +# Write config.mak with flags for the build and compiler overrides
>> +# Set flag to error on partial availability
>> +write_config_mak
>> +
>>  ${SCRIPT_PATH}/../../../contrib/bootstrap --host=$TRIPLET $CONTRIBFLAGS
>>
>>  # Rebuild the contribs or use the prebuilt ones
>> @@ -190,7 +223,9 @@ if [ ! -z "$WITH_PDB" ]; then
>>      CONFIGFLAGS="$CONFIGFLAGS --enable-pdb"
>>  fi
>>
>> -${SCRIPT_PATH}/configure.sh --host=$TRIPLET 
>> --with-contrib=../contrib/$TRIPLET $CONFIGFLAGS
>> +${SCRIPT_PATH}/configure.sh --host=$TRIPLET 
>> --with-contrib=../contrib/$TRIPLET $CONFIGFLAGS \
>> +    CFLAGS="$VLC_EXTRA_CFLAGS  -Werror=incompatible-pointer-types 
>> -Werror=missing-field-initializers" \
>> +    CXXFLAGS="$VLC_EXTRA_CXXFLAGS  -Werror=incompatible-pointer-types 
>> -Werror=missing-field-initializers"
>>
> 
> This does not behave like it should.
> For contribs you set CXXFLAGS to VLC_EXTRA_CXXFLAGS and 
> VLC_EXTRA_CFLAGS, while here
> you only set it to VLC_EXTRA_CXXFLAGS.
> And VLC_EXTRA_LDFLAGS are not set at all here.
> 
> Please either consistently do the one thing or the other, but dont 
> differ from what
> you do for contribs vs. configure, as thats really quite confusing.

OK

> So you probably just should do:
> 
>    vlc_error_flags="-Werror=incompatible-pointer-types 
> -Werror=missing-field-initializers"
> 
>    CFLAGS="$VLC_EXTRA_CFLAGS $vlc_error_flags"
>    CXXFLAGS="$VLC_EXTRA_CXXFLAGS $vlc_error_flags"
>    LDFLAGS="$VLC_EXTRA_LDFLAGS"

Yes There's still the question of not using the env CFLAGS if they are 
set. In my case I will not set them but other uses may use some, 
including forcing defines to build for a specific Windows target like 
-D_WIN32_WINNT=0x0602.

I'll try to add it in addition to VLC_EXTRA_xxx

>>  info "Compiling"
>>  make -j$JOBS
>> -- 
>> 2.17.1
>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list