Remove deprecated sections from WORK-IN-PROGRESS

v0.27.3
Luis Diaz Mas 7 years ago committed by Luis Díaz Más
parent 9733863030
commit 77369dcb72

@ -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 <exiv2dir>/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<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~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<char, std::char_traits<char> >::~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
==========================================================================

Loading…
Cancel
Save