#!/bin/sh

PRGNAM=openmvs
VERSION=2.3.0
BUILD=1
case "$(uname -m)" in
  x86_64) ARCH=amd64 ;;
  aarch64) ARCH=arm64 ;;
  *) exit 1
esac

HOMEPAGE="https://cdcseacave.github.io/"
SOURCE="openMVS-${VERSION}.tar.gz"
DOWNLOAD="https://github.com/cdcseacave/openMVS/archive/refs/tags/v${VERSION}.tar.gz"
SHA256SUM="ac7312fb71dbab18c5b2755ad9ac3caa40ec689f6f369c330ca73c87c1f34258"

VCGLIB_VERSION="2025.07"
VCGLIB_SOURCE="vcglib-${VCGLIB_VERSION}.tar.gz"
VCGLIB_DOWNLOAD="https://github.com/cnr-isti-vclab/vcglib/archive/refs/tags/${VCGLIB_VERSION}.tar.gz"
VCGLIB_SHA256SUM="e49fc9342d5476b3e39a5e1939b965b57c91d7a17b4f97b8c5eaf01228b16cf0"

MAINTAINER="Gernot Walzl"
EMAIL="gernot.walzl@gmx.at"
DATE="2025-12-22"

DESC="Multi-View Stereo reconstruction library and tools
 The input is a set of photos plus the sparse point cloud.
 The output is a textured mesh."


# set initial variables
CWD=$(pwd)
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

# exit on error
set -e

# setup the environment
sudo apt-get install \
  build-essential \
  cmake \
  libeigen3-dev \
  libopencv-dev \
  libceres-dev \
  libcgal-dev \
  libboost-iostreams-dev \
  libboost-program-options-dev \
  libboost-serialization-dev \
  libglew-dev \
  libglfw3-dev

# download the source if needed
if [ ! -f "$CWD/$SOURCE" ]; then
  wget -O "$CWD/$SOURCE" "$DOWNLOAD" || exit 1
fi
if [ ! -f "$CWD/$VCGLIB_SOURCE" ]; then
  wget -O "$CWD/$VCGLIB_SOURCE" "$VCGLIB_DOWNLOAD" || exit 1
fi

# check for correct source file
if [ "$(sha256sum "$CWD/$SOURCE" | cut -f 1 -d ' ')" != "$SHA256SUM" ]; then
  exit 1
fi
if [ "$(sha256sum "$CWD/$VCGLIB_SOURCE" | cut -f 1 -d ' ')" != "$VCGLIB_SHA256SUM" ]; then
  exit 1
fi

# extract
cd "$TMP" || exit 1
tar xvf "$CWD/$SOURCE"
tar xvf "$CWD/$VCGLIB_SOURCE"
cd "openMVS-${VERSION}" || exit 1

# fix permissions
chown -R root:root .
chmod -R u+w,go+r-w,a-s .

# build
mkdir make
cd make
cmake .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/usr \
  -DVCG_ROOT="../../vcglib-${VCGLIB_VERSION}" \
  -DOpenMVS_ENABLE_TESTS=OFF \
  -DOpenMVS_USE_CUDA=OFF \
  -DOpenMVS_USE_PYTHON=OFF
cmake --build . -j"$(nproc)"

# install
rm -rf "$PKG"
mkdir -p "$PKG/usr/share/doc/$PRGNAM"
make install/strip DESTDIR="$PKG"

# copy build script
cat "$CWD/$0" > "$PKG/usr/share/doc/$PRGNAM/$PRGNAM.DebBuild"

# changelog
cat > "$PKG/usr/share/doc/$PRGNAM/changelog.Debian" <<EOF
$PRGNAM ($VERSION-$BUILD) unstable; urgency=medium

  * Created a Debian package.

 -- $MAINTAINER <$EMAIL>  $(date -d$DATE -R)
EOF
gzip -n9 "$PKG/usr/share/doc/$PRGNAM/changelog.Debian"

# copyright
cat > "$PKG/usr/share/doc/$PRGNAM/copyright" <<EOF
Files: *
Copyright: 2015-2025, OpenMVS authors
License: AGPL-3.0-only
EOF

# DEBIAN/control
mkdir -p "$PKG/DEBIAN"
cat > "$PKG/DEBIAN/control" <<EOF
Package: $PRGNAM
Version: $VERSION-$BUILD
Section: science
Priority: optional
Architecture: $ARCH
Depends: libc6, libboost-iostreams1.83.0, libboost-program-options1.83.0, libboost-serialization1.83.0, libglew2.2, libglfw3, libopencv-calib3d410, libopencv-core410, libopencv-features2d410, libopencv-flann410, libopencv-imgcodecs410, libopencv-imgproc410
Installed-Size: $(du -s "$PKG" | cut -f1)
Maintainer: $MAINTAINER <$EMAIL>
Description: $DESC
Homepage: $HOMEPAGE
EOF

# DEBIAN/md5sums
cd "$PKG"
find . -type d -name 'DEBIAN' -prune -o -type f -printf '%P\0' \
  | sort -z | xargs -0 md5sum \
  > "$PKG/DEBIAN/md5sums"

# build a deb
cd "$TMP"
fakeroot dpkg-deb -b "$PKG" "$OUTPUT"

# clean
cd "$CWD"
rm -rf "$PKG"
rm -rf "$TMP/openMVS-${VERSION}"
rm -rf "$TMP/vcglib-${VCGLIB_VERSION}"
