Re: GCC 3.2 transition

2002-08-19 Thread Richard Kettlewell
Panu A Kalliokoski [EMAIL PROTECTED] writes:
 Richard Kettlewell wrote:

 I think you've answered your own question; it _can_ known which
 soname to use, and to discover it, it should check the version of
 the compiler.
 
 I'm not sure whether you're actually proposing changing the SONAMEs
 so that the library will compile itself with different SONAME
 depending on the compiler,

Yes, that sounds exactly like what I'm saying.

 but let me say some more problems with using SONAME for the
 transition (even if upstream could be convinced to do this, which in
 practice most certainly is the biggest problem):
 
 Let's say libfoo version 17.1.6 will be the first libfoo to compile
 itself under libfoo.so.8 if gcc 2 is being used, libfoo.so.9 if gcc 3 is
 being used. You're right, this seems sensible because the libraries do
 have incompatible ABI's. Further releases will retain this separation.
 But what will happen when the library's *own* ABI (the thing SONAMEs are
 really meant for) changes? Will libfoo 18.0.1 install itself under
 libfoo.so.10 if gcc 2 is being used, libfoo.so.11 if gcc 3?

That seems a reasonable approach for as long as both ABIs need to be
supported.  What's the problem with that?

 Or is support for gcc 2 to be dropped from these releases? Why
 should it be a library's business at all to provide information
 about what compiler the user programs should use, and to dictate
 when they cannot use compiler X anymore?

This happens already; for instance, the kernel has a preferred gcc
versions required to build it, and this changes from time to time.

With C++ at the moment we'll probably see more of that rather than
less: the older compilers don't even implement the full language
correctly.  So I suspect the fear of having to support multiple
compiler ABIs for many years hence is unfounded in practice.

 The basic problem here is that SONAMEs contain insufficient
 information, which for example in the case of libc transition was
 too weak to express which other libraries the library is linked
 against, and now is (and should IMO not be made otherwise) too weak
 to tell which compiler was used to compile the library.

Another variant that I think would work but haven't tried, would be to
have the information encoded in the name part of the soname rather
than the number, thus somewhat breaking the relationship between the
name that you link against at compile time and the soname.  I've never
actually tried this but I believe it would work.

But you can pack lots and lots of information into an integer.  I
think the choice of approach can be left to upstream, as long as they
do _something_ to signal the ABI change.

 Not changing sonames[1] when the ABI changes would also be
 incredibly painful; bits of software that people use and depend on
 would start crashing.
 
 Well, it is sufficient that the linker gets the additional
 information from somewhere. Of the two ways (hacking the linker to
 use different versions depending on the ABI, or having two dynamic
 linkers) the latter is IMO cleaner, but neither will break anything.

I'm not yet convinced that the hack the linker approach actually
works properly; it requires Debian to move one set of libraries (say,
those with the older ABI) to a new path.  It can and may do this for
libraries in Debian packages, but cannot and must not for libraries
installed into /usr/local.

-- 
http://www.greenend.org.uk/rjk/




Re: GCC 3.2 transition

2002-08-19 Thread Colin Watson
On Mon, Aug 19, 2002 at 11:32:24AM +0100, Richard Kettlewell wrote:
 Panu A Kalliokoski [EMAIL PROTECTED] writes:
  Well, it is sufficient that the linker gets the additional
  information from somewhere. Of the two ways (hacking the linker to
  use different versions depending on the ABI, or having two dynamic
  linkers) the latter is IMO cleaner, but neither will break anything.
 
 I'm not yet convinced that the hack the linker approach actually
 works properly; it requires Debian to move one set of libraries (say,
 those with the older ABI) to a new path.  It can and may do this for
 libraries in Debian packages, but cannot and must not for libraries
 installed into /usr/local.

That problem shouldn't arise if the hack is done the other way round:
new libraries go to /usr/lib/gcc3.2, say, in cases where the ABI
differs. It does mean we can never get rid of it, but if the C++ ABI
changes in later versions of G++ then we may have to repeat this
transition in future anyway.

-- 
Colin Watson  [EMAIL PROTECTED]




Re: GCC 3.2 transition

2002-08-19 Thread Marcelo E. Magallon
 Marcelo E. Magallon [EMAIL PROTECTED] writes:

   I was toying with that idea in my head.  There's no need for a
   special C++ compiler, is there?

 linker I meant, obviously.
 
   Just the normal linker with a different set of default paths.  This
   is like using an -rpath.  The problem with -rpath is that it has
   precedence over LD_LIBRARY_PATH.  So, the simplest solution is for
   g++-3.2 to indicate a different dynamic linker when linking
   programs.

 The problem with this solution is that it's not particularly backwards
 compatible.  Systems without this special linker won't be able to run
 the binaries, which is a *big* problem.

 Fiddling arround the ld.so sources to understand how if finds the
 libraries it wants to use, I noticed it looks for two tags in the ELF
 object: DT_RPATH and DT_RUNPATH.  RUNPATH has two nice poperties: it's
 looked at *after* LD_LIBRARY_PATH and it doesn't contaminate other ELF
 objects, that is, it affects *only* the lookup process for the current
 ELF object (that's the documented behaviour at least, I have yet to
 check that ld.so does indeed behave like this).

 I've managed to place such a tag on an excecutable, with the annoying
 side-effect that RPATH also gets set.  I haven't found a way to store
 only DT_RUNPATH on the ELF object.  In order to achive this you have to
 pass the --enable-new-dtags and -rpath options to the linker.  This
 seems to be ok, since the precense of RUNPATH overrides RPATH (again,
 this is the documented behaviour).

 The end effect of this is that a) binaries still work on other systems
 (with no larger breakage than what we see even today -- unresolved
 symbols and so on) b) doesn't touch the dynamic linker c) gives us what
 we want using a very well contained change (modifying the G++ frontend)
 and recompiling.

 Does this have drawbacks?

-- 
Marcelo | Bishops move diagonally. That's why they often turn up
[EMAIL PROTECTED] | where the kings don't expect them to be.
| -- (Terry Pratchett, Small Gods)




Re: GCC 3.2 transition

2002-08-19 Thread Michael Alan Dorman
Colin Watson [EMAIL PROTECTED] writes:
 That problem shouldn't arise if the hack is done the other way
 round: new libraries go to /usr/lib/gcc3.2, say, in cases where the
 ABI differs. It does mean we can never get rid of it, but if the C++
 ABI changes in later versions of G++ then we may have to repeat this
 transition in future anyway.

The sad fact is, this may actually turn out to be the most sensible
solution, given that, like any standard, there are grey areas, and the
day before 3.2's release, the gcc team found just such a grey area
where gcc's implementation differed from Intel's, although it agreed
with HP's.

Mike.




Re: GCC 3.2 transition

2002-08-19 Thread Colin Watson
On Mon, Aug 19, 2002 at 02:41:44PM +0200, Marcelo E. Magallon wrote:
  Marcelo E. Magallon [EMAIL PROTECTED] writes:
Just the normal linker with a different set of default paths.  This
is like using an -rpath.  The problem with -rpath is that it has
precedence over LD_LIBRARY_PATH.  So, the simplest solution is for
g++-3.2 to indicate a different dynamic linker when linking
programs.
 
  The problem with this solution is that it's not particularly backwards
  compatible.  Systems without this special linker won't be able to run
  the binaries, which is a *big* problem.

Yes ...

  Fiddling arround the ld.so sources to understand how if finds the
  libraries it wants to use, I noticed it looks for two tags in the ELF
  object: DT_RPATH and DT_RUNPATH.  RUNPATH has two nice poperties: it's
  looked at *after* LD_LIBRARY_PATH and it doesn't contaminate other ELF
  objects, that is, it affects *only* the lookup process for the current
  ELF object (that's the documented behaviour at least, I have yet to
  check that ld.so does indeed behave like this).

