From ca6542d398f81c08bb2d8e86d094d2a4ce9d7825 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Aug 17 2012 12:51:21 +0000 Subject: rev libgphoto2-2.5 patch (kde#303427) --- diff --git a/digikam-2.7.0-libgphoto2_25.patch b/digikam-2.7.0-libgphoto2_25.patch deleted file mode 100644 index eade46b..0000000 --- a/digikam-2.7.0-libgphoto2_25.patch +++ /dev/null @@ -1,126 +0,0 @@ -From d0aed7c6a251a7dd49975c26085c555da332cf1a Mon Sep 17 00:00:00 2001 -From: Marcus Meissner -Date: Tue, 24 Jul 2012 17:54:17 +0200 -Subject: [PATCH] support both libgphoto2 2.5.0 and 2.4.0 - ---- - CMakeLists.txt | 34 ++++++++++++++++++++---------- - digikam/utils/config-digikam.h.cmake | 3 +++ - utilities/cameragui/devices/gpcamera.cpp | 15 +++++++++++++ - 3 Dateien geändert, 41 Zeilen hinzugefügt(+), 11 Zeilen entfernt(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index dfc7f16..51fb603 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -329,6 +329,24 @@ IF (NOT WIN32 AND HAVE_GPHOTO2) - MACRO_OPTIONAL_FIND_PACKAGE(USB) - ENDIF (NOT WIN32 AND HAVE_GPHOTO2) - -+IF(GPHOTO2_FOUND) -+ EXEC_PROGRAM(gphoto2-config ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE GPHOTO2_VERSION) -+ STRING(REPLACE "libgphoto2" "" GPHOTO2_VERSION "${GPHOTO2_VERSION}") -+ MACRO_ENSURE_VERSION("2.4.0" "${GPHOTO2_VERSION}" VERSION_GPHOTO2) -+ IF(VERSION_GPHOTO2 AND LIBUSB_FOUND) -+ SET(GPHOTO2_FOUND true) -+ ELSE(VERSION_GPHOTO2 AND LIBUSB_FOUND) -+ SET(GPHOTO2_FOUND false) -+ ENDIF(VERSION_GPHOTO2 AND LIBUSB_FOUND) -+ MACRO_ENSURE_VERSION("2.5.0" "${GPHOTO2_VERSION}" VERSION_GPHOTO25) -+ IF(VERSION_GPHOTO25) -+ SET(HAVE_GPHOTO25 1) -+ ELSE(VERSION_GPHOTO25) -+ SET(HAVE_GPHOTO25 0) -+ ENDIF(VERSION_GPHOTO25) -+ENDIF(GPHOTO2_FOUND) -+ -+ - MACRO_OPTIONAL_FIND_PACKAGE(KdepimLibs) - MACRO_BOOL_TO_01(KDEPIMLIBS_FOUND HAVE_KDEPIMLIBS) - -@@ -378,6 +396,8 @@ MACRO_OPTIONAL_FIND_PACKAGE(Doxygen) - - CONFIGURE_FILE(digikam/utils/config-digikam.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/digikam/utils/config-digikam.h) - -+ -+ - # ================================================================================================== - # Log messages - -@@ -428,18 +448,10 @@ ENDIF(CLAPACK_FOUND) - # ================================================================ - - IF(GPHOTO2_FOUND) -- EXEC_PROGRAM(gphoto2-config ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE GPHOTO2_VERSION) -- STRING(REPLACE "libgphoto2" "" GPHOTO2_VERSION "${GPHOTO2_VERSION}") -- MACRO_ENSURE_VERSION("2.4.0" "${GPHOTO2_VERSION}" VERSION_GPHOTO2) -- IF(VERSION_GPHOTO2 AND LIBUSB_FOUND) -- SET(GPHOTO2_FOUND true) -- ELSE(VERSION_GPHOTO2 AND LIBUSB_FOUND) -- SET(GPHOTO2_FOUND false) -- ENDIF(VERSION_GPHOTO2 AND LIBUSB_FOUND) --ENDIF(GPHOTO2_FOUND) -- --IF(GPHOTO2_FOUND) - MESSAGE(STATUS " libgphoto2 and libusb libraries found.... YES (optional)") -+ IF(HAVE_GPHOTO25) -+ MESSAGE(STATUS " libgphoto2 2.5 library found............. YES (optional)") -+ endIF(HAVE_GPHOTO25) - ELSE(GPHOTO2_FOUND) - MESSAGE(STATUS " libgphoto2 and libusb libraries found.... NO (optional)") - MESSAGE(STATUS "") -diff --git a/digikam/utils/config-digikam.h.cmake b/digikam/utils/config-digikam.h.cmake -index d886499..4c1c6d3 100644 ---- a/digikam/utils/config-digikam.h.cmake -+++ b/digikam/utils/config-digikam.h.cmake -@@ -45,6 +45,9 @@ - /* Define to 1 if GPhoto2 shared library is installed */ - #cmakedefine HAVE_GPHOTO2 1 - -+/* Define to 1 if libgphoto2 2.5 shared library is installed */ -+#cmakedefine HAVE_GPHOTO25 1 -+ - /* Define to 1 if thumbnails database is used */ - #cmakedefine USE_THUMBS_DB 1 - -diff --git a/utilities/cameragui/devices/gpcamera.cpp b/utilities/cameragui/devices/gpcamera.cpp -index 22e873a..a98e0a2 100644 ---- a/utilities/cameragui/devices/gpcamera.cpp -+++ b/utilities/cameragui/devices/gpcamera.cpp -@@ -1329,10 +1329,19 @@ bool GPCamera::uploadItem(const QString& folder, const QString& itemName, const - d->status = 0; - d->status = new GPStatus; - -+#ifdef HAVE_GPHOTO25 - errorCode = gp_camera_folder_put_file(d->camera, - QFile::encodeName(folder).constData(), -+ QFile::encodeName(itemName), -+ GP_FILE_TYPE_NORMAL, - cfile, - d->status->context); -+#else -+ errorCode = gp_camera_folder_put_file(d->camera, -+ QFile::encodeName(folder).constData(), -+ cfile, -+ d->status->context); -+#endif - - if (errorCode != GP_OK) - { -@@ -1651,7 +1660,13 @@ void GPCamera::getSupportedPorts(QStringList& plist) - for (int i = 0 ; i < numPorts ; ++i) - { - gp_port_info_list_get_info(list, i, &info); -+#ifdef HAVE_GPHOTO25 -+ char *xpath; -+ gp_port_info_get_name (info, &xpath); -+ plist.append(xpath); -+#else - plist.append(info.path); -+#endif - } - } - --- -1.7.10.4 - diff --git a/digikam-2.8.0-libgphoto2_25.patch b/digikam-2.8.0-libgphoto2_25.patch new file mode 100644 index 0000000..0ee3412 --- /dev/null +++ b/digikam-2.8.0-libgphoto2_25.patch @@ -0,0 +1,260 @@ +From dc42797af00d337355ef20c84b17ee52be5f86bc Mon Sep 17 00:00:00 2001 +From: Marcus Meissner +Date: Tue, 24 Jul 2012 17:54:17 +0200 +Subject: [PATCH] support both libgphoto2 2.5.0 and 2.4.0 + +I also rewrote findConnectedUSBCamera to work with both 2.4 and 2.5, +also to be a bit more simple and less quadratic or O(n^3) +--- + CMakeLists.txt | 34 ++++++--- + digikam/utils/config-digikam.h.cmake | 3 + + utilities/cameragui/devices/gpcamera.cpp | 122 +++++++++++++++--------------- + 3 Dateien geändert, 86 Zeilen hinzugefügt(+), 73 Zeilen entfernt(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index be856b2..8516fc6 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -329,6 +329,24 @@ IF (NOT WIN32 AND HAVE_GPHOTO2) + MACRO_OPTIONAL_FIND_PACKAGE(USB) + ENDIF (NOT WIN32 AND HAVE_GPHOTO2) + ++IF(GPHOTO2_FOUND) ++ EXEC_PROGRAM(gphoto2-config ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE GPHOTO2_VERSION) ++ STRING(REPLACE "libgphoto2" "" GPHOTO2_VERSION "${GPHOTO2_VERSION}") ++ MACRO_ENSURE_VERSION("2.4.0" "${GPHOTO2_VERSION}" VERSION_GPHOTO2) ++ IF(VERSION_GPHOTO2 AND LIBUSB_FOUND) ++ SET(GPHOTO2_FOUND true) ++ ELSE(VERSION_GPHOTO2 AND LIBUSB_FOUND) ++ SET(GPHOTO2_FOUND false) ++ ENDIF(VERSION_GPHOTO2 AND LIBUSB_FOUND) ++ MACRO_ENSURE_VERSION("2.5.0" "${GPHOTO2_VERSION}" VERSION_GPHOTO25) ++ IF(VERSION_GPHOTO25) ++ SET(HAVE_GPHOTO25 1) ++ ELSE(VERSION_GPHOTO25) ++ SET(HAVE_GPHOTO25 0) ++ ENDIF(VERSION_GPHOTO25) ++ENDIF(GPHOTO2_FOUND) ++ ++ + MACRO_OPTIONAL_FIND_PACKAGE(KdepimLibs) + MACRO_BOOL_TO_01(KDEPIMLIBS_FOUND HAVE_KDEPIMLIBS) + +@@ -378,6 +396,8 @@ MACRO_OPTIONAL_FIND_PACKAGE(Doxygen) + + CONFIGURE_FILE(digikam/utils/config-digikam.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/digikam/utils/config-digikam.h) + ++ ++ + # ================================================================================================== + # Log messages + +@@ -428,18 +448,10 @@ ENDIF(CLAPACK_FOUND) + # ================================================================ + + IF(GPHOTO2_FOUND) +- EXEC_PROGRAM(gphoto2-config ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE GPHOTO2_VERSION) +- STRING(REPLACE "libgphoto2" "" GPHOTO2_VERSION "${GPHOTO2_VERSION}") +- MACRO_ENSURE_VERSION("2.4.0" "${GPHOTO2_VERSION}" VERSION_GPHOTO2) +- IF(VERSION_GPHOTO2 AND LIBUSB_FOUND) +- SET(GPHOTO2_FOUND true) +- ELSE(VERSION_GPHOTO2 AND LIBUSB_FOUND) +- SET(GPHOTO2_FOUND false) +- ENDIF(VERSION_GPHOTO2 AND LIBUSB_FOUND) +-ENDIF(GPHOTO2_FOUND) +- +-IF(GPHOTO2_FOUND) + MESSAGE(STATUS " libgphoto2 and libusb libraries found.... YES (optional)") ++ IF(HAVE_GPHOTO25) ++ MESSAGE(STATUS " libgphoto2 2.5 library found............. YES (optional)") ++ endIF(HAVE_GPHOTO25) + ELSE(GPHOTO2_FOUND) + MESSAGE(STATUS " libgphoto2 and libusb libraries found.... NO (optional)") + MESSAGE(STATUS "") +diff --git a/digikam/utils/config-digikam.h.cmake b/digikam/utils/config-digikam.h.cmake +index d886499..4c1c6d3 100644 +--- a/digikam/utils/config-digikam.h.cmake ++++ b/digikam/utils/config-digikam.h.cmake +@@ -45,6 +45,9 @@ + /* Define to 1 if GPhoto2 shared library is installed */ + #cmakedefine HAVE_GPHOTO2 1 + ++/* Define to 1 if libgphoto2 2.5 shared library is installed */ ++#cmakedefine HAVE_GPHOTO25 1 ++ + /* Define to 1 if thumbnails database is used */ + #cmakedefine USE_THUMBS_DB 1 + +diff --git a/utilities/cameragui/devices/gpcamera.cpp b/utilities/cameragui/devices/gpcamera.cpp +index 22e873a..baf7b23 100644 +--- a/utilities/cameragui/devices/gpcamera.cpp ++++ b/utilities/cameragui/devices/gpcamera.cpp +@@ -1329,10 +1329,19 @@ bool GPCamera::uploadItem(const QString& folder, const QString& itemName, const + d->status = 0; + d->status = new GPStatus; + ++#ifdef HAVE_GPHOTO25 + errorCode = gp_camera_folder_put_file(d->camera, + QFile::encodeName(folder).constData(), ++ QFile::encodeName(itemName), ++ GP_FILE_TYPE_NORMAL, + cfile, + d->status->context); ++#else ++ errorCode = gp_camera_folder_put_file(d->camera, ++ QFile::encodeName(folder).constData(), ++ cfile, ++ d->status->context); ++#endif + + if (errorCode != GP_OK) + { +@@ -1651,7 +1660,13 @@ void GPCamera::getSupportedPorts(QStringList& plist) + for (int i = 0 ; i < numPorts ; ++i) + { + gp_port_info_list_get_info(list, i, &info); ++#ifdef HAVE_GPHOTO25 ++ char *xpath; ++ gp_port_info_get_name (info, &xpath); ++ plist.append(xpath); ++#else + plist.append(info.path); ++#endif + } + } + +@@ -1770,9 +1785,11 @@ bool GPCamera::findConnectedUsbCamera(int vendorId, int productId, QString& mode + #ifdef HAVE_GPHOTO2 + CameraAbilitiesList* abilList = 0; + GPPortInfoList* list = 0; +- GPPortInfo info; + GPContext* context = 0; ++ CameraList *camList; + bool success; ++ // get name and port of detected camera ++ const char* model_str = 0, *port_str = 0; + + success = false; + +@@ -1782,76 +1799,57 @@ bool GPCamera::findConnectedUsbCamera(int vendorId, int productId, QString& mode + gp_port_info_list_new(&list); + gp_port_info_list_load(list); + +- int numPorts = gp_port_info_list_count(list); +- +- for (int i = 0 ; i < numPorts ; ++i) +- { +- // create a port object from info +- gp_port_info_list_get_info(list, i, &info); +- GPPort* gpport = 0; +- gp_port_new(&gpport); +- gp_port_set_info(gpport, info); ++ gp_abilities_list_new(&abilList); ++ // get list of all supported cameras ++ gp_abilities_list_load(abilList, context); + +- // check if device is connected to port +- if (gp_port_usb_find_device(gpport, vendorId, productId) == GP_OK) +- { +- CameraList* camList = 0; +- GPPortInfoList* portinfo = 0; +- +- // create three lists +- gp_list_new(&camList); +- gp_port_info_list_new(&portinfo); +- gp_abilities_list_new(&abilList); +- +- // append one port info to +- gp_port_info_list_append(portinfo, info); +- // get list of all supported cameras +- gp_abilities_list_load(abilList, context); +- // search for all supported cameras on one port +- gp_abilities_list_detect(abilList, portinfo, camList, context); +- int count = gp_list_count(camList); +- // get name and port of detected camera +- const char* model_str = 0, *port_str = 0; +- +- if (count > 0) +- { +- if (count > 1) +- { +- kWarning() << "More than one camera detected on port " << port +- << ". Due to restrictions in the GPhoto2 API, " +- << "only the first camera is used."; +- } ++ // autodetect all cameras, then match the list to the passed in USB ids ++ gp_list_new (&camList); ++ gp_abilities_list_detect(abilList, list, camList, context); ++ gp_context_unref(context); ++ gp_port_info_list_free(list); + +- if (gp_list_get_name(camList, 0, &model_str) == GP_OK && +- gp_list_get_value(camList, 0, &port_str) == GP_OK) +- { +- model = QString::fromLatin1(model_str); +- port = QString::fromLatin1(port_str); ++ int count = gp_list_count(camList); ++ int cnt = 0; + +- success = true; +- } +- else +- { +- kError() << "Failed to get information for the listed camera"; +- } +- } ++ for (int i = 0 ; i < count ; ++i) ++ { ++ const char *xmodel; ++ gp_list_get_name(camList, i, &xmodel); ++ int model = gp_abilities_list_lookup_model (abilList, xmodel); ++ CameraAbilities ab; ++ gp_abilities_list_get_abilities (abilList, model, &ab); + +- gp_abilities_list_free(abilList); +- gp_port_info_list_free(portinfo); +- gp_list_free(camList); +- } ++ if (ab.port != GP_PORT_USB) continue; ++ if (ab.usb_vendor != vendorId) continue; ++ if (ab.usb_product != productId)continue; + +- gp_port_free(gpport); ++ /* keep it, and continue iterating, in case we find anohter one */ ++ gp_list_get_name (camList, i, &model_str); ++ gp_list_get_value(camList, i, &port_str); + +- if (success) +- { +- break; +- } ++ cnt++; + } ++ gp_abilities_list_free(abilList); ++ if (cnt > 0) ++ { ++ if (cnt > 1) ++ { ++ kWarning() << "More than one camera detected on port " << port ++ << ". Due to restrictions in the GPhoto2 API, " ++ << "only the first camera is used."; ++ } ++ model = QString::fromLatin1(model_str); ++ port = QString::fromLatin1(port_str); + +- gp_port_info_list_free(list); +- gp_context_unref(context); ++ success = true; ++ } ++ else ++ { ++ kError() << "Failed to get information for the listed camera"; ++ } + ++ gp_list_free(camList); + return success; + #else + Q_UNUSED(vendorId); +-- +1.7.10.4 + diff --git a/digikam.spec b/digikam.spec index bef9cd9..11b3def 100644 --- a/digikam.spec +++ b/digikam.spec @@ -2,7 +2,7 @@ Name: digikam Version: 2.8.0 -Release: 2%{?pre}%{?dist} +Release: 3%{?pre}%{?dist} Summary: A digital camera accessing & photo management application License: GPLv2+ @@ -23,7 +23,7 @@ Patch0: digikam-2.5.0-clapack-atlas.patch ## upstreamable patches # libgphoto2-2.5 support patch from # https://bugs.kde.org/show_bug.cgi?id=303427 -Patch50: digikam-2.7.0-libgphoto2_25.patch +Patch50: digikam-2.8.0-libgphoto2_25.patch ## upstream patches @@ -221,6 +221,7 @@ BuildArch: noarch %patch0 -p1 -b .clapack-atlas +# apply conditionally to be on the safe-side for now, at least until committed upstream -- rex %if 0%{?fedora} > 17 pushd core %patch50 -p1 -b .libgphoto2_25 @@ -516,6 +517,9 @@ update-desktop-database -q &> /dev/null %changelog +* Fri Aug 17 2012 Rex Dieter 2.8.0-3 +- rev libgphoto2-2.5 patch (kde#303427) + * Fri Aug 10 2012 Rex Dieter 2.8.0-2 - rebuild (libimobiledevice)