Replace tabs with spaces in the ml script.

scripts/ml.in:
    As above.
This commit is contained in:
Julien Fischer
2020-02-22 00:53:59 +11:00
parent f60caca91c
commit 6ddc27e782

View File

@@ -1,5 +1,5 @@
#! /bin/sh #! /bin/sh
# vim: ts=4 sw=4 noet # vim: ts=4 sw=4 et
# @configure_input@ # @configure_input@
#---------------------------------------------------------------------------# #---------------------------------------------------------------------------#
# Copyright (C) 1995-2008, 2010-2011 The University of Melbourne. # Copyright (C) 1995-2008, 2010-2011 The University of Melbourne.
@@ -95,102 +95,102 @@ MDBCOMP_LIB_NAME=mer_mdbcomp
MAYBE_STATIC_OPT="" MAYBE_STATIC_OPT=""
case $debug in case $debug in
true) true)
trace=true trace=true
;; ;;
false) false)
;; ;;
esac esac
trace_base=false trace_base=false
case $trace in case $trace in
true) true)
trace_base=true trace_base=true
;; ;;
false) false)
;; ;;
esac esac
case $ss_debug in case $ss_debug in
true) true)
trace_base=true trace_base=true
;; ;;
false) false)
;; ;;
esac esac
case "$mercury_stdlib_dir" in case "$mercury_stdlib_dir" in
"") "")
LIBDIR= LIBDIR=
;; ;;
*) *)
LIBDIR=$mercury_stdlib_dir/lib LIBDIR=$mercury_stdlib_dir/lib
;; ;;
esac esac
# If you haven't set mercury_libs, set it to the default value # If you haven't set mercury_libs, set it to the default value
# (shared on most systems). Note that if you have set all_libs, # (shared on most systems). Note that if you have set all_libs,
# it will also have set mercury_libs. # it will also have set mercury_libs.
case $mercury_libs in case $mercury_libs in
default) default)
mercury_libs=shared mercury_libs=shared
case $FULLARCH in case $FULLARCH in
*-cygwin*|*-mingw*|i*86-*-solaris*) *-cygwin*|*-mingw*|i*86-*-solaris*)
# Shared libraries are not the default on the above systems. # Shared libraries are not the default on the above systems.
# See configure.ac for details. # See configure.ac for details.
case $make_shared_lib in case $make_shared_lib in
false) false)
mercury_libs=static mercury_libs=static
;; ;;
esac esac
esac esac
;; ;;
esac esac
# We cannot determine if we are using MSVC by looking at FULLARCH; # We cannot determine if we are using MSVC by looking at FULLARCH;
# we must use static linkage with it as we do not currently support # we must use static linkage with it as we do not currently support
# the use of DLLs on Windows. # the use of DLLs on Windows.
case "$C_COMPILER_TYPE" in case "$C_COMPILER_TYPE" in
msvc*) msvc*)
mercury_libs=static mercury_libs=static
;; ;;
esac esac
# If you haven't set all_libs, set it to the default value # If you haven't set all_libs, set it to the default value
# (shared on most systems). # (shared on most systems).
case $all_libs in case $all_libs in
default) default)
all_libs=shared all_libs=shared
case $FULLARCH in case $FULLARCH in
*-cygwin*|*-mingw*) *-cygwin*|*-mingw*)
# Shared libraries are not the default on the above systems. # Shared libraries are not the default on the above systems.
# See configure.ac for details. # See configure.ac for details.
# #
# We don't do this for Solaris/x86 because -ldl is # We don't do this for Solaris/x86 because -ldl is
# only available for dynamically linked executables # only available for dynamically linked executables
# XXX With these defaults linking with Mercury # XXX With these defaults linking with Mercury
# libraries other than the standard library will fail. # libraries other than the standard library will fail.
case $make_shared_lib in case $make_shared_lib in
false) false)
all_libs=static all_libs=static
;; ;;
esac esac
;; ;;
esac esac
;; ;;
esac esac
case "$C_COMPILER_TYPE" in case "$C_COMPILER_TYPE" in
msvc*) msvc*)
all_libs=static all_libs=static
;; ;;
esac esac
# Defaults have been set, now set options. # Defaults have been set, now set options.
case $all_libs in case $all_libs in
static) static)
MAYBE_STATIC_OPT=$LD_STATIC_FLAGS MAYBE_STATIC_OPT=$LD_STATIC_FLAGS
;; ;;
esac esac
# #
@@ -203,364 +203,364 @@ esac
# if the --print-grade option is specified, # if the --print-grade option is specified,
# then all we do is print the grade and then exit # then all we do is print the grade and then exit
case "$print_grade" in case "$print_grade" in
true) true)
echo $GRADE echo $GRADE
exit 0 exit 0
;; ;;
esac esac
# Compute the gc grade from the grade # Compute the gc grade from the grade
case "$GRADE" in case "$GRADE" in
*.par*.gcd*.ll_debug*.prof*) *.par*.gcd*.ll_debug*.prof*)
gc_grade=par_gc_debug_ll_debug_prof gc_grade=par_gc_debug_ll_debug_prof
;; ;;
*.gcd*.ll_debug*.prof*) *.gcd*.ll_debug*.prof*)
gc_grade=gc_debug_ll_debug_prof gc_grade=gc_debug_ll_debug_prof
;; ;;
*.par*.gcd*.ll_debug*) *.par*.gcd*.ll_debug*)
gc_grade=par_gc_debug_ll_debug gc_grade=par_gc_debug_ll_debug
;; ;;
*.gcd*.ll_debug*) *.gcd*.ll_debug*)
gc_grade=gc_debug_ll_debug gc_grade=gc_debug_ll_debug
;; ;;
*.par*.gcd*.prof*) *.par*.gcd*.prof*)
gc_grade=par_gc_debug_prof gc_grade=par_gc_debug_prof
;; ;;
*.par*.gcd*) *.par*.gcd*)
gc_grade=par_gc_debug gc_grade=par_gc_debug
;; ;;
*.gcd*.prof*) *.gcd*.prof*)
gc_grade=gc_debug_prof gc_grade=gc_debug_prof
;; ;;
*.gcd*) *.gcd*)
gc_grade=gc_debug gc_grade=gc_debug
;; ;;
*.par*.gc*.ll_debug*.prof*) *.par*.gc*.ll_debug*.prof*)
gc_grade=par_gc_ll_debug_prof gc_grade=par_gc_ll_debug_prof
;; ;;
*.par*.gc*.ll_debug*) *.par*.gc*.ll_debug*)
gc_grade=par_gc_ll_debug gc_grade=par_gc_ll_debug
;; ;;
*.gc*.ll_debug*.prof*) *.gc*.ll_debug*.prof*)
gc_grade=gc_ll_debug_prof gc_grade=gc_ll_debug_prof
;; ;;
*.gc*.ll_debug*) *.gc*.ll_debug*)
gc_grade=gc_ll_debug gc_grade=gc_ll_debug
;; ;;
*.par*.gc*.prof*) *.par*.gc*.prof*)
gc_grade=par_gc_prof gc_grade=par_gc_prof
;; ;;
*.par*.gc*) *.par*.gc*)
gc_grade=par_gc gc_grade=par_gc
;; ;;
*.gc*.prof*) *.gc*.prof*)
gc_grade=gc_prof gc_grade=gc_prof
;; ;;
*.gc*) *.gc*)
gc_grade=gc gc_grade=gc
;; ;;
*.hgc*) *.hgc*)
gc_grade=hgc gc_grade=hgc
;; ;;
*) *)
gc_grade=nogc gc_grade=nogc
;; ;;
esac esac
# if the --print-gc-grade option is specified, # if the --print-gc-grade option is specified,
# then all we do is print the gc grade and then exit # then all we do is print the gc grade and then exit
case "$print_gc_grade" in case "$print_gc_grade" in
true) true)
echo $gc_grade echo $gc_grade
exit 0 exit 0
;; ;;
esac esac
case "$gc_grade" in case "$gc_grade" in
nogc) nogc)
LIBGC= LIBGC=
LIBGC_STATIC= LIBGC_STATIC=
;; ;;
hgc) hgc)
# HGC is part of the runtime, don't link anything extra. # HGC is part of the runtime, don't link anything extra.
LIBGC= LIBGC=
LIBGC_STATIC= LIBGC_STATIC=
;; ;;
*) *)
LIBGC="-l$gc_grade" LIBGC="-l$gc_grade"
LIBGC_STATIC=`$FIX_PATH_FOR_LINKER $LIBDIR/lib$gc_grade.@LIB_SUFFIX@` LIBGC_STATIC=`$FIX_PATH_FOR_LINKER $LIBDIR/lib$gc_grade.@LIB_SUFFIX@`
;; ;;
esac esac
case $readline in case $readline in
true) true)
;; ;;
false) false)
READLINE_LIBRARIES= READLINE_LIBRARIES=
;; ;;
esac esac
case $trace_base in case $trace_base in
true) true)
TRACE_BASE_LIBS="-l$EVENTSPEC_LIB_NAME \ TRACE_BASE_LIBS="-l$EVENTSPEC_LIB_NAME \
-l$BROWSER_LIB_NAME -l$MDBCOMP_LIB_NAME" -l$BROWSER_LIB_NAME -l$MDBCOMP_LIB_NAME"
TRACE_BASE_LIBS_SYSTEM="$TRACE_BASE_LIBS_SYSTEM \ TRACE_BASE_LIBS_SYSTEM="$TRACE_BASE_LIBS_SYSTEM \
$READLINE_LIBRARIES" $READLINE_LIBRARIES"
TRACE_BASE_STATIC_LIBS="\ TRACE_BASE_STATIC_LIBS="\
`$FIX_PATH_FOR_LINKER \ `$FIX_PATH_FOR_LINKER \
$LIBDIR/$GRADE/lib$EVENTSPEC_LIB_NAME.@LIB_SUFFIX@` \ $LIBDIR/$GRADE/lib$EVENTSPEC_LIB_NAME.@LIB_SUFFIX@` \
`$FIX_PATH_FOR_LINKER \ `$FIX_PATH_FOR_LINKER \
$LIBDIR/$GRADE/lib$BROWSER_LIB_NAME.@LIB_SUFFIX@` \ $LIBDIR/$GRADE/lib$BROWSER_LIB_NAME.@LIB_SUFFIX@` \
`$FIX_PATH_FOR_LINKER \ `$FIX_PATH_FOR_LINKER \
$LIBDIR/$GRADE/lib$MDBCOMP_LIB_NAME.@LIB_SUFFIX@`" $LIBDIR/$GRADE/lib$MDBCOMP_LIB_NAME.@LIB_SUFFIX@`"
;; ;;
false) false)
TRACE_BASE_LIBS= TRACE_BASE_LIBS=
TRACE_BASE_LIBS_SYSTEM= TRACE_BASE_LIBS_SYSTEM=
TRACE_BASE_STATIC_LIBS= TRACE_BASE_STATIC_LIBS=
;; ;;
esac esac
case $trace in case $trace in
true) true)
TRACE_LIBS="-l$TRACE_LIB_NAME $TRACE_BASE_LIBS" TRACE_LIBS="-l$TRACE_LIB_NAME $TRACE_BASE_LIBS"
TRACE_LIBS_SYSTEM="$TRACE_BASE_LIBS_SYSTEM" TRACE_LIBS_SYSTEM="$TRACE_BASE_LIBS_SYSTEM"
TRACE_STATIC_LIBS="\ TRACE_STATIC_LIBS="\
`$FIX_PATH_FOR_LINKER \ `$FIX_PATH_FOR_LINKER \
$LIBDIR/$GRADE/lib$TRACE_LIB_NAME.@LIB_SUFFIX@` \ $LIBDIR/$GRADE/lib$TRACE_LIB_NAME.@LIB_SUFFIX@` \
$TRACE_BASE_STATIC_LIBS" $TRACE_BASE_STATIC_LIBS"
;; ;;
false) false)
TRACE_LIBS= TRACE_LIBS=
TRACE_LIBS_SYSTEM= TRACE_LIBS_SYSTEM=
TRACE_STATIC_LIBS= TRACE_STATIC_LIBS=
;; ;;
esac esac
case $ss_debug in case $ss_debug in
true) true)
SSDB_LIBS="-l$SSDB_LIB_NAME" SSDB_LIBS="-l$SSDB_LIB_NAME"
SSDB_STATIC_LIBS="\ SSDB_STATIC_LIBS="\
`$FIX_PATH_FOR_LINKER \ `$FIX_PATH_FOR_LINKER \
$LIBDIR/$GRADE/lib$SSDB_LIB_NAME.@LIB_SUFFIX@`" $LIBDIR/$GRADE/lib$SSDB_LIB_NAME.@LIB_SUFFIX@`"
;; ;;
false) false)
SSDB_LIBS= SSDB_LIBS=
SSDB_STATIC_LIBS= SSDB_STATIC_LIBS=
;; ;;
esac esac
# compile_target_code.m falls back to calling `strip' separately if using a # compile_target_code.m falls back to calling `strip' separately if using a
# linker flag is not possible. That would be non-trivial in this script. # linker flag is not possible. That would be non-trivial in this script.
case $strip in case $strip in
true) true)
STRIP_OPTS="@LD_STRIP_FLAG@" STRIP_OPTS="@LD_STRIP_FLAG@"
;; ;;
false) false)
STRIP_OPTS="" STRIP_OPTS=""
;; ;;
esac esac
# Determine whether to link the executable with debugging symbols when using # Determine whether to link the executable with debugging symbols when using
# MSVC. # MSVC.
if test $strip = "false" if test $strip = "false"
then then
case "$C_COMPILER_TYPE" in case "$C_COMPILER_TYPE" in
msvc*) DEBUG_FLAG="-DEBUG" ;; msvc*) DEBUG_FLAG="-DEBUG" ;;
*) DEBUG_FLAG="" ;; *) DEBUG_FLAG="" ;;
esac esac
else else
DEBUG_FLAG="" DEBUG_FLAG=""
fi fi
case $thread_safe in case $thread_safe in
true) true)
use_thread_libs=true use_thread_libs=true
;; ;;
esac esac
case $use_thread_libs.$make_shared_lib in case $use_thread_libs.$make_shared_lib in
true.false) true.false)
ARCH_OPTS=$LDFLAGS_FOR_THREADS ARCH_OPTS=$LDFLAGS_FOR_THREADS
;; ;;
true.true) true.true)
ARCH_OPTS=$LD_LIBFLAGS_FOR_THREADS ARCH_OPTS=$LD_LIBFLAGS_FOR_THREADS
;; ;;
false.*) false.*)
THREAD_LIBS="" THREAD_LIBS=""
;; ;;
esac esac
case "$thread_safe,$all_libs" in case "$thread_safe,$all_libs" in
true,static) true,static)
THREAD_LIBS="$THREAD_LIBS $HWLOC_STATIC_LIBS" THREAD_LIBS="$THREAD_LIBS $HWLOC_STATIC_LIBS"
;; ;;
true,shared) true,shared)
THREAD_LIBS="$THREAD_LIBS $HWLOC_LIBS" THREAD_LIBS="$THREAD_LIBS $HWLOC_LIBS"
;; ;;
esac esac
# Set the correct flags if we're to use the MS Visual C runtime. # Set the correct flags if we're to use the MS Visual C runtime.
use_msvcrt=@USE_MSVCRT@ use_msvcrt=@USE_MSVCRT@
if test $use_msvcrt = "yes" if test $use_msvcrt = "yes"
then then
MSVCRT_OPTS="-MD" # Enable linking with the MS Visual C runtime. MSVCRT_OPTS="-MD" # Enable linking with the MS Visual C runtime.
NODEFAULTLIB_FLAG="-nodefaultlib:libcmt" NODEFAULTLIB_FLAG="-nodefaultlib:libcmt"
else else
MSVCRT_OPTS="" MSVCRT_OPTS=""
NODEFAULTLIB_FLAG="" NODEFAULTLIB_FLAG=""
fi fi
# Use any applicable LTO options # Use any applicable LTO options
LTO_OPTS="$LDFLAGS_FOR_LTO" LTO_OPTS="$LDFLAGS_FOR_LTO"
case $make_shared_lib in case $make_shared_lib in
true) true)
LINKER="$LINK_SHARED_OBJ" LINKER="$LINK_SHARED_OBJ"
case $allow_undef in case $allow_undef in
true) true)
UNDEF_OPT="$ALLOW_UNDEFINED" UNDEF_OPT="$ALLOW_UNDEFINED"
;; ;;
false) false)
UNDEF_OPT="$ERROR_UNDEFINED" UNDEF_OPT="$ERROR_UNDEFINED"
;; ;;
esac esac
RPATH_OPT="$SHLIB_RPATH_OPT" RPATH_OPT="$SHLIB_RPATH_OPT"
RPATH_SEP="$SHLIB_RPATH_SEP" RPATH_SEP="$SHLIB_RPATH_SEP"
STDLIBS="$SHARED_LIBS $THREAD_LIBS" STDLIBS="$SHARED_LIBS $THREAD_LIBS"
case $trace in case $trace in
true) true)
ARCH_OPTS="$ARCH_OPTS $LD_LIBFLAGS_FOR_TRACE" ARCH_OPTS="$ARCH_OPTS $LD_LIBFLAGS_FOR_TRACE"
;; ;;
esac esac
SANITIZER_OPTS="$LDFLAGS_FOR_SANITIZERS" SANITIZER_OPTS="$LDFLAGS_FOR_SANITIZERS"
;; ;;
false) false)
LINKER="$CC" LINKER="$CC"
UNDEF_OPT="" UNDEF_OPT=""
RPATH_OPT="$EXE_RPATH_OPT" RPATH_OPT="$EXE_RPATH_OPT"
RPATH_SEP="$EXE_RPATH_SEP" RPATH_SEP="$EXE_RPATH_SEP"
STDLIBS="$MATH_LIB $THREAD_LIBS" STDLIBS="$MATH_LIB $THREAD_LIBS"
case $trace in case $trace in
true) true)
ARCH_OPTS="$ARCH_OPTS $LDFLAGS_FOR_TRACE" ARCH_OPTS="$ARCH_OPTS $LDFLAGS_FOR_TRACE"
;; ;;
esac esac
SANITIZER_OPTS="$LDFLAGS_FOR_SANITIZERS" SANITIZER_OPTS="$LDFLAGS_FOR_SANITIZERS"
;; ;;
esac esac
# If the --print-link-command option is specified, # If the --print-link-command option is specified,
# then all we do is print the command used to link executables # then all we do is print the command used to link executables
# and then exit. # and then exit.
case "$print_link_command" in case "$print_link_command" in
true) true)
echo $LINKER echo $LINKER
exit 0 exit 0
;; ;;
esac esac
# If the --print-shared-lib-command option is specified, # If the --print-shared-lib-command option is specified,
# then all we do is print the command used to link executables # then all we do is print the command used to link executables
# and then exit. # and then exit.
case "$print_shared_lib_link_command" in case "$print_shared_lib_link_command" in
true) true)
echo $LINK_SHARED_OBJ echo $LINK_SHARED_OBJ
exit 0 exit 0
;; ;;
esac esac
if $print_map if $print_map
then then
PRINT_MAP_OPT="-Wl,--print-map" PRINT_MAP_OPT="-Wl,--print-map"
else else
PRINT_MAP_OPT="" PRINT_MAP_OPT=""
fi fi
merc_libdir_opts="\ merc_libdir_opts="\
@LIB_LIBPATH@$LIBDIR/$GRADE @LIB_LIBPATH@$LIBDIR/$GRADE
@LIB_LIBPATH@$LIBDIR @LIB_LIBPATH@$LIBDIR
" "
system_libdir_opts= system_libdir_opts=
for dir in $ALL_LOCAL_C_LIB_DIRS kludge_for_broken_shells; do for dir in $ALL_LOCAL_C_LIB_DIRS kludge_for_broken_shells; do
if test "$dir" != "kludge_for_broken_shells" if test "$dir" != "kludge_for_broken_shells"
then then
system_libdir_opts="@LIB_LIBPATH@$dir $system_libdir_opts" system_libdir_opts="@LIB_LIBPATH@$dir $system_libdir_opts"
fi fi
done done
LIBDIR_OPTS="$user_libdir_opts $merc_libdir_opts $system_libdir_opts" LIBDIR_OPTS="$user_libdir_opts $merc_libdir_opts $system_libdir_opts"
case $mercury_libs in case $mercury_libs in
shared) shared)
MERCURY_LIBS=${MERCURY_LIBS="$SSDB_LIBS $TRACE_LIBS \ MERCURY_LIBS=${MERCURY_LIBS="$SSDB_LIBS $TRACE_LIBS \
-l$STD_LIB_NAME -l$RT_LIB_NAME $LIBGC"} -l$STD_LIB_NAME -l$RT_LIB_NAME $LIBGC"}
LIBS=${LIBS="$MERCURY_LIBS $TRACE_LIBS_SYSTEM $STDLIBS"} LIBS=${LIBS="$MERCURY_LIBS $TRACE_LIBS_SYSTEM $STDLIBS"}
merc_shlib_dirs="$merc_shlib_dirs $LIBDIR/$GRADE" merc_shlib_dirs="$merc_shlib_dirs $LIBDIR/$GRADE"
merc_shlib_dirs="$merc_shlib_dirs $LIBDIR" merc_shlib_dirs="$merc_shlib_dirs $LIBDIR"
;; ;;
static) static)
MERCURY_LIBS=${MERCURY_LIBS="$SSDB_STATIC_LIBS \ MERCURY_LIBS=${MERCURY_LIBS="$SSDB_STATIC_LIBS \
$TRACE_STATIC_LIBS \ $TRACE_STATIC_LIBS \
`$FIX_PATH_FOR_LINKER \ `$FIX_PATH_FOR_LINKER \
$LIBDIR/$GRADE/lib$STD_LIB_NAME.@LIB_SUFFIX@` \ $LIBDIR/$GRADE/lib$STD_LIB_NAME.@LIB_SUFFIX@` \
`$FIX_PATH_FOR_LINKER \ `$FIX_PATH_FOR_LINKER \
$LIBDIR/$GRADE/lib$RT_LIB_NAME.@LIB_SUFFIX@` \ $LIBDIR/$GRADE/lib$RT_LIB_NAME.@LIB_SUFFIX@` \
$LIBGC_STATIC"} $LIBGC_STATIC"}
LIBS=${LIBS="$MERCURY_LIBS $TRACE_LIBS_SYSTEM $STDLIBS"} LIBS=${LIBS="$MERCURY_LIBS $TRACE_LIBS_SYSTEM $STDLIBS"}
merc_shlib_dirs="" merc_shlib_dirs=""
;; ;;
none) none)
LIBS="$TRACE_LIBS_SYSTEM $STDLIBS" LIBS="$TRACE_LIBS_SYSTEM $STDLIBS"
LIBDIR_OPTS="$user_libdir_opts $system_libdir_opts" LIBDIR_OPTS="$user_libdir_opts $system_libdir_opts"
merc_shlib_dirs="" merc_shlib_dirs=""
;; ;;
esac esac
case $all_libs in case $all_libs in
shared) shared)
system_shlib_dirs=$ALL_LOCAL_C_LIB_DIRS system_shlib_dirs=$ALL_LOCAL_C_LIB_DIRS
;; ;;
static) static)
system_shlib_dirs="" system_shlib_dirs=""
;; ;;
esac esac
RPATH_OPT_LIST= RPATH_OPT_LIST=
# Only set RPATH_OPT_LIST if the system supports shared libraries. # Only set RPATH_OPT_LIST if the system supports shared libraries.
case $EXT_FOR_SHARED_LIB in case $EXT_FOR_SHARED_LIB in
so) so)
prev="" prev=""
for dir in $user_shlib_dirs $merc_shlib_dirs \ for dir in $user_shlib_dirs $merc_shlib_dirs \
$system_shlib_dirs 'kludge for broken shells' $system_shlib_dirs 'kludge for broken shells'
do do
case "$dir" in case "$dir" in
'kludge for broken shells') 'kludge for broken shells')
;; ;;
*) *)
case "$prev" in case "$prev" in
"") "")
RPATH_OPT_LIST="$RPATH_OPT$dir" RPATH_OPT_LIST="$RPATH_OPT$dir"
;; ;;
*) *)
RPATH_OPT_LIST="$RPATH_OPT_LIST$RPATH_SEP$dir" RPATH_OPT_LIST="$RPATH_OPT_LIST$RPATH_SEP$dir"
;; ;;
esac esac
;; ;;
esac esac
prev=$dir prev=$dir
done done
;; ;;
esac esac
case "$MKFIFO" in case "$MKFIFO" in
none) none)
demangle=false demangle=false
;; ;;
esac esac
case "$C_COMPILER_TYPE" in case "$C_COMPILER_TYPE" in
msvc*) NOLOGO_OPTS="-nologo" ;; msvc*) NOLOGO_OPTS="-nologo" ;;
*) NOLOGO_OPTS="" ;; *) NOLOGO_OPTS="" ;;
esac esac
LINKER_PRE_FLAGS="$NOLOGO_OPTS $MSVCRT_OPTS $PRINT_MAP_OPT $UNDEF_OPT $STRIP_OPTS $LTO_OPTS $MAYBE_STATIC_OPT $ARCH_OPTS $SANITIZER_OPTS" LINKER_PRE_FLAGS="$NOLOGO_OPTS $MSVCRT_OPTS $PRINT_MAP_OPT $UNDEF_OPT $STRIP_OPTS $LTO_OPTS $MAYBE_STATIC_OPT $ARCH_OPTS $SANITIZER_OPTS"
@@ -568,78 +568,78 @@ LINKER_POST_FLAGS="@LINK_OPT_SEP@ $NODEFAULTLIB_FLAG $DEBUG_FLAG $LIBDIR_OPTS $R
case $verbose in case $verbose in
true) true)
echo "ml: using grade \`$GRADE'" echo "ml: using grade \`$GRADE'"
case $demangle in case $demangle in
false) false)
echo $LINKER $LINKER_PRE_FLAGS "$@" $LINKER_POST_FLAGS echo $LINKER $LINKER_PRE_FLAGS "$@" $LINKER_POST_FLAGS
;; ;;
true) true)
echo $LINKER $LINKER_PRE_FLAGS "$@" $LINKER_POST_FLAGS "|" echo $LINKER $LINKER_PRE_FLAGS "$@" $LINKER_POST_FLAGS "|"
echo "$DEMANGLER" echo "$DEMANGLER"
;; ;;
esac esac
;; ;;
esac esac
case $demangle in case $demangle in
true) true)
# We would like to just run $CC and pipe the result into $DEMANGLER, # We would like to just run $CC and pipe the result into $DEMANGLER,
# but `$CC | $DEMANGLER' would return the wrong exit status, so # but `$CC | $DEMANGLER' would return the wrong exit status, so
# we need to use a named pipe; if the system doesn't have named # we need to use a named pipe; if the system doesn't have named
# pipes, then we don't use the demangler. # pipes, then we don't use the demangler.
# Create the pipe, making sure we remove it if interrupted. # Create the pipe, making sure we remove it if interrupted.
old_umask=`umask` old_umask=`umask`
umask 022 umask 022
try=0 try=0
until until
ML_TMPDIR=$TMPDIR/ml$$.$try ML_TMPDIR=$TMPDIR/ml$$.$try
PIPE=$ML_TMPDIR/pipe PIPE=$ML_TMPDIR/pipe
trap 'rmdir $ML_TMPDIR >/dev/null 2>&1; exit 1' 1 2 3 13 15 trap 'rmdir $ML_TMPDIR >/dev/null 2>&1; exit 1' 1 2 3 13 15
mkdir $ML_TMPDIR mkdir $ML_TMPDIR
do do
try="`expr $try + 1`" try="`expr $try + 1`"
# give up after 20 tries # give up after 20 tries
case "$try" in case "$try" in
20) 20)
echo "ml: unable to create temporary directory for pipe" \ echo "ml: unable to create temporary directory for pipe" \
1>&2 1>&2
exit 1 exit 1
;; ;;
esac esac
done done
trap 'rm -rf $ML_TMPDIR; exit 1' 1 2 3 13 15 trap 'rm -rf $ML_TMPDIR; exit 1' 1 2 3 13 15
umask $old_umask umask $old_umask
$MKFIFO $PIPE $MKFIFO $PIPE
# Execute the demangler in the background, with stdin coming from # Execute the demangler in the background, with stdin coming from
# the pipe and with stdout redirected to stderr. # the pipe and with stdout redirected to stderr.
exec $DEMANGLER --explain-link-errors 1>&2 < $PIPE & exec $DEMANGLER --explain-link-errors 1>&2 < $PIPE &
# Execute $CC with stdout & stderr redirected to go via the pipe # Execute $CC with stdout & stderr redirected to go via the pipe
# to $DEMANGLER and then to stderr. # to $DEMANGLER and then to stderr.
case $# in case $# in
0) 0)
$LINKER $LINKER_PRE_FLAGS $LINKER_POST_FLAGS >$PIPE 2>&1 $LINKER $LINKER_PRE_FLAGS $LINKER_POST_FLAGS >$PIPE 2>&1
;; ;;
*) *)
$LINKER $LINKER_PRE_FLAGS "$@" $LINKER_POST_FLAGS >$PIPE 2>&1 $LINKER $LINKER_PRE_FLAGS "$@" $LINKER_POST_FLAGS >$PIPE 2>&1
;; ;;
esac esac
linker_status=$? linker_status=$?
# Now we can remove the pipe; since is an open file, it will stay # Now we can remove the pipe; since is an open file, it will stay
# around until $DEMANGLER exits. # around until $DEMANGLER exits.
rm -rf $ML_TMPDIR rm -rf $ML_TMPDIR
# Wait for the demangler to exit before exiting ourselves. # Wait for the demangler to exit before exiting ourselves.
wait wait
exit $linker_status exit $linker_status
;; ;;
false) false)
case $# in case $# in
0) 0)
exec $LINKER $LINKER_PRE_FLAGS $LINKER_POST_FLAGS exec $LINKER $LINKER_PRE_FLAGS $LINKER_POST_FLAGS
;; ;;
*) *)
exec $LINKER $LINKER_PRE_FLAGS "$@" $LINKER_POST_FLAGS exec $LINKER $LINKER_PRE_FLAGS "$@" $LINKER_POST_FLAGS
;; ;;
esac esac
;; ;;
esac esac