That could be interesting. How far back is RUNPATH supported? (I seem to
recall that it's a relatively new introduction to ELF, but if it's in
stable then that's good enough for me.)

-- 
Colin Watson  [EMAIL PROTECTED]




Yet another stupid suggestion (Re: GCC 3.2 transition )

2002-08-19 Thread Allan Sandfeld Jensen
On Friday 16 August 2002 15:51, Matthew Wilcox wrote:
 -
   The Debian GCC 3.2 Transition Plan

 This is a proposal. You will be notified when this is a real plan


Nice plan all in all, although I am going to hate the new package names. Some 
people talked about avoiding breakage, but I think most developers will agree 
that changing the so-names is not the solution. Basically we now have this 
problem due to the ELF-format. It is unrealistic to change the loader format 
now, but it might be a good idea to ask the gnu-binutils people to invent a 
new loader/linker format, that can be made compiler-ABI aware, and perhaps 
even architecture-extention aware(MMX, SSE, Altivec).

But for the people lobbying for a solution that avoids breakage, I have a 
loose idea as well:
The gcc 3.2 is really an architecture change, but for C++ libraries only. On 
other operating systems when they deal with different architectures the norm 
is to use $LIBDIR/$ARCH. That way 64bit libraries in Solaris is placed under 
/usr/lib/sparcv9 and in HP-UX under pa20_64. 

My suggestion for consideration is then to force C++ libraries to enter 
subdirectories until they have a proven compatible ABI-standard. So the old 
libraries are placed under /usr/lib/g++2.95 and the new ones under 
/usr/lib/g++3.1. The defaults are symbolic linked from /usr/lib. We can 
either hack ld.so to search the correct path (using some g++ calling cards) 
or recompile all the old C++ packages with an new rpath or load them with a 
LD_LIBRARY_PATH= script. 
This way both old and new packages will work during the actual transition. We 
are also guarenteed complience with LSB packages because we have the defaults 
symbolic linked.

The problem is we will still have a transition to the new style, but at least 
we are prepared for the next C++ ABI breakage in g++ (likely in gcc 3.4). And 
in theory users can then compile packages with different C++ compilers. (e.g. 
kcc, icc)

So is this just another stupid suggestion or a good idea?
`Allan




Re: GCC 3.2 transition

2002-08-19 Thread Marcelo E. Magallon
 Colin Watson [EMAIL PROTECTED] writes:

  That could be interesting. How far back is RUNPATH supported? (I seem to
  recall that it's a relatively new introduction to ELF, but if it's in
  stable then that's good enough for me.)

 Good question.  Looking at the changelogs:

 1999-07-24  Ulrich Drepper  [EMAIL PROTECTED]

[...]
* elf/link.h (struct link_map): Add l_runpath_dirs.
* elf/dl-load.c: Pretty print.
(decompose_rpath): Take new parameter with info from where the path
comes.  Pass it the fillin_rpath.
(_dl_init_paths): Initialize l_runpath_dirs.
(_dl_map_object): Don't search using RPATHs if object has RUNPATH.
Search using RUNPATH after LD_LIBRARY_PATH.

 and later:

 1999-11-13  Roland McGrath  [EMAIL PROTECTED]

* Versions.def (libc): Add GLIBC_2.1.3.

 Roland's changelog doesn't mention a release and the NEWS file doesn't
 mention dates.  2.1.3 was released with potato, the first release
 entered the archive arround Feb 2000.  So, we have RUNTIME support all
 the way to potato.

-- 
Marcelo | This signature was automatically generated with
[EMAIL PROTECTED] | Signify v1.07.  For this and other cool products,
| check out http://www.debian.org/




Re: Yet another stupid suggestion (Re: GCC 3.2 transition )

2002-08-19 Thread Eduard Bloch
#include hallo.h
* Allan Sandfeld Jensen [Mon, Aug 19 2002, 02:58:06PM]:
 libraries are placed under /usr/lib/g++2.95 and the new ones under 
 /usr/lib/g++3.1. The defaults are symbolic linked from /usr/lib. We can 
 either hack ld.so to search the correct path (using some g++ calling cards) 
 or recompile all the old C++ packages with an new rpath or load them with a 

IMHO yes. I do not see why the usage of Rpath has reputation of beeing
evil noadays, it should be the most reliable way to go in this phase,
instead of hacking linkers and loaders. Once the transition is done and
all libraries got appropriate package names, the rpath changes may be
removed, but don't have to.

Gruss/Regards,
Eduard.
-- 
Der Nachteil an Linux ist, dass man sich irgendwann nicht mehr an den
Installationsvorgang erinnern kann.




Re: GCC 3.2 transition

2002-08-19 Thread Gerhard Tonn
On Saturday 17 August 2002 19:28, you wrote:

 I am currently doing this experiment on s390 without uploading of course. I
 have grepped the build logs of about 4000 packages that I have access to
 for g++|c++ and about 900 packages qualified. I am currently rebuilding
 these packages with gcc-3.2 using a local wanna-build DB. This will take
 some days. I will let you know the results.


I have put the preliminary data to 
http://people.debian.org/~gt/gcc-3.2_transition/ .The file Packages contains 
all files currently being rebuilt. The subdirectory failed contains the build 
logs of all failed packages, still a lot, mainly due to c++ default argument 
check changes since gcc 3.0. The subdirectory dep-wait contains the build 
logs of all packages that depend on another package being built with gcc 3.2. 
I have qualified the dependency with subdirectories if known. The 
subdirectory 1iteration contains the build logs of all packages that compiled 
successfully during the first iteration, i.e. only dependent on libstdc++. 
The subdirectory 2iteration will contain the build logs of all packages that 
will compile successfully during the second iteration and so on.

I will update the data once a day. Currently about 300 packages have been 
touched.

I hope the data helps with any transition plan.

I think Matthew has presented a fine plan, but it is open how long the 
transition will take with this plan. Maybe a deadline will be helpful, after 
that source NMUs should be done.

Doing binary NMUs for each platform as in my experiment would also work but 
needs a volunteer for each platform and a lot of bug reports for all the 
failed builds.

Both approaches will duplicate the size of the affected packages in the 
archive of course.

Gerhard




Re: GCC 3.2 transition

2002-08-19 Thread Ulrich Eckhardt
On Friday 16 August 2002 21:47, Martin v. Loewis wrote:
 Steve Langasek [EMAIL PROTECTED] writes:
  How would this work?  Would those using gcc-2.95 software have to set an
  rpath or $LD_LIBRARY_PATH to take advantage of the compat libs?  If so,
  it hardly seems worth the effort; manual intervention is still required
  to make legacy binaries work.

 Not necessarily: you can write wrapper scripts around the executable
 which automatically set LD_LIBRARY_PATH, then invoke the original
 binary. That has worked very well in the past.

While this hack would make it unnecessary, I consider it a lack in the 
linker. In my eyes, the program should ask the linker at startup to provide a 
specified set functions. For since C++ has bigger requirements that stem from 
function overloading and other stuff, the specification consists of the API 
(which is -oversimplified- the version of the header files) and the ABI 
(which must match the compiler the app was compiled with). 

I'm not totally aware of the way the dynamic linker works or how an ELF 
executable is structured, but I believe it would be possible to add a field 
in ELFs header that says which ABI to use and get the linker to parse it.

Still, I have one question left: will C++ be the only language that profits 
from this, are there other languages that have different ABI by different 
compilers ? And would such a function be used again even for C++ ? (hint: 
multi-vendor ABI standard)

At last a crazy idea: what happens if I link object files from two different 
compilers into one lib? I mean I compile foo.cpp once with compiler A and 
then again with compier B and create a lib from both of them. The only 
drawback I see at the moment is that the resulting lib would be approximately 
be twice the size and, even worse, global objects would be instantiated 
twice, bad if they acquire and lock some kind of resource .

cheers 
Uli

PS: is there any way to get the BTS to spew out a list of all bugs of 
packages that don't build with a more standard-conformant compiler (GCC3) ?





Re: GCC 3.2 transition

2002-08-18 Thread Eduard Bloch
#include hallo.h
* Matthew Wilcox [Fri, Aug 16 2002, 02:51:34PM]:

Because upstream chooses the soname to match their API. If we change

Do we know this?

the soname then we render ourselves binary-incompatible with other
distros and vendor-supplied binaries. This is important because the

And do we know this? Why not trying to talk with other distributors to
try to coordinate our efforts. When they are too arogant and continue
doing cludges, then we can put this in the Debian-FAQ as their fault.

Gruss/Regards,
Eduard.
-- 
* jbf hat da gleich mal eine verstaendnisfrage *fg* wenn ich die tastatu
auf us umstelle soll das ja bekanntlich besser zum programmieren
sein ... aber habe ich dann auf meinen umlaut tasten eigentlich
auch meine umlaute wqie auf einer deutschen tastatur ?? weil sonst
gibt es die dummen tasten ja gar nicht .. obwohl wenn ich es
richtig bedenke hat sich die frage schon beantwortet *g* NEIN! (;
-- #debian.de




Re: GCC 3.2 transition

2002-08-18 Thread Richard Kettlewell
Panu Kalliokoski [EMAIL PROTECTED] writes:
 Steve Langasek wrote:
 [...compiler ABI is part of library ABI...]
 You're right; I'm just more worried about the more practical point
 that if a library, when being built, cannot know which SONAME it
 should install itself under (it would involve checking the version
 of compiler used, right?),

I think you've answered your own question; it _can_ known which soname
to use, and to discover it, it should check the version of the
compiler.

It might help if gcc had a --abi option which output an ABI version,
so that it wasn't necessary for every library to know all about
different gcc versions, but that would be a convenience, rather than a
necessity.

(I believe it's also necessary to incorporate information about the
sonames - i.e. ABIs - of libraries that this library depends on it,
into its soname too.)

 changing SONAMES will be a real pain. Another possibility that
 didn't occur to me was having gcc somehow set the SONAME itself -
 but this seems to me somehow very ugly.

Not changing sonames[1] when the ABI changes would also be incredibly
painful; bits of software that people use and depend on would start
crashing.

[1] or implementing linker magic to create multiple soname spaces and
using different search paths for each

-- 
http://www.greenend.org.uk/rjk/




Re: GCC 3.2 transition

2002-08-18 Thread Isaac To
 Eduard == Eduard Bloch [EMAIL PROTECTED] writes:

Eduard And do we know this? Why not trying to talk with other
Eduard distributors to try to coordinate our efforts. When they are too
Eduard arogant and continue doing cludges, then we can put this in the
Eduard Debian-FAQ as their fault.

They won't give a damn on this.  Most distributions actually cannot be
upgraded.  When you use Redhat 7.2, you are stuck to the libraries of 7.2.
When you use Redhat 7.3, you replace every programs, libraries, etc. to the
new version.  There is nothing as a halfly 7.2 and halfly 7.3 system.  In
other words, other distributions won't have any incentive to find a scheme
to encode their so names in a strange new format that nobody used before.
Good luck to everybody trying to convince them adding a -3.2 into the
soname.

Regards,
Isaac.




Re: GCC 3.2 transition

2002-08-18 Thread Panu A Kalliokoski
On Sun, Aug 18, 2002 at 01:03:38PM +0100, Richard Kettlewell wrote:
 Panu Kalliokoski [EMAIL PROTECTED] writes:
  You're right; I'm just more worried about the more practical point
  that if a library, when being built, cannot know which SONAME it
  should install itself under (it would involve checking the version
  of compiler used, right?),
 I think you've answered your own question; it _can_ known which soname
 to use, and to discover it, it should check the version of the
 compiler.

I'm not sure whether you're actually proposing changing the SONAMEs so
that the library will compile itself with different SONAME depending on
the compiler, but let me say some more problems with using SONAME for
the transition (even if upstream could be convinced to do this, which in
practice most certainly is the biggest problem):

Let's say libfoo version 17.1.6 will be the first libfoo to compile
itself under libfoo.so.8 if gcc 2 is being used, libfoo.so.9 if gcc 3 is
being used. You're right, this seems sensible because the libraries do
have incompatible ABI's. Further releases will retain this separation.
But what will happen when the library's *own* ABI (the thing SONAMEs are
really meant for) changes? Will libfoo 18.0.1 install itself under
libfoo.so.10 if gcc 2 is being used, libfoo.so.11 if gcc 3? Or is
support for gcc 2 to be dropped from these releases? Why should it be a
library's business at all to provide information about what compiler the
user programs should use, and to dictate when they cannot use compiler X
anymore?

The basic problem here is that SONAMEs contain insufficient information,
which for example in the case of libc transition was too weak to express
which other libraries the library is linked against, and now is (and
should IMO not be made otherwise) too weak to tell which compiler was
used to compile the library. It would be very nice to have a
standardised way for a library to export all information that will be
necessary for the linker to find just the library that will not break
anything. But such a standard should be treated as a standard, maybe
an extension to ELF, and be subject to much discussion before being
taken in use. Then maybe, if debian is lucky, the other distros will
deem it worthwhile to be binary-compatible with the new standard.

In practice, this kind of situation (ABI's being dictated by factors
that are orthogonal to each other) hasn't occurred too much in practice
yet, and the nice workaround that will not make unnecessary conflicts
is to have different SONAME namespaces. One way to achieve this could be
gcc 3.2 automatically linking against a different dynamic linker.
(Basically, if the dynamic linker was written in C++ (which it isn't),
this would be the only option anyway.) Does gcc's upstream have any
views on this?

 (I believe it's also necessary to incorporate information about the
 sonames - i.e. ABIs - of libraries that this library depends on it,
 into its soname too.)

I think the information should be incorporated _somewhere_. But as I
said above, this should be a matter of common standardisation.

 Not changing sonames[1] when the ABI changes would also be incredibly
 painful; bits of software that people use and depend on would start
 crashing.

Well, it is sufficient that the linker gets the additional information
from somewhere. Of the two ways (hacking the linker to use different
versions depending on the ABI, or having two dynamic linkers) the latter
is IMO cleaner, but neither will break anything.

Panu




Re: GCC 3.2 transition

2002-08-18 Thread Marcelo E. Magallon
 Panu A Kalliokoski [EMAIL PROTECTED] writes:

  In practice, this kind of situation (ABI's being dictated by factors
  that are orthogonal to each other) hasn't occurred too much in
  practice yet, and the nice workaround that will not make
  unnecessary conflicts is to have different SONAME namespaces. One way
  to achieve this could be gcc 3.2 automatically linking against a
  different dynamic linker.  (Basically, if the dynamic linker was
  written in C++ (which it isn't), this would be the only option
  anyway.) Does gcc's upstream have any views on this?

 I was toying with that idea in my head.  There's no need for a special
 C++ compiler, is there?  Just the normal linker with a different set of
 default paths.  This is like using an -rpath.  The problem with -rpath
 is that it has precedence over LD_LIBRARY_PATH.  So, the simplest
 solution is for g++-3.2 to indicate a different dynamic linker when
 linking programs.

-- 
Marcelo | Item 4: Prefer C++-style comments
[EMAIL PROTECTED] | -- Scott Meyers, Effective C++




Re: GCC 3.2 transition

2002-08-17 Thread Stephen Zander
 Joseph == Joseph Carter [EMAIL PROTECTED] writes:
Joseph Sun's JDK.

I know for a fact there's no use of dynamic C++ libraries in any JDK
prior to 1.4.1 and I just check the latest 1.4.1 beta  find no
mention of libstdc++ in any of the executables.  If there's C++ code
in there, it's statically linked.

-- 
Stephen

You will be a large breasted porno star in your next life
- Chinese Fortune Cookie




Re: GCC 3.2 transition

2002-08-17 Thread Joseph Carter
On Fri, Aug 16, 2002 at 11:49:03PM -0700, Stephen Zander wrote:
  Joseph == Joseph Carter [EMAIL PROTECTED] writes:
 Joseph Sun's JDK.
 
 I know for a fact there's no use of dynamic C++ libraries in any JDK
 prior to 1.4.1 and I just check the latest 1.4.1 beta  find no
 mention of libstdc++ in any of the executables.  If there's C++ code
 in there, it's statically linked.

Nowhere eh?

[EMAIL PROTECTED]:/usr/local/j2sdk1.4.0_01/jre/plugin/i386/ns610$ ldd
libjavaplugin_oji.so 
libXt.so.6 = /usr/X11R6/lib/libXt.so.6 (0x40044000)
libX11.so.6 = /usr/X11R6/lib/libX11.so.6 (0x4008e000)
libdl.so.2 = /lib/libdl.so.2 (0x40168000)
libstdc++-libc6.1-1.so.2 = /usr/lib/libstdc++-libc6.1-1.so.2
(0x4016b000)
libm.so.6 = /lib/libm.so.6 (0x401ad000)
libc.so.6 = /lib/libc.so.6 (0x401cf000)
libSM.so.6 = /usr/X11R6/lib/libSM.so.6 (0x402eb000)
libICE.so.6 = /usr/X11R6/lib/libICE.so.6 (0x402f3000)
/lib/ld-linux.so.2 = /lib/ld-linux.so.2 (0x8000)

That's one hell of a figment of my imagination.  Although, it does seem
the plugin is the only thing which uses libstdc++.

-- 
Joseph Carter [EMAIL PROTECTED] Hey, that's MY freak show!
 
dark Yes, your honour, I have RSA encryption code tattood on my
penis.  Shall I show the jury?



pgpxRbUwdJ5c6.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-17 Thread Jamie Wilkinson
This one time, at band camp, Joseph Carter wrote:
[EMAIL PROTECTED]:/usr/local/j2sdk1.4.0_01/jre/plugin/i386/ns610$ ldd
libjavaplugin_oji.so 
   libXt.so.6 = /usr/X11R6/lib/libXt.so.6 (0x40044000)
   libX11.so.6 = /usr/X11R6/lib/libX11.so.6 (0x4008e000)
   libdl.so.2 = /lib/libdl.so.2 (0x40168000)
   libstdc++-libc6.1-1.so.2 = /usr/lib/libstdc++-libc6.1-1.so.2
(0x4016b000)
   libm.so.6 = /lib/libm.so.6 (0x401ad000)
   libc.so.6 = /lib/libc.so.6 (0x401cf000)
   libSM.so.6 = /usr/X11R6/lib/libSM.so.6 (0x402eb000)
   libICE.so.6 = /usr/X11R6/lib/libICE.so.6 (0x402f3000)
   /lib/ld-linux.so.2 = /lib/ld-linux.so.2 (0x8000)

That's one hell of a figment of my imagination.  Although, it does seem
the plugin is the only thing which uses libstdc++.

ldd will traverse the library dependencies tree for all libraries, so it's
possible that the libstdc++ requirement is caused by any of the other
libraries in that list.

What does objdump -p libjavaplugin_oji.so tell you?  

-- 
[EMAIL PROTECTED]   http://spacepants.org/jaq.gpg




Re: GCC 3.2 transition

2002-08-17 Thread Marcelo E. Magallon
 Sean 'Shaleh' Perry [EMAIL PROTECTED] writes:

  or do a staging in experimental or somewhere else.  Upload everything
  there, let people look at it for a day or two then move it over.

 That's the way I interpreted this, too.  It's insane to try to NMU 1000
 packages in one day.

 My one problem with this solution is that it will break people's
 system is a very visible way.  For example, at the group were I work,
 90% of our development is done in C++.  Once this plan is carried out,
 an upgrade would break almost all our binaries in one fell sweep.
 Keeping the old libraries in a special directory would alleviate the
 problem for us.  After some grep-dctrl hackery it looks like we have
 something like 250 *library* packages which are affected (this number
 is probably upwards biased).  This would represent a 2% increase in the
 number of packages (1 GB increase in the archive size? 400 kB average
 size for a library package?  Sounds ok, we have some pretty large
 library packages, but it's probably less).  But the non-transparency of
 that solution makes it unattractive.  Hacking the dynamic linker isn't
 sexy, but sounds doable.  Besides the ugliness factor, is there
 anything that speaks against this?  Is there an alternative that
 *doesn't* involve local recompiles?

-- 
Marcelo | The duke had a mind that ticked like a clock and, like
[EMAIL PROTECTED] | a clock, it regularly went cuckoo.
| -- (Terry Pratchett, Wyrd Sisters)




Re: GCC 3.2 transition

2002-08-17 Thread Marcelo E. Magallon
 Gerhard Tonn [EMAIL PROTECTED] writes:

  The disadvantage is that we must know all C++ packages in advance.

 A large majority of C++ packages depend on libstdc++*; the ones that
 doesn't are probably libraries which have been linked using cc instead
 of c++.  For example libsigc++-1.1-5 and libgtkmm1.3-14 would pass
 unnoticed even if they are both C++ libraries.  This *might be*
 symptomatic of libtool libraries, counterexamples appreciated.  In this
 case you'd have to look for typical C++ symbols in the output of, say,
 objdump -T, e.g. __pure_virtual, __dynamic_cast.  In general you'd have
 to look for traces of C++ mangling.

-- 
Marcelo | Idiot I may be, but tied up I ain't.
[EMAIL PROTECTED] | -- Gaspode the wonder dog
|(Terry Pratchett, Moving Pictures)




Re: GCC 3.2 transition

2002-08-17 Thread Joseph Carter
On Sat, Aug 17, 2002 at 06:11:10PM +1000, Jamie Wilkinson wrote:
 That's one hell of a figment of my imagination.  Although, it does seem
 the plugin is the only thing which uses libstdc++.
 
 ldd will traverse the library dependencies tree for all libraries, so it's
 possible that the libstdc++ requirement is caused by any of the other
 libraries in that list.
 
 What does objdump -p libjavaplugin_oji.so tell you?  

Dynamic Section:
  NEEDED  libXt.so.6
  NEEDED  libX11.so.6
  NEEDED  libdl.so.2
  NEEDED  libstdc++-libc6.1-1.so.2
:


I know it doesn't work because I didn't have the thing when I first tried
to set up the JDK.  I'll be needing it for school, so I'm watching the
discussion of a free JDK environment setup package thingy kinda closely.
I'm not a fan of things which might have bugs I can't identify and report.

-- 
Joseph Carter [EMAIL PROTECTED]Sanity is counterproductive
 
LordHavoc my Amiga 3000 has way more registers than x86
zinx the local 7/11 has more registers than x86



pgpo9Bp7MyOqO.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-17 Thread Richard Kettlewell
[EMAIL PROTECTED] (Martin v. Loewis) writes:
 Steve Langasek [EMAIL PROTECTED] writes:

 My concern is that locally compiled apps built against C++
 libraries other than libstdc++ will silently stop working on
 upgrade.  This is certainly not the most important issue facing us
 in the transition, but so far it seems to me that people are
 regarding it as so *un*important that it's not worth discussing at
 all.

 The breakage will not be silent: On startup of the application, they
 will give an error message indicating the problem. I think that
 problem is best solved by educating the users that such problems might
 happen.

This is not how Debian has done similar transitions in the past: libc4
to libc5, and libc5 to libc6, did not cause this breakage in Debian.
Old programs continued to work without user or operator intervention
(in fact libc4 binaries still work _today_ on some Debian systems.)

If you change the ABI, you change the soname.  That's what it's _for_.

-- 
http://www.greenend.org.uk/rjk/




Re: GCC 3.2 transition

2002-08-17 Thread J.H.M. Dassen \(Ray\)
On Sat, Aug 17, 2002 at 13:27:24 +0100, Richard Kettlewell wrote:
 This is not how Debian has done similar transitions in the past: libc4 to
 libc5, and libc5 to libc6, did not cause this breakage in Debian. Old
 programs continued to work without user or operator intervention (in fact
 libc4 binaries still work _today_ on some Debian systems.)

In some sense, the problem with the gcc 3.2 transition is that is is not
radical enough a change; thus the breakage it can cause is rather subtle.

libc4 - libc5 was much more than a simple ABI change: it involved both API
changes (dropping/deprecating support for a lot of non-portable constructs
then in common use requiring e.g. compiling -DDIRENT_ILLEGAL_ACCESS) and a
a change of executable format (a.out - ELF; big changes in how shared
libraries were built etc.).

Ray
-- 
We do not worry about Microsoft developing Open Source applications. Their
revenue stream is based on a heroin addiction of selling ever more software.
Red Hat's Bob Young quoted in
http://www.theregister.co.uk/content/1/11321.html




Re: GCC 3.2 transition

2002-08-17 Thread Steve Langasek
On Sat, Aug 17, 2002 at 10:49:21AM +0200, Marcelo E. Magallon wrote:
  Gerhard Tonn [EMAIL PROTECTED] writes:

   The disadvantage is that we must know all C++ packages in advance.

  A large majority of C++ packages depend on libstdc++*; the ones that
  doesn't are probably libraries which have been linked using cc instead
  of c++.  For example libsigc++-1.1-5 and libgtkmm1.3-14 would pass
  unnoticed even if they are both C++ libraries.  This *might be*
  symptomatic of libtool libraries, counterexamples appreciated.  In this
  case you'd have to look for typical C++ symbols in the output of, say,
  objdump -T, e.g. __pure_virtual, __dynamic_cast.  In general you'd have
  to look for traces of C++ mangling.

It should be easy enough to find all the C++ libraries that need to be
recompiled.  First, find all the packages that depend on some version of
libstdc++, and try to recompile them, libraries first.  Then, out of the
failed packages that have previously built successfully on our gcc-3.0
archs, grab out all library packages from the dependencies; sift and
rebuild; lather, rinse, repeat.

Anything that's missed by this process is either a package that requires
manual intervention to get it working with gcc 3.x, or a package that has
no dependencies on any other C++ packages.

Steve Langasek
postmodern programmer


pgpnSqiwpUmnp.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-17 Thread Petter Reinholdtsen
[Matthew Wilcox]
 I got sick of listening to people discuss the gcc 3.2 transition in an
 uninformed manner.  So I've whipped up a transition plan which will
 hopefully get us from A to B without causing too much pain.  Haha.
 I'm entirely fallible and I don't pretend to understand all the issues
 involved with doing the transition.  But by writing down a plan at
 least it can be updated and fixed before we have to start _doing_
 the transition.
 
 Comments and corrections welcomed.

When this was discussed in June, one of the suggestions was to include
the ABI format (compiler name/version) in the library package name and
soname.  Did you consider it when you wrote your transition plan?

Check the debian-devel thread C++ library packaging starting
2002-06-27,
URL:http://lists.debian.org/debian-devel/2002/debian-devel-200206/msg01814.html.




Re: GCC 3.2 transition

2002-08-17 Thread Marcelo E. Magallon
 Steve Langasek [EMAIL PROTECTED] writes:

A large majority of C++ packages depend on libstdc++*; the ones
that doesn't are probably libraries which have been linked using
cc instead of c++.  For example libsigc++-1.1-5 and libgtkmm1.3-14
would pass unnoticed even if they are both C++ libraries.  This
*might be* symptomatic of libtool libraries, counterexamples
appreciated.  In this case you'd have to look for typical C++
symbols in the output of, say, objdump -T, e.g. __pure_virtual,
__dynamic_cast.  In general you'd have to look for traces of C++
mangling.
  
  It should be easy enough to find all the C++ libraries that need to be
  recompiled.
 
 Sure.  I was talking about the libraries that /don't/ have dependencies
 on libstdc++.  libsigc++-1.1-5 and libgtkmm1.3-14 in my example both
 use libstdc++ but they don't have a dependency on it.  The only reason
 why this has gone unnoticed is because you need to use a specific
 version of the c++ in order to be able to use these libraries.
 
  Anything that's missed by this process is either a package that
  requires manual intervention to get it working with gcc 3.x, or a
  package that has no dependencies on any other C++ packages.

 That's my point.  You can't use the binaries for the libraries I
 mentioned with any other version of c++ than the one used to compile
 those binaries, yet there's no information in the library that suggest
 it is actually a C++ library.  Look:

$ readelf -d /usr/lib/libgtkmm-1.3.so.14 | grep NEEDED | tr -s ' '
 0x0001 (NEEDED) Shared library: [libsigc-1.1.so.5]
 0x0001 (NEEDED) Shared library: [libgtk-x11-2.0.so.0]
 0x0001 (NEEDED) Shared library: [libgdk-x11-2.0.so.0]
 0x0001 (NEEDED) Shared library: [libatk-1.0.so.0]
 0x0001 (NEEDED) Shared library: [libgdk_pixbuf-2.0.so.0]
 0x0001 (NEEDED) Shared library: [libm.so.6]
 0x0001 (NEEDED) Shared library: [libpangoxft-1.0.so.0]
 0x0001 (NEEDED) Shared library: [libpangox-1.0.so.0]
 0x0001 (NEEDED) Shared library: [libpango-1.0.so.0]
 0x0001 (NEEDED) Shared library: [libgobject-2.0.so.0]
 0x0001 (NEEDED) Shared library: [libgmodule-2.0.so.0]
 0x0001 (NEEDED) Shared library: [libdl.so.2]
 0x0001 (NEEDED) Shared library: [libglib-2.0.so.0]
 0x0001 (NEEDED) Shared library: [libc.so.6]

-- 
Marcelo | They stared at them. Staring is one of the few things
[EMAIL PROTECTED] | frogs are good at.  Thinking isn't.
| -- (Terry Pratchett, Wings)




Re: GCC 3.2 transition

2002-08-17 Thread rmurray
On Sat, Aug 17, 2002 at 10:34:24AM +0200, Marcelo E. Magallon wrote:
  Sean 'Shaleh' Perry [EMAIL PROTECTED] writes:
 
   or do a staging in experimental or somewhere else.  Upload everything
   there, let people look at it for a day or two then move it over.

  is probably upwards biased).  This would represent a 2% increase in the
  number of packages (1 GB increase in the archive size? 400 kB average
  size for a library package?  Sounds ok, we have some pretty large

1 GB*12 active archs in unstable == 12GB.  Doesn't sound OK to take the debian
mirror from ~60GB to ~72GB.  Unless you are volunteering to buy 4 terabytes
of disk space for our mirrors...

Now, if we just did a subset of libraries that we have actual examples
of being needed, that might be something to consider.  We probably won't
know what these libraries are until they stop working for people in
sarge, however...

-- 
Ryan Murray, Debian Developer ([EMAIL PROTECTED], [EMAIL PROTECTED])
The opinions expressed here are my own.


pgpYD1T5kK641.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-17 Thread rmurray
On Sat, Aug 17, 2002 at 10:13:17AM -0500, Steve Langasek wrote:
 On Sat, Aug 17, 2002 at 10:49:21AM +0200, Marcelo E. Magallon wrote:
   Gerhard Tonn [EMAIL PROTECTED] writes:
 
The disadvantage is that we must know all C++ packages in advance.
 
   A large majority of C++ packages depend on libstdc++*; the ones that
   doesn't are probably libraries which have been linked using cc instead
   of c++.  For example libsigc++-1.1-5 and libgtkmm1.3-14 would pass
   unnoticed even if they are both C++ libraries.  This *might be*
   symptomatic of libtool libraries, counterexamples appreciated.  In this
   case you'd have to look for typical C++ symbols in the output of, say,
   objdump -T, e.g. __pure_virtual, __dynamic_cast.  In general you'd have
   to look for traces of C++ mangling.
 
 It should be easy enough to find all the C++ libraries that need to be
 recompiled.  First, find all the packages that depend on some version of

There's also the case that with gcc-2.95, you could cheat and write C++
without using the standard lib, and not have to link it.  This ability is
gone with 3.0 and higher.  (note that telnet depends on libstdc++ on
hppa -- but not any other arch).

-- 
Ryan Murray, Debian Developer ([EMAIL PROTECTED], [EMAIL PROTECTED])
The opinions expressed here are my own.


pgpmvnGHAdRYT.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-17 Thread Marcelo E. Magallon
 [EMAIL PROTECTED] writes:

is probably upwards biased).  This would represent a 2% increase
in the number of packages (1 GB increase in the archive size? 400
kB average size for a library package?  Sounds ok, we have some
pretty large
  
  1 GB*12 active archs in unstable == 12GB.  Doesn't sound OK to take
  the debian mirror from ~60GB to ~72GB.  Unless you are volunteering
  to buy 4 terabytes of disk space for our mirrors...

 Uhm...

 2% * 55 GB is what gave me that 1 GB figure.  I thought that should
 have been obvious, sorry.  It's 1 GB total, not 1 GB per architecture.

  Now, if we just did a subset of libraries that we have actual
  examples of being needed, that might be something to consider.  We
  probably won't know what these libraries are until they stop working
  for people in sarge, however...

 I don't think I understand what you mean in that last sentence.

-- 
Marcelo | One of the universal rules of happiness is: always
[EMAIL PROTECTED] | be wary of any helpful item that weighs less than its
| operating manual.
| -- (Terry Pratchett, Jingo)




Re: GCC 3.2 transition

2002-08-17 Thread Panu Kalliokoski
(first-time poster, beware of possible stupidity)

I'll throw in my views on the subject:

(1) If I understand correctly, SONAMEs are not meant to provide any
other metadata than a reference to the *library's* ABI. Using SONAMEs for
anything else, like which compiler the library was built with, will most
probably result in very broken behavior, because the upstream authors
have little way to ensure that their library with SONAME n will always
be built with compiler x but their library with SONAME m will always be
built with compiler y.

(2) If (binary) programs from outside the distribution are to work with
debian's libraries at all, the metadata about the compiler has to go
somewhere. I'm not worried about the transition within debian (which can
be some pain, too) but numerous third-party binaries that will probably
break even though compatibility for them could have been retained. This
rules out just replacing the old libraries with new ones compiled with
the new compiler.

(3) The easiest way to have metadata about the compiler version is using
a separate directory.

(4) If the libraries are linked against by their SONAMEs (making them
indistinguishable), but the compiler version used in compiling the
program is deducible, hacking the linker seems a plausible solution
(akin to having two linkers in libc transition).

Just my twopenny

Panu




Re: GCC 3.2 transition

2002-08-17 Thread Junichi Uekawa
On 17 Aug 2002 17:47:17 +0200
Petter Reinholdtsen [EMAIL PROTECTED] wrote:

  Comments and corrections welcomed.
 
 When this was discussed in June, one of the suggestions was to include
 the ABI format (compiler name/version) in the library package name and
 soname.  Did you consider it when you wrote your transition plan?
 
 Check the debian-devel thread C++ library packaging starting
 2002-06-27,
 URL:http://lists.debian.org/debian-devel/2002/debian-devel-200206/msg01814.html.

That involves fighting with upstream, and really unnecessary iff 
C++ interface was stabilized. 

Requiring  compiler name and version is not something that is inherent in
C++, just signifies that implementation of g++ has been unstable.


Not that it shouldn't be done, but pointing out that the idea is rather 
too optimistic, and possibly restricted to gcc.


regards,
junichi


-- 
[EMAIL PROTECTED]  http://www.netfort.gr.jp/~dancer






Re: GCC 3.2 transition

2002-08-17 Thread Gerhard Tonn
On Friday 16 August 2002 20:26, you wrote:
 On Friday 16 August 2002 15:51, Matthew Wilcox wrote:

 If it is done by the platform porters a special build server has to be
 setup for each platform recompiling all packages depending on c++. A wanna
 build feature creating packages for NMUs can be used. 

I am currently doing this experiment on s390 without uploading of course. I 
have grepped the build logs of about 4000 packages that I have access to for 
g++|c++ and about 900 packages qualified. I am currently rebuilding these 
packages with gcc-3.2 using a local wanna-build DB. This will take some days. 
I will let you know the results.

Gerhard




Re: GCC 3.2 transition

2002-08-17 Thread Steve Langasek
On Sat, Aug 17, 2002 at 05:59:42PM +0200, Marcelo E. Magallon wrote:
  Steve Langasek [EMAIL PROTECTED] writes:
 
 A large majority of C++ packages depend on libstdc++*; the ones
 that doesn't are probably libraries which have been linked using
 cc instead of c++.  For example libsigc++-1.1-5 and libgtkmm1.3-14
 would pass unnoticed even if they are both C++ libraries.  This
 *might be* symptomatic of libtool libraries, counterexamples
 appreciated.  In this case you'd have to look for typical C++
 symbols in the output of, say, objdump -T, e.g. __pure_virtual,
 __dynamic_cast.  In general you'd have to look for traces of C++
 mangling.
   
   It should be easy enough to find all the C++ libraries that need to be
   recompiled.

  Sure.  I was talking about the libraries that /don't/ have dependencies
  on libstdc++.  libsigc++-1.1-5 and libgtkmm1.3-14 in my example both
  use libstdc++ but they don't have a dependency on it.  The only reason
  why this has gone unnoticed is because you need to use a specific
  version of the c++ in order to be able to use these libraries.

Are these libraries used by programs in our archive?  Then most of those
programs that depend on libsigc++ and libgtkmm will also depend on
libstdc++; so when you go to recompile the programs with gcc 3.2, you'll
find that the build fails because ld can't resolve (differently-mangled)
symbol names in the libsigc++ and libgtkmm libraries.

If there are no programs that use these libraries, or there are no
programs that link against both these libraries and libstdc++, then these
libraries do not have to be transitioned at the same time as the rest
of the C++-using apps.  The transition still has to be handled, it just
isn't critical that it happen all at once.

Steve Langasek
postmodern programmer


pgpHg3mTvh4XF.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-17 Thread Steve Langasek
On Sat, Aug 17, 2002 at 09:24:34AM -0700, [EMAIL PROTECTED] wrote:

  It should be easy enough to find all the C++ libraries that need to be
  recompiled.  First, find all the packages that depend on some version of

 There's also the case that with gcc-2.95, you could cheat and write C++
 without using the standard lib, and not have to link it.  This ability is
 gone with 3.0 and higher.  (note that telnet depends on libstdc++ on
 hppa -- but not any other arch).

But if it's not linked with anything, then, well, it's not linked with
anything -- it has no dependencies on any of the affected packages, and
is out of scope of this transition.  Nothing needs to be coordinated to
recompile a program that doesn't use libraries.

Steve Langasek
postmodern programmer


pgp0zvPOui7Nj.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-17 Thread Marcelo E. Magallon
 Steve Langasek [EMAIL PROTECTED] writes:

  so when you go to recompile the programs with gcc 3.2, you'll find
  that the build fails because ld can't resolve (differently-mangled)
  symbol names in the libsigc++ and libgtkmm libraries.

 Oh, I see what you meant before.  Yeah, that sounds right.

-- 
Marcelo | There are *no* inconsistencies in the Discworld books;
[EMAIL PROTECTED] | ocassionally, however, there are alternate pasts.
| -- (Terry Pratchett, alt.fan.pratchett)




Re: GCC 3.2 transition

2002-08-17 Thread Colin Watson
On Sat, Aug 17, 2002 at 09:24:34AM -0700, [EMAIL PROTECTED] wrote:
 On Sat, Aug 17, 2002 at 10:13:17AM -0500, Steve Langasek wrote:
  It should be easy enough to find all the C++ libraries that need to be
  recompiled.  First, find all the packages that depend on some version of
 
 There's also the case that with gcc-2.95, you could cheat and write C++
 without using the standard lib, and not have to link it.

In fact, given the mess that the STL has been across various Unix
systems, including GNU, until arguably very recently, you could hardly
blame commercial developers for doing exactly this ...

-- 
Colin Watson  [EMAIL PROTECTED]




Re: GCC 3.2 transition

2002-08-17 Thread Steve Langasek
On Sat, Aug 17, 2002 at 08:00:02PM +0300, Panu Kalliokoski wrote:
 I'll throw in my views on the subject:

 (1) If I understand correctly, SONAMEs are not meant to provide any
 other metadata than a reference to the *library's* ABI. Using SONAMEs for
 anything else, like which compiler the library was built with, will most
 probably result in very broken behavior, because the upstream authors
 have little way to ensure that their library with SONAME n will always
 be built with compiler x but their library with SONAME m will always be
 built with compiler y.

But in a very real sense, the compiler used *IS* part of the library's
ABI; if you recompile a C++ library with gcc 3.2 instead of gcc 2.95,
the name of pratically *every* *single* *symbol* will change.  That
rather soundly eliminates any question of compatible ABIs between the two
libraries.

Of course, you may still be right that it's  better to code this
information somewhere other than in the soname itself.  The problem is
that currently, the transition plan doesn't allow for it to be stored
anywhere other than in the package system.

Steve Langasek
postmodern programmer


pgpgPnVtIEaTi.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-17 Thread Daniel Jacobowitz
On Sat, Aug 17, 2002 at 09:24:34AM -0700, [EMAIL PROTECTED] wrote:
 On Sat, Aug 17, 2002 at 10:13:17AM -0500, Steve Langasek wrote:
  On Sat, Aug 17, 2002 at 10:49:21AM +0200, Marcelo E. Magallon wrote:
Gerhard Tonn [EMAIL PROTECTED] writes:
  
 The disadvantage is that we must know all C++ packages in advance.
  
A large majority of C++ packages depend on libstdc++*; the ones that
doesn't are probably libraries which have been linked using cc instead
of c++.  For example libsigc++-1.1-5 and libgtkmm1.3-14 would pass
unnoticed even if they are both C++ libraries.  This *might be*
symptomatic of libtool libraries, counterexamples appreciated.  In this
case you'd have to look for typical C++ symbols in the output of, say,
objdump -T, e.g. __pure_virtual, __dynamic_cast.  In general you'd have
to look for traces of C++ mangling.
  
  It should be easy enough to find all the C++ libraries that need to be
  recompiled.  First, find all the packages that depend on some version of
 
 There's also the case that with gcc-2.95, you could cheat and write C++
 without using the standard lib, and not have to link it.  This ability is
 gone with 3.0 and higher.  (note that telnet depends on libstdc++ on
 hppa -- but not any other arch).

Eh?  You should be able to link in just -lsupc++ and get everything
necessary.

-- 
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer




Re: GCC 3.2 transition

2002-08-17 Thread Stephen Zander
 Joseph == Joseph Carter [EMAIL PROTECTED] writes:
Joseph That's one hell of a figment of my imagination.  Although,
Joseph it does seem the plugin is the only thing which uses
Joseph libstdc++.

And I asked originally were you refering to plugin code or a JDK.
plugin != JDK.

-- 
Stephen

You will be a large breasted porno star in your next life
- Chinese Fortune Cookie




Re: GCC 3.2 transition

2002-08-17 Thread Panu Kalliokoski
On Sat, Aug 17, 2002 at 01:38:42PM -0500, Steve Langasek wrote:
 On Sat, Aug 17, 2002 at 08:00:02PM +0300, Panu Kalliokoski wrote:
  I'll throw in my views on the subject:
 
  (1) If I understand correctly, SONAMEs are not meant to provide any
  other metadata than a reference to the *library's* ABI. Using SONAMEs for
  anything else, like which compiler the library was built with, will most
  probably result in very broken behavior, because the upstream authors
  have little way to ensure that their library with SONAME n will always
  be built with compiler x but their library with SONAME m will always be
  built with compiler y.
 
 But in a very real sense, the compiler used *IS* part of the library's
 ABI; if you recompile a C++ library with gcc 3.2 instead of gcc 2.95,
 the name of pratically *every* *single* *symbol* will change.  That
 rather soundly eliminates any question of compatible ABIs between the two
 libraries.

You're right; I'm just more worried about the more practical point that if
a library, when being built, cannot know which SONAME it should install
itself under (it would involve checking the version of compiler used, right?),
changing SONAMES will be a real pain. Another possibility that didn't
occur to me was having gcc somehow set the SONAME itself - but this
seems to me somehow very ugly.

 Of course, you may still be right that it's  better to code this
 information somewhere other than in the soname itself.  The problem is
 that currently, the transition plan doesn't allow for it to be stored
 anywhere other than in the package system.

I, at least, hope that the ...c versions can coƫxist with the old
versions. (i.e. not the packages, nor the libraries, should conflict in
any way.)

Panu




Re: GCC 3.2 transition

2002-08-17 Thread Joseph Carter
On Sat, Aug 17, 2002 at 12:05:59PM -0700, Stephen Zander wrote:
 Joseph That's one hell of a figment of my imagination.  Although,
 Joseph it does seem the plugin is the only thing which uses
 Joseph libstdc++.
 
 And I asked originally were you refering to plugin code or a JDK.
 plugin != JDK.

I downloaded JDK, I got a plugin.  JDK includes plugin, therefore JDK has
dependencies on old libstdc++.

-- 
Joseph Carter [EMAIL PROTECTED]What're you looking at?
 
I'm starting to think the gene pool could use a little chlorine.



pgpilrA8WhUcP.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-16 Thread Oohara Yuuma
[for debian-gcc people: please Cc: to me because I am not subscribed]

On Fri, 16 Aug 2002 14:51:34 +0100,
Matthew Wilcox [EMAIL PROTECTED] wrote:
  * If your package contains no C++, do nothing. One fine day,
gcc-defaults will be changed to gcc-3.2 and you'll start using GCC
3.2 with no work by yourself.
1. Does a C (not C++) library compiled with gcc 2.95 work with
   a C++ program compiled with gcc 3.2?
2. Does this mean I must not use gcc 3.2 before it becomes gcc-defaults?
   There may be a case where gcc 3.2 offers better optimization.

  * If you maintain a library written in C++, add a `c' to the end of
the name of your .deb, eg libdb4.0++.deb - libdb4.0++c.deb. This
is similar in spirit to the glibc transition adding `g' to the end
of libraries.
What does this c mean?

-- 
Oohara Yuuma [EMAIL PROTECTED]
Debian developer
PGP key (key ID F464A695) http://www.interq.or.jp/libra/oohara/pub-key.txt
Key fingerprint = 6142 8D07 9C5B 159B C170  1F4A 40D6 F42E F464 A695

Better just encrypt it all in your head :-).
--- Derrick 'dman' Hudson, about encryption without any physical medium




Re: GCC 3.2 transition

2002-08-16 Thread Richard Kettlewell
Matthew Wilcox [EMAIL PROTECTED] writes:
  * Add a Conflict with the non-`c' version of the package.

So it will be impossible to have both the old and new library packages
on the system simultaneously.  That's broken.

Why don't we just change the sonames?

Because upstream chooses the soname to match their API. If we change

Sonames define ABIs not APIs.

the soname then we render ourselves binary-incompatible with other
distros and vendor-supplied binaries. This is important because the
LSB intend to standardise the GCC 3.2 ABI; for Debian to become
binary-incompatible at this point would be the height of
perversity.

You have to change the soname for this kind of transition to work
properly and (obviously) this must be coordinated with upstream.

-- 
http://www.greenend.org.uk/rjk/




Re: GCC 3.2 transition

2002-08-16 Thread Steve Langasek
On Fri, Aug 16, 2002 at 02:51:34PM +0100, Matthew Wilcox wrote:

 This is a proposal. You will be notified when this is a real plan

Why don't we just change the sonames?

Because upstream chooses the soname to match their API. If we change
the soname then we render ourselves binary-incompatible with other
distros and vendor-supplied binaries. This is important because the
LSB intend to standardise the GCC 3.2 ABI; for Debian to become
binary-incompatible at this point would be the height of perversity.

No, not at all.  The soname is an assurance that the library's *ABI* is
constant.  An ABI can change with no changes to the API, and when it
does, the soname must be changed.  This is why we have at least 5
versions of libstdc++ in the archive right now (4 in woody alone).

I sincerely hope that g++ 3.2 applications will be allowed to coexist on
the system with g++ 2.95.x applications.  And really, there is no reason
to not allow this: because of the nature of the ABI breakage, you will
never be able to accidentally mix-and-match g++ 3.2 binaries with g++
2.95.x binaries, because they will not be able to resolve each other's
symbols at the linker level.  It is precisely because the symbol name
mangling has changed with each revision of gcc that we need to worry
about this transition in the first place.

If other distributions are planning to move from 2.95.x to 3.2 without
changing sonames, then we need to start talking to them /now/, and make
sure we aren't all stuck with this terrible mistake.

Steve Langasek
postmodern programmer


pgpzw1d4LEFlt.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-16 Thread Wichert Akkerman
Previously Oohara Yuuma wrote:
 1. Does a C (not C++) library compiled with gcc 2.95 work with
a C++ program compiled with gcc 3.2?

Yes

 2. Does this mean I must not use gcc 3.2 before it becomes gcc-defaults?
There may be a case where gcc 3.2 offers better optimization.

Yes.

Wichert.

-- 
  _
 /[EMAIL PROTECTED] This space intentionally left occupied \
| [EMAIL PROTECTED]http://www.wiggy.net/ |
| 1024D/2FA3BC2D 576E 100B 518D 2F16 36B0  2805 3CB8 9250 2FA3 BC2D |




Re: GCC 3.2 transition

2002-08-16 Thread Daniel Jacobowitz
On Fri, Aug 16, 2002 at 11:47:07PM +0900, Oohara Yuuma wrote:
 [for debian-gcc people: please Cc: to me because I am not subscribed]
 
 On Fri, 16 Aug 2002 14:51:34 +0100,
 Matthew Wilcox [EMAIL PROTECTED] wrote:
   * If your package contains no C++, do nothing. One fine day,
 gcc-defaults will be changed to gcc-3.2 and you'll start using GCC
 3.2 with no work by yourself.
 1. Does a C (not C++) library compiled with gcc 2.95 work with
a C++ program compiled with gcc 3.2?

If the library does not use exceptions in any way then yes, almost
certainly.

-- 
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer




Re: GCC 3.2 transition

2002-08-16 Thread Adam Heath
On Fri, 16 Aug 2002, Oohara Yuuma wrote:

   * If you maintain a library written in C++, add a `c' to the end of
 the name of your .deb, eg libdb4.0++.deb - libdb4.0++c.deb. This
 is similar in spirit to the glibc transition adding `g' to the end
 of libraries.
 What does this c mean?

c++ - ++c




Re: GCC 3.2 transition

2002-08-16 Thread Steve Langasek
On Fri, Aug 16, 2002 at 04:06:56PM +0100, Richard Kettlewell wrote:
 Matthew Wilcox [EMAIL PROTECTED] writes:
   * Add a Conflict with the non-`c' version of the package.

 So it will be impossible to have both the old and new library packages
 on the system simultaneously.  That's broken.

 Why don't we just change the sonames?

 Because upstream chooses the soname to match their API. If we change

 Sonames define ABIs not APIs.

 the soname then we render ourselves binary-incompatible with other
 distros and vendor-supplied binaries. This is important because the
 LSB intend to standardise the GCC 3.2 ABI; for Debian to become
 binary-incompatible at this point would be the height of
 perversity.

 You have to change the soname for this kind of transition to work
 properly and (obviously) this must be coordinated with upstream.

From the heated discussion I've just had on IRC, I've gathered the
following:

* It is assumed that for the vast majority of C++ libs we ship, upstream
  has already transitioned to using the GCC 3.2 ABI, therefore our
  current packages are already binary-incompatible with the rest of the
  world. (ok)
* In these cases, having a package whose soname is compatible with the
  rest of the world is considered more important than providing
  compatibility for binaries locally compiled by our users against the
  old, broken ABI. (ok)
* For any remaining libraries, there are many in Debian who don't give
  a damn about getting it right, to the point that they don't want
  maintainers to get any grandiose ideas about discussing this issue with
  upstream and possibly hammering out a sane, cross-platform
  transitioning plan for the library in question that actually manages to
  NOT break anything. (not ok)

But, I seem to be strongly outvoted on the last point. shrug

Steve Langasek
postmodern programmer


pgpEVGsRcAkyi.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-16 Thread Jack Howarth
Steve,
There shouldn't be huge issues in the gcc 2.95.4 to gcc 3.2 transition.
Currently the only two major ones I know if are...

1) Rebuilding glibc with gcc 3.2 *may* require an arch to add a libgcc-compat
   section to provide libgcc symbols, now .hidden in gcc 3.2's libgcc_s.so,
   with local copies that are resolvable at runtime. Currently ia64 and ppc
   has such code available. This is to prevent breaking old binaries when
   a gcc 3.2 built glibc is installed.
2) Using something like a gcc 2.95.4 built jdk javaplugin (written in c++)
   with a gcc 3.2 built mozilla won't currently work although workarounds
   are said to exist. Since Blackdown JDK 1.4 development is underway
   a gcc 3.2 build JDK won't be far off.

  Jack




RE: GCC 3.2 transition

2002-08-16 Thread Sean 'Shaleh' Perry
  * Add a Conflict with the non-`c' version of the package.

why can't we have both installed, just like the libfoo6 and libfoo6g situation??




Re: GCC 3.2 transition

2002-08-16 Thread Matthew Wilcox
On Fri, Aug 16, 2002 at 09:59:28AM -0700, Sean 'Shaleh' Perry wrote:
   * Add a Conflict with the non-`c' version of the package.
 
 why can't we have both installed, just like the libfoo6 and libfoo6g
 situation??

i explained this elsewhere...

Why don't we put the libs in a different directory?

Basically, it's too complex.  For the glibc transition, we could do this
because they used different dynamic linkers.

Or can you think of a good way of having them both install without
having conflicting files?

-- 
Revolutions do not require corporate support.




Re: GCC 3.2 transition

2002-08-16 Thread Anthony Towns
On Fri, Aug 16, 2002 at 09:59:28AM -0700, Sean 'Shaleh' Perry wrote:
   * Add a Conflict with the non-`c' version of the package.
 why can't we have both installed, just like the libfoo6 and libfoo6g 
 situation??

Because doing so would require changing the soname. Which is possible,
but would mean inventing a new soname that's not used anywhere else. If
upstream then reuse the soname we make up for something different we
end up with continuing problems. As far as non-Debian apps go, it seems
likely, especially with the LSB looking to standardise C++ on gcc 3.2
soon (in theory in the next couple of months, in practice maybe longer)
that people will expect the current sonames to use the gcc 3.2 C++ ABI.

Other options are:

* encourage upstream to bump their soname themselves, and wait for
  them to do that. so libfoo.so.2 is the old C++ ABI, and
  libfoo.so.3 is the new one, eg.

* encourage upstream to encode the C++ ABI in the soname, as
  apt does, ending up with something like
  libapt-pkg-libc6.2-3-2.so.3.2. (I have no idea how this is worked
  out)

If upstream aren't inclined to change their Linux soname for the new gcc,
though, not changing our soname but doing the upgrade anyway seems the
best option.

Cheers,
aj

-- 
Anthony Towns [EMAIL PROTECTED] http://azure.humbug.org.au/~aj/
I don't speak for anyone save myself. GPG signed mail preferred.

 ``If you don't do it now, you'll be one year older when you do.''


pgpZKJKTaOyWo.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-16 Thread Michael Alan Dorman
Sean 'Shaleh' Perry [EMAIL PROTECTED] writes:
   * Add a Conflict with the non-`c' version of the package.
 why can't we have both installed, just like the libfoo6 and libfoo6g
 situation??

Err, weren't we able to do that because we moved all the libc5 libs to
another directory?

Mike.




Re: GCC 3.2 transition

2002-08-16 Thread Matthias Klose
Steve Langasek writes:
 * It is assumed that for the vast majority of C++ libs we ship, upstream
   has already transitioned to using the GCC 3.2 ABI, therefore our
   current packages are already binary-incompatible with the rest of the
   world. (ok)

right. One reason for the 3.2 release was a common base for Linux
distributions.

 * In these cases, having a package whose soname is compatible with the
   rest of the world is considered more important than providing
   compatibility for binaries locally compiled by our users against the
   old, broken ABI. (ok)

Jeff Bailey planned to put these libraries in /usr/lib/gcc-2.95 (like
in the libc5/6 transition) and rename the packages containing the 2.95
libraries.

 * For any remaining libraries, there are many in Debian who don't give
   a damn about getting it right, to the point that they don't want
   maintainers to get any grandiose ideas about discussing this issue with
   upstream and possibly hammering out a sane, cross-platform
   transitioning plan for the library in question that actually manages to
   NOT break anything. (not ok)

cross platform == cross architecture: yes. Jeff is working on a plan
to NMU libstdc++ dependent packages.

 But, I seem to be strongly outvoted on the last point. shrug

maybe we break some things in unstable for some days, but how do we
call this distro?

Matthias




Re: GCC 3.2 transition

2002-08-16 Thread Colin Watson
On Fri, Aug 16, 2002 at 02:51:34PM +0100, Matthew Wilcox wrote:
  * If you maintain a library written in C++, add a `c' to the end of
the name of your .deb, eg libdb4.0++.deb - libdb4.0++c.deb. This
is similar in spirit to the glibc transition adding `g' to the end
of libraries.
  * You should not add a `c' to your -dev package.
  * The exact placement of the `c' can be tricky. It's not terribly
important; the important thing is that the new package conflicts
with the old and has a different name. Stylistically, we prefer to
keep the `c' adjacent to the soname number, eg libqt3c-mt-odbc,
but if your package ends in a ++, put the `c' after that.
  * Add a Conflict with the non-`c' version of the package.
  * Ensure that you're using g++-3.2 to build your library (setting
CXX in the environment will normally do the trick).
  * Add a build-dependency on g++-3.2 in your control file (this can
be removed after gcc-defaults is changed).
  * Wait until all your dependencies have been uploaded in `c'
versions.

What should maintainers of ordinary non-library packages written in C++
do? Presumably it will be possible to upload with a build-dep on g++-3.2
pretty much as soon as a transition plan is finalized, provided there
are no library dependencies beyond libstdc++.

(Yes, there's a certain amount of pride here in trying to save work for
whoever ends up mass-NMUing ...)

-- 
Colin Watson  [EMAIL PROTECTED]




Re: GCC 3.2 transition

2002-08-16 Thread Steve Langasek
On Fri, Aug 16, 2002 at 08:03:48PM +0200, Matthias Klose wrote:
 Steve Langasek writes:
  * In these cases, having a package whose soname is compatible with the
rest of the world is considered more important than providing
compatibility for binaries locally compiled by our users against the
old, broken ABI. (ok)

 Jeff Bailey planned to put these libraries in /usr/lib/gcc-2.95 (like
 in the libc5/6 transition) and rename the packages containing the 2.95
 libraries.

How would this work?  Would those using gcc-2.95 software have to set an
rpath or $LD_LIBRARY_PATH to take advantage of the compat libs?  If so,
it hardly seems worth the effort; manual intervention is still required
to make legacy binaries work.

  * For any remaining libraries, there are many in Debian who don't give
a damn about getting it right, to the point that they don't want
maintainers to get any grandiose ideas about discussing this issue with
upstream and possibly hammering out a sane, cross-platform
transitioning plan for the library in question that actually manages to
NOT break anything. (not ok)

 cross platform == cross architecture: yes. Jeff is working on a plan
 to NMU libstdc++ dependent packages.

  But, I seem to be strongly outvoted on the last point. shrug

 maybe we break some things in unstable for some days, but how do we
 call this distro?

My concern is that locally compiled apps built against C++ libraries
other than libstdc++ will silently stop working on upgrade.  This is
certainly not the most important issue facing us in the transition, but
so far it seems to me that people are regarding it as so *un*important
that it's not worth discussing at all.

Steve Langasek
postmodern programmer


pgpb2XvWyMZSM.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-16 Thread Martin v. Loewis
Matthew Wilcox [EMAIL PROTECTED] writes:

 This is a proposal. You will be notified when this is a real plan

I think Jeff Bailey's plan is entirely different, and I like his plan
more. Here are the differences.

  * If you maintain a library written in C++, add a `c' to the end of
