#! /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 || exit 1 ./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 ) 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