#!/bin/sh

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

HOMEPAGE="https://colmap.github.io/"
SOURCE="colmap-${VERSION}.tar.gz"
DOWNLOAD="https://github.com/colmap/colmap/archive/refs/tags/${VERSION}.tar.gz"
SHA256SUM="98a8f8cf6358774be223239a9b034cc9d55bf66c43f54fc6ddea9128a1ee197a"

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

DESC="Structure-from-Motion and Multi-View Stereo
 This is a general-purpose Structure-from-Motion (SfM) and Multi-View
 Stereo (MVS) pipeline with a graphical and command-line interface. It
 offers a wide range of features for reconstruction of ordered and
 unordered image collections."


# 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 \
  cmake \
  ninja-build \
  build-essential \
  libboost-program-options-dev \
  libboost-graph-dev \
  libboost-system-dev \
  libeigen3-dev \
  libfreeimage-dev \
  libmetis-dev \
  libgoogle-glog-dev \
  libgtest-dev \
  libgmock-dev \
  libsqlite3-dev \
  libcgal-dev \
  libceres-dev \
  libcurl4-openssl-dev \
  libssl-dev \
  libomp-dev

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

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

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

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

# build
mkdir build
cd build || exit 1
cmake .. \
  -GNinja \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/usr \
  -DCUDA_ENABLED=OFF \
  -DGUI_ENABLED=OFF
ninja

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

rm -rf "$PKG/usr/share/applications"
mkdir -p "$PKG/usr/share/man/man1"
cp ../doc/colmap.1 "$PKG/usr/share/man/man1"

# compress man pages
if [ -d "$PKG/usr/share/man" ]; then
  find "$PKG/usr/share/man" -type f -name "*.?" -exec gzip -n9 {} \;
fi

# 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: 2018-2023 ETH Zurich and UNC Chapel Hill. All rights reserved.
           2016-2023 Johannes Schönberger <jsch@demuc.de>
           2016-2017 Lutz and Frahm
           2016-2017 Jan-Michael
License: BSD-3-clause-special
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, libgmp10, libboost-program-options1.83.0, libmetis5, libssl3t64, libcurl4t64, libgoogle-glog0v6t64, libsqlite3-0, libgomp1, libfreeimage3, libceres4t64, liblapack3, libblas3
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/${PRGNAM}-${VERSION}"