the name of your .deb, eg libdb4.0++.deb - libdb4.0++c.deb. This
is similar in spirit to the glibc transition adding `g' to the end
of libraries.

In Jeff's plan: do nothing.

At some point in the future, we will change gcc-defaults to make
gcc-3.2 the default on all architectures. At that time, you should
remove the setting of CXX and the explicit dependency on g++-3.2. You
should not rename your package to remove the `c' suffix until upstream
change their soname.

In Jeff's plan: All C++ packages will be uploaded via NMUs. The
package maintainer can upload their packages afterwards if they have
to make other corrections.

Why don't we just change the sonames?

Because it is easiest to have just two binary-incompatible
libraries. They can't coexist, and they don't need to, most of the
time. When they do, the old versions can be put in a separate
directory.

Why don't we put the libs in a different directory?
 
Basically, it's too complex. For the glibc transition, we could do
this because they used different dynamic linkers.

For C++, we can do this because we have the source of nearly all
packages, and can recompile them. There won't be much C++ libraries
that are needed by packages for which we don't have the source to.

Regards,
Martin




Re: GCC 3.2 transition

2002-08-16 Thread Martin v. Loewis
Steve Langasek [EMAIL PROTECTED] writes:

 I sincerely hope that g++ 3.2 applications will be allowed to coexist on
 the system with g++ 2.95.x applications.  

