#!/bin/sh
#
# Copyright:	2012, Colomban Wendling
# License:		GNU GPL v2 or later

# Update Geany's bundled Scintilla from a given Scintilla source directory
# (e.g. an upstream Mercurial clone or tarball)


SCI_SRC=

# parse arguments
if [ $# -eq 1 ]; then
	SCI_SRC="$1"
else
	echo "USAGE: $0 SCINTILLA_SOURCE_DIRECTORY" >&2
	exit 1
fi

# check source directory
if ! [ -f "$SCI_SRC"/version.txt ]; then
	echo "'$SCI_SRC' is not a valid Scintilla source directory!" >&2
	exit 1
fi
# check destination directory
if ! [ -d .git ] || ! [ -f scintilla/version.txt ]; then
	echo "Please run this script from Geany's root source directory." >&2
	exit 1
fi

# make sure destination directory is clean
if git status -unormal -s scintilla | grep '^??'; then
	echo "Please clean scintilla directory from untracked files before." >&2
	exit 1
fi

# copy everything from scintilla but lexers
cp -v "$SCI_SRC"/src/*.cxx        scintilla/src     || exit 1
cp -v "$SCI_SRC"/src/*.h          scintilla/src     || exit 1
cp -v "$SCI_SRC"/include/*.h      scintilla/include || exit 1
cp -v "$SCI_SRC"/include/*.iface  scintilla/include || exit 1
cp -v "$SCI_SRC"/gtk/*.c          scintilla/gtk     || exit 1
cp -v "$SCI_SRC"/gtk/*.cxx        scintilla/gtk     || exit 1
cp -v "$SCI_SRC"/gtk/*.h          scintilla/gtk     || exit 1
cp -v "$SCI_SRC"/gtk/*.list       scintilla/gtk     || exit 1
cp -v "$SCI_SRC"/lexlib/*.cxx     scintilla/lexlib  || exit 1
cp -v "$SCI_SRC"/lexlib/*.h       scintilla/lexlib  || exit 1
cp -v "$SCI_SRC"/License.txt      scintilla         || exit 1
cp -v "$SCI_SRC"/version.txt      scintilla         || exit 1
# now copy the lexers we use
git ls-files scintilla/lexers/*.cxx | sed 's%^scintilla/%./%' | while read f; do
  cp -v "$SCI_SRC/$f" "scintilla/$f" || exit 1
done || exit 1

# apply our patch
git apply -p0 scintilla/scintilla_changes.patch || {
	echo "scintilla_changes.patch doesn't apply, please update it and retry."
	echo "Changes for the catalogue are:"
	git diff -p -R --src-prefix= --dst-prefix= scintilla/src/Catalogue.cxx | cat
	exit 1
}

# show a nice success banner
echo "Scintilla update successful!" | sed 'h;s/./=/g;p;x;p;x'

#check whether there are new files
if git status -unormal -s scintilla | grep '^??'; then
	cat <<EOF

Untracked files above have been introduced by the new Scintilla version and
should be added to version control if appropriate, or removed.

Don't forget to add new files to the build system.
EOF
fi

# check for possible changes to styles
if ! git diff --quiet scintilla/include/SciLexer.h; then
	cat << EOF

Check the diff of scintilla/include/SciLexer.h to see whether and which
mapping to add or update in src/highlightingmappings.h
(use git diff scintilla/include/SciLexer.h).
Don't forget to also update the comment and string styles in
src/highlighting.c.
EOF
fi

# summary
cat << EOF

Don't forget to add or update the appropriate line in NEWS.
EOF