Ping on go part.

On Wed, Dec 03, 2025 at 03:03:56PM +0100, Stefan Schulze Frielinghaus wrote:
> From: Stefan Schulze Frielinghaus <[email protected]>
> 
> While experimenting with a new warning, I was running into build errors
> for libphobos as e.g.
> 
> libtool: compile: mv -f "atomic.o" "core/.libs/atomic.o"
> mv: cannot stat 'atomic.o': No such file or directory
> 
> or when building libgo like
> 
> libtool: compile: mv -f "tables.o" ".libs/unicode.o"
> mv: cannot stat 'tables.o': No such file or directory
> 
> These boil down to the fact that test _LT_COMPILER_C_O evaluates to "no"
> for those, i.e., we have
> 
> lt_cv_prog_compiler_c_o=yes
> lt_cv_prog_compiler_c_o_D=no
> 
> likewise
> 
> lt_cv_prog_compiler_c_o=yes
> lt_cv_prog_compiler_c_o_GO=no
> 
> and at the same time _LT_ENABLE_LOCK/need_locks evaluates to "no" which
> breaks parallel builds due to races on those files.  Although I think
> for a parallel build need_locks should be rather set to "yes" in case
> _LT_COMPILER_C_O evaluates to "no", this patch enables a parallel build
> without the need of locks.
> 
> _LT_COMPILER_C_O evaluates to "no" in the first place because
> boilerplate is computed with a different CC when it is compared to.
> When boilerplate is computed, CC equals xgcc which means we emit
> warnings of the form
> 
> xgcc: warning: ...
> d21: warning: ...
> 
> whereas when we compute _LT_COMPILER_C_O, CC is changed shortly before
> to gdc so we end up with warnings of the form
> 
> gdc: warning: ...
> d21: warning: ...
> 
> which ultimately means the check whether the warning is expected fails
> and we do not set _LT_COMPILER_C_O to "yes".
> 
> Fixed by moving the computation of boilerplate after setting CC to
> gdc/gccgo.
> 
>       PR d/122794
> 
> ChangeLog:
> 
>       * libgo/config/libtool.m4: Move _LT_COMPILER_BOILERPLATE and
>       _LT_LINKER_BOILERPLATE after setting CC.
>       * libgo/configure: Regenerate.
> 
> libphobos/ChangeLog:
> 
>       * configure: Regenerate.
>       * m4/libtool.m4: Move _LT_COMPILER_BOILERPLATE and
>       _LT_LINKER_BOILERPLATE after setting CC.
> ---
>  Note, for the sake of completeness in libgo/config/libtool.m4 I have moved 
> the boilerplate computation not only for _LT_LANG_GO_CONFIG but also for 
> _LT_LANG_{CXX,F77,FC,GCJ,RC}_CONFIG.
> 
>  Successfully bootstrapped and regtested on x86_64.  Ok for mainline?
> 
>  libgo/config/libtool.m4 | 49 +++++++++++++++++++++--------------------
>  libgo/configure         | 28 +++++++++++------------
>  libphobos/configure     | 28 +++++++++++------------
>  libphobos/m4/libtool.m4 |  8 +++----
>  4 files changed, 57 insertions(+), 56 deletions(-)
> 
> diff --git a/libgo/config/libtool.m4 b/libgo/config/libtool.m4
> index 4ca90ee71bc..4d27d86b63b 100644
> --- a/libgo/config/libtool.m4
> +++ b/libgo/config/libtool.m4
> @@ -5476,10 +5476,6 @@ if test "$_lt_caught_CXX_error" != yes; then
>    # ltmain only uses $CC for tagged configurations so make sure $CC is set.
>    _LT_TAG_COMPILER
>  
> -  # save warnings/boilerplate of simple test code
> -  _LT_COMPILER_BOILERPLATE
> -  _LT_LINKER_BOILERPLATE
> -
>    # Allow CC to be a program name with arguments.
>    lt_save_CC=$CC
>    lt_save_LD=$LD
> @@ -5503,6 +5499,10 @@ if test "$_lt_caught_CXX_error" != yes; then
>    _LT_TAGVAR(compiler, $1)=$CC
>    _LT_CC_BASENAME([$compiler])
>  
> +  # save warnings/boilerplate of simple test code
> +  _LT_COMPILER_BOILERPLATE
> +  _LT_LINKER_BOILERPLATE
> +
>    if test -n "$compiler"; then
>      # We don't want -fno-exception when compiling C++ code, so set the
>      # no_builtin_flag separately
> @@ -6727,10 +6727,6 @@ if test "$_lt_disable_F77" != yes; then
>    # ltmain only uses $CC for tagged configurations so make sure $CC is set.
>    _LT_TAG_COMPILER
>  
> -  # save warnings/boilerplate of simple test code
> -  _LT_COMPILER_BOILERPLATE
> -  _LT_LINKER_BOILERPLATE
> -
>    # Allow CC to be a program name with arguments.
>    lt_save_CC="$CC"
>    lt_save_GCC=$GCC
> @@ -6739,6 +6735,11 @@ if test "$_lt_disable_F77" != yes; then
>    _LT_TAGVAR(compiler, $1)=$CC
>    _LT_CC_BASENAME([$compiler])
>    GCC=$G77
> +
> +  # save warnings/boilerplate of simple test code
> +  _LT_COMPILER_BOILERPLATE
> +  _LT_LINKER_BOILERPLATE
> +
>    if test -n "$compiler"; then
>      AC_MSG_CHECKING([if libtool supports shared libraries])
>      AC_MSG_RESULT([$can_build_shared])
> @@ -6857,10 +6858,6 @@ if test "$_lt_disable_FC" != yes; then
>    # ltmain only uses $CC for tagged configurations so make sure $CC is set.
>    _LT_TAG_COMPILER
>  
> -  # save warnings/boilerplate of simple test code
> -  _LT_COMPILER_BOILERPLATE
> -  _LT_LINKER_BOILERPLATE
> -
>    # Allow CC to be a program name with arguments.
>    lt_save_CC="$CC"
>    lt_save_GCC=$GCC
> @@ -6868,6 +6865,10 @@ if test "$_lt_disable_FC" != yes; then
>    compiler=$CC
>    GCC=$ac_cv_fc_compiler_gnu
>  
> +  # save warnings/boilerplate of simple test code
> +  _LT_COMPILER_BOILERPLATE
> +  _LT_LINKER_BOILERPLATE
> +
>    _LT_TAGVAR(compiler, $1)=$CC
>    _LT_CC_BASENAME([$compiler])
>  
> @@ -6952,10 +6953,6 @@ lt_simple_link_test_code='public class conftest { 
> public static void main(String
>  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
>  _LT_TAG_COMPILER
>  
> -# save warnings/boilerplate of simple test code
> -_LT_COMPILER_BOILERPLATE
> -_LT_LINKER_BOILERPLATE
> -
>  # Allow CC to be a program name with arguments.
>  lt_save_CC="$CC"
>  lt_save_GCC=$GCC
> @@ -6973,6 +6970,10 @@ _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
>  _LT_TAGVAR(reload_flag, $1)=$reload_flag
>  _LT_TAGVAR(reload_cmds, $1)=$reload_cmds
>  
> +# save warnings/boilerplate of simple test code
> +_LT_COMPILER_BOILERPLATE
> +_LT_LINKER_BOILERPLATE
> +
>  ## CAVEAT EMPTOR:
>  ## There is no encapsulation within the following macros, do not change
>  ## the running order or otherwise move them around unless you know exactly
> @@ -7019,10 +7020,6 @@ lt_simple_link_test_code='package main; func main() { 
> }'
>  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
>  _LT_TAG_COMPILER
>  
> -# save warnings/boilerplate of simple test code
> -_LT_COMPILER_BOILERPLATE
> -_LT_LINKER_BOILERPLATE
> -
>  # Allow CC to be a program name with arguments.
>  lt_save_CC="$CC"
>  lt_save_GCC="$GCC"
> @@ -7033,6 +7030,10 @@ _LT_TAGVAR(compiler, $1)=$CC
>  _LT_TAGVAR(LD, $1)="$LD"
>  _LT_CC_BASENAME([$compiler])
>  
> +# save warnings/boilerplate of simple test code
> +_LT_COMPILER_BOILERPLATE
> +_LT_LINKER_BOILERPLATE
> +
>  # Go did not exist at the time GCC didn't implicitly link libc in.
>  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
>  
> @@ -7085,10 +7086,6 @@ lt_simple_link_test_code="$lt_simple_compile_test_code"
>  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
>  _LT_TAG_COMPILER
>  
> -# save warnings/boilerplate of simple test code
> -_LT_COMPILER_BOILERPLATE
> -_LT_LINKER_BOILERPLATE
> -
>  # Allow CC to be a program name with arguments.
>  lt_save_CC="$CC"
>  lt_save_GCC=$GCC
> @@ -7099,6 +7096,10 @@ _LT_TAGVAR(compiler, $1)=$CC
>  _LT_CC_BASENAME([$compiler])
>  _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
>  
> +# save warnings/boilerplate of simple test code
> +_LT_COMPILER_BOILERPLATE
> +_LT_LINKER_BOILERPLATE
> +
>  if test -n "$compiler"; then
>    :
>    _LT_CONFIG($1)
> diff --git a/libgo/configure b/libgo/configure
> index b1a2228fa1b..79b2f8d5cae 100755
> --- a/libgo/configure
> +++ b/libgo/configure
> @@ -11912,20 +11912,6 @@ LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
>  compiler=$CC
>  
>  
> -# save warnings/boilerplate of simple test code
> -ac_outfile=conftest.$ac_objext
> -echo "$lt_simple_compile_test_code" >conftest.$ac_ext
> -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
> -_lt_compiler_boilerplate=`cat conftest.err`
> -$RM conftest*
> -
> -ac_outfile=conftest.$ac_objext
> -echo "$lt_simple_link_test_code" >conftest.$ac_ext
> -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
> -_lt_linker_boilerplate=`cat conftest.err`
> -$RM -r conftest*
> -
> -
>  # Allow CC to be a program name with arguments.
>  lt_save_CC="$CC"
>  lt_save_GCC="$GCC"
> @@ -11945,6 +11931,20 @@ done
>  cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
>  
>  
> +# save warnings/boilerplate of simple test code
> +ac_outfile=conftest.$ac_objext
> +echo "$lt_simple_compile_test_code" >conftest.$ac_ext
> +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
> +_lt_compiler_boilerplate=`cat conftest.err`
> +$RM conftest*
> +
> +ac_outfile=conftest.$ac_objext
> +echo "$lt_simple_link_test_code" >conftest.$ac_ext
> +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
> +_lt_linker_boilerplate=`cat conftest.err`
> +$RM -r conftest*
> +
> +
>  # Go did not exist at the time GCC didn't implicitly link libc in.
>  archive_cmds_need_lc_GO=no
>  
> diff --git a/libphobos/configure b/libphobos/configure
> index 1b540662073..b533f1c6947 100755
> --- a/libphobos/configure
> +++ b/libphobos/configure
> @@ -12624,20 +12624,6 @@ LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
>  compiler=$CC
>  
>  
> -# save warnings/boilerplate of simple test code
> -ac_outfile=conftest.$ac_objext
> -echo "$lt_simple_compile_test_code" >conftest.$ac_ext
> -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
> -_lt_compiler_boilerplate=`cat conftest.err`
> -$RM conftest*
> -
> -ac_outfile=conftest.$ac_objext
> -echo "$lt_simple_link_test_code" >conftest.$ac_ext
> -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
> -_lt_linker_boilerplate=`cat conftest.err`
> -$RM -r conftest*
> -
> -
>  # Allow CC to be a program name with arguments.
>  lt_save_CC=$CC
>  lt_save_CFLAGS=$CFLAGS
> @@ -12659,6 +12645,20 @@ done
>  cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
>  
>  
> +# save warnings/boilerplate of simple test code
> +ac_outfile=conftest.$ac_objext
> +echo "$lt_simple_compile_test_code" >conftest.$ac_ext
> +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
> +_lt_compiler_boilerplate=`cat conftest.err`
> +$RM conftest*
> +
> +ac_outfile=conftest.$ac_objext
> +echo "$lt_simple_link_test_code" >conftest.$ac_ext
> +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
> +_lt_linker_boilerplate=`cat conftest.err`
> +$RM -r conftest*
> +
> +
>  # GDC did not exist at the time GCC didn't implicitly link libc in.
>  archive_cmds_need_lc_D=no
>  
> diff --git a/libphobos/m4/libtool.m4 b/libphobos/m4/libtool.m4
> index 0263a530cf0..6d7a6f95863 100644
> --- a/libphobos/m4/libtool.m4
> +++ b/libphobos/m4/libtool.m4
> @@ -34,10 +34,6 @@ lt_simple_link_test_code="\
>  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
>  _LT_TAG_COMPILER
>  
> -# save warnings/boilerplate of simple test code
> -_LT_COMPILER_BOILERPLATE
> -_LT_LINKER_BOILERPLATE
> -
>  # Allow CC to be a program name with arguments.
>  lt_save_CC=$CC
>  lt_save_CFLAGS=$CFLAGS
> @@ -50,6 +46,10 @@ _LT_TAGVAR(compiler, $1)=$CC
>  _LT_TAGVAR(LD, $1)=$CC
>  _LT_CC_BASENAME([$compiler])
>  
> +# save warnings/boilerplate of simple test code
> +_LT_COMPILER_BOILERPLATE
> +_LT_LINKER_BOILERPLATE
> +
>  # GDC did not exist at the time GCC didn't implicitly link libc in.
>  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
>  
> -- 
> 2.49.0
> 

Reply via email to