Bug 143490

Summary: Incomplete symlinks for developing
Product: [openSUSE] SUSE LINUX 10.0 Reporter: Andras Mantia <amantia>
Component: DevelopmentAssignee: E-mail List <kde-maintainers>
Status: RESOLVED WONTFIX QA Contact: E-mail List <qa-bugs>
Severity: Normal    
Priority: P5 - None CC: pth
Version: Final   
Target Milestone: ---   
Hardware: x86-64   
OS: Other   
Whiteboard:
Found By: Customer Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---

Description Andras Mantia 2006-01-17 13:42:36 UTC
On an 64 bit system, some packages do not installing all required symlink for developing. I will one by one list there all of them, as soon as I find. The first problem is in Qt3. /usr/lib64 does not have the libqt-mt.so and libqui.so links to /usr/lib64/qt3/lib64, so all KDE applications will fail to compile if there is no --with-qt-libraries=/usr/lib64/qt3/lib64 switch passed to configure.
Comment 1 Dirk Mueller 2006-01-17 14:03:39 UTC
rpm -qpvl suse/x86_64/qt3.rpm | grep '^l' | grep so

lrwxrwxrwx    1 root    root               17 Jan 13 11:22 /usr/lib/qt3/lib64/libqt-mt.so.3 -> libqt-mt.so.3.3.5
lrwxrwxrwx    1 root    root               17 Jan 13 11:22 /usr/lib/qt3/lib64/libqt-mt.so.3.3 -> libqt-mt.so.3.3.5
lrwxrwxrwx    1 root    root               15 Jan 13 11:23 /usr/lib/qt3/lib64/libqui.so.1 -> libqui.so.1.0.0
lrwxrwxrwx    1 root    root               15 Jan 13 11:23 /usr/lib/qt3/lib64/libqui.so.1.0 -> libqui.so.1.0.0
lrwxrwxrwx    1 root    root               30 Jan 13 11:23 /usr/lib64/libqt-mt.so.3 -> ../lib/qt3/lib64/libqt-mt.so.3
lrwxrwxrwx    1 root    root               28 Jan 13 11:23 /usr/lib64/libqui.so.1 -> ../lib/qt3/lib64/libqui.so.1
Comment 2 Andras Mantia 2006-01-17 14:36:50 UTC
But libqt-mt.so and libqui.so is missing from your list! Linking fails in this case with "cannot find -lqt-mt".
Comment 3 Dirk Mueller 2006-01-17 16:10:43 UTC
KDE configure checks detect them correctly if you compile with --enable-libsuffix=64

its correct that there are no .so symlinks, they have been moved away in anticipation of Qt 4 (which now uses different so names, so they don't really conflict anymore). Anyway, I don't see an issue here. 

Comment 4 Dirk Mueller 2006-01-17 16:14:05 UTC
what I wanted to see: if you can explain what package fails in which way on x86_64, feel free to reopen :)

But we don't have special hacks in our builds and the kde configure scripts pick up libs correctly just fine. 

Comment 5 Andras Mantia 2006-01-17 17:11:14 UTC
KDE configure checks detect them correctly if you compile with
--enable-libsuffix=64


This is my problem, it is required to pass an extra switch (be it what you said, or what I said). And why would I need such flags anyway? I install KDE in a separate dir where there is no mixage of 32 and 64 bit libraries, so the default /lib is fine for me. Or (as I said on kde-core-devel for another problem), the KDE configure should set lib64 to be the default on x86_64 without need of user intervention.

I saw first the bug when I got this x64 system, but as I was in a hurry and I upgraded the i386 version (which officially is not supported) I just fixed by hand. Now I reinstalled SUSE, and I saw that my (already configured) builds fail. 

But let's take kdetoys as an example:
andris@stein:~/development/sources/kde-3.5/kdetoys2> make -f Makefile.cvs
This Makefile is only for the CVS repository
This will be deleted before making the distribution

*** YOU'RE USING UNSERMAKE.
*** GOOD LUCK!! :)
*** Creating acinclude.m4
*** Creating list of subdirectories
*** Creating Makefile.am
*** Creating configure.files
*** Creating configure.in
*** Creating aclocal.m4
*** Creating configure
*** Creating config.h template
*** Creating Makefile templates
*** Creating date/time stamp
*** Finished
    Don't forget to run ./configure
    If you haven't done so in a while, run ./configure --help
