libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: linking a shared library with -pthread omits -pthread on the link li


From: Bob Friesenhahn
Subject: Re: linking a shared library with -pthread omits -pthread on the link line.
Date: Sat, 14 Dec 2002 17:19:56 -0600 (CST)

Something is wrong here.  There is no assurance at all that libtool
will be executed with the identical compiler and options as was used
to configure libtool.

While assuming that the value of CC can be preserved may help some
cases, it by no means a sure fix.

For example, I may configure libtool using CC='gcc' but later invoke
libtool like

  libtool --mode=link gcc -m64 blah blah

or even

  libtool --mode link cc blah blah

where 'cc' is something other than the gcc used to configure libtool,
or perhaps a different version of gcc.

Bob

On Sat, 14 Dec 2002, Albert Chin wrote:

> On Sat, Dec 14, 2002 at 05:26:22PM -0000, Max Bowsher wrote:
> > Howard Chu <address@hidden> wrote:
> >
> > >> I'm trying to use CC="gcc -mno-cygwin" CXX="gcc -mno-cygwin",
> > >> obviously
> > >> expecting that the -mno-cygwin is appended to *every*
> > >> invocation of gcc.
> > >> Now, this works for CXX (The variable CC in the tagged config
> > >> CXX gets the
> > >> value from the environment. In addition, LTCC gets the value
> > >> of CC from the
> > >> environment in every tag. *But* CC in the untagged C config drops
> > >> the -mno-cygwin.
> > >>
> > >> I kludged it by doing this to libtool.m4:
> > >> @@ -2295,6 +2296,9 @@
> > >>
> > >>  _LT_AC_SYS_COMPILER
> > >>
> > >> +# Allow CC to be a program name with arguments.
> > >> +_LT_AC_TAGVAR(compiler, $1)="$CC"
> > >> +
> > >>  #
> > >>  # Check for any special shared library compilation flags.
> > >>  #
> > >>
> > >> But that was more by random guess than a through understanding of the
> > >> implications of my change.
> > >
> > > This is also something we reported 2 or 3 years ago and finally gave
> > > up on. We went with suggesting that people just create a wrapper
> > > shell script for gcc that carries the correct options:
> > >
> > > http://www.openldap.org/faq/data/cache/301.html
> > >
> > > At the bottom of the page...
> > > ( mgcc:
> > > #! /bin/sh
> > > gcc -mno-cygwin $*
> > > )
> >
> > Wait a minute! It *works* for CXX, so why can't it be made to work for CC as
> > well?
>
> Because it's different! Actually, it works for everything *except* the
> C tag. The reason is because we do this:
>   set dummy $CC
>   compiler=$2
>
> Obviously, if CC="gcc -mno-cygwin", then $2=gcc. The correct solution
> is:
>   set dummy "$CC"
>   compiler=$2
>
> Now, all non-C tags do:
>   # ltmain only uses $CC for tagged configurations so make sure $CC is set.
>   _LT_AC_SYS_COMPILER
>
>   # Allow CC to be a program name with arguments.
>   lt_save_CC="$CC"
>   CC=${CXX-"c++"}
>   set dummy $CC
>   compiler="[$]2"
>   _LT_AC_TAGVAR(compiler, $1)=$CC
>   cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
> The reason it works for non-C tags is the overriding of $compiler
> with:
>   _LT_AC_TAGVAR(compiler, $1)=$CC
>
> What's the advantage of:
>   set dummy "$CC"
>   compiler=$2
> to:
>   compiler=$CC
>
> The latter is essentially what the non-C tags are doing. So, I
> recommend the patch below.
>
> --
> albert chin (address@hidden)
>
> -- snip snip
> 2002-12-14  Albert Chin-A-Young (address@hidden)
>
>       * libtool.m4: Correctly set $CC in libtool. Previously
>       used:
>         set dummy $CC
>         compiler="[$]2"
>       but if CC contains a program name with arguments, then
>       CC will be the program name only. Rather than:
>         set dummy "$CC"
>         compiler="[$]2"
>       we just:
>         compiler=$CC
>
> Index: libtool.m4
> ===================================================================
> RCS file: /cvsroot/libtool/libtool/libtool.m4,v
> retrieving revision 1.280
> diff -u -3 -p -r1.280 libtool.m4
> --- libtool.m4        11 Dec 2002 19:44:59 -0000      1.280
> +++ libtool.m4        14 Dec 2002 20:10:30 -0000
> @@ -241,8 +241,7 @@ AC_DEFUN([_LT_AC_SYS_COMPILER],
>  LTCC=${LTCC-"$CC"}
>
>  # Allow CC to be a program name with arguments.
> -set dummy $CC
> -compiler="[$]2"
> +compiler=$CC
>  ])# _LT_AC_SYS_COMPILER
>
>
> @@ -2507,8 +2526,7 @@ _LT_AC_SYS_COMPILER
>  # Allow CC to be a program name with arguments.
>  lt_save_CC="$CC"
>  CC=${CXX-"c++"}
> -set dummy $CC
> -compiler="[$]2"
> +compiler=$CC
>  _LT_AC_TAGVAR(compiler, $1)=$CC
>  cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
>
> @@ -3399,8 +3451,7 @@ _LT_AC_SYS_COMPILER
>  # Allow CC to be a program name with arguments.
>  lt_save_CC="$CC"
>  CC=${F77-"f77"}
> -set dummy $CC
> -compiler="[$]2"
> +compiler=$CC
>  _LT_AC_TAGVAR(compiler, $1)=$CC
>  cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
>
> @@ -3479,8 +3530,7 @@ _LT_AC_SYS_COMPILER
>  # Allow CC to be a program name with arguments.
>  lt_save_CC="$CC"
>  CC=${GCJ-"gcj"}
> -set dummy $CC
> -compiler="[$]2"
> +compiler=$CC
>  _LT_AC_TAGVAR(compiler, $1)=$CC
>
>  # GCJ did not exist at the time GCC didn't implicitly link libc in.
> @@ -3535,8 +3585,7 @@ _LT_AC_SYS_COMPILER
>  # Allow CC to be a program name with arguments.
>  lt_save_CC="$CC"
>  CC=${RC-"windres"}
> -set dummy $CC
> -compiler="[$]2"
> +compiler=$CC
>  _LT_AC_TAGVAR(compiler, $1)=$CC
>  _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
>
>
>
> _______________________________________________
> Libtool-patches mailing list
> address@hidden
> http://mail.gnu.org/mailman/listinfo/libtool-patches
>

======================================
Bob Friesenhahn
address@hidden
http://www.simplesystems.org/users/bfriesen




reply via email to

[Prev in Thread] Current Thread [Next in Thread]