1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
|
#!/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"/
|