andris@stein:~/development/sources/kde-3.5/kdetoys2> cd ..
andris@stein:~/development/sources/kde-3.5> mkdir kdetoy-build
andris@stein:~/development/sources/kde-3.5> cd kdetoy-build/
andris@stein:~/development/sources/kde-3.5/kdetoy-build> ../kdetoys2/configure --prefix=/opt/kde-35
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking for -p flag to install... yes
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for kde-config... /opt/kde-35/bin/kde-config
checking where to install... /opt/kde-35 (as requested)
checking for style of include used by make... GNU
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking whether gcc is blacklisted... no
checking whether g++ supports -Wmissing-format-attribute... yes
checking whether gcc supports -Wmissing-format-attribute... yes
checking whether g++ supports -Wundef... yes
checking whether g++ supports -Wno-long-long... yes
checking whether g++ supports -Wno-non-virtual-dtor... yes
checking whether g++ supports -fno-exceptions... yes
checking whether g++ supports -fno-check-new... yes
checking whether g++ supports -fno-common... yes
checking whether g++ supports -fexceptions... yes
checking how to run the C++ preprocessor... g++ -E
checking whether g++ supports -O0... yes
checking whether g++ supports -Wl,--no-undefined... yes
checking whether g++ supports -Wl,--allow-shlib-undefined... yes
not using lib directory suffix
checking for a sed that does not truncate output... /usr/bin/sed
checking for egrep... grep -E
checking for ld used by gcc... /usr/x86_64-suse-linux/bin/ld
checking if the linker (/usr/x86_64-suse-linux/bin/ld) is GNU ld... yes
checking for /usr/x86_64-suse-linux/bin/ld option to reload object files... -r
checking for BSD-compatible nm... /usr/bin/nm -B
checking whether ln -s works... yes
checking how to recognise dependent libraries... pass_all
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking for g77... no
checking for f77... no
checking for xlf... no
checking for frt... no
checking for pgf77... no
checking for fort77... no
checking for fl32... no
checking for af77... no
checking for f90... no
checking for xlf90... no
checking for pgf90... no
checking for epcf90... no
checking for f95... no
checking for fort... no
checking for xlf95... no
checking for ifc... no
checking for efc... no
checking for pgf95... no
checking for lf95... no
checking for gfortran... no
checking whether we are using the GNU Fortran 77 compiler... no
checking whether  accepts -g... no
checking the maximum length of command line arguments... 32768
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for objdir... .libs
checking for ar... ar
checking for ranlib... ranlib
checking for strip... strip
checking if gcc static flag  works... yes
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC
checking if gcc PIC flag -fPIC works... yes
checking if gcc supports -c -o file.o... yes
checking whether the gcc linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking for shl_load... no
checking for shl_load in -ldld... no
checking for dlopen... no
checking for dlopen in -ldl... yes
checking whether a program can dlopen itself... yes
checking whether a statically linked program can dlopen itself... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
configure: creating libtool
appending configuration tag "CXX" to libtool
checking for ld used by g++... /usr/x86_64-suse-linux/bin/ld -m elf_x86_64
checking if the linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) is GNU ld... yes
checking whether the g++ linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC
checking if g++ PIC flag -fPIC works... yes
checking if g++ supports -c -o file.o... yes
checking whether the g++ linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking for shl_load... (cached) no
checking for shl_load in -ldld... (cached) no
checking for dlopen... (cached) no
checking for dlopen in -ldl... (cached) yes
checking whether a program can dlopen itself... (cached) yes
checking whether a statically linked program can dlopen itself... (cached) yes
appending configuration tag "F77" to libtool
checking for msgfmt... /usr/bin/msgfmt
checking for gmsgfmt... /usr/bin/msgfmt
checking for xgettext... :
checking if C++ programs can be compiled... yes
checking for strlcat... no
checking if strlcat needs custom prototype... yes - in libkdefakes
checking for strlcpy... no
checking if strlcpy needs custom prototype... yes - in libkdefakes
checking for main in -lutil... yes
checking for main in -lcompat... no
checking for crypt in -lcrypt... yes
checking for socklen_t... yes
checking for dnet_ntoa in -ldnet... no
checking for dnet_ntoa in -ldnet_stub... no
checking for inet_ntoa... yes
checking for connect... yes
checking for remove... yes
checking for shmat... yes
checking for sys/types.h... (cached) yes
checking for stdint.h... (cached) yes
checking sys/bitypes.h usability... yes
checking sys/bitypes.h presence... yes
checking for sys/bitypes.h... yes
checking for poll in -lpoll... no
checking Carbon/Carbon.h usability... no
checking Carbon/Carbon.h presence... no
checking for Carbon/Carbon.h... no
checking CoreAudio/CoreAudio.h usability... no
checking CoreAudio/CoreAudio.h presence... no
checking for CoreAudio/CoreAudio.h... no
checking if res_init needs -lresolv... yes
checking for res_init... yes
checking if res_init needs custom prototype... no
checking for killpg in -lucb... no
checking for int... yes
checking size of int... 4
checking for short... yes
checking size of short... 2
checking for long... yes
checking size of long... 8
checking for char *... yes
checking size of char *... 8
checking for dlopen in -ldl... (cached) yes
checking for shl_unload in -ldld... no
checking for size_t... yes
checking size of size_t... 8
checking for unsigned long... yes
checking size of unsigned long... 8
checking sizeof size_t == sizeof unsigned long... yes
checking for PIE support... yes
checking if enabling -pie/fpie support... yes
checking crt_externs.h usability... no
checking crt_externs.h presence... no
checking for crt_externs.h... no
checking for _NSGetEnviron... no
checking for vsnprintf... yes
checking for snprintf... yes
checking for X... libraries /usr/X11R6/lib64, headers /usr/X11R6/include
checking for IceConnectionNumber in -lICE... yes
checking for libXext... yes
checking for pthread_create in -lpthread... yes
checking for extra includes... no
checking for extra libs... no
checking for libz... -lz
checking for libpng... -lpng -lz -lm
checking for libjpeg6b... no
checking for libjpeg... -ljpeg
checking for perl... /usr/bin/perl
checking for Qt... configure: error: Qt (>= Qt 3.3 and < 4.0) (library qt-mt) not found. Please check your installation!
For more details about this problem, look at the end of config.log.
Make sure that you have compiled Qt with thread support!


