| #! /bin/sh |
| |
| IN="../update-pcre" |
| PCRE=$1 |
| |
| if [ "x$PCRE" = x -o "x$PCRE" = x--help -o "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 -o ! -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 distribuite 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 |
| |