Skip to content

Commit

Permalink
(merge from 3.5) Issue python#26662: Set PYTHON_FOR_GEN in configure
Browse files Browse the repository at this point in the history
as the Python program to be used for file generation during the build.
  • Loading branch information
Xavier de Gaye committed Jul 26, 2016
2 parents c75885b + fd0d593 commit 8d49896
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 164 deletions.
9 changes: 5 additions & 4 deletions Makefile.pre.in
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ PYTHON= python$(EXE)
BUILDPYTHON= python$(BUILDEXE)

cross_compiling=@cross_compiling@
PYTHON_FOR_GEN=@PYTHON_FOR_GEN@
PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@
_PYTHON_HOST_PLATFORM=@_PYTHON_HOST_PLATFORM@
BUILD_GNU_TYPE= @build@
Expand Down Expand Up @@ -340,7 +341,7 @@ PGENOBJS= $(POBJS) $(PGOBJS)
OPCODE_H_DIR= $(srcdir)/Include
OPCODE_H_SCRIPT= $(srcdir)/Tools/scripts/generate_opcode_h.py
OPCODE_H= $(OPCODE_H_DIR)/opcode.h
OPCODE_H_GEN= @OPCODEHGEN@ $(OPCODE_H_SCRIPT) $(srcdir)/Lib/opcode.py $(OPCODE_H)
OPCODE_H_GEN= $(PYTHON_FOR_GEN) $(OPCODE_H_SCRIPT) $(srcdir)/Lib/opcode.py $(OPCODE_H)
#
##########################################################################
# AST
Expand All @@ -353,7 +354,7 @@ AST_ASDL= $(srcdir)/Parser/Python.asdl
ASDLGEN_FILES= $(srcdir)/Parser/asdl.py $(srcdir)/Parser/asdl_c.py
# Note that a build now requires Python to exist before the build starts.
# Use "hg touch" to fix up screwed up file mtimes in a checkout.
ASDLGEN= @ASDLGEN@ $(srcdir)/Parser/asdl_c.py
ASDLGEN= $(PYTHON_FOR_GEN) $(srcdir)/Parser/asdl_c.py

##########################################################################
# Python
Expand Down Expand Up @@ -882,15 +883,15 @@ Objects/dictobject.o: $(srcdir)/Objects/stringlib/eq.h
Objects/setobject.o: $(srcdir)/Objects/stringlib/eq.h

$(OPCODETARGETS_H): $(OPCODETARGETGEN_FILES)
$(OPCODETARGETGEN) $(OPCODETARGETS_H)
$(PYTHON_FOR_GEN) $(OPCODETARGETGEN) $(OPCODETARGETS_H)

Python/ceval.o: $(OPCODETARGETS_H) $(srcdir)/Python/ceval_gil.h

Python/frozen.o: Python/importlib.h Python/importlib_external.h

Objects/typeobject.o: Objects/typeslots.inc
Objects/typeslots.inc: $(srcdir)/Include/typeslots.h $(srcdir)/Objects/typeslots.py
$(PYTHON) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h > Objects/typeslots.inc
$(PYTHON_FOR_GEN) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h Objects/typeslots.inc

############################################################################
# Header files
Expand Down
6 changes: 6 additions & 0 deletions Misc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@ Windows

- Issue #27309: Enables proper Windows styles in python[w].exe manifest.

Build
-----

- Issue #26662: Set PYTHON_FOR_GEN in configure as the Python program to be
used for file generation during the build.

What's New in Python 3.6.0 alpha 3
==================================

Expand Down
63 changes: 37 additions & 26 deletions Objects/typeslots.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,43 @@
#!/usr/bin/python
# Usage: typeslots.py < Include/typeslots.h > typeslots.inc
# Usage: typeslots.py < Include/typeslots.h typeslots.inc

import sys, re

