success compiling kdelibs4 on OS X using cmake
Adriaan Moors
adriaan at cs.kuleuven.be
Tue Feb 28 21:42:58 GMT 2006
Hi,
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
http://websvn.kde.org/*checkout*/trunk/qt-copy/patches/0112-ksyntaxhighlighter-
rehighlight-document.diff?rev=512475)
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
AGG_LIBRARIES:FILEPATH=/sw/lib/libagg.dylib;resolv
(changing this didn't help, since it's automatically generated:
kdecore_LIB_DEPENDS:STATIC=-F/Users/adriaan/nospotlight/local//lib
-framework QtCore;-lpthread;-framework Qt3Support;-framework
QtGui;-lSM;-lICE;/usr/X11R6/lib/libX11.dylib;/usr/X11R6/lib/libXext.dylib;DCOP;/
usr/lib/libz.dylib;-framework Carbon;/sw/lib/libbz2.dylib;-framework
QtXml;/sw/lib/libagg.dylib;dl;resolv)
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
if(APPLE)
set ( _KDE4_PLATFORM_DEFINITIONS -D__APPLE_KDE__ -DBIND_8_COMPAT)
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
changed
KPassivePopup *pop = new KPassivePopup( config->winId );
to
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/kimg_exr.so
"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>>
::_S_empty_rep_storage
std::basic_string<char, std::char_traits<char>, std::allocator<char>>
::_Rep::_S_create(unsigned long, std::allocator<char> const&)
__ZNSaIcED4Ev
__ZNSt15basic_streambufIcSt11char_traitsIcEEC4Ev
__ZNSt15basic_streambufIcSt11char_traitsIcEED4Ev
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
__ZNSt24__default_alloc_templateILb1ELi0EE5_LockD4Ev
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:
wget http://savannah.nongnu.org/download/openexr/OpenEXR-1.2.2.tar.gz
tar xvzf OpenEXR-1.2.2.tar.gz
perl -pi -e
's,-L\$\(top_builddir\)\S+,,g;s,-l(IlmImf|Imath|Half|Iex),\$(top_builddir)/\1/
lib\1.la,g' `find . -name Makefile.in`
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
libraries
make
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!
adriaan
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