diff --git a/WORK-IN-PROGRESS b/WORK-IN-PROGRESS index bda37ea3..0781e991 100644 --- a/WORK-IN-PROGRESS +++ b/WORK-IN-PROGRESS @@ -5,26 +5,8 @@ T A B L E o f C O N T E N T S 1.1 Amazing Discovery 1 DumpFile is linked to libstdc++.6.dylib 1.2 Amazing Discovery 2 Millions of "weak symbol/visibility" messages -2 Puzzle with autotools/--with-adobe MacOS-X Only -2.1 To build without the external Adobe SDK: -2.2 To add the external Adobe SDK to the mix: -2.3 Notes (mostly to remind me of painful discoveries) -2.4 Compiler options used to build Adobe XMPsdk -2.5 Compiler options used to build DumpFile sample Application -2.6 Linker Options used to link DumpFile - -3 Features to Add to the CMake code - 4 Build design for v0.26.1 -4.1 Backwards compatibility -4.2 New Options for ./configure -4.3 New Options for msvc -4.4 New Options for CMake -4.5 New Options for contrib/cmake/msvc -4.6 Scripts xmpsdk/buildXMPsdk.sh and xmpsdk/buildXMPsdk.cmd -4.7 Support for 32/64 bit builds, Release/Debug, Shared/Static 4.8 Support for MinGW -4.9 Linking XMPsdk with libexiv2 5 Refactoring the Tiff Code 5.1 Background @@ -38,368 +20,6 @@ T A B L E o f C O N T E N T S ========================================================================== -1 Building XMPsdk and Samples in Terminal with the ./Generate_XXX_mac.sh scripts - -Added : 2017-08-18 -Modified: 2017-08-18 - -$ cd /xmpsdk -# XMP-Toolkit-SDK-CC201607 or XMP-Toolkit-SDK-CC201407 -$ mkdir Adobe -$ curl -O http://download.macromedia.com/pub/developer/xmp/sdk/XMP-Toolkit-SDK-CC201607.zip - -$ find third-party -type d -maxdepth 1 -exec cp -R '{}' Adobe/XMP-Toolkit-SDK-CC201607/third-party ';' - -$ cd XMP-Toolkit-SDK-CC201607/build -$ echo '3' | ./GenerateXMPToolkitSDK_mac.sh - -$ xcodebuild -project xcode/static/intel_64/XMPToolkitSDK64.xcodeproj/ -target XMPCoreStatic -configuration Release -$ xcodebuild -project xcode/static/intel_64/XMPToolkitSDK64.xcodeproj/ -target XMPFilesStatic -configuration Release - -Building Samples: -$ cd Adobe -$ curl --insecure -O https://cmake.org/files/v3.5/cmake-3.5.2-Darwin-x86_64.tar.gz -$ tar xzf cmake-3.5.2-Darwin-x86_64.tar.gz -$ mkdir XMP-Toolkit-SDK-CC201607/tools/cmake/bin -$ ditto cmake-3.5.2-Darwin-x86_64/CMake.app/ XMP-Toolkit-SDK-CC201607/tools/cmake/bin/cmake.app -$ cd XMP-Toolkit-SDK-CC201607/samples/build -$ echo '2' | ./GenerateSamples_mac.sh -$ xcodebuild -project xcode/intel_64/XMP_Samples_64.xcodeproj -configuration Release [-target Sample] -$ cd XMP-Toolkit-SDK-CC201607 -$ samples/target/macintosh/intel_64/Release/DumpFile ~/Stonehenge.jpg - -Samples: -CustomSchema -CustomSchemaNewDOM -DumpFile -DumpMainXMP -DumpScannedXMP -ModifyingXMP -ModifyingXMPNewDOM -ReadingXMP -ReadingXMPNewDOM -XMPCommand -XMPCoreCoverage -XMPFilesCoverage -XMPIterations - -1.1 Amazing Discovery 1 DumpFile is linked to libstdc++.6.dylib ------------------------------------------------------------------- - -XMP-Toolkit-SDK-CC201607/samples $ otool -L target/macintosh/intel_64/Release/DumpFile -target/macintosh/intel_64/Release/DumpFile: - /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0) - /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 104.1.0) - /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1225.1.1) - /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 728.4.0) -XMP-Toolkit-SDK-CC201607/samples $ - -Conclusion: We should link -lXMPCore with libexiv2.26.dylib - We should not link -lXMPCore with applications such as exiv2(.exe) - We should build exiv2 code with visibility disabled "CXXFLAGS=-fvisibility=hidden -fvisibility-inlines-hidden" - We must compile and link everything with "CXXFLAGS=-stdlib=libstdc++ -Wno-deprecated" - -1.2 Amazing Discovery 2 Millions of "weak symbol/visibility" messages ------------------------------------------------------------------------- - -$ cd samples/build -$ rm -rf cmake/DumpFile/build_x64 # remove the build of DumpFile -$ env VERBOSE=1 xcodebuild -project xcode/intel_64/XMP_Samples_64.xcodeproj -configuration Release -target DumpFile - -========================================================================== - -2 Puzzle with autotools/--with-adobe MacOS-X Only -Added : 2017-08-17 -Modified: 2017-08-18 - -The --with-adobe code is new (added on Monday/Tuesday 2017-08-15). -It's very much "Work in Progress" and will get lots more polishing. -This builds and links on Mac and Linux (Cygwin isn't ready yet). -Autotools isn't used with Visual Studio - -Default build (which compile/links xmpsdk/src) is fine (and passes test suite) -$ sudo make distclean ; make config ; ./configure ; make ; sudo make install ; make samples ; make tests - -Status: The 2016/AdobeXMPsdk requires an entry point that's not in the C++ STL library - ./configure is building and passing the test suite - ./configure --with-adobe=2014 is broken on __ZNSs4_Rep11_S_terminalE - ./configure --with-adobe=2016 is broken on __ZNSiD0Ev - -The missing entry points are in /usr/lib/libstdc++.6.dylib -When I use install_name_tool to change to libstdc++.6.dylib, I crash in this: - -$ c++filt __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev -std::__1::basic_string, std::__1::allocator >::~basic_string() -$ - -There's something mixed up concerning the libraries used by Adobe's XMPSDK and libexiv2.26.dylib --stdlib=libstdc++ will link /usr/lib/libstdc++.6.dylib, however the compiler warns: -clang: warning: libstdc++ is deprecated; move to libc++ [-Wdeprecated] - -2.1 To build without the external Adobe SDK: --------------------------------------------- - -Edit config/config.mk.in and modify: - XMPSDK_LIBS= -lXMPCore -to - XMPSDK_LIBS = '' - -$ sudo make distclean ; make config ; ./configure --with-adobe ; make - -The following command works: -$ bin/exiv2 http://clanmills.com/Stonehenge.jpg is working - -On 2017-08-15 The following command crashes when it attempts to execute XMPsdk code -$ bin/exiv2 --verbose --version -........ -config_path=/Users/rmills/.exiv2 -uid=501 -euid=501 -gid=20 -dyld: lazy symbol binding failed: Symbol not found: _WXMPMeta_Initialize_1 - Referenced from: /Users/rmills/gnu/github/exiv2/src/.libs/libexiv2.26.dylib - Expected in: flat namespace - -dyld: Symbol not found: _WXMPMeta_Initialize_1 - Referenced from: /Users/rmills/gnu/github/exiv2/src/.libs/libexiv2.26.dylib - Expected in: flat namespace - -Abort trap: 6 -$ - -This is correct. libXMPCore.a is not in the mix. - -ls -alt src/.libs/libexiv2.26.dylib --rwxr-xr-x+ 1 rmills staff 2238124 Aug 17 11:07 src/.libs/libexiv2.26.dylib - ------- -2.2 To add the external Adobe SDK to the mix: ---------------------------------------------- - -Edit src/Makefile#242 and change: - @$(LIBTOOL) --mode=link $(LINK.cc) -o ../bin/$@ $(LIBRARY) $(EXIV2OBJ) $(EXIV2COBJ) -rpath $(libdir) -to: - @$(LIBTOOL) --mode=link $(LINK.cc) -lXMPCore -o ../bin/$@ $(LIBRARY) $(EXIV2OBJ) $(EXIV2COBJ) -rpath $(libdir) - -$ touch src/version.cpp src/exiv2.cpp ; make -$ ls -alt src/.libs/libexiv2.26.dylib --rwxr-xr-x+ 1 rmills staff 4312308 Aug 17 11:17 src/.libs/libexiv2.26.dylib - ------- -$ bin/exiv2 -dyld: Symbol not found: __ZNSiD0Ev - Referenced from: /Users/rmills/gnu/github/exiv2/src/.libs/libexiv2.26.dylib - Expected in: flat namespace - in /Users/rmills/gnu/github/exiv2/src/.libs/libexiv2.26.dylib -Abort trap: 6 -605 rmills@rmillsmbp:~/gnu/github/exiv2 $ - -$ c++filt _ZNSiD0Ev -std::basic_istream >::~basic_istream() - -This code is being accessed by Adobe XMPSDK 2016 libXMPCore.a and isn't in the c++ library. - -$ nm -g xmpsdk/Adobe/libXMPCore.a | grep _ZNSiD0Ev - U __ZNSiD0Ev -$ - -Adobe XMPSDK 2014 has a similar problem with __ZNSs4_Rep11_S_terminalE - -$ nm -g Adobe/XMP-Toolkit-SDK-CC201412/libXMPCore.a | grep __ZNSs4_Rep11_S_terminalE | sort --unique - U __ZNSs4_Rep11_S_terminalE -$ c++filt __ZNSs4_Rep11_S_terminalE -std::string::_Rep::_S_terminal - - -2.3 Notes (mostly to remind me of painful discoveries) ------------------------------------------------------- - -How does the build get generated? -$ make config -This generates ./configure by reading config/configure.ac - -When you use --with-adobe, CXXFLAGS and LDFLAGS are modified and ENABLE_XMP is set to 2016. -Makefile has code to execute the script xmpsdk/buildXMPsdk.sh which -downloads and builds the XMPsdk to create libCore.a (which we need) and libFiles.a - -config/config.mk.in is converted into config/config.mk and included in xmpsdk/src/Makefile -This is really ugly. config.mk also messes with CPPFLAGS and LDFLAGS - -To get -lXMPCore into the mix, set XMPSDK_LIBS in config/config.mk.in - XMPSDK_LIBS = -lXMPCore - -508 rmills@rmillsmbp:~/gnu/github/exiv2 $ finder Makefile | xargs grep -H config.mk | grep include -./contrib/organize/Makefile:include $(top_srcdir)/config/config.mk -./doc/Makefile:include $(top_srcdir)/config/config.mk -./samples/Makefile:include $(top_srcdir)/config/config.mk -./src/Makefile:include $(top_srcdir)/config/config.mk -./xmpsdk/src/Makefile:include $(top_srcdir)/config/config.mk -509 rmills@rmillsmbp:~/gnu/github/exiv2 $ - -2.4 Compiler options used to build Adobe XMPsdk ------------------------------------------------ - -For sure, Adobe's code is being built with MacOSX10.8.sdk and -std=c++11 - -/usr/bin/c++ --DBUILDING_XMPCORE_AS_STATIC=1 --DBUILDING_XMPCORE_LIB=1 --DENABLE_CPP_DOM_MODEL=1 --DHAVE_EXPAT_CONFIG_H=1 --DMAC_ENV=1 --DXML_STATIC=1 --DXMP_64=1 --DXMP_COMPONENT_INT_NAMESPACE=AdobeXMPCore_Int --DXMP_StaticBuild=1 --I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/build/../.. --I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/build/../../public/include --I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/build/../../third-party/expat/public/lib --I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/build/../resource/mac --funsigned-char --fshort-enums --fno-common --Wall --Wextra --Wno-missing-field-initializers --Wno-shadow --Wno-reorder --std=c++11 --Wnon-virtual-dtor --Woverloaded-virtual --Wno-unused-variable --Wno-unused-function --Wno-unused-parameter --fstack-protector --O3 --DNDEBUG=1 --D_NDEBUG=1 --arch x86_64 --isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk --mmacosx-version-min=10.7 --o CMakeFiles/XMPCoreStatic.dir/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/source/XMPMeta-GetSet.cpp.o --c /Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/source/XMPMeta-GetSet.cpp - -2.5 Compiler options used to build DumpFile sample Application ------------------------------------------------------------ - -clang -x c++ --arch x86_64 --fmessage-length=0 --fdiagnostics-show-note-include-stack --fmacro-backtrace-limit=0 --stdlib=libstdc++ --Wno-trigraphs --fpascal-strings --O3 --Wno-missing-field-initializers --Wno-missing-prototypes --Wno-return-type --Wno-non-virtual-dtor --Wno-overloaded-virtual --Wno-exit-time-destructors --Wno-missing-braces --Wparentheses --Wswitch --Wno-unused-function --Wno-unused-label --Wno-unused-parameter --Wno-unused-variable --Wunused-value --Wno-empty-body --Wno-uninitialized --Wno-unknown-pragmas --Wno-shadow --Wno-four-char-constants --Wno-conversion --Wno-constant-conversion --Wno-int-conversion --Wno-bool-conversion --Wno-enum-conversion --Wno-shorten-64-to-32 --Wno-newline-eof --Wno-c++11-extensions --DCMAKE_INTDIR=\"Release\" --DMAC_ENV=1 --DXMP_64=1 --DXMP_StaticBuild=1 --isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk --fasm-blocks --fstrict-aliasing --Wdeprecated-declarations --Winvalid-offsetof --mmacosx-version-min=10.9 --g --Wno-sign-conversion --Wno-infinite-recursion --Wno-move --I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/target/macintosh/intel_64/Release/include --I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/../../.. --I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/../../../public/include --I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/DumpFile/build_x64/XMP_Samples_64.build/Release/DumpFile.build/DerivedSources/x86_64 --I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/DumpFile/build_x64/XMP_Samples_64.build/Release/DumpFile.build/DerivedSources --Wmost --Wno-four-char-constants --Wno-unknown-pragmas --F/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/target/macintosh/intel_64/Release --F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks --funsigned-char --fshort-enums --fno-common --Wall --Wextra --Wno-missing-field-initializers --Wno-shadow --Wno-reorder --std=c++11 --Wnon-virtual-dtor --Woverloaded-virtual --Wno-unused-variable --Wno-unused-function --Wno-unused-parameter --fstack-protector --DNDEBUG=1 --D_NDEBUG=1 --MMD --MT dependencies --MF /Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/DumpFile/build_x64/XMP_Samples_64.build/Release/DumpFile.build/Objects-normal/x86_64/DumpFile.d ---serialize-diagnostics /Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/DumpFile/build_x64/XMP_Samples_64.build/Release/DumpFile.build/Objects-normal/x86_64/DumpFile.dia --c /Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/source/common/DumpFile.cpp --o /Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/DumpFile/build_x64/XMP_Samples_64.build/Release/DumpFile.build/Objects-normal/x86_64/DumpFile.o - -2.6 Linker Options used to link DumpFile ----------------------------------------- - -/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ --arch x86_64 --isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk --L/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/target/macintosh/intel_64/Release --F/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/target/macintosh/intel_64/Release --F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks --filelist /Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/DumpFile/build_x64/XMP_Samples_64.build/Release/DumpFile.build/Objects-normal/x86_64/DumpFile.LinkFileList --mmacosx-version-min=10.9 --Xlinker --object_path_lto --Xlinker -/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/DumpFile/build_x64/XMP_Samples_64.build/Release/DumpFile.build/Objects-normal/x86_64/DumpFile_lto.o --stdlib=libstdc++ --Wl,-search_paths_first --Wl,-headerpad_max_install_names -/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/../../../public/libraries/macintosh/intel_64/Release/libXMPCoreStatic.a -/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/../../../public/libraries/macintosh/intel_64/Release/libXMPFilesStatic.a --framework Cocoa --Xlinker --dependency_info --Xlinker -/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/build/cmake/DumpFile/build_x64/XMP_Samples_64.build/Release/DumpFile.build/Objects-normal/x86_64/DumpFile_dependency_info.dat --o /Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/samples/target/macintosh/intel_64/Release/DumpFile - -========================================================================== - -3 Features to Add to the CMake code - - * Auto usage of ccache on Linux and Mac. - * Remove the trick to compile the documentation using the configure script. Native documentation generation on CMake. - -========================================================================== - 4 Build design for v0.26.1 Added : 2017-08-18 @@ -408,77 +28,6 @@ Modified: 2017-08-23 The purpose of the v0.26.1 is to release bug fixes and experimental new features which may become defaults with v0.27 -4.1 Backwards compatibility - This feature is being added to v0.26.1 DOT release and therefore existing - behaviour of ./configure, CMake and msvc does not change. - - ./configure --enable-xmp (default is true) will build a library libxmpsdk.a - using the code in xmpsdk/src. This library is linked into libexiv2.26.dylib - -4.2 New Options for ./configure - - ./configure --with-std=c++11 - The default behaviour is the same as v0.26.0 --with-std=-std=c++98 - If the user requests --with-adobe, --with-std=c++11 is the default - - ./configure --with-adobe[=2016|2014] - This causes the Adobe XMPsdk to be downloaded and built - into the directory xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/libXMPCore.a - - The dynamic library libexiv2.26.dylib will not have libXMPCore.a linked - All applications (such as exiv2, exifprint etc) will require: - -Lxmpsdk/Adobe/XMP-Toolkit-SDK-CC201607 -lXMPCore - - This is an important architectural change in libexiv2.26.dylib - However this is the way to achieve architecture independence between - exiv2 and Adobe XMPsdk. A longer term goal is to totally remove - all Adobe code from the exiv2 tarball. - - Although --with-adobe causes the default compiler to be --with-std=c++11, - the code will with --with-std=c++98 The Adobe XMPsdk is built using the script - xmpsdk/buildXMPsdk which downloads and builds libXMPCore.a using Adobe provided - CMake code. For the 2016 SDK, libXMPCore.a is built with -std=c++11 - -4.3 New Options for msvc - This work has not been started. There are at least two possibilities: - - 1) To provide a new solution msvc/exiv2-adobe.sln - This is the model used by msvc/exiv2-webready.sln - 2) To update msvc/configure.py to support options similar to - ./configure --with-std= and ./config --with-adobe - -4.4 New Options for CMake - Luis is adopting a two stage approach: - - 1) Cleaning up and refactoring the existing CMake scripts (*.cmake and CMakeLists.txt files) - This work is proceeding well. - 2) Adding new EXIV2_ENABLE_XXXXs equivalent to ./configure --with-std and --with-adobe - This work is waiting for Robin to complete the ./configure modifications. - - It is expected that the CMake files will execute the script xmpsdk/buildXMPsdk.{sh|cmd} - to perform the build of libXMPCore.a - -4.5 New Options for contrib/cmake/msvc - To be written. Luis' great new work may make this obsolete. - -4.6 Scripts xmpsdk/buildXMPsdk.sh and xmpsdk/buildXMPsdk.cmd - - These scripts download and build the Adobe XMPsdk. Minor modification of the SDK - is necessary to enable the code to build. For example, Adobe does not support Cygwin - and minor change are necessary to build on that platform. - - Changes to Adobe code will be minimal and documented in xmpsdk/buildXMPsdk.{sh|cmd} - -4.7 Support for 32/64 bit builds, Release/Debug, Shared/Static - - 1) v0.26.1 will build exactly as v0.26 and support linking static libxmpsdk.a - 32/64 static/shared debug/release are supported on all platforms - - 2) The new features (--with-std and --with-adobe) will only be supported for - a static/release build of libXMPCore.a - msvc will continue to supports 32/64 ReleaseDLL/Release/DebugDLL/Debug of libexiv2 - which will include the static libXMPCore.a or libxmpsdk.a - 4.8 Support for MinGW MinGW msys/1.0 was deprecated when v0.26 was released. No support for MinGW msys/1.0 will be provided. @@ -487,66 +36,6 @@ Modified: 2017-08-23 MinGW msys/2.0 might be supported as "experimental" in Exiv2 v0.26.2 -4.9 Building and linking XMPsdk with libexiv2 - - Exiv2 v0.26 (and many earlier editions) contain Adobe XMPsdk code. - The precise version of this code is unknown. - The xmpsdk/ directory has files in src/*.cpp and include/*.hpp - The xmpsdk/ has its own Makefile, CMakeLists.txt and msvc/xmpsdk/project files. - - Exiv2 v0.26 builds a static library libxmpsdk.a which is linked into libexiv2.a - - None of this will change in Exiv2 v0.26.1 - - Exiv2 v0.26.1 will support a new option to download and build "pure Adobe" XMPsdk. - Three flavours will be supported: - 2013 http://download.macromedia.com/pub/developer/xmp/sdk/XMP-Toolkit-SDK-CC-201306.zip - 2014 http://download.macromedia.com/pub/developer/xmp/sdk/XMP-Toolkit-SDK-CC201412.zip - 2016 http://download.macromedia.com/pub/developer/xmp/sdk/XMP-Toolkit-SDK-CC201607.zip - As Adobe appear to release new editions every 18 months, I guess that Adobe will release - a new version in Spring 2018. - - The autotools build supports new ./configure options: - --with-adobe builds and links 4089256 Aug 23 11:19 ./xmpsdk/Adobe/XMP-Toolkit-SDK-CC201306/libXMPCore.a - --with-adobe=2016 as --with-adobe - --with-adobe=2014 4108792 Aug 23 11:18 ./xmpsdk/Adobe/XMP-Toolkit-SDK-CC201412/libXMPCore.a - --with-adobe=2013 22242448 Aug 23 10:25 ./xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/libXMPCore.a - - The build of the Adobe XMPsdk is "pure Adobe". We download the code and build it without modification. - - The scripts to download and build the Adobe code is: - xmpsdk/buildXMPsdk.sh - xmpsdk/buildXMPsdk.cmd - - Adobe build the 2016 SDK with -std=c++11. This links successfully with the libexiv2 -std=c++98 build. - I haven't investigated which compiler Adobe use to build the 2013 and 2014 editions. - - Mac Build - Following the analysis of Adobe's build (Topics 1 and 2 in this report), it has been realised that: - 1 Adobe build the SDK with (both linker and compiler) -stdlib=libstdc++ - 2 Visibility should be disabled in the compiler - - CPPFLAGS = -I/usr/local/include -I/usr/local/include -std=c++98 -fvisibility=hidden -fvisibility-inlines-hidden \ - -stdlib=libstdc++ -Wno-deprecated -Ixmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/public/include - LDFLAGS = -L/usr/local/lib -lpthread -stdlib=libstdc++ -Wno-deprecated -Lxmpsdk/Adobe/XMP-Toolkit-SDK-CC201607 - LIBS = -lz -lXMPCore - CXX = g++ - - Linux Build - CPPFLAGS = -I/usr/local/include -std=c++98 -Ixmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/public/include - LDFLAGS = -L/usr/local/lib -ldl -lpthread -Lxmpsdk/Adobe/XMP-Toolkit-SDK-CC201607 - LIBS = -lz -lm -lXMPCore - CXX = g++ - - When 2013 or 2014 are selected, the appropriate -Ipath and -Lpath should be set. - - CMake Build - A new option -DEXIV2_ENABLE_ADOBE[=2016|=2014|=2013] should be added. - The build of XMPsdk should be performed with xmpsdk/buildXMPsdk.sh (or xmpsdk/buildXMPsdk.cmd for Visual Studio) - The build should set same LDFLAGS and CPPFLAGS as the autotools build. - - When the options -DEXIV2_ENABLE_ADOBE is not used, we should compile the code in xmpsdk/src - to create and link libxmpsdk.a ==========================================================================