I don't think this will happen, atleast not for shared libraries. Any
scheme that tries to solve this problem will be horribly complex,
require manual interaction with the build process, and produce
binaries that are incompatible with anybody else's binaries.

 And really, there is no reason to not allow this: because of the
 nature of the ABI breakage, you will never be able to accidentally
 mix-and-match g++ 3.2 binaries with g++ 2.95.x binaries, because
 they will not be able to resolve each other's symbols at the linker
 level.

Indeed. So there is no accidental linkage of the wrong library. If
something breaks, it will be visible right when it starts, and the
solution is clear: recompile the package that uses the old ABI.

 It is precisely because the symbol name mangling has changed with
 each revision of gcc that we need to worry about this transition in
 the first place.

The ABI deals with way more aspects than name mangling, but - yes.

 If other distributions are planning to move from 2.95.x to 3.2 without
 changing sonames, then we need to start talking to them /now/, and make
 sure we aren't all stuck with this terrible mistake.

It is not a terrible mistake, it is the only solution that can work at
all. *If* sonames are changed, we will get a terrible mess. If we use
the sonames defined by the upstream maintainers, everything will work
out nicely, as everybody uses the same sonames for the same libraries.

Other distributions *will* build the packages from source as-is, and
thus *will not* change the sonames of the library: they can rebuild
the entire distribution from source, so there simply is no need to
keep the old shared libraries.

