Browse Source

Add script to build the dng_validate binary

Martijn Braam 1 year ago
parent
commit
419f8a1c5b
1 changed files with 176 additions and 0 deletions
  1. 176 0
      adobe_dng_sdk.sh

+ 176 - 0
adobe_dng_sdk.sh

@@ -0,0 +1,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"/