#! /bin/sh

set -e

default_prefix=/usr/local
prefix=$default_prefix
default_CC='c99'
# FILE_OFFSET_BITS=64 is required for large file support on 32-bit platforms.
default_CFLAGS='-O1 -D_FILE_OFFSET_BITS=64 -MD'

CC=${CC:-$default_CC}

help()
{
	cat <<-EOF
$0 [OPTION ...]

--prefix      Set installation directory [$default_prefix]

Some influential environment variables:
  CC                  C compiler [$default_CC]
  CFLAGS              C compiler flags [$default_CFLAGS]
  LDFLAGS             Link-time flags [$default_LDFLAGS]
EOF
}

while true; do
	split_arg=0

	if printf "%s" "$1" | grep -e '=' > /dev/null
	then
		key="$(printf "%s" "$1" | cut -d '=' -f1)"
		value="$(printf "%s" "$1" | cut -d '=' -f2)"
		split_arg=1
	else
		key="$1"
		value="$2"
	fi

	case "$key" in
		--prefix ) prefix="$value"; shift; test $split_arg -eq 0 && shift ;;
		-h | --help ) help; exit 0 ;;
		* ) test "$1" != "" && help && exit 1 || break ;;
	esac
done

if pkg-config ImageMagick-im6
then
	CFLAGS="$(pkg-config --cflags ImageMagick-im6) $CFLAGS"
	LDFLAGS="$(pkg-config --libs ImageMagick-im6) $LDFLAGS"
else
	echo "Error: ImageMagick-im6 not found." >&2
	exit 1
fi

if pkg-config dynstr
then
	in_tree_dynstr=0
	CFLAGS="$(pkg-config --cflags dynstr) $CFLAGS"
	LDFLAGS="$(pkg-config --libs dynstr) $LDFLAGS"
else
	echo "Info: dynstr not found. Using in-tree copy" >&2
	in_tree_dynstr=1
	CFLAGS="-I../libweb/dynstr/include $CFLAGS"
	LDFLAGS="-L../libweb/dynstr -ldynstr $LDFLAGS"
fi

CFLAGS="$default_CFLAGS $CFLAGS"
LDFLAGS="$default_LDFLAGS $LDFLAGS"

cleanup()
{
	rm -f $F
}

F=/tmp/Makefile.thumbnail
trap cleanup EXIT

cat <<EOF > $F
.POSIX:

CC = $CC
PREFIX = $prefix
DST = $prefix/bin
CFLAGS = $CFLAGS
LDFLAGS = $LDFLAGS
EOF

cat <<"EOF" >> $F
.POSIX:

PROJECT = thumbnail
DEPS = $(OBJECTS:.o=.d)
OBJECTS = \
	crealpath.o \
	main.o \
	cftw.o

all: $(PROJECT)

FORCE:

install: all
	install $(PROJECT) $(PREFIX)/bin/

$(PROJECT): $(OBJECTS) $(DYNSTR)
	$(CC) $(OBJECTS) $(LDFLAGS) -o $@
EOF

if [ $in_tree_dynstr -ne 0 ]
then
cat <<"EOF" >> $F
DYNSTR = ../libweb/dynstr/libdynstr.a
$(PROJECT): $(DYNSTR)
$(DYNSTR): FORCE
	+cd ../libweb/dynstr && $(MAKE) CC=$(CC)
EOF
fi

cat <<"EOF" >> $F
clean:
	rm -f $(OBJECTS) $(DEPS)
EOF

if [ $in_tree_dynstr -ne 0 ]
then
cat <<"EOF" >> $F
	+cd ../libweb/dynstr && $(MAKE) clean
EOF
fi

cat <<"EOF" >> $F
distclean: clean
	rm -f $(PROJECT)
	rm Makefile
EOF

# dynstr has no distclean target as of the time of this writing.

cat <<"EOF" >> $F
-include $(DEPS)
EOF

mv $F Makefile