Regards,
Martin




Re: GCC 3.2 transition

2002-08-16 Thread Martin v. Loewis
Matthew Wilcox [EMAIL PROTECTED] writes:

 All of them?  I sw someone do a count and there were around 1000 packages
 currently in the archive.  10%.  Per architecture.  Is Jeff really going
 to bNMU all of these packages on the same day for all architectures?

I think this is the plan. You'll have to ask him for specifics; I
think the plan incorporates doing one architecture at a time.

 What will that do to auric's disc space and our network traffic?
 This doesn't sound like a plan, it sounds like the absence of a
 plan.

It is a strategy that requires a minimum of manual intervention, so I
think it is a good strategy - much better than requiring every single
maintainer of each of the 1000 packages to act in a coordinated way,
and ending up with an infrastructure that is incompatible to anybody
else's gcc 3.2 applications.

If temporary breakage of some applications is acceptable, you can
spread this over a couple of days, by tsorting the 1000 packages.

Regards,
Martin




Re: GCC 3.2 transition

2002-08-16 Thread Steve Langasek
On Fri, Aug 16, 2002 at 09:47:25PM +0200, Martin v. Loewis wrote:

 Not necessarily: you can write wrapper scripts around the executable
 which automatically set LD_LIBRARY_PATH, then invoke the original
 binary. That has worked very well in the past.

 If you mean that the manual intervention is need by package
 maintainers: indeed they'd need to act. So this would be restricted to
 packages for which no source code is available.

 The majority of such packages links to libstdc++ only, so there may be
 no need for action at all.

