Just for the record: in Drumstick's source tree, directory "utils/vpiano", the 
file CMakeLists.txt has the following lines defining the list of libraries that 
need to be linked to that program:


On Tuesday 01 March 2011, Modestas Vainius wrote:
> Hello,
> On antradienis 01 Kovas 2011 01:06:22 Pedro Lopez-Cabanillas wrote:
> > I've wrote Drumstick, and I know for sure that the target "vpiano" uses
> > QT_X11_X11_LIBRARY for linking. The bug report says that when linking this
> > target in Debian, it fails saying that -lX11 is required.
> > 
> > I suspect that there may be a problem in Debian around this matter. It
> > works fine in some other distros.
> Nop, you misunderstood the bug a bit. It does link on Debian or 0.5.0-1 would 
> not be in Debian testing. gold linker enables --no-add-needed by default and 
> that's typically the reason for packages to fail linking with it. Now ubuntu 
> enabled --as-needed by default and gcc maintainer is pushing this to debian 
> proper too.

The same policy was introduced in Fedora some time ago, and probably in other 
distros as well. Anyway, I understood the problem the first time, and this is 
how I've tested the build system here (running openSUSE 11.3)

$ cmake --version
cmake version 2.8.1

$ cmake .. -DCMAKE_EXE_LINKER_FLAGS=-Wl,--no-add-needed

The build process works fine here using this flag. This is the relevant part of 
the log:

Linking CXX executable ../../bin/drumstick-vpiano
cd /home/pedro/Projects/drumstick/build/utils/vpiano && /usr/bin/cmake -E 
cmake_link_script CMakeFiles/drumstick-vpiano.dir/link.txt --verbose=1
/usr/bin/c++    -fexceptions -UQT_NO_EXCEPTIONS -fvisibility=hidden 
-fvisibility-inlines-hidden  -Wl,--no-add-needed -Wl,--as-needed 
CMakeFiles/drumstick-vpiano.dir/qrc_pianokeybd.cxx.o  -o 
../../bin/drumstick-vpiano -rdynamic -L/home/pedro/Projects/drumstick/build/lib 
-lQtSvg -lQtGui -lQtDBus -lQtXml -lQtCore -lQtSvg -lQtGui -lQtDBus -lQtXml 
-lQtCore -lasound -lX11 ../../lib/libdrumstick-common.a 
../../lib/libdrumstick-alsa.so.0.5.1 -lQtSvg -lQtGui -lQtDBus -lQtXml -lQtCore 
-lQtSvg -lQtGui -lQtDBus -lQtXml -lQtCore -lasound 
make[3]: Leaving directory `/home/pedro/Projects/drumstick/build'
/usr/bin/cmake -E cmake_progress_report 
/home/pedro/Projects/drumstick/build/CMakeFiles  68 69 70 71 72 73 74 75 76 77 
78 79 80 81 82 83 84 85 86 87 88 89
[100%] Built target drumstick-vpiano

> So yes, the reason it's failing is that QT_X11_X11_LIBRARY is undefined and --
> no-add-needed no longer looks the library up recursively. The code which sets 
> this variable was removed in cmake 2.8.1 by [1]. QT_X11_X11_LIBRARY falls out 
> of FindQt4.cmake scope.

You are wrong assuming that the variable QT_X11_X11_LIBRARY is deprecated in 
CMake 2.8.1, or it is not available anymore. The CMake macros were reorganized, 
and now this variable is set in Qt4ConfigDependentSettings.cmake [2] (lines 
259-271) which is included from FindQt4.cmake [3], line 1035, and it is also 
documented [4]. 

The attached CMakeLists.txt test file should work as expected. Here is the 
output in my development machine:
$ cmake .
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - found
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - not found.
-- Looking for Q_WS_QWS
-- Looking for Q_WS_QWS - not found.
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found.
-- Found Qt-Version 4.6.3 (using /usr/bin/qmake)
-- Looking for _POSIX_TIMERS
-- Looking for _POSIX_TIMERS - found
-- QT_X11_X11_LIBRARY contains: /usr/lib/libX11.so
-- Configuring done
-- Generating done

> You're right that current debian patch (courtesy by ubuntu) is a pure hack 
> and 
> you nailed its deficiencies well. But you have the bug on your hands 
> nevertheless, it's not debian-specific bug. In order to fix this properly, do 
> find_package(X11) and use a proper variable which expands to X11 library 
> (iirc, X11_X11_lib).

I don't agree with that. You are proposing to patch this package, but every 
build system depending on CMake and the variable QT_X11_X11_LIBRARY would need 
a similar patch. Won't be better a common solution that works for all of them? 
In my opinion it would be preferred to patch Debian's CMake package.

> 1.http://cmake.org/gitweb?p=cmake.git;a=commit;h=0f457937f4f5cbdaedaaec00849cb7a050bbc0f4

[3] http://cmake.org/gitweb?p=cmake.git;a=blob;f=Modules/FindQt4.cmake


cmake_minimum_required(VERSION 2.8.1)

find_package(Qt4 REQUIRED)

if (QT_X11_X11_LIBRARY)
    message(STATUS "QT_X11_X11_LIBRARY contains: ${QT_X11_X11_LIBRARY}")
else ()
    message(STATUS "The variable QT_X11_X11_LIBRARY is not set")
endif ()
pkg-multimedia-maintainers mailing list

Reply via email to