success compiling kdelibs4 on OS X using cmake

Adriaan Moors adriaan at
Tue Feb 28 21:42:58 GMT 2006


I'm quite excited to report that I got a checkout of trunk/kdelibs (24 feb 2006)
to compile on Mac OS X. I figured it might be interesting to report on what I
did (although I'm no KDE/CMake/OS X hacker by any means). I apologise for the
long post, but I hope it's useful (at the very least it expresses my gratitude 
towards everyone who is working on this project).

So, here's an overview of the steps I took. Some are probably pretty dumb, but I
think the main message is that there's very little work left to do to get it to
compile out of the box on a Mac. I'm running fink unstable on Mac OS X 10.4.5
and I compiled everything with Apple's stock gcc 4.0.

0) built QT/Mac 4.1.1 (applied*checkout*/trunk/qt-copy/patches/0112-ksyntaxhighlighter-

1) in kdelibs/ did a ccmake .
 1.1) provided full paths of *.dylib's (most of them from fink, in /sw/lib)
   1.1.1) not sure whether this is correct, maybe I should just provide names
          suitable for -l linker flag (or is it ok/better to give full path?)
   1.1.2) openexr has *.la's and not *.dylib's
        -->  used  Imath IlmImf Iex Half
 1.2) solved conflict between including libs from /usr/lib and /sw/lib 
    --> bz2 now from /sw/lib
 1.3) resolv was not detected as dependency
     changed the following variable (as a quick hack, couldn't figure out wat
     the real prob is):
     //Where can the agg library be found
    (changing this didn't help, since it's automatically generated:
-framework QtCore;-lpthread;-framework Qt3Support;-framework
usr/lib/libz.dylib;-framework Carbon;/sw/lib/libbz2.dylib;-framework
2) a lot of cpp-sources in  kdelibs/kjs/ (ustring.cpp, operations.cpp etc)
included operations.h without including math.h first
 --> moved #include <math.h>
    so that it occured before
  #include "operations.h"
  it's been a long time since I programmed in C++, so I don't know if this is a
  quirk in Apple's gcc 4.0  or...

3)  added JSImmediate.cpp to the list of source files in CMakeList.txt
4)  -DBIND_8_COMPAT is needed for kio
    (in  kio/misc/kpac/CMakeFiles/kded_proxyscout.dir/flags.make)
    --> added to FindKDE4.cmake
5) (don't know if this is serious:
  /usr/bin/ld: warning suggest use of -bind_at_load, as lazy binding may result
  in errors or different symbols being used)

6) (hack) in notifybypopup.cpp
    KPassivePopup *pop = new KPassivePopup( config->winId );
    KPassivePopup *pop = new KPassivePopup(KPassivePopup::Boxed, 
                                           (WId) config->winId, 0 );
    (I couldn't figure out the proper C++ syntax to disambiguate the call...)

7) incompatibility between fink's openexr (compiled with gcc 3.3) and kde 4
   (which I'm compiling using gcc 4) 
  --> recompile openexr using gcc 4 (by hand -- exrdisplay won't link and fink
      package builds binaries and libs at same time)
  7.1) the error I got was:
     cd /Users/adriaan/nospotlight/src/kdelibs/kimgio 
    /usr/bin/c++  -bundle -multiply_defined suppress -o ../lib/
"CMakeFiles/kimg_exr.dir/exr.o"  -L/Users/adriaan/nospotlight/src/kdelibs/lib
-L/sw/lib -L/usr/X11R6/lib -L/usr/local/lib
-F/Users/adriaan/nospotlight/local/lib -framework QtCore -lpthread -lkdecore
-lImath -lIlmImf -lIex -lHalf -framework Qt3Support -framework QtGui -lSM -lICE
-lX11 -lXext -lDCOP -F/Users/adriaan/nospotlight/local//lib -framework QtCore
-lpthread -lz -framework Carbon -lbz2 -framework QtXml -lagg -lresolv -ldl
-L/usr/lib/gcc/powerpc-apple-darwin8/4.0.0/ -lstdc++
    /usr/bin/ld: Undefined symbols:
   std::basic_string<char, std::char_traits<char>, std::allocator<char>>
   std::basic_string<char, std::char_traits<char>, std::allocator<char>>
::_Rep::_S_create(unsigned long, std::allocator<char> const&)
    std::__default_alloc_template<true, 0>::deallocate(void*, unsigned long)
    std::__default_alloc_template<true, 0>::_S_force_new
    std::__default_alloc_template<true, 0>::_S_free_list
    std::__default_alloc_template<true, 0>::_S_node_allocator_lock
    std::__default_alloc_template<true, 0>::allocate(unsigned long)
    std::__default_alloc_template<true, 0>::_S_refill(unsigned long)
    collect2: ld returned 1 exit status
  7.2) so I did:  
    tar xvzf OpenEXR-1.2.2.tar.gz 
    perl -pi -e
lib\,g' `find . -name`
    patch -p1 < /sw/fink/dists/unstable/main/finkinfo/graphics/openexr.patch 
    ./configure --enable-shared=no --disable-imfexamples CC=gcc-4.0 CXX=g++-4.0
                CPP=cpp-4.0 MAKEFLAGS=-j1
    # commented out parts of SUBDIRS in Makefile that didn't refer to the
    sudo make install
8) now simply doing make ; sudo make install in kdelibs/ installed kdelibs!! 

9) I did export MAC_DISPLAY=:0 (what's this supposed to be set to?), removed
/sw/bin from the PATH and then did khotnewstuff --> which showed me a GUI (but
no hot new stuff ;-( )

I hope this was interesting to someone. I would be more than willing to perform
other experiments (time permitting).

regards and thank you for such a great desktop environment!

PS: I'm already looking forward to compile kdebase (and kile!). Because, while I
love my powerbook and OS X, I still really miss KDE's great apps (e.g. konqueror
kicks finder/safari's ass ;-)) but sadly, running them in an X session lacks the
integration I've come to love in OS X (and KDE).

More information about the kde-core-devel mailing list