digiKam 4.5.0 build failed against latest libjpeg-turbo-1.3.90: [ 48%] Building C object extra/kipi-plugins/common/libkipiplugins/CMakeFiles/kipiplugins.dir/tools/imageio/iccjpeg.c.o cd extra/kipi-plugins/common/libkipiplugins && /usr/bin/cc -DAREA_CODE_GENERAL=51000 -DAREA_CODE_LOADING=51001 -DKDE4_CMAKE_TOPLEVEL_DIR_LENGTH=21 -DKDE_DEFAULT_DEBUG_AREA=51000 -DKDE_DEPRECATED_WARNINGS -DMAKE_KIPIPLUGINS_LIB -DQT_NO_CAST_TO_ASCII -DQT_NO_STL -DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_REENTRANT -D_XOPEN_SOURCE=500 -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wno-long-long -std=iso9899:1990 -Wundef -Wcast-align -Werror-implicit-function-declaration -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common -O2 -DNDEBUG -DQT_NO_DEBUG -fPIC -I. -I../../../../../extra/kipi-plugins/common/libkipiplugins -I../../../../../extra/kipi-plugins/common/libkipiplugins/dialogs -I../../../../../extra/kipi-plugins/common/libkipiplugins/widgets -I../../../../../extra/kipi- plugins/common/libkipiplugins/tools -I../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio -I/usr/include/opencv -I/usr/include/kde4 -I/usr/include/kde4/KDE -I/usr/include/KDE -I/usr/include/phonon -I/usr/include/QtXmlPatterns -I/usr/include/QtXml -I/usr/include/QtWebKit -I/usr/include/QtUiTools -I/usr/include/QtTest -I/usr/include/QtSvg -I/usr/include/QtSql -I/usr/include/QtScriptTools -I/usr/include/QtScript -I/usr/include/QtOpenGL -I/usr/include/QtNetwork -I/usr/include/QtMultimedia -I/usr/include/QtHelp -I/usr/include/QtDesigner -I/usr/include/QtDeclarative -I/usr/include/QtDBus -I/usr/include/Qt3Support -I/usr/include/QtGui -I/usr/include/QtCore -I/usr/include/Qt -I/usr/lib64/qt4/mkspecs/default -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -o CMakeFiles/kipiplugins.dir/tools/imageio/iccjpeg.c.o -c ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.c In file included from ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.c:42:0: ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.h:56:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'JPP' extern void write_icc_profile JPP((j_compress_ptr cinfo, ^ ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.h:76:36: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'JPP' extern void setup_read_icc_profile JPP((j_decompress_ptr cinfo)); ^ ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.h:94:33: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'JPP' extern boolean read_icc_profile JPP((j_decompress_ptr cinfo, ^ ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.c: In function 'read_icc_profile': ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.c:262:24: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token JOCTET FAR *src_ptr = NULL; ^ ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.c:262:25: error: 'src_ptr' undeclared (first use in this function) JOCTET FAR *src_ptr = NULL; ^ ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.c:262:25: note: each undeclared identifier is reported only once for each function it appears in extra/kipi-plugins/common/libkipiplugins/CMakeFiles/kipiplugins.dir/build.make:310: recipe for target 'extra/kipi-plugins/common/libkipiplugins/CMakeFiles/kipiplugins.dir/tools/imageio/iccjpeg.c.o' failed make[2]: *** [extra/kipi-plugins/common/libkipiplugins/CMakeFiles/kipiplugins.dir/tools/imageio/iccjpeg.c.o] Error 1 make[2]: *** Waiting for unfinished jobs.... make -f core/utilities/importui/CMakeFiles/importui.dir/build.make core/utilities/importui/CMakeFiles/importui.dir/depend make[2]: Entering directory '/builddir/build/BUILD/digikam-4.5.0/x86_64-redhat-linux-gnu' cd /builddir/build/BUILD/digikam-4.5.0/x86_64-redhat-linux-gnu && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /builddir/build/BUILD/digikam-4.5.0 /builddir/build/BUILD/digikam-4.5.0/core/utilities/importui /builddir/build/BUILD/digikam-4.5.0/x86_64-redhat-linux-gnu /builddir/build/BUILD/digikam-4.5.0/x86_64-redhat-linux-gnu/core/utilities/importui /builddir/build/BUILD/digikam-4.5.0/x86_64-redhat-linux-gnu/core/utilities/importui/CMakeFiles/importui.dir/DependInfo.cmake --color= Generating kipiimagecollectionselector.moc Generating addtagscompletionbox.moc In file included from ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/kpwriteimage.cpp:40:0: ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.h:56:31: error: expected initializer before 'JPP' extern void write_icc_profile JPP((j_compress_ptr cinfo, ^ ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.h:76:36: error: expected initializer before 'JPP' extern void setup_read_icc_profile JPP((j_decompress_ptr cinfo)); ^ ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/iccjpeg.h:94:33: error: expected initializer before 'JPP' extern boolean read_icc_profile JPP((j_decompress_ptr cinfo, ^ ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/kpwriteimage.cpp: In member function 'bool KIPIPlugins::KPWriteImage::write2JPEG(const QString&)': ../../../../../extra/kipi-plugins/common/libkipiplugins/tools/imageio/kpwriteimage.cpp:189:88: error: 'write_icc_profile' was not declared in this scope write_icc_profile (&cinfo, (JOCTET *)d->iccProfile.data(), d->iccProfile.size()); ^ extra/kipi-plugins/common/libkipiplugins/CMakeFiles/kipiplugins.dir/build.make:287: recipe for target 'extra/kipi-plugins/common/libkipiplugins/CMakeFiles/kipiplugins.dir/tools/imageio/kpwriteimage.cpp.o' failed make[2]: *** [extra/kipi-plugins/common/libkipiplugins/CMakeFiles/kipiplugins.dir/tools/imageio/kpwriteimage.cpp.o] Error 1 make[2]: Leaving directory '/builddir/build/BUILD/digikam-4.5.0/x86_64-redhat-linux-gnu' CMakeFiles/Makefile2:324: recipe for target 'extra/kipi-plugins/common/libkipiplugins/CMakeFiles/kipiplugins.dir/all' failed make[1]: *** [extra/kipi-plugins/common/libkipiplugins/CMakeFiles/kipiplugins.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... [ 49%] Building CXX object core/app/CMakeFiles/digikamcore.dir/__/libs/dimg/loaders/jpegloader.cpp.o cd core/app && /usr/bin/c++ -DKDE4_CMAKE_TOPLEVEL_DIR_LENGTH=21 -DKDE_DEFAULT_DEBUG_AREA=50003 -DKDE_DEPRECATED_WARNINGS -DMAKE_DIGIKAMCORE_LIB -DQT_NO_CAST_TO_ASCII -DQT_NO_STL -DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_REENTRANT -D_XOPEN_SOURCE=500 -Dlibjpeg_EXPORTS -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wnon-virtual-dtor -Wno-long-long -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-exceptions -DQT_NO_EXCEPTIONS -fno-check-new -fno-common -Woverloaded-virtual -fno-threadsafe-statics -fvisibility=hidden -Werror=return-type -fvisibility-inlines-hidden -O2 -DNDEBUG -DQT_NO_DEBUG -fPIC -I. -I../../../core/app -I../../../core/databaseserver -I../../../core/app/album -I../../../core/app/database -I../../../core/app/date -I../../../core/app/dragdrop -I../../../core/app/filters -I../../../ core/app/items -I../../../core/app/items/overlays -I../../../core/app/main -I../../../core/app/fileaction -I../../../core/app/tags -I../../../core/app/tags/tagsmanager -I../../../core/app/tags/tagsmanager/models -I../../../core/app/utils -I../../../core/app/settings -I../../../core/app/views -I../../../core/app/views/tableview -I../../../core/imageplugins -I../../../core/imageplugins/color -I../../../core/imageplugins/decorate -I../../../core/imageplugins/enhance -I../../../core/imageplugins/enhance/hotpixels -I../../../core/imageplugins/filters -I../../../core/imageplugins/transform -I../../../core/kioslave -I../../../core/libs -I../../../core/libs/dklcms -I../../../core/libs/3rdparty/cimg -I../../../core/libs/3rdparty/kmemoryinfo -I../../../core/libs/3rdparty/kinotify -I../../../core/libs/database -I../../../core/libs/database/core -I../../../core/libs/database/haar -I../../../core/libs/database/imgqsort -I../../../core/libs/database/imagehistory -I../../../core/libs/database/faces -I../../../core/libs/ dialogs -I../../../core/libs/dimg -I../../../core/libs/dimg/filters -I../../../core/libs/dimg/filters/auto -I../../../core/libs/dimg/filters/bcg -I../../../core/libs/dimg/filters/bw -I../../../core/libs/dimg/filters/cb -I../../../core/libs/dimg/filters/curves -I../../../core/libs/dimg/filters/decorate -I../../../core/libs/dimg/filters/film -I../../../core/libs/dimg/filters/fx -I../../../core/libs/dimg/filters/greycstoration -I../../../core/libs/dimg/filters/hsl -I../../../core/libs/dimg/filters/icc -I../../../core/libs/dimg/filters/lc -I../../../core/libs/dimg/filters/lens -I../../../core/libs/dimg/filters/levels -I../../../core/libs/dimg/filters/nr -I../../../core/libs/dimg/filters/sharp -I../../../core/libs/dimg/filters/transform -I../../../core/libs/dimg/filters/wb -I../../../core/libs/dimg/imagehistory -I../../../core/libs/dimg/loaders -I../../../core/libs/dmetadata -I../../../core/libs/imageproperties -I../../../core/libs/kgeomaphelper -I../../../core/libs/jpegutils -I../../../core/libs/jpegutils/ libjpeg-62 -I../../../core/libs/models -I../../../core/libs/template -I../../../core/libs/progressmanager -I../../../core/libs/threadimageio -I../../../core/libs/threads -I../../../core/libs/versionmanager -I../../../core/libs/notificationmanager -I../../../core/libs/widgets/mainview -I../../../core/libs/widgets/common -I../../../core/libs/widgets/graphicsview -I../../../core/libs/widgets/itemview -I../../../core/libs/widgets/iccprofiles -I../../../core/libs/widgets/metadata -I../../../core/libs/widgets/imagehistory -I../../../core/tests -I../../../core/tests/modeltest -I../../../core/utilities -I../../../core/utilities/advancedrename -I../../../core/utilities/advancedrename/common -I../../../core/utilities/advancedrename/parser -I../../../core/utilities/advancedrename/parser/modifiers -I../../../core/utilities/advancedrename/parser/options -I../../../core/utilities/advancedrename/parser/options/database -I../../../core/utilities/advancedrename/parser/options/database/keys -I../../../core/utilities/ maintenance -I../../../core/utilities/importui -I../../../core/utilities/importui/backend -I../../../core/utilities/importui/dialogs -I../../../core/utilities/importui/items -I../../../core/utilities/importui/models -I../../../core/utilities/importui/views -I../../../core/utilities/importui/widgets -I../../../core/utilities/importui/main -I../../../core/utilities/facemanagement -I../../../core/utilities/firstrun -I../../../core/utilities/fuzzysearch -I../../../core/utilities/gpssearch -I../../../core/utilities/hotplug -I../../../core/utilities/imageeditor -I../../../core/utilities/imageeditor/core -I../../../core/utilities/imageeditor/main -I../../../core/utilities/imageeditor/dialogs -I../../../core/utilities/imageeditor/editor -I../../../core/utilities/imageeditor/plugin -I../../../core/utilities/imageeditor/printiface -I../../../core/utilities/imageeditor/rawimport -I../../../core/utilities/imageeditor/widgets -I../../../core/utilities/kipiiface -I../../../core/utilities/lighttable -I../../../core/ utilities/baloo -I../../../core/utilities/queuemanager/main -I../../../core/utilities/queuemanager/manager -I../../../core/utilities/queuemanager/views -I../../../core/utilities/queuemanager/basetools -I../../../core/utilities/queuemanager/basetools/color -I../../../core/utilities/queuemanager/basetools/convert -I../../../core/utilities/queuemanager/basetools/decorate -I../../../core/utilities/queuemanager/basetools/enhance -I../../../core/utilities/queuemanager/basetools/filters -I../../../core/utilities/queuemanager/basetools/metadata -I../../../core/utilities/queuemanager/basetools/transform -I../../../core/utilities/searchwindow -I../../../core/utilities/setup -I../../../core/utilities/slideshow -Iutils -Idatabase -I/usr/include/opencv -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/kde4 -I/usr/include/kde4/KDE -I/usr/include/KDE -I/usr/include/phonon -I/usr/include/QtXmlPatterns -I/usr/include/QtXml -I/usr/include/QtWebKit -I/usr/include/QtUiTools -I/usr/include/QtTest -I/usr/ include/QtSvg -I/usr/include/QtSql -I/usr/include/QtScriptTools -I/usr/include/QtScript -I/usr/include/QtOpenGL -I/usr/include/QtNetwork -I/usr/include/QtMultimedia -I/usr/include/QtHelp -I/usr/include/QtDesigner -I/usr/include/QtDeclarative -I/usr/include/QtDBus -I/usr/include/Qt3Support -I/usr/include/QtGui -I/usr/include/QtCore -I/usr/include/Qt -I/usr/lib64/qt4/mkspecs/default -I/usr/include/libpgf -I/usr/include/gphoto2 -I/usr/include/lqr-1 -I/usr/include/lensfun -I/usr/include/eigen3 -fno-tree-pre -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -I/usr/include/kde4 -fexceptions -UQT_NO_EXCEPTIONS -I/usr/include/kde4 -o CMakeFiles/digikamcore.dir/__/libs/dimg/loaders/jpegloader.cpp.o -c ../../../core/libs/dimg/loaders/jpegloader.cpp In file included from ../../../core/libs/dimg/loaders/jpegloader.cpp:33:0: ../../../core/libs/dimg/loaders/iccjpeg.h:56:31: error: expected initializer before 'JPP' extern void write_icc_profile JPP((j_compress_ptr cinfo, ^ ../../../core/libs/dimg/loaders/iccjpeg.h:76:36: error: expected initializer before 'JPP' extern void setup_read_icc_profile JPP((j_decompress_ptr cinfo)); ^ ../../../core/libs/dimg/loaders/iccjpeg.h:94:33: error: expected initializer before 'JPP' extern boolean read_icc_profile JPP((j_decompress_ptr cinfo, ^ ../../../core/libs/dimg/loaders/jpegloader.cpp: In member function 'virtual bool Digikam::JPEGLoader::load(const QString&, Digikam::DImgLoaderObserver*)': ../../../core/libs/dimg/loaders/jpegloader.cpp:249:38: error: 'setup_read_icc_profile' was not declared in this scope setup_read_icc_profile(&cinfo); ^ ../../../core/libs/dimg/loaders/jpegloader.cpp:588:62: error: 'read_icc_profile' was not declared in this scope read_icc_profile(&cinfo, &profile_data, &profile_size); ^ ../../../core/libs/dimg/loaders/jpegloader.cpp: In member function 'virtual bool Digikam::JPEGLoader::save(const QString&, Digikam::DImgLoaderObserver*)': ../../../core/libs/dimg/loaders/jpegloader.cpp:808:90: error: 'write_icc_profile' was not declared in this scope write_icc_profile(&cinfo, (JOCTET*)profile_rawdata.data(), profile_rawdata.size()); ^ core/app/CMakeFiles/digikamcore.dir/build.make:323: recipe for target 'core/app/CMakeFiles/digikamcore.dir/__/libs/dimg/loaders/jpegloader.cpp.o' failed make[2]: *** [core/app/CMakeFiles/digikamcore.dir/__/libs/dimg/loaders/jpegloader.cpp.o] Error 1 make[2]: *** Waiting for unfinished jobs.... Also problems with gwenview compilation https://bugzilla.redhat.com/show_bug.cgi?id=1163476 Reproducible: Always
Sound jpeg turbo do not respect API compatibilty for client applications.... Why ??? Gilles Caulier
I don't know why, maybe libjpeg-turbo bug.
The problem being that libjpeg-turbo recent versions no longer define JPP macro, per the downstream gwenview bug, one possible quick-n-dirty solution is to add to digikam (after libjpeg includes): #ifndef JPP #define JPP(x) x #endif
Rex, Why jpeg turbo have removed this define ? It sound like an upstream problem no ? Gilles Caulier
As, i can seen, jpeg turbo 1.3.90 is 1.4 beta1 in fact. This problem which break compatibility with client applications must be reported as upstream to jpeg turbo team. Gilles Caulier
I found this upstream ml thread, http://sourceforge.net/p/libjpeg-turbo/mailman/message/32677570/
I got gweview to build with a a few extra defines, let's see if I can do the same for digikam.
Opened downstream report against libjpeg-turbo in the meantime, https://bugzilla.redhat.com/show_bug.cgi?id=1164815
Created attachment 89617 [details] workaround build failures with newer libjpeg-turbo builds This quick-n-dirty patch is a workaround to libjpeg-turbo not defining some macros anymore. If this approach is agreeable, I can commit or send to reviewboard for feedback. Else, I can continue pushing for libjpeg-turbo devs to restore full compatibility with libjpeg-62 headers/api
This approach is not the best way. Typically, i would not to touch transupp.h, iccjpeg.h because these files are taken as well from 3rd party lib. updating it in the future require to patch again the files and this is a possible stage to forget to do. Also, i think your patch forget other part to patch as jpegutils.cpp for ex, where jpeglib headers are included. I tried to do another way in a cmake macro to check if jpeglib define exist or not with a small compilation process, as it done in this cmake script used to detect jpeglib version : https://projects.kde.org/projects/extragear/graphics/digikam/repository/revisions/master/entry/cmake/modules/MacroJPEG.cmake Accordingly with define detection, the idea is to use add_definitions() like this for whole compilation : add_definitions("-DJPP(x) x") ... but of course this doesn't work... Gilles PS : no need to use reviewboard, this will duplicates bugzilla workflow (:=)))
OK, I'll try to help work on your approach when I get a chance.
Created attachment 89620 [details] patch to MacroJPEG.cmake to check jpeg lib definitions Rex, please check and hack this patch please... Gilles
Rex, Do you take a look to my patch ? Gilles Caulier
Looking at it, it's a good start, but: * apparently the compile checks aren't working right * getting cmake's add_definition to accept JPP(x)=x is turning out to be tricky :-/
oh, and will need the defines in more than just digikam/core, kipi-plugins need it too
https://gcc.gnu.org/onlinedocs/gcc-4.8.3/gcc/Preprocessor-Options.html#Preprocessor-Options seems to imply that -D'JPP(x)=x' should work, but add_definitions(-D'JPP(x)=x') ends up injecting some spaces: -D'JPP ( x ) =x'
Boo, and, http://www.cmake.org/cmake/help/v3.0/prop_sf/COMPILE_DEFINITIONS.html looks like can't use COMPILE_DEFINITIONS either , "Function-style definitions are not supported"
Good news, looks like we've convinced libjpeg-turbo upstream to fix the breakage on their end, so hopefully workarounds elsewhere (like here) should no longer be needed. See comment from upstream dev , https://bugzilla.redhat.com/show_bug.cgi?id=1164815#c6
Great news. Thanks Rex to report Gilles
digikam builds fine with libjpeg-turbo-1.3.90-3.fc22 without workaround.