php-src/scripts/phpize.in
Peter Kokot 69b20f51e1 Disable PACKAGE_* preprocessor symbols
Autoconf defines PACKAGE_* symbols:
- PACKAGE_NAME
- PACKAGE_VERSION
- PACKAGE_TARNAME
- PACKAGE_STRING
- PACKAGE_BUGREPORT
- PACKAGE_URL

and appends them to the generated config.h.in files. With AC_INIT change
via afd52f9d99 where package version, URL,
bug report location and similar meta data are defined, these
preprocessor macros are then non empty strings in the generated
configuration header file. When using phpize, PHP shares the config
files in extensions, warnings of redefined macros appear, such as:
- `warning: 'PACKAGE_NAME' macro redefined`

This patch now disables these non utilized symbols in the generated
config header files.

Better practice would be to include only API specific headers where
needed but this would require even more refactorings. Some extensions
such as pcre, pgsql, and pdo_pgsql solve this issue by undefining some
of these symbols before including the library configuration headers in
the code also. Because these symbols can be defined by any library which
uses Autotools.

Additionally, the unused PACKAGE_* symbols were cleaned for the bundled
libmbfl library and with this patch not needed undef code removed.
2019-04-13 07:00:17 +02:00

212 lines
4.5 KiB
Bash

#!/bin/sh
# Variable declaration
prefix='@prefix@'
datarootdir='@datarootdir@'
exec_prefix="`eval echo @exec_prefix@`"
phpdir="`eval echo @libdir@`/build"
includedir="`eval echo @includedir@`/php"
builddir="`pwd`"
SED="@SED@"
FILES_BUILD="shtool libtool.m4 ax_check_compile_flag.m4 ax_gcc_func_attribute.m4 php_cxx_compile_stdcxx.m4 pkg.m4 config.guess config.sub ltmain.sh Makefile.global"
FILES="acinclude.m4 run-tests*.php"
CLEAN_FILES="$FILES *.o *.lo *.la .libs/ build/ modules/ \
config.nice configure configure.ac \
aclocal.m4 config.h config.h.in conftest* libtool config.cache autom4te.cache/ \
config.log config.status Makefile Makefile.fragments Makefile.objects confdefs.h \
run-tests*.php tests/*.diff tests/*.exp tests/*.log tests/*.out tests/*.php"
# function declaration
phpize_usage()
{
echo "Usage: $0 [--clean|--help|--version|-v]"
}
phpize_no_configm4()
{
if test $@ -eq 1; then
clean=" --clean"
fi
echo "Cannot find config.m4. "
echo "Make sure that you run '$0$clean' in the top level source directory of the module"
echo
}
phpize_clean()
{
echo "Cleaning.."
for i in $CLEAN_FILES; do
if test -f "$i"; then
rm -f $i
elif test -d "$i"; then
rm -rf $i
fi
done
}
phpize_check_configm4()
{
if test ! -r config.m4; then
phpize_no_configm4 $@
exit 1
fi
}
phpize_get_api_numbers()
{
# extracting API NOs:
PHP_API_VERSION=`grep '#define PHP_API_VERSION' $includedir/main/php.h|$SED 's/#define PHP_API_VERSION//'`
ZEND_MODULE_API_NO=`grep '#define ZEND_MODULE_API_NO' $includedir/Zend/zend_modules.h|$SED 's/#define ZEND_MODULE_API_NO//'`
ZEND_EXTENSION_API_NO=`grep '#define ZEND_EXTENSION_API_NO' $includedir/Zend/zend_extensions.h|$SED 's/#define ZEND_EXTENSION_API_NO//'`
}
phpize_print_api_numbers()
{
phpize_get_api_numbers
echo "Configuring for:"
echo "PHP Api Version: "$PHP_API_VERSION
echo "Zend Module Api No: "$ZEND_MODULE_API_NO
echo "Zend Extension Api No: "$ZEND_EXTENSION_API_NO
}
phpize_check_build_files()
{
if test ! -d "$phpdir"; then
cat <<EOF
Cannot find build files at '$phpdir'. Please check your PHP installation.
EOF
exit 1
fi
case "$phpdir" in
*\ * | *\ *)
cat <<EOF
Invalid source path '$phpdir'. Whitespace is not allowed in source path.
EOF
exit 1;;
esac
case "$builddir" in
*\ * | *\ *)
cat <<EOF
Invalid build path '$builddir'. Whitespace is not allowed in build path.
EOF
exit 1;;
esac
}
phpize_check_shtool()
{
test -x "$builddir/build/shtool" || chmod +x "$builddir/build/shtool"
if test ! -x "$builddir/build/shtool"; then
cat <<EOF
shtool at '$builddir/build/shtool' does not exist or is not executable.
Make sure that the file exists and is executable and then rerun this script.
EOF
exit 1
else
php_shtool=$builddir/build/shtool
fi
}
phpize_check_autotools()
{
test -z "$PHP_AUTOCONF" && PHP_AUTOCONF=autoconf
test -z "$PHP_AUTOHEADER" && PHP_AUTOHEADER=autoheader
if test ! -x "$PHP_AUTOCONF" && test ! -x "`$php_shtool path $PHP_AUTOCONF`"; then
cat <<EOF
Cannot find autoconf. Please check your autoconf installation and the
\$PHP_AUTOCONF environment variable. Then, rerun this script.
EOF
exit 1
fi
if test ! -x "$PHP_AUTOHEADER" && test ! -x "`$php_shtool path $PHP_AUTOHEADER`"; then
cat <<EOF
Cannot find autoheader. Please check your autoconf installation and the
\$PHP_AUTOHEADER environment variable. Then, rerun this script.
EOF
exit 1
fi
}
phpize_copy_files()
{
test -d build || mkdir build
(cd "$phpdir" && cp $FILES_BUILD "$builddir"/build)
(cd "$phpdir" && cp $FILES "$builddir")
(cd "$builddir" && cat acinclude.m4 ./build/libtool.m4 > aclocal.m4)
}
phpize_replace_prefix()
{
$SED \
-e "s#@prefix@#$prefix#" \
< "$phpdir/phpize.m4" > configure.ac
}
phpize_autotools()
{
$PHP_AUTOCONF || exit 1
$PHP_AUTOHEADER || exit 1
# Disable PACKAGE_* symbols in config.h.in
$SED -e 's/^#undef PACKAGE_[^ ]*/\/\* & \*\//g' < config.h.in > config.h.in.tmp
mv config.h.in.tmp config.h.in
}
# Main script
case "$1" in
# Cleanup
--clean)
phpize_check_configm4 1
phpize_clean
exit 0
;;
# Usage
--help)
phpize_usage
exit 0
;;
# Version
--version|-v)
phpize_print_api_numbers
exit 0
;;
# Default
*)
phpize_check_configm4 0
phpize_check_build_files
phpize_print_api_numbers
phpize_copy_files
phpize_replace_prefix
phpize_check_shtool
phpize_check_autotools
phpize_autotools
;;
esac
exit 0