Do we have non-free C++ packages that we have to worry about?  My
comments were more directed at unpackaged software that users may be
running on their Debian systems.  In those cases, providing a way to get
their binaries working again /after/ we break them is only a little bit
better than forcing them to recompile.

  My concern is that locally compiled apps built against C++ libraries
  other than libstdc++ will silently stop working on upgrade.  This is
  certainly not the most important issue facing us in the transition,
  but so far it seems to me that people are regarding it as so
  *un*important that it's not worth discussing at all.

 The breakage will not be silent: On startup of the application, they
 will give an error message indicating the problem. I think that
 problem is best solved by educating the users that such problems might
 happen.

It is silent in the sense that the package management system will give no
indication that the new libfoo++.so.n is not compatible with the old
libfoo++.so.n; only locally compiled, /packaged/ apps will be tipped off
to the problem.

Steve Langasek
postmodern programmer


pgpwIB15ehwxQ.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-16 Thread Sean 'Shaleh' Perry
 
 If upstream aren't inclined to change their Linux soname for the new gcc,
 though, not changing our soname but doing the upgrade anyway seems the
 best option.
 

even if some are willing not all will be.  Then we have to worry about dead
upstreams too.  It seems like changing the sonames to solve this simply won't
work.

I had forgotten we solved the libc5 issue by moving the libs to a new directory
and making ld.so look there.  Been a while (-:




Re: GCC 3.2 transition

2002-08-16 Thread Martin v. Loewis
Steve Langasek [EMAIL PROTECTED] writes:

  Jeff Bailey planned to put these libraries in /usr/lib/gcc-2.95 (like
  in the libc5/6 transition) and rename the packages containing the 2.95
  libraries.
 
 How would this work?  Would those using gcc-2.95 software have to set an
 rpath or $LD_LIBRARY_PATH to take advantage of the compat libs?  If so,
 it hardly seems worth the effort; manual intervention is still required
 to make legacy binaries work.

Not necessarily: you can write wrapper scripts around the executable
which automatically set LD_LIBRARY_PATH, then invoke the original
binary. That has worked very well in the past.

If you mean that the manual intervention is need by package
maintainers: indeed they'd need to act. So this would be restricted to
packages for which no source code is available.

The majority of such packages links to libstdc++ only, so there may be
no need for action at all.

 My concern is that locally compiled apps built against C++ libraries
 other than libstdc++ will silently stop working on upgrade.  This is
 certainly not the most important issue facing us in the transition,
 but so far it seems to me that people are regarding it as so
 *un*important that it's not worth discussing at all.

The breakage will not be silent: On startup of the application, they
will give an error message indicating the problem. I think that
problem is best solved by educating the users that such problems might
happen.

With a little effort, it would be possible to produce a list of shared
libraries that will break; perhaps while constructing the NMUs, and
maintaining that list as a package.

It would then be possible to even write a skript that checks one or
many binaries (apps and libs) whether they are linked against one of
these libraries, and warn users that those programs will stop working
after the update.

The time to maintain this database would IMO be better spent than the
time needed to really solve the problem (which is an effort with
uncertain outcome, too).

Regards,
Martin




Re: GCC 3.2 transition

2002-08-16 Thread David Schleef
On Fri, Aug 16, 2002 at 01:27:37PM -0500, Steve Langasek wrote:
 On Fri, Aug 16, 2002 at 08:03:48PM +0200, Matthias Klose wrote:
  Steve Langasek writes:
   * In these cases, having a package whose soname is compatible with the
 rest of the world is considered more important than providing
 compatibility for binaries locally compiled by our users against the
 old, broken ABI. (ok)
 
  Jeff Bailey planned to put these libraries in /usr/lib/gcc-2.95 (like
  in the libc5/6 transition) and rename the packages containing the 2.95
  libraries.
 
 How would this work?  Would those using gcc-2.95 software have to set an
 rpath or $LD_LIBRARY_PATH to take advantage of the compat libs?  If so,
 it hardly seems worth the effort; manual intervention is still required
 to make legacy binaries work.
 
 My concern is that locally compiled apps built against C++ libraries
 other than libstdc++ will silently stop working on upgrade.  This is
 certainly not the most important issue facing us in the transition, but
 so far it seems to me that people are regarding it as so *un*important
 that it's not worth discussing at all.


One possible way of allowing both 2.95 libs and 3.2 libs to coincide
is to hack ld.so to look in additional search paths if a binary is
linked with specific library.

For example, in this case, if ld.so sees that local-qt-based-app is
linked with libstdc++-libc6.2-2.so.3, it adds
/usr/lib/libstdc++-libc6.2-2.so.3 to the library search path, and
then preferentially load /usr/lib/libstdc++-libc6.2-2.so.3/libqt.so.2
to satisfy the libqt.so.2 dependency.

Naturally, we'd need a transition plan to get those libs out of
/usr/lib and into /usr/lib/libstdc++-libc6.2-2.so.3.  But we could
do that at the same time as putting new, gcc-3.2-compiled libraries
in /usr/lib/libstdc++-libc6.2-2.so.5/.  When /usr/lib is empty of
so.3-dependent libs, we can start moving so.5-dependent libs into
/usr/lib.

This only covers a clean unstable transition.  I'm not familiar with
release-to-release transitions.

Given that same-soname library transitioning occurs too much (i.e.,
more than never), it might be time to have a fix, even if the fix is
detestable.



dave...




Re: GCC 3.2 transition

2002-08-16 Thread Gerhard Tonn
On Friday 16 August 2002 15:51, Matthew Wilcox wrote:
 I got sick of listening to people discuss the gcc 3.2 transition in an
 uninformed manner.  So I've whipped up a transition plan which will
 hopefully get us from A to B without causing too much pain.  Haha.
 I'm entirely fallible and I don't pretend to understand all the issues
 involved with doing the transition.  But by writing down a plan at
 least it can be updated and fixed before we have to start _doing_
 the transition.

 Comments and corrections welcomed.  


I think, the question is, whether the transition should be done by the 
package maintainers or by the platform porters. 

If it is done by the platform porters a special build server has to be setup 
for each platform recompiling all packages depending on c++. A wanna build 
feature creating packages for NMUs can be used. The packages that have been 
built successfully can then be uploaded to a local archive or to auric which 
will probably break some other packages. The packages that haven't been built 
successfully have to be rebuilt. This is basically the approach used to build 
packages for a new architecture. The advantage is that the transition takes 
probably only one week on most architectures. The disadvantage is that we 
must know all C++ packages in advance.

Gerhard




Re: GCC 3.2 transition

2002-08-16 Thread Matthew Wilcox
On Fri, Aug 16, 2002 at 08:38:53PM +0200, Martin v. Loewis wrote:
 In Jeff's plan: All C++ packages will be uploaded via NMUs. The
 package maintainer can upload their packages afterwards if they have
 to make other corrections.

All of them?  I sw someone do a count and there were around 1000 packages
currently in the archive.  10%.  Per architecture.  Is Jeff really going
to bNMU all of these packages on the same day for all architectures?
What will that do to auric's disc space and our network traffic?  This
doesn't sound like a plan, it sounds like the absence of a plan.

-- 
Revolutions do not require corporate support.




Re: GCC 3.2 transition

2002-08-16 Thread Simon Law
On Fri, Aug 16, 2002 at 08:38:53PM +0200, Martin v. Loewis wrote:
 Matthew Wilcox [EMAIL PROTECTED] writes:
 At some point in the future, we will change gcc-defaults to make
 gcc-3.2 the default on all architectures. At that time, you should
 remove the setting of CXX and the explicit dependency on g++-3.2. You
 should not rename your package to remove the `c' suffix until upstream
 change their soname.
 
 In Jeff's plan: All C++ packages will be uploaded via NMUs. The
 package maintainer can upload their packages afterwards if they have
 to make other corrections.

Indeed, this is the entire reason apt-rdepends exists.  I looked
really hard to see if anything else does what apt-rdepends did.  Alas,
no.  I am looking to integrate this functionality into apt-cache, ASAP.

Simon




Re: GCC 3.2 transition

2002-08-16 Thread Sean 'Shaleh' Perry
 
 If temporary breakage of some applications is acceptable, you can
 spread this over a couple of days, by tsorting the 1000 packages.
 

or do a staging in experimental or somewhere else.  Upload everything there,
let people look at it for a day or two then move it over.

This staging could also take away the need to finish in one day.  All C++
package maintainers could upload to the staging area.  Anyone who has not
uploaded in a certain time (a week or less sounds right) will hae an NMU done
for them.




Re: GCC 3.2 transition

2002-08-16 Thread Joseph Carter
On Fri, Aug 16, 2002 at 02:53:22PM -0500, Steve Langasek wrote:
  The majority of such packages links to libstdc++ only, so there may be
  no need for action at all.
 
 Do we have non-free C++ packages that we have to worry about?  My
 comments were more directed at unpackaged software that users may be
 running on their Debian systems.  In those cases, providing a way to get
 their binaries working again /after/ we break them is only a little bit
 better than forcing them to recompile.

Well there's the proprietary JDK, but it already uses a -compat package
library.

*shrug*

-- 
Joseph Carter [EMAIL PROTECTED]Don't feed the sigs
 
Overfiend xhost +localhost should only be done by people who would
paint their hostname and root password on an interstate
overpass.



pgpVkJEjPhr4Q.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-16 Thread Stephen Zander
 Joseph == Joseph Carter [EMAIL PROTECTED] writes:
Joseph Well there's the proprietary JDK, but it already uses a
Joseph -compat package library.

Eh?  Are you refering to java plugins for mozilla et al, or any actual
JDK?

-- 
Stephen

To Republicans, limited government means not assisting people they
would sooner see shoveled into mass graves. -- Kenneth R. Kahn




Re: GCC 3.2 transition

2002-08-16 Thread Joseph Carter
On Fri, Aug 16, 2002 at 02:54:03PM -0700, Stephen Zander wrote:
  Joseph == Joseph Carter [EMAIL PROTECTED] writes:
 Joseph Well there's the proprietary JDK, but it already uses a
 Joseph -compat package library.
 
 Eh?  Are you refering to java plugins for mozilla et al, or any actual
 JDK?

Sun's JDK.

-- 
Joseph Carter [EMAIL PROTECTED] You expected a coherent reply?
 
aj Knghtbrd the increase in tension worldwide (as evidenced by crime
ajand whatnot) over that time period looks a lot like Linux
ajgrowth since 1993
aj ``Linux linked to worldwide crime epidemic!!''



pgp0JuuUuDprS.pgp
Description: PGP signature


Re: GCC 3.2 transition

2002-08-16 Thread Kai Henningsen
[EMAIL PROTECTED] (Steve Langasek)  wrote on 16.08.02 in [EMAIL PROTECTED]:

 From the heated discussion I've just had on IRC, I've gathered the
 following:

 * It is assumed that for the vast majority of C++ libs we ship, upstream
   has already transitioned to using the GCC 3.2 ABI, therefore our
   current packages are already binary-incompatible with the rest of the
   world. (ok)

Is this maybe will already have ... when we release?

Because otherwise, this is obvious nonsense. 3.2 was released *yesterday*.  
I am pretty certain 99% of all upstreams haven't even realized yet that  
3.2 exists. *No* distribution currently ships with 3.2.[1]

Our current packages may or may not be incompatible, but not for this  
reason.

[1] From the gcc list, IIRC several distributions were planning on  
shipping with 3.2 end of August or September. That was one of the  
arguments for creating 3.2.

MfG Kai




Re: GCC 3.2 transition

2002-08-16 Thread Clint Adams
 My concern is that locally compiled apps built against C++ libraries
 other than libstdc++ will silently stop working on upgrade.  This is
 certainly not the most important issue facing us in the transition, but
 so far it seems to me that people are regarding it as so *un*important
 that it's not worth discussing at all.

Having been surprised by 64-bit stuff ceasing to work on sparc after the
libc6 security upgrade, and then the additional amusement of no longer
being able to compile anything 64-bit, I imagine the C++ breakage would
be a whole lot less painless.




Re: GCC 3.2 transition

2002-08-16 Thread Steve Langasek
On Fri, Aug 16, 2002 at 11:34:00PM +0200, Kai Henningsen wrote:
 [EMAIL PROTECTED] (Steve Langasek)  wrote on 16.08.02 in [EMAIL PROTECTED]:

  From the heated discussion I've just had on IRC, I've gathered the
  following:

  * It is assumed that for the vast majority of C++ libs we ship, upstream
has already transitioned to using the GCC 3.2 ABI, therefore our
current packages are already binary-incompatible with the rest of the
world. (ok)

 Is this maybe will already have ... when we release?

 Because otherwise, this is obvious nonsense. 3.2 was released *yesterday*.  
 I am pretty certain 99% of all upstreams haven't even realized yet that  
 3.2 exists. *No* distribution currently ships with 3.2.[1]

 Our current packages may or may not be incompatible, but not for this  
 reason.

The claim was, that it's already too late to prevent binary
incompatibility for some libraries.  Whether this is because some distros
have already shipped with a post-2.95.x ABI, or whether this is because
it's too late to stop certain distros from shipping with the 3.2 ABI, I
don't know.

Steve Langasek
postmodern programmer


pgpvWnr0Yf6Gj.pgp
Description: PGP signature