In config.log:
onfigure:29754: checking for Qt
configure: 29819: /usr/lib/qt3/include/qstyle.h
taking that
tried NO
configure:29937: rm -rf SunWS_cache; g++ -o conftest -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscr
/usr/lib64/gcc/x86_64-suse-linux/4.0.2/../../../../x86_64-suse-linux/bin/ld: cannot find -lqt-mt
collect2: ld returned 1 exit status
configure:29940: $? = 1

And now, with the switch of course it works:

andris@stein:~/development/sources/kde-3.5/kdetoy-build> ../kdetoys2/configure --prefix=/opt/kde-35 --enable-libsuffix=64
[...]
checking for Qt... libraries /usr/lib/qt3/lib64, headers /usr/lib/qt3/include using -mt
checking for moc... /usr/lib/qt3/bin/moc
checking for uic... /usr/lib/qt3/bin/uic
[...]
Good - your configure finished. Start make now


So, I think it is a bug.
Comment 6 Dirk Mueller 2006-01-19 11:24:05 UTC
yes, the bug is that we have no suitable autodetection for libsuffix. but I saw that you already posted a patch upstream, and I think it correctly solves this issue. 

agree to close it as WONTFIX here and to discuss the upstream patch until inclusion?

Comment 7 Andras Mantia 2006-01-19 17:45:37 UTC
My patch will help KDE itself, but unfortunately not all the 3rd party KDE application, unless they sync their admin dir from the KDE SVN. But if my patch goes upstream and you really think this is not a bug in SuSE, I'm not forcing to keep the bug open.
Comment 8 Dirk Mueller 2006-01-19 21:31:02 UTC
its definitely  not a suse specific problem. we can't install symlinks in /usr/lib and the configure check won't search for it in /usr/lib64. the real fix is to implement correct autochecks for libsuffix. 

though nobody prevents you to put m64 builds into /usr/lib, but that would be a too broken system to support it. 

Comment 9 Andras Mantia 2006-01-20 08:18:39 UTC
Just to make it clear:

"we can't install symlinks in /usr/lib and the configure check won't search for it in /usr/lib64."

I wanted them in /usr/lib64 and for me the configure definitely found it.