diff options
-rw-r--r-- | NEWS | 7 | ||||
-rw-r--r-- | doc/automake.texi | 19 | ||||
-rw-r--r-- | m4/python.m4 | 291 | ||||
-rwxr-xr-x | t/python-prefix.sh | 2 | ||||
-rw-r--r-- | t/python-vars.sh | 65 |
5 files changed, 230 insertions, 154 deletions
@@ -7,8 +7,13 @@ New in ?.?.?: * Bugs fixed - - consistently depend on install-libLTLIBRARIES. + - PYTHON_PREFIX and PYTHON_EXEC_PREFIX are now set according to + Python's sys.* values only if the new configure option + --with-python-sys-prefix is specified. Otherwise, GNU default values + are used, as in the past. (The change in 1.16.3 was too incompatible.) + - consistently depend on install-libLTLIBRARIES. + * Distribution - use const for yyerror declaration in bison/yacc tests. diff --git a/doc/automake.texi b/doc/automake.texi index 0a0da6168..59bc2f8c7 100644 --- a/doc/automake.texi +++ b/doc/automake.texi @@ -7882,17 +7882,22 @@ The Python version number, in the form @var{major}.@var{minor} @item PYTHON_PREFIX @itemx PYTHON_EXEC_PREFIX +@opindex --with-python-sys-prefix @opindex --with-python_prefix @opindex --with-python_exec_prefix @vindex sys.prefix @r{Python variable} @vindex sys.exec_prefix @r{Python variable} -The value of Python's @samp{sys.prefix} (resp.@: -@samp{sys.exec_prefix}) variable. Sometimes the same as the standard -@samp{$@{prefix@}} (@samp{$@{exec_prefix@}}), but differs on some -platforms such as Mac@tie{}OS@tie{}x (where Python is usually -installed as a Framework). Can be set explicitly with the -@option{--with-python_prefix} (@option{--with-python_exec_prefix}) -@file{configure} option. +With no special options given, these have values @samp{$@{prefix@}} +and @samp{$@{exec_prefix@}}, respectively (unexpanded; see below). + +The @file{configure} options @option{--with-python_prefix} +and @option{--with-python_exec_prefix} set them to an explicit value. + +The @file{configure} option @option{--with-python-sys-prefix} set them +to the values of Python's @samp{sys.prefix} and @samp{sys.exec_prefix} +variables. These often differ from @samp{$@{prefix@}} and +@samp{$@{exec_prefix@}}, e.g., on platforms such as Mac@tie{}OS@tie{}x +(where Python is usually installed as a Framework). @item PYTHON_PLATFORM @vindex sys.platform @r{Python variable} diff --git a/m4/python.m4 b/m4/python.m4 index 56d9eb2bb..3a903a7c6 100644 --- a/m4/python.m4 +++ b/m4/python.m4 @@ -82,7 +82,7 @@ AC_DEFUN([AM_PATH_PYTHON], ]) if test "$PYTHON" = :; then - dnl Run any user-specified action, or abort. + dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else @@ -91,38 +91,63 @@ AC_DEFUN([AM_PATH_PYTHON], dnl trailing zero was eliminated. So now we output just the major dnl and minor version numbers, as numbers. Apparently the tertiary dnl version is not of interest. - + dnl AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; print ('%u.%u' % sys.version_info[[:2]])"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) - dnl Use the values of sys.prefix and sys.exec_prefix for the corresponding - dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made - dnl distinct variables so they can be overridden if need be. However, - dnl general consensus is that you shouldn't need this ability. - dnl Also allow directly setting the prefixes via configure args. + dnl At times, e.g., when building shared libraries, you may want + dnl to know which OS platform Python thinks this is. + dnl + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) - if test "x$prefix" = xNONE - then - am__usable_prefix=$ac_default_prefix + dnl emacs-page + dnl If --with-python-sys-prefix is given, use the values of sys.prefix + dnl and sys.exec_prefix for the corresponding values of PYTHON_PREFIX + dnl and PYTHON_EXEC_PREFIX. Otherwise, use the GNU ${prefix} and + dnl ${exec_prefix} variables. + dnl + dnl The two are made distinct variables so they can be overridden if + dnl need be, although general consensus is that you shouldn't need + dnl this separation. + dnl + dnl Also allow directly setting the prefixes via configure options, + dnl overriding any default. + dnl + if test "x$prefix" = xNONE; then + am__usable_prefix=$ac_default_prefix else - am__usable_prefix=$prefix + am__usable_prefix=$prefix fi + # Allow user to request using sys.* values from Python, + # instead of the GNU $prefix values. + AC_ARG_WITH([python-sys-prefix], + [AS_HELP_STRING([--with-python-sys-prefix], + [use Python's sys.prefix and sys.exec_prefix values])], + [am_use_python_sys=:], + [am_use_python_sys=false]) + + # Allow user to override whatever the default Python prefix is. AC_ARG_WITH([python_prefix], [AS_HELP_STRING([--with-python_prefix], - [override the default PYTHON_PREFIX])], - [ am_python_prefix_subst="$withval" - am_cv_python_prefix="$withval" - AC_MSG_CHECKING([for $am_display_PYTHON prefix]) + [override the default PYTHON_PREFIX])], + [am_python_prefix_subst=$withval + am_cv_python_prefix=$withval + AC_MSG_CHECKING([for explicit $am_display_PYTHON prefix]) AC_MSG_RESULT([$am_cv_python_prefix])], [ - AC_CACHE_CHECK([for $am_display_PYTHON prefix], [am_cv_python_prefix], - [am_cv_python_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"`]) + if $am_use_python_sys; then + # using python sys.prefix value, not GNU + AC_CACHE_CHECK([for python default $am_display_PYTHON prefix], + [am_cv_python_prefix], + [am_cv_python_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"`]) - dnl If sys.prefix is a subdir of $prefix, replace the literal value of $prefix - dnl with a variable reference so it can be overridden. - case $am_cv_python_prefix in + dnl If sys.prefix is a subdir of $prefix, replace the literal value of + dnl $prefix with a variable reference so it can be overridden. + case $am_cv_python_prefix in $am__usable_prefix*) am__strip_prefix=`echo "$am__usable_prefix" | sed 's|.|.|g'` am_python_prefix_subst=`echo "$am_cv_python_prefix" | sed "s,^$am__strip_prefix,\\${prefix},"` @@ -130,55 +155,68 @@ AC_DEFUN([AM_PATH_PYTHON], *) am_python_prefix_subst=$am_cv_python_prefix ;; - esac - ]) + esac + else # using GNU prefix value, not python sys.prefix + am_python_prefix_subst='${prefix}' + am_python_prefix=$am_python_prefix_subst + AC_MSG_CHECKING([for GNU default $am_display_PYTHON prefix]) + AC_MSG_RESULT([$am_python_prefix]) + fi]) + # Substituting python_prefix_subst value. AC_SUBST([PYTHON_PREFIX], [$am_python_prefix_subst]) + # emacs-page Now do it all over again for Python exec_prefix, but with yet + # another conditional: fall back to regular prefix if that was specified. AC_ARG_WITH([python_exec_prefix], [AS_HELP_STRING([--with-python_exec_prefix], - [override the default PYTHON_EXEC_PREFIX])], - [ am_python_exec_prefix_subst="$withval" - am_cv_python_exec_prefix="$withval" - AC_MSG_CHECKING([for $am_display_PYTHON exec_prefix]) + [override the default PYTHON_EXEC_PREFIX])], + [am_python_exec_prefix_subst=$withval + am_cv_python_exec_prefix=$withval + AC_MSG_CHECKING([for explicit $am_display_PYTHON exec_prefix]) AC_MSG_RESULT([$am_cv_python_exec_prefix])], [ - dnl --with-python_prefix was given - use its value for python_exec_prefix too - AS_IF([test -n "$with_python_prefix"], [am_python_exec_prefix_subst="$with_python_prefix" - am_cv_python_exec_prefix="$with_python_prefix" - AC_MSG_CHECKING([for $am_display_PYTHON exec_prefix]) - AC_MSG_RESULT([$am_cv_python_exec_prefix])], - [ - AC_CACHE_CHECK([for $am_display_PYTHON exec_prefix], [am_cv_python_exec_prefix], - [am_cv_python_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"`]) - dnl If sys.exec_prefix is a subdir of $exec_prefix, replace the - dnl literal value of $exec_prefix with a variable reference so it can - dnl be overridden. - if test "x$exec_prefix" = xNONE - then - am__usable_exec_prefix=$am__usable_prefix - else - am__usable_exec_prefix=$exec_prefix - fi - case $am_cv_python_exec_prefix in - $am__usable_exec_prefix*) - am__strip_prefix=`echo "$am__usable_exec_prefix" | sed 's|.|.|g'` - am_python_exec_prefix_subst=`echo "$am_cv_python_exec_prefix" | sed "s,^$am__strip_prefix,\\${exec_prefix},"` - ;; - *) - am_python_exec_prefix_subst=$am_cv_python_exec_prefix - ;; - esac - ])]) + # no explicit --with-python_exec_prefix, but if + # --with-python_prefix was given, use its value for python_exec_prefix too. + AS_IF([test -n "$with_python_prefix"], + [am_python_exec_prefix_subst=$with_python_prefix + am_cv_python_exec_prefix=$with_python_prefix + AC_MSG_CHECKING([for python_prefix-given $am_display_PYTHON exec_prefix]) + AC_MSG_RESULT([$am_cv_python_exec_prefix])], + [ + # Set am__usable_exec_prefix whether using GNU or Python values, + # since we use that variable for pyexecdir. + if test "x$exec_prefix" = xNONE; then + am__usable_exec_prefix=$am__usable_prefix + else + am__usable_exec_prefix=$exec_prefix + fi + # + if $am_use_python_sys; then # using python sys.exec_prefix, not GNU + AC_CACHE_CHECK([for python default $am_display_PYTHON exec_prefix], + [am_cv_python_exec_prefix], + [am_cv_python_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"`]) + dnl If sys.exec_prefix is a subdir of $exec_prefix, replace the + dnl literal value of $exec_prefix with a variable reference so it can + dnl be overridden. + case $am_cv_python_exec_prefix in + $am__usable_exec_prefix*) + am__strip_prefix=`echo "$am__usable_exec_prefix" | sed 's|.|.|g'` + am_python_exec_prefix_subst=`echo "$am_cv_python_exec_prefix" | sed "s,^$am__strip_prefix,\\${exec_prefix},"` + ;; + *) + am_python_exec_prefix_subst=$am_cv_python_exec_prefix + ;; + esac + else # using GNU $exec_prefix, not python sys.exec_prefix + am_python_exec_prefix_subst='${exec_prefix}' + am_python_exec_prefix=$am_python_exec_prefix_subst + AC_MSG_CHECKING([for GNU default $am_display_PYTHON exec_prefix]) + AC_MSG_RESULT([$am_python_exec_prefix]) + fi])]) + # Substituting python_exec_prefix_subst. AC_SUBST([PYTHON_EXEC_PREFIX], [$am_python_exec_prefix_subst]) - dnl At times (like when building shared libraries) you may want - dnl to know which OS platform Python thinks this is. - - AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], - [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) - AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) - - # Just factor out some code duplication. + # Factor out some code duplication into this shell variable. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility @@ -198,96 +236,95 @@ try: except ImportError: pass" - dnl Set up 4 directories: + dnl emacs-page Set up 4 directories: - dnl pythondir -- where to install python scripts. This is the - dnl site-packages directory, not the python standard library - dnl directory like in previous automake betas. This behavior - dnl is more consistent with lispdir.m4 for example. + dnl 1. pythondir: where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. - AC_CACHE_CHECK([for $am_display_PYTHON script directory], - [am_cv_python_pythondir], - [if test "x$am_cv_python_prefix" = x - then - am_py_prefix=$am__usable_prefix - else - am_py_prefix=$am_cv_python_prefix - fi - am_cv_python_pythondir=`$PYTHON -c " + dnl + AC_CACHE_CHECK([for $am_display_PYTHON script directory (pythondir)], + [am_cv_python_pythondir], + [if test "x$am_cv_python_prefix" = x; then + am_py_prefix=$am__usable_prefix + else + am_py_prefix=$am_cv_python_prefix + fi + am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: - sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) + sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: - from distutils import sysconfig - sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') + from distutils import sysconfig + sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` - case $am_cv_python_pythondir in - $am_py_prefix*) - am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` - am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,\\${PYTHON_PREFIX},"` - ;; - *) - case $am_py_prefix in - /usr|/System*) ;; - *) - am_cv_python_pythondir="\${PYTHON_PREFIX}/lib/python$PYTHON_VERSION/site-packages" - ;; - esac - ;; + # + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,\\${PYTHON_PREFIX},"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) am_cv_python_pythondir="\${PYTHON_PREFIX}/lib/python$PYTHON_VERSION/site-packages" + ;; esac - ]) + ;; + esac + ]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) - dnl pkgpythondir -- $PACKAGE directory under pythondir. Was - dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is - dnl more consistent with the rest of automake. - + dnl 2. pkgpythondir: $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + dnl AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) - dnl pyexecdir -- directory for installing python extension modules - dnl (shared libraries) + dnl 3. pyexecdir: directory for installing python extension modules + dnl (shared libraries). dnl Query distutils for this directory. - AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], - [am_cv_python_pyexecdir], - [if test "x$am_cv_python_exec_prefix" = x - then - am_py_exec_prefix=$am__usable_exec_prefix - else - am_py_exec_prefix=$am_cv_python_exec_prefix - fi - am_cv_python_pyexecdir=`$PYTHON -c " + dnl + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory (pyexecdir)], + [am_cv_python_pyexecdir], + [if test "x$am_cv_python_exec_prefix" = x; then + am_py_exec_prefix=$am__usable_exec_prefix + else + am_py_exec_prefix=$am_cv_python_exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: - sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_exec_prefix'}) + sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_exec_prefix'}) else: - from distutils import sysconfig - sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_exec_prefix') + from distutils import sysconfig + sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_exec_prefix') sys.stdout.write(sitedir)"` - case $am_cv_python_pyexecdir in - $am_py_exec_prefix*) - am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` - am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,\\${PYTHON_EXEC_PREFIX},"` - ;; - *) - case $am_py_exec_prefix in - /usr|/System*) ;; - *) - am_cv_python_pyexecdir="\${PYTHON_EXEC_PREFIX}/lib/python$PYTHON_VERSION/site-packages" - ;; - esac - ;; + # + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,\\${PYTHON_EXEC_PREFIX},"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) am_cv_python_pyexecdir="\${PYTHON_EXEC_PREFIX}/lib/python$PYTHON_VERSION/site-packages" + ;; esac - ]) + ;; + esac + ]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) - dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) - + dnl 4. pkgpyexecdir: $(pyexecdir)/$(PACKAGE) + dnl AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi - ]) diff --git a/t/python-prefix.sh b/t/python-prefix.sh index 3179d42e5..6231a571c 100755 --- a/t/python-prefix.sh +++ b/t/python-prefix.sh @@ -15,8 +15,6 @@ # along with this program. If not, see <https://www.gnu.org/licenses/>. # Test configure options --with-python_prefix and --with-python_exec_prefix. -# We can't test with no prefixes specified, since the default is to -# install in Python's sys.prefix and sys.exec_prefix directories. required=python . test-init.sh diff --git a/t/python-vars.sh b/t/python-vars.sh index 9070c7501..c6da7e49a 100644 --- a/t/python-vars.sh +++ b/t/python-vars.sh @@ -15,7 +15,8 @@ # along with this program. If not, see <https://www.gnu.org/licenses/>. # Check that AM_PATH_PYTHON correctly sets all the output variables -# advertised in the manual. +# advertised in the manual, both with the GNU prefix values and the +# Python sys.* prefix values. required=python . test-init.sh @@ -61,16 +62,22 @@ check-local: test-in test-am .PHONY: test-in test-am test-in: + @echo "> doing test-in" + @echo ">> contents of pythondir:" cat pythondir case `cat pythondir` in '$${PYTHON_PREFIX}'/*);; *) exit 1;; esac + @echo ">> contents of pyexecdir:" cat pyexecdir case `cat pyexecdir` in '$${PYTHON_EXEC_PREFIX}'/*);; *) exit 1;; esac + @echo ">> contents of vars-exp:" cat $(srcdir)/vars-exp + @echo ">> contents of vars-got:" cat $(builddir)/vars-got diff $(srcdir)/vars-exp $(builddir)/vars-got ## Note: this target's rules will be extended in the "for" loop below. test-am: + @echo "> doing test-am" case '$(pythondir)' in '$(PYTHON_PREFIX)'/*);; *) exit 1;; esac case '$(pyexecdir)' in '$(PYTHON_EXEC_PREFIX)'/*);; *) exit 1;; esac END @@ -78,35 +85,59 @@ END echo @pythondir@ > pythondir.in echo @pyexecdir@ > pyexecdir.in -: > vars-exp -: > vars-got.in - -for var in $pyvars; do - eval val=\$$var - echo "var=$val" >> vars-exp - echo "var=@$var@" >> vars-got.in - echo "${tab}test x'\$($var)' = x'$val' || test \"\$NO_CHECK_PYTHON_PREFIX\"" >> Makefile.am -done - -cat Makefile.am -cat vars-got.in +# This depends on whether we're doing GNU or Python values, per arg. +setup_vars_file () +{ + vartype=$1 + : > vars-exp + : > vars-got.in + + for var in $pyvars; do + if test x"$vartype" = xgnu; then + # when not using Python sys.* values, PYTHON_*PREFIX will vary; + # the computed value will be (something like) "/usr", + # but the expected value will be "${prefix}". + if test x"$var" = xPYTHON_PREFIX \ + || test x"$var" = xPYTHON_EXEC_PREFIX; then + continue + fi + fi + eval val=\$$var + echo "var=$val #$var" >> vars-exp + echo "var=@$var@ #$var" >> vars-got.in + echo "${tab}test x'\$($var)' = x'$val' || test \"\$NO_CHECK_PYTHON_PREFIX\"" >> Makefile.am + done +} + +setup_vars_file gnu $ACLOCAL $AUTOMAKE --add-missing +# some debugging output. for var in pythondir pyexecdir $pyvars; do grep "^$var *=" Makefile.in done -instdir=$(pwd)/inst - $AUTOCONF -./configure --prefix="$instdir" PYTHON="$PYTHON" +# Do GNU values. +./configure PYTHON="$PYTHON" $MAKE test-in test-am +run_make distcheck + +# Do Python values. +setup_vars_file python +instdir=$(pwd)/inst +./configure PYTHON="$PYTHON" --with-python-sys-prefix --prefix="$instdir" +$MAKE test-in test-am +# # This tries to install to $PYTHON_PREFIX, which may not be writable. # Override it to something safe, but then of course we have to skip # checking that it is what we originally set it to. -run_make distcheck PYTHON_PREFIX="$instdir" NO_CHECK_PYTHON_PREFIX=1 +run_make distcheck \ + PYTHON_PREFIX="$instdir" \ + NO_CHECK_PYTHON_PREFIX=1 \ + AM_DISTCHECK_CONFIGURE_FLAGS=--with-python-sys-prefix : |