Version: 0.9.0 (using KDE 3.2.1, SuSE) Compiler: gcc version 3.3.3 (SuSE Linux) OS: Linux (i686) release 2.6.5-7.155.29-default digikam-0.9.0 installed on my partially updated SuSE 9.1 with KDE 3.2.1 only after applying the following patches to eliminate the following four errors and after ignoring a couple of warnings about visibility. Since source seems to be preparted for use with KDE < 3.3 and since dependencies section in README states "KDE >= 3.x" this behaviour might be a bug. I was using SuSE 9.1, KDE 3.2.1, gcc-3.3.3-41 (SuSE), sqlite-3.3.8, exiv2-0.12, libkexif-0.2.5, libgphoto2-2.3.1, libkipi-0.1.4, kipi-plugins-0.1.2, liblcms-1.15-30 (SuSE), libtiff-3.6.1-38.26 (SuSE), libpng-1.2.14, digikam-0.9.0, digikamimageplugins-0.9.0. The first error is due to digikam/libs/dialogs/deletedialog.cpp using member 'del' from class 'KStdGuiItem' and using 'setButtonGuiItem' introduced with KDE 3.3. This can be patched by rolling-in a line of code from KDE 3.3 and using an alternative function from earlier KDE version. The second error is due to digikam/digikam/digikamapp.cpp using member 'synchronousRun' from class 'KIO::NetAccess' introduced with KDE 3.4. Since I do not understand the code I took a brute force approach and rolled-in quite some code from KDE 3.4. A better patch should be possible when understanding what 'synchronousRun' is used for. The next two errors I found onyl after patching the first two. The thrid error is about two undefined references in libkipi.so when linking digicam. Since I could not figure out what to do I instructed the linker to ignore this error. Now I'm waiting for digikam to crash :-) The last error is due to digikam/imageplugins/imageeffect_hsl.cpp using undefined 'setXValue' and 'setYValue'. The API documentation does not mention when these have been introduced. I replaced them with 'setValues' and 'xVaule' and 'yValue' from KDE 3.2. Since I do not understand what the code does some body would need to check if this patch really works. Note that I also had to patch kipi-plugins-0.1.2/kipi-plugins/htmlexport/generator.cpp by adding '#include <qimage.h>' to solve an error about 'QImage' having incomplete definition. [...] make[4]: Entering directory `/usr/src/digikam-0.9.0/digikam/libs/dialogs' if /bin/sh ../../../libtool --silent --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I../../../digikam/libs/dimg -I../../../digikam/digikam -I../../../digikam/libs/dimg/filters -I../../../digikam/libs/widgets/common -I../../../digikam/libs/widgets/metadata -I../../../digikam/libs/widgets/iccprofiles -I../../../digikam/libs/widgets/imageplugins -I../../../digikam/utilities/imageeditor/canvas -I/opt/kde3/include -I/usr/lib/qt3/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT -D_REENTRANT -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -O2 -Wformat-security -Wmissing-format-attribute -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -DQT_CLEAN_NAMESPACE -MT deletedialog.lo -MD -MP -MF ".deps/deletedialog.Tpo" -c -o deletedialog.lo deletedialog.cpp; \ then mv -f ".deps/deletedialog.Tpo" ".deps/deletedialog.Plo"; else rm -f ".deps/deletedialog.Tpo"; exit 1; fi deletedialog.cpp: In member function `void Digikam::DeleteDialog::slotShouldDelete(bool)': deletedialog.cpp:234: error: 'class KStdGuiItem' has no member named 'del' deletedialog.cpp:234: error: `setButtonGuiItem' undeclared (first use this function) deletedialog.cpp:234: error: (Each undeclared identifier is reported only once for each function it appears in.) make[4]: [deletedialog.lo] Error 1 (ignored) [...] *** deletedialog.cpp 2006-12-17 11:13:08.000000000 +0100 --- deletedialog-0.9.0-mdk01.cpp 2007-01-03 21:14:46.088423288 +0100 *************** *** 231,237 **** --- 231,243 ---- // This is called once from constructor, and then when the user changed the checkbox state. // In that case, save the user's preference. m_saveShouldDeleteUserPreference = true; + #if KDE_VERSION >= KDE_MAKE_VERSION(3,3,0) setButtonGuiItem(Ok, shouldDelete ? KStdGuiItem::del() : m_trashGuiItem); + #else + // Use setButtonOK( KGuiItem ) from KDE 3.2 instead of setButtonGuiItem( Ok, KGuiItem ) from KDE 3.3. + // Roll-in definition of KStdGuiItem::del() from KDE 3.3 (kstdguiitem.cpp line 218). + setButtonOK( shouldDelete ? KGuiItem( i18n( "&Delete" ), "editdelete", i18n( "Delete item(s)" ) ) : m_trashGuiItem); + #endif } void DeleteDialog::presetDeleteMode(DeleteDialogMode::DeleteMode mode) [...] make[3]: Entering directory `/usr/src/digikam-0.9.0/digikam/digikam' if /bin/sh ../../libtool --silent --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../digikam/sqlite -I../../digikam/libs/histogram -I../../digikam/libs/levels -I../../digikam/libs/curves -I../../digikam/libs/themeengine -I../../digikam/libs/widgets/common -I../../digikam/libs/thumbbar -I../../digikam/libs/jpegutils -I../../digikam/libs/dcraw -I../../digikam/libs/dimg -I../../digikam/libs/dmetadata -I../../digikam/libs/imageproperties -I../../digikam/libs/threadimageio -I../../digikam/libs/dialogs -I../../digikam/utilities/cameragui -I../../digikam/utilities/imageeditor/editor -I../../digikam/utilities/imageeditor/canvas -I../../digikam/utilities/splashscreen -I../../digikam/utilities/setup -I../../digikam/ -I../../digikam/libs/dialogs -I/opt/kde3/include -I/opt/kde3/include -I/usr/lib/qt3/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT -D_REENTRANT -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -O2 -Wformat-security -Wmissing-format-attribute -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -DQT_CLEAN_NAMESPACE -MT digikamapp.lo -MD -MP -MF ".deps/digikamapp.Tpo" -c -o digikamapp.lo digikamapp.cpp; \ then mv -f ".deps/digikamapp.Tpo" ".deps/digikamapp.Plo"; else rm -f ".deps/digikamapp.Tpo"; exit 1; fi [...] digikamapp.cpp: In member function `void Digikam::DigikamApp::slotDownloadImages()': digikamapp.cpp:1179: error: 'class KIO::NetAccess' has no member named ' synchronousRun' make[3]: [digikamapp.lo] Error 1 (ignored) [...] *** digikamapp.h 2006-12-17 11:13:08.000000000 +0100 --- digikamapp-0.9.0-mdk01.h 2007-01-03 23:18:59.000000000 +0100 *************** *** 126,131 **** --- 126,136 ---- void loadPlugins(); void loadCameras(); void populateThemes(); + #if KDE_VERSION < KDE_MAKE_VERSION(3,4,0) + void synchronousRunInternal( KIO::Job*, QWidget* ); + void enter_loop(); + #endif + private slots: *** digikamapp.cpp 2006-12-17 11:13:08.000000000 +0100 --- digikamapp-0.9.0-mdk01.cpp 2007-01-04 01:21:32.162557888 +0100 *************** *** 92,97 **** --- 92,103 ---- #include "digikamapp.h" #include "digikamapp.moc" + #if KDE_VERSION < KDE_MAKE_VERSION(3,4,0) + // Use private modal functions from QT. + // As suggested by Hamish Rodda there must be a cleaner way. + #include <private/qapplication_p.h> + #endif + using KIO::Job; using KIO::UDSEntryList; using KIO::UDSEntry; *************** *** 1168,1173 **** --- 1174,1210 ---- } } + #if KDE_VERSION < KDE_MAKE_VERSION(3,4,0) + // Roll-in selected code for KIO::NetAccess::synchronousRun from KDE 3.4. + // Checking actual usage should lead to a simpler solution. + void DigikamApp::synchronousRunInternal( Job* job, QWidget* window ) + { + job->setWindow( window ); + connect( job, SIGNAL( result (KIO::Job *) ), + this, SLOT( slotResult (KIO::Job *) ) ); + QMetaObject *meta = job->metaObject(); + static const char dataSignal[] = "data(KIO::Job*,const QByteArray&)"; + if ( meta->findSignal( dataSignal ) != -1 ) { + connect( job, SIGNAL(data(KIO::Job*,const QByteArray&)), + this, SLOT(slotData(KIO::Job*,const QByteArray&)) ); + } + static const char redirSignal[] = "redirection(KIO::Job*,const KURL&)"; + if ( meta->findSignal( redirSignal ) != -1 ) { + connect( job, SIGNAL(redirection(KIO::Job*,const KURL&)), + this, SLOT(slotRedirection(KIO::Job*, const KURL&)) ); + } + enter_loop(); + } + void DigikamApp::enter_loop() + { + QWidget dummy(0,0,WType_Dialog | WShowModal); + dummy.setFocusPolicy( QWidget::NoFocus ); + qt_enter_modal(&dummy); + qApp->enter_loop(); + qt_leave_modal(&dummy); + } + #endif + void DigikamApp::slotDownloadImages() { if (mCameraGuiPath.isNull()) *************** *** 1176,1182 **** --- 1213,1226 ---- // Fetch the contents of the device. This is needed to make sure that the // media:/device gets mounted. KIO::ListJob *job = KIO::listDir(KURL(mCameraGuiPath), false, false); + #if KDE_VERSION < KDE_MAKE_VERSION(3,4,0) + // Avoid synchronousRun from KDE 3.4 by using a stripped version as private function. + // Checking actual usage should lead to a simpler solution. + synchronousRunInternal(job,0); + #else KIO::NetAccess::synchronousRun(job,0); + #endif + QString localUrl = convertToLocalUrl(mCameraGuiPath); DDebug() << "slotDownloadImages: convertToLocalUrl " << mCameraGuiPath << " to " << localUrl << endl; [...] make[3]: Entering directory `/usr/src/digikam-0.9.0/digikam/digikam' /bin/sh ../../libtool --silent --tag=CXX --mode=link g++ -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -O2 -Wformat-security -Wmissing-format-attribute -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -DQT_CLEAN_NAMESPACE -o digikam -R /opt/kde3/lib -R /opt/kde3/lib -R /usr/lib/qt3/lib -R /usr/X11R6/lib -L/opt/kde3/lib -L/usr/lib/qt3/lib -L/usr/X11R6/lib -lkutils main.o -lqt-mt -lz -lpng -lz -lm -lXext -lX11 -lSM -lICE -lpthread -lkdecore -lkdeui -lkio -lkparts -lkutils libdigikam.la /opt/kde3/lib/libkipi.so: undefined reference to `KIPI::ImageCollection::operator==(KIPI::ImageCollection const&) const' /opt/kde3/lib/libkipi.so: undefined reference to `KIPI::ImageCollection::operator=(KIPI::ImageCollection const&)' collect2: ld returned 1 exit status make[3]: [digikam] Error 1 (ignored) [...] No patch, add '-Wl,--allow-shlib-undefined' to ignore error but expect digikam to crash. [...] make[3]: Entering directory `/usr/src/digikam-0.9.0/digikam/imageplugins' if /bin/sh ../../libtool --silent --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../digikam/utilities/imageeditor/editor -I../../digikam/utilities/imageeditor/canvas -I../../digikam/libs/histogram -I../../digikam/libs/levels -I../../digikam/libs/curves -I../../digikam/libs/widgets/common -I../../digikam/libs/widgets/iccprofiles -I../../digikam/libs/widgets/imageplugins -I../../digikam/libs/dialogs -I../../digikam/libs/dimg -I../../digikam/libs/dmetadata -I../../digikam/libs/dimg/filters -I../../digikam/digikam -I/opt/kde3/include -I/usr/lib/qt3/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT -D_REENTRANT -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -O2 -Wformat-security -Wmissing-format-attribute -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -DQT_CLEAN_NAMESPACE -MT imageeffect_hsl.lo -MD -MP -MF ".deps/imageeffect_hsl.Tpo" -c -o imageeffect_hsl.lo imageeffect_hsl.cpp; \ then mv -f ".deps/imageeffect_hsl.Tpo" ".deps/imageeffect_hsl.Plo"; else rm -f ".deps/imageeffect_hsl.Tpo"; exit 1; fi imageeffect_hsl.cpp: In member function `void DigikamImagesPluginCore::ImageEffect_HSL::slotHChanged(double)': imageeffect_hsl.cpp:300: error: `setXValue' undeclared (first use this function) imageeffect_hsl.cpp:300: error: (Each undeclared identifier is reported only once for each function it appears in.) imageeffect_hsl.cpp: In member function `void DigikamImagesPluginCore::ImageEffect_HSL::slotSChanged(double)': imageeffect_hsl.cpp:309: error: `setYValue' undeclared (first use this function) make[3]: [imageeffect_hsl.lo] Error 1 (ignored) [...] *** imageeffect_hsl.cpp 2006-12-17 11:13:08.000000000 +0100 --- imageeffect_hsl-0.9.0-mdk01.cpp 2007-01-05 01:07:10.990028864 +0100 *************** *** 297,303 **** --- 297,307 ---- hue = int(h) + 359; m_HSSelector->blockSignals(true); + #if KDE_VERSION >= KDE_MAKE_VERSION(3,3,0) m_HSSelector->setXValue(hue); + #else + m_HSSelector->setValues( hue, m_HSSelector->yValue() ); + #endif m_HSSelector->blockSignals(false); } *************** *** 306,312 **** --- 310,320 ---- int sat = (int)((s + 100.0) * (255.0/200.0)); m_HSSelector->blockSignals(true); + #if KDE_VERSION >= KDE_MAKE_VERSION(3,3,0) m_HSSelector->setYValue(sat); + #else + m_HSSelector->setValues( m_HSSelector->xValue(), sat ); + #endif m_HSSelector->blockSignals(false); }
Moritz, Sorry, we will not support an old KDE version like 3.2. Please update at least to 3.4 or 3.5 Gilles Caulier