123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- #!/bin/bash
- set -e
- set -u
- set -o pipefail
- workdir="sdk"
- ver_xlib="1.3"
- ver_expat="2.1.0"
- if [ "$#" -ne 1 ]; then
- echo "Usage: $0 [build|install]"
- echo ""
- echo "build: Download and build the Adobe DNG 1.4 sdk"
- echo "install: Install the dng_validate command and required libraries (optional)"
- exit 0
- fi
- if [ "$1" == "install" ]; then
- if [ -f "$workdir"/dng_validate ]; then
- install -Dm755 "$workdir"/dng_validate /usr/local/bin/dng_validate
- install -Dm644 "$workdir"/libXMPCore.so /usr/local/lib/libXMPCore.so
- install -Dm644 "$workdir"/libXMPFiles.so /usr/local/lib/libXMPFiles.so
- exit 0
- else
- echo "Build the SDK first with the $0 build command (without superuser privilegs)"
- exit 1
- fi
- fi
- if [ "$1" != "build" ]; then
- echo "Invalid command"
- exit 1
- fi
- mkdir -p "$workdir"
- workdir=$(readlink -f "$workdir")
- echo "Working in '$workdir'"
- cd "$workdir"
- # Get XMP
- if [ -d "xmp_sdk" ]; then
- echo "> XMP sdk was already downloaded"
- else
- echo "> Downloading XMP"
- wget "http://download.macromedia.com/pub/developer/xmp/sdk/XMP-Toolkit-SDK-CC-201306.zip"
- unzip XMP-Toolkit-SDK-CC-201306.zip
- mv XMP-Toolkit-SDK-CC201306 xmp_sdk
- rm -f XMP-Toolkit-SDK-CC-201306.zip
- fi
- xmp_root="$workdir"/xmp_sdk
- # Get DNG sdk
- if [ -d "dng_sdk_1_4" ]; then
- echo "> DNG sdk was already downloaded"
- else
- echo "> Downloading DNG sdk"
- wget "http://download.adobe.com/pub/adobe/dng/dng_sdk_1_4.zip"
- unzip dng_sdk_1_4.zip
- rm -f dng_sdk_1_4.zip
- fi
- dng_root="$workdir"/dng_sdk_1_4
- # Get zlib
- cd "$xmp_root"/third-party/zlib
- if [ -f "zlib.h" ]; then
- echo "> ZLIB was already downloaded"
- else
- echo "> Downloading ZLIB $ver_zlib"
- wget "http://zlib.net/zlib-$ver_zlib.tar.gz"
- tar xzf zlib-$ver_zlib.tar.gz
- cp zlib-$ver_zlib/*.h zlib-$ver_zlib/*.c .
- fi
- # Get expat
- cd "$xmp_root"/third-party/expat
- if [ -f "lib/expat.h" ]; then
- echo "> EXPAT was already downloaded"
- else
- echo "> Downloading EXPAT $ver_expat"
- wget "https://downloads.sourceforge.net/project/expat/expat/$ver_expat/expat-$ver_expat-RENAMED-VULNERABLE-PLEASE-USE-2.3.0-INSTEAD.tar.gz"
- mv expat-$ver_expat-RENAMED-VULNERABLE-PLEASE-USE-2.3.0-INSTEAD.tar.gz expat-$ver_expat.tar.gz
- tar xzf expat-$ver_expat.tar.gz
- cp -R expat-$ver_expat/lib .
- fi
- # Build XMP
- cd "$xmp_root"
- if [ -f "public/libraries/i80386linux_x64/release/libXMPCore.so" ]; then
- echo "> XMP was already built"
- else
- echo "> Building XMP"
- cd "$xmp_root"/build
- sed -i '/set(XMP_ENABLE_SECURE_SETTINGS "ON")/c\set(XMP_ENABLE_SECURE_SETTINGS "OFF")' shared/ToolchainGCC.cmake
- sed -i '15 i #include "string.h"' ../XMPFiles/source/NativeMetadataSupport/ValueObject.h
- make
- fi
- xmp_build="$xmp_root"/public/libraries/i80386linux_x64/release
- # Build DNG sdk
- cd "$dng_root"
- cd dng_sdk/source
- if [ -f "dng_validate" ]; then
- echo "> DNG sdk was already built"
- else
- cat > Makefile <<'EOF'
- # Binary name
- APP=dng_validate
- INCL=-I $(XMP_PUB_DIR)/include
- XMP_RELEASE=$(XMP_PUB_DIR)/libraries/i80386linux_x64/release
- LIB=-ljpeg -lz -lpthread -ldl -L $(XMP_RELEASE) -lXMPCore -lXMPFiles
- # Execute the binary
- all: $(APP)
- # Linking
- $(APP): *.o
- g++ $^ $(LIB) -Wl,-rpath=. -Wl,-rpath=/usr/local/lib -o $(APP)
- # Compilation
- *.o: *.cpp
- g++ -c -Wall $(INCL) -DqDNGValidateTarget=1 $^
- clean:
- rm *.o
- EOF
- cat > RawEnvironment.h << 'EOF'
- #define qLinux 1
- #define qDNGThreadSafe 1
- #define UNIX_ENV 1
- EOF
- cat > "$workdir"/sdk.patch << 'EOF'
- diff --git a/dng_sdk/source/dng_string.cpp b/dng_sdk/source/dng_string.cpp
- index 6eafae1..82be01b 100644
- --- a/dng_sdk/source/dng_string.cpp
- +++ b/dng_sdk/source/dng_string.cpp
- @@ -30,7 +30,7 @@
- #include <windows.h>
- #endif
- -#if qiPhone || qAndroid
- +#if qiPhone || qAndroid || qLinux
- #include <ctype.h> // for isdigit
- #endif
- diff --git a/dng_sdk/source/dng_xmp_sdk.cpp b/dng_sdk/source/dng_xmp_sdk.cpp
- index 77d7ebe..3231587 100644
- --- a/dng_sdk/source/dng_xmp_sdk.cpp
- +++ b/dng_sdk/source/dng_xmp_sdk.cpp
- @@ -47,7 +47,7 @@
- #define XMP_INCLUDE_XMPFILES qDNGXMPFiles
- -#define XMP_StaticBuild 1
- +#define XMP_StaticBuild 0
- #if qiPhone
- #undef UNIX_ENV
- EOF
- patch -ruN -d "$dng_root" --strip 1 < "$workdir"/sdk.patch
- rm -f "$workdir"/sdk.patch
- make XMP_PUB_DIR="$xmp_root"/public
- fi
- cp "$dng_root"/dng_sdk/source/dng_validate "$workdir"/dng_validate
- cp "$xmp_build"/{libXMPCore.so,libXMPFiles.so} "$workdir"/
|