print("/* Generated by typeslots.py */")
res = {}
for line in sys.stdin:
m = re.match("#define Py_([a-z_]+) ([0-9]+)", line)
if not m:
continue
member = m.group(1)
if member.startswith("tp_"):
member = "ht_type."+member
elif member.startswith("am_"):
member = "as_async."+member
elif member.startswith("nb_"):
member = "as_number."+member
elif member.startswith("mp_"):
member = "as_mapping."+member
elif member.startswith("sq_"):
member = "as_sequence."+member
elif member.startswith("bf_"):
member = "as_buffer."+member
res[int(m.group(2))] = member
def generate_typeslots(out=sys.stdout):
out.write("/* Generated by typeslots.py */\n")
res = {}
for line in sys.stdin:
m = re.match("#define Py_([a-z_]+) ([0-9]+)", line)
if not m:
continue
member = m.group(1)
if member.startswith("tp_"):
member = "ht_type."+member
elif member.startswith("am_"):
member = "as_async."+member
elif member.startswith("nb_"):
member = "as_number."+member
elif member.startswith("mp_"):
member = "as_mapping."+member
elif member.startswith("sq_"):
member = "as_sequence."+member
elif member.startswith("bf_"):
member = "as_buffer."+member
res[int(m.group(2))] = member

M = max(res.keys())+1
for i in range(1,M):
if i in res:
print("offsetof(PyHeapTypeObject, %s)," % res[i])
M = max(res.keys())+1
for i in range(1,M):
if i in res:
out.write("offsetof(PyHeapTypeObject, %s),\n" % res[i])
else:
out.write("0,\n")

def main():
if len(sys.argv) == 2:
with open(sys.argv[1], "w") as f:
generate_typeslots(f)
else:
print("0,")
generate_typeslots()

if __name__ == "__main__":
main()
169 changes: 52 additions & 117 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -680,9 +680,6 @@ MKDIR_P
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
OPCODEHGEN
PYTHON
ASDLGEN
ac_ct_READELF
READELF
ARFLAGS
Expand Down Expand Up @@ -744,6 +741,7 @@ CONFIG_ARGS
SOVERSION
VERSION
PYTHON_FOR_BUILD
PYTHON_FOR_GEN
host_os
host_vendor
host_cpu
Expand Down Expand Up @@ -777,7 +775,6 @@ infodir
docdir
oldincludedir
includedir
runstatedir
localstatedir
sharedstatedir
sysconfdir
Expand Down Expand Up @@ -888,7 +885,6 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
Expand Down Expand Up @@ -1141,15 +1137,6 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;

-runstatedir | --runstatedir | --runstatedi | --runstated \
| --runstate | --runstat | --runsta | --runst | --runs \
| --run | --ru | --r)
ac_prev=runstatedir ;;
-runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
| --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
| --run=* | --ru=* | --r=*)
runstatedir=$ac_optarg ;;

-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
Expand Down Expand Up @@ -1287,7 +1274,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
libdir localedir mandir runstatedir
libdir localedir mandir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
Expand Down Expand Up @@ -1440,7 +1427,6 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
Expand Down Expand Up @@ -2996,6 +2982,56 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
# pybuilddir.txt will be created by --generate-posix-vars in the Makefile
rm -f pybuilddir.txt

for ac_prog in python$PACKAGE_VERSION python3 python
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_PYTHON_FOR_GEN+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$PYTHON_FOR_GEN"; then
ac_cv_prog_PYTHON_FOR_GEN="$PYTHON_FOR_GEN" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_PYTHON_FOR_GEN="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS

fi
fi
PYTHON_FOR_GEN=$ac_cv_prog_PYTHON_FOR_GEN
if test -n "$PYTHON_FOR_GEN"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_FOR_GEN" >&5
$as_echo "$PYTHON_FOR_GEN" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi


test -n "$PYTHON_FOR_GEN" && break
done
test -n "$PYTHON_FOR_GEN" || PYTHON_FOR_GEN="not-found"

if test "$PYTHON_FOR_GEN" = not-found; then
PYTHON_FOR_GEN='@echo "Cannot generate $@, python not found !" && \
echo "To skip re-generation of $@ run <make touch> or <make -t $@>." && \
echo "Otherwise, set python in PATH and run configure or run <make PYTHON_FOR_GEN=python>." && false &&'
fi


if test "$cross_compiling" = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python interpreter for cross build" >&5
$as_echo_n "checking for python interpreter for cross build... " >&6; }
Expand Down Expand Up @@ -6329,107 +6365,6 @@ fi



for ac_prog in python$PACKAGE_VERSION python3 python
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_PYTHON+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$PYTHON"; then
ac_cv_prog_PYTHON="$PYTHON" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_PYTHON="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS

fi
fi
PYTHON=$ac_cv_prog_PYTHON
if test -n "$PYTHON"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
$as_echo "$PYTHON" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi


test -n "$PYTHON" && break
done
test -n "$PYTHON" || PYTHON="not-found"

if test "$PYTHON" = not-found; then
ASDLGEN="@echo python: $PYTHON! cannot run \$(srcdir)/Parser/asdl_c.py #"
else
ASDLGEN="$PYTHON"
fi


for ac_prog in python$PACKAGE_VERSION python3 python
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_PYTHON+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$PYTHON"; then
ac_cv_prog_PYTHON="$PYTHON" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_PYTHON="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS

fi
fi
PYTHON=$ac_cv_prog_PYTHON
if test -n "$PYTHON"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
$as_echo "$PYTHON" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi


test -n "$PYTHON" && break
done
test -n "$PYTHON" || PYTHON="not-found"

if test "$PYTHON" = not-found; then
OPCODEHGEN="@echo python: $PYTHON! cannot run Tools/scripts/generate_opcode_h.py"
else
OPCODEHGEN="$PYTHON"
fi



case $MACHDEP in
bsdos*|hp*|HP*)
# install -d does not work on BSDI or HP-UX
Expand Down
25 changes: 8 additions & 17 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,14 @@ AC_SUBST(host)
# pybuilddir.txt will be created by --generate-posix-vars in the Makefile
rm -f pybuilddir.txt

AC_CHECK_PROGS(PYTHON_FOR_GEN, python$PACKAGE_VERSION python3 python, not-found)
if test "$PYTHON_FOR_GEN" = not-found; then
PYTHON_FOR_GEN='@echo "Cannot generate $@, python not found !" && \
echo "To skip re-generation of $@ run <make touch> or <make -t $@>." && \
echo "Otherwise, set python in PATH and run configure or run <make PYTHON_FOR_GEN=python>." && false &&'
fi
AC_SUBST(PYTHON_FOR_GEN)

if test "$cross_compiling" = yes; then
AC_MSG_CHECKING([for python interpreter for cross build])
if test -z "$PYTHON_FOR_BUILD"; then
Expand Down Expand Up @@ -1204,23 +1212,6 @@ if test "$cross_compiling" = yes; then
fi
AC_SUBST(READELF)

AC_SUBST(ASDLGEN)
AC_CHECK_PROGS(PYTHON, python$PACKAGE_VERSION python3 python, not-found)
if test "$PYTHON" = not-found; then
ASDLGEN="@echo python: $PYTHON! cannot run \$(srcdir)/Parser/asdl_c.py #"
else
ASDLGEN="$PYTHON"
fi

AC_SUBST(OPCODEHGEN)
AC_CHECK_PROGS(PYTHON, python$PACKAGE_VERSION python3 python, not-found)
if test "$PYTHON" = not-found; then
OPCODEHGEN="@echo python: $PYTHON! cannot run Tools/scripts/generate_opcode_h.py"
else
OPCODEHGEN="$PYTHON"
fi



case $MACHDEP in
bsdos*|hp*|HP*)
Expand Down

0 comments on commit 8d49896

Please sign in to comment.