blob: 0e558dd5c0857d02d8f15de740f629c41540d4c8 [file] [log] [blame]
#! /bin/sh
set -e
IN="../update-pcre"
PCRE=$1
if [ "x$PCRE" = x ] || [ "x$PCRE" = x--help ] || [ "x$PCRE" = x-h ]; then
cat >&2 << EOF
$0 PCRE-DIR
Updates the local PCRE copy with a different version of the library,
contained in the directory PCRE-DIR.
This will delete the content of the local pcre directory, copy the
necessary files from PCRE-DIR, and generate other needed files, such
as Makefile.am
EOF
exit
fi
if [ ! -f gregex.h ]; then
echo "This script should be executed from the directory containing gregex.c." 2> /dev/null
exit 1
fi
if [ ! -f "${PCRE}/Makefile.in" ] || [ ! -f "${PCRE}/pcre_compile.c" ]; then
echo "'${PCRE}' does not contain a valid PCRE version." 2> /dev/null
exit 1
fi
echo "Deleting old PCRE library"
mv pcre/.svn tmp-pcre-svn
rm -R pcre 2> /dev/null
mkdir pcre
cd pcre
# pcre_chartables.c is generated by dfatables.
# We do not want to compile and execute dfatables.c every time, because
# this could be a problem (e.g. when cross-compiling), so now generate
# the file and then distribute it with GRegex.
echo "Generating pcre_chartables.c"
cp -R "${PCRE}" tmp-build
cd tmp-build
./configure --enable-utf8 --enable-unicode-properties --disable-cpp > /dev/null
make pcre_chartables.c > /dev/null
cat > ../pcre_chartables.c << \EOF
/* This file is autogenerated by ../update-pcre/update.sh during
* the update of the local copy of PCRE.
*/
EOF
cat pcre_chartables.c >> ../pcre_chartables.c
cd ..
rm -R tmp-build
# Compiled C files.
echo "Generating makefiles"
all_files=$(awk '/^OBJ = /, /^\\s*$/ ' \
'{' \
'sub("^OBJ = ", "");' \
'sub(".@OBJEXT@[[:blank:]]*\\\\\\\\", "");' \
'sub("\\\\$\\\\(POSIX_OBJ\\\\)", "");' \
'print;' \
'}' \
"${PCRE}/Makefile.in")
# Headers.
included_files="pcre.h pcre_internal.h ucp.h ucpinternal.h"
# Generate Makefile.am.
cat $IN/Makefile.am-1 > Makefile.am
for name in $all_files; do
echo " $name.c \\" >> Makefile.am
if [ "${name}" != pcre_chartables ]; then
# pcre_chartables.c is a generated file.
cp "${PCRE}/${name}.c" .
fi
done
for f in $included_files; do
echo " $f \\" >> Makefile.am
cp "${PCRE}/${f}" .
done
cat $IN/Makefile.am-2 >> Makefile.am
echo "Patching PCRE"
# Copy the license.
cp "${PCRE}/COPYING" .
# Use glib for memory allocation.
patch > /dev/null < $IN/memory.patch
# Copy the modified version of pcre_valid_utf8.c.
cp $IN/pcre_valid_utf8.c .
# Copy the modified version of pcre_ucp_searchfuncs.c that uses glib
# for Unicode properties.
cp $IN/pcre_ucp_searchfuncs.c .
patch > /dev/null < $IN/ucp.patch
# Remove the digitab array in pcre_compile.c.
patch > /dev/null < $IN/digitab.patch
sed -i -e 's/(digitab\[\(.*\)\] & ctype_digit)/g_ascii_isdigit(\1)/' pcre_compile.c
sed -i -e 's/(digitab\[\(.*\)\] & ctype_xdigit)/g_ascii_isxdigit(\1)/' pcre_compile.c
# Reduce the number of relocations.
python $IN/make_utt.py
patch > /dev/null < $IN/utt.patch
patch > /dev/null < $IN/table-reduction.patch
# Copy back the old SVN directory.
mv ../tmp-pcre-svn .svn
cat << EOF
Update completed. You now should check that everything is working.
Remember to update the regex syntax doc with the new features
(docs/reference/glib/regex-syntax.sgml) and to run the tests.
EOF