From 653ecf0645a5b15f7f184c27de633a7ce1a555f7 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Wed, 15 Dec 2021 17:11:32 -0800 Subject: [PATCH] Fix build requirements by correctly noting that Python is required. Building PSPP has required Python since support for the SPV format was added, because the SPV parser-generators use Python. Only Python 3+ can reasonably be supported, because support for Python 2.x ended in April 2020. --- INSTALL | 5 ++--- acinclude.m4 | 15 +++++++++++---- configure.ac | 2 +- src/output/spv/automake.mk | 20 +++++++++---------- tests/atlocal.in | 2 +- tests/data/data-in.at | 39 +++++++++++++------------------------- 6 files changed, 38 insertions(+), 45 deletions(-) diff --git a/INSTALL b/INSTALL index 5fe74b442d..35fd4715ea 100644 --- a/INSTALL +++ b/INSTALL @@ -60,9 +60,8 @@ The following packages are required to install PSPP: * Perl (http://www.perl.org/), version 5.005_03 or later. Perl is required during build but not after installation. - * Python (https://python.org/), version 2.7 or later (Python 3 is - fine). Some tests require Python; if it is missing, those tests - will be skipped. PSPP does not otherwise require Python. + * Python (https://python.org/), version 3.4 or later. Python is + required during build but not after installation. * iconv, which should be installed as part of a Unix-like system. If you don't have a version already, you can install GNU diff --git a/acinclude.m4 b/acinclude.m4 index e7dd390d69..f070009962 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -43,10 +43,17 @@ AC_DEFUN([PSPP_PERL], AC_SUBST([VERSION_FOR_PERL]) ]) -dnl Check that Python 2 or 3 is available. -AC_DEFUN([PSPP_PYTHON], - [AC_ARG_VAR([PYTHON], [Python 2 or 3 interpreter]) - AC_CHECK_PROGS([PYTHON], [python python2 python3], [none])]) +dnl Check that Python 3 is available. +AC_DEFUN([PSPP_PYTHON3], + [AC_ARG_VAR([PYTHON3], [Python 3 interpreter]) + AC_CHECK_PROGS([PYTHON3], [python3 python], [none]) + if test "$PYTHON3" != no && $PYTHON3 -c ' +import sys +sys.exit(0 if sys.version_info >= (3,4) else 1) +'; then :; else + PSPP_REQUIRED_PREREQ([Python 3.4 (or later)]) + fi + ]) dnl PSPP_CHECK_CC_OPTION([OPTION], [ACTION-IF-ACCEPTED], [ACTION-IF-REJECTED]) dnl Check whether the given C compiler OPTION is accepted. diff --git a/configure.ac b/configure.ac index 3aa807cee9..c1bc5d78cb 100644 --- a/configure.ac +++ b/configure.ac @@ -65,7 +65,7 @@ AM_CONDITIONAL(cc_is_gcc, test x"$GCC" = x"yes" ) AM_CONDITIONAL(host_is_w32, [case $host_os in mingw*) true;; *) false;; esac] ) PSPP_PERL -PSPP_PYTHON +PSPP_PYTHON3 AC_CHECK_PROGS([TEX], [tex], [no]) AC_SUBST([TEX]) diff --git a/src/output/spv/automake.mk b/src/output/spv/automake.mk index e7cb75af15..061fc03ecf 100644 --- a/src/output/spv/automake.mk +++ b/src/output/spv/automake.mk @@ -45,10 +45,10 @@ light_binary_out = \ src/output/spv/light-binary-parser.c \ src/output/spv/light-binary-parser.h src/output/spv/light-binary-parser.c: $(light_binary_in) - $(AM_V_GEN)$(PYTHON) $^ code spvlb '"output/spv/light-binary-parser.h"' > $@.tmp + $(AM_V_GEN)$(PYTHON3) $^ code spvlb '"output/spv/light-binary-parser.h"' > $@.tmp $(AM_V_at)mv $@.tmp $@ src/output/spv/light-binary-parser.h: $(light_binary_in) - $(AM_V_GEN)$(PYTHON) $^ header spvlb > $@.tmp && mv $@.tmp $@ + $(AM_V_GEN)$(PYTHON3) $^ header spvlb > $@.tmp && mv $@.tmp $@ nodist_src_output_liboutput_la_SOURCES += $(light_binary_out) BUILT_SOURCES += $(light_binary_out) CLEANFILES += $(light_binary_out) @@ -61,10 +61,10 @@ old_binary_out = \ src/output/spv/old-binary-parser.c \ src/output/spv/old-binary-parser.h src/output/spv/old-binary-parser.c: $(old_binary_in) - $(AM_V_GEN)$(PYTHON) $^ code spvob '"output/spv/old-binary-parser.h"' > $@.tmp + $(AM_V_GEN)$(PYTHON3) $^ code spvob '"output/spv/old-binary-parser.h"' > $@.tmp $(AM_V_at)mv $@.tmp $@ src/output/spv/old-binary-parser.h: $(old_binary_in) - $(AM_V_GEN)$(PYTHON) $^ header spvob > $@.tmp && mv $@.tmp $@ + $(AM_V_GEN)$(PYTHON3) $^ header spvob > $@.tmp && mv $@.tmp $@ nodist_src_output_liboutput_la_SOURCES += $(old_binary_out) BUILT_SOURCES += $(old_binary_out) CLEANFILES += $(old_binary_out) @@ -77,10 +77,10 @@ detail_xml_out = \ src/output/spv/detail-xml-parser.c \ src/output/spv/detail-xml-parser.h src/output/spv/detail-xml-parser.c: $(detail_xml_in) - $(AM_V_GEN)$(PYTHON) $^ code spvdx '"output/spv/detail-xml-parser.h"' > $@.tmp + $(AM_V_GEN)$(PYTHON3) $^ code spvdx '"output/spv/detail-xml-parser.h"' > $@.tmp $(AM_V_at)mv $@.tmp $@ src/output/spv/detail-xml-parser.h: $(detail_xml_in) - $(AM_V_GEN)$(PYTHON) $^ header spvdx > $@.tmp && mv $@.tmp $@ + $(AM_V_GEN)$(PYTHON3) $^ header spvdx > $@.tmp && mv $@.tmp $@ nodist_src_output_liboutput_la_SOURCES += $(detail_xml_out) BUILT_SOURCES += $(detail_xml_out) CLEANFILES += $(detail_xml_out) @@ -93,10 +93,10 @@ structure_xml_out = \ src/output/spv/structure-xml-parser.c \ src/output/spv/structure-xml-parser.h src/output/spv/structure-xml-parser.c: $(structure_xml_in) - $(AM_V_GEN)$(PYTHON) $^ code spvsx '"output/spv/structure-xml-parser.h"' > $@.tmp + $(AM_V_GEN)$(PYTHON3) $^ code spvsx '"output/spv/structure-xml-parser.h"' > $@.tmp $(AM_V_at)mv $@.tmp $@ src/output/spv/structure-xml-parser.h: $(structure_xml_in) - $(AM_V_GEN)$(PYTHON) $^ header spvsx > $@.tmp && mv $@.tmp $@ + $(AM_V_GEN)$(PYTHON3) $^ header spvsx > $@.tmp && mv $@.tmp $@ nodist_src_output_liboutput_la_SOURCES += $(structure_xml_out) BUILT_SOURCES += $(structure_xml_out) CLEANFILES += $(structure_xml_out) @@ -109,10 +109,10 @@ tlo_out = \ src/output/spv/tlo-parser.c \ src/output/spv/tlo-parser.h src/output/spv/tlo-parser.c: $(tlo_in) - $(AM_V_GEN)$(PYTHON) $^ code tlo '"output/spv/tlo-parser.h"' > $@.tmp + $(AM_V_GEN)$(PYTHON3) $^ code tlo '"output/spv/tlo-parser.h"' > $@.tmp $(AM_V_at)mv $@.tmp $@ src/output/spv/tlo-parser.h: $(tlo_in) - $(AM_V_GEN)$(PYTHON) $^ header tlo > $@.tmp && mv $@.tmp $@ + $(AM_V_GEN)$(PYTHON3) $^ header tlo > $@.tmp && mv $@.tmp $@ nodist_src_output_liboutput_la_SOURCES += $(tlo_out) BUILT_SOURCES += $(tlo_out) CLEANFILES += $(tlo_out) diff --git a/tests/atlocal.in b/tests/atlocal.in index 66292efe04..42119f3249 100644 --- a/tests/atlocal.in +++ b/tests/atlocal.in @@ -21,7 +21,7 @@ # Variables used internally by the testsuite. EXEEXT='@EXEEXT@' PERL='@PERL@' -PYTHON='@PYTHON@' +PYTHON3='@PYTHON3@' TEX='@TEX@' GWC='@GWC@' WITH_PERL_MODULE='@WITH_PERL_MODULE@' diff --git a/tests/data/data-in.at b/tests/data/data-in.at index a5285b0b6e..77a39db010 100644 --- a/tests/data/data-in.at +++ b/tests/data/data-in.at @@ -255,8 +255,7 @@ AT_CLEANUP AT_SETUP([DATE input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py date d-m-y]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-date-input.py date d-m-y]) AT_FAIL_IF([test ! -s date.sps || test ! -s date.input || test ! -s expout]) AT_CHECK([pspp -O format=csv date.sps]) AT_CHECK([cat date.output], [0], [expout]) @@ -264,8 +263,7 @@ AT_CLEANUP AT_SETUP([ADATE input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py adate m-d-y]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-date-input.py adate m-d-y]) AT_FAIL_IF([test ! -s adate.sps || test ! -s adate.input || test ! -s expout]) AT_CHECK([pspp -O format=csv adate.sps]) AT_CHECK([cat adate.output], [0], [expout]) @@ -273,8 +271,7 @@ AT_CLEANUP AT_SETUP([EDATE input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py edate d-m-y]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-date-input.py edate d-m-y]) AT_FAIL_IF([test ! -s edate.sps || test ! -s edate.input || test ! -s expout]) AT_CHECK([pspp -O format=csv edate.sps]) AT_CHECK([cat edate.output], [0], [expout]) @@ -282,8 +279,7 @@ AT_CLEANUP AT_SETUP([JDATE input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py jdate j]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-date-input.py jdate j]) AT_FAIL_IF([test ! -s jdate.sps || test ! -s jdate.input || test ! -s expout]) AT_CHECK([pspp -O format=csv jdate.sps]) AT_CHECK([cat jdate.output], [0], [expout]) @@ -291,8 +287,7 @@ AT_CLEANUP AT_SETUP([SDATE input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py sdate y-m-d]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-date-input.py sdate y-m-d]) AT_FAIL_IF([test ! -s sdate.sps || test ! -s sdate.input || test ! -s expout]) AT_CHECK([pspp -O format=csv sdate.sps]) AT_CHECK([cat sdate.output], [0], [expout]) @@ -300,8 +295,7 @@ AT_CLEANUP AT_SETUP([QYR input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py qyr qQy]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-date-input.py qyr qQy]) AT_FAIL_IF([test ! -s qyr.sps || test ! -s qyr.input || test ! -s expout]) AT_CHECK([pspp -O format=csv qyr.sps]) AT_CHECK([cat qyr.output], [0], [expout]) @@ -309,8 +303,7 @@ AT_CLEANUP AT_SETUP([MOYR input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py moyr m-y]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-date-input.py moyr m-y]) AT_FAIL_IF([test ! -s moyr.sps || test ! -s moyr.input || test ! -s expout]) AT_CHECK([pspp -O format=csv moyr.sps]) AT_CHECK([cat moyr.output], [0], [expout]) @@ -318,8 +311,7 @@ AT_CLEANUP AT_SETUP([WKYR input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py wkyr wWy]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-date-input.py wkyr wWy]) AT_FAIL_IF([test ! -s wkyr.sps || test ! -s wkyr.input || test ! -s expout]) AT_CHECK([pspp -O format=csv wkyr.sps]) AT_CHECK([cat wkyr.output], [0], [expout]) @@ -327,8 +319,7 @@ AT_CLEANUP AT_SETUP([DATETIME input format]) AT_KEYWORDS([data-in slow]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py datetime "d-m-y +H:M" "d-m-y +H:M:S"]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-date-input.py datetime "d-m-y +H:M" "d-m-y +H:M:S"]) AT_FAIL_IF([test ! -s datetime.sps || test ! -s datetime.input || \ test ! -s expout]) AT_CHECK([pspp -O format=csv datetime.sps]) @@ -337,8 +328,7 @@ AT_CLEANUP AT_SETUP([YMDHMS input format]) AT_KEYWORDS([data-in slow]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py ymdhms "y-m-d +H:M" "y-m-d +H:M:S"]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-date-input.py ymdhms "y-m-d +H:M" "y-m-d +H:M:S"]) AT_FAIL_IF([test ! -s ymdhms.sps || test ! -s ymdhms.input || \ test ! -s expout]) AT_CHECK([pspp -O format=csv ymdhms.sps]) @@ -347,8 +337,7 @@ AT_CLEANUP AT_SETUP([MTIME input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-time-input.py mtime +M:S]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-time-input.py mtime +M:S]) AT_FAIL_IF([test ! -s mtime.sps || test ! -s mtime.input || test ! -s expout]) AT_CHECK([pspp -O format=csv mtime.sps]) AT_CHECK([cat mtime.output], [0], [expout]) @@ -356,8 +345,7 @@ AT_CLEANUP AT_SETUP([TIME input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-time-input.py time +H:M +H:M:S]) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-time-input.py time +H:M +H:M:S]) AT_FAIL_IF([test ! -s time.sps || test ! -s time.input || test ! -s expout]) AT_CHECK([pspp -O format=csv time.sps]) AT_CHECK([cat time.output], [0], [expout]) @@ -365,8 +353,7 @@ AT_CLEANUP AT_SETUP([DTIME input format]) AT_KEYWORDS([data-in]) -AT_SKIP_IF([test "$PYTHON" = none]) -AT_CHECK([$PYTHON $top_srcdir/tests/data/test-time-input.py dtime '+D H:M' '+D H:M:S']) +AT_CHECK([$PYTHON3 $top_srcdir/tests/data/test-time-input.py dtime '+D H:M' '+D H:M:S']) AT_FAIL_IF([test ! -s dtime.sps || test ! -s dtime.input || test ! -s expout]) AT_CHECK([pspp -O format=csv dtime.sps]) AT_CHECK([cat dtime.output], [0], [expout]) -- 2.30.2