You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2021/01/28 22:10:03 UTC

svn commit: r1885999 - /subversion/trunk/tools/dev/unix-build/Makefile.svn

Author: stsp
Date: Thu Jan 28 22:10:03 2021
New Revision: 1885999

URL: http://svn.apache.org/viewvc?rev=1885999&view=rev
Log:
* tools/dev/unix-build/Makefile.svn: This build script was switched to Python3
   in r1871775. However, old branches such as 1.10.x cannot be compiled with
   Python3. Restore Python 2 support and use it to build anything older than
   1.14.x and trunk.

Modified:
    subversion/trunk/tools/dev/unix-build/Makefile.svn

Modified: subversion/trunk/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/unix-build/Makefile.svn?rev=1885999&r1=1885998&r2=1885999&view=diff
==============================================================================
--- subversion/trunk/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/trunk/tools/dev/unix-build/Makefile.svn Thu Jan 28 22:10:03 2021
@@ -87,8 +87,12 @@ else
 BRANCH		= $(TAG)
 endif
 WC		?= $(BRANCH)
-BRANCH_MAJOR	= $(shell echo $(BRANCH) | \
-			sed -e 's/\([0-9]\)\.\([0-9]\)\.[x0-9].*$$/\1.\2/')
+BRANCH_MAJOR	:= $(shell echo $(BRANCH) | sed -E 's/([0-9]+)\.([0-9]+)\..*/\1.\2/')
+ifeq ($(BRANCH_MAJOR), $(filter 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13, $(BRANCH_MAJOR)))
+PYTHON = python2
+else
+PYTHON = python
+endif
 SVN_REL_WC	= svn-$(WC)
 SVN_WC		= $(PWD)/$(SVN_REL_WC)
 PREFIX		= $(PWD)/prefix
@@ -114,6 +118,7 @@ LIBMAGIC_VER	= 5.30
 RUBY_VER	= 2.4.4
 BZ2_VER	= 1.0.6
 PYTHON_VER	= 3.7.5
+PYTHON2_VER	= 2.7.13
 PY3C_VER	= 1.1
 JUNIT_VER	= 4.10
 GETTEXT_VER	= 0.19.8.1
@@ -131,6 +136,7 @@ LIBMAGIC_DIST	= file-$(LIBMAGIC_VER).tar
 RUBY_DIST	= ruby-$(RUBY_VER).tar.gz
 BZ2_DIST	= bzip2-$(BZ2_VER).tar.gz
 PYTHON_DIST	= Python-$(PYTHON_VER).tgz
+PYTHON2_DIST	= Python-$(PYTHON2_VER).tgz
 PY3C_DIST	= py3c-$(PY3C_VER).tar.gz
 JUNIT_DIST	= junit-${JUNIT_VER}.jar
 GETTEXT_DIST	= gettext-$(GETTEXT_VER).tar.gz
@@ -148,6 +154,7 @@ SHA256_${LIBMAGIC_DIST} = 694c2432e52401
 SHA256_${RUBY_DIST} = 254f1c1a79e4cc814d1e7320bc5bdd995dc57e08727d30a767664619a9c8ae5a
 SHA256_${BZ2_DIST} = a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
 SHA256_${PYTHON_DIST} = 8ecc681ea0600bbfb366f2b173f727b205bb825d93d2f0b286bc4e58d37693da
+SHA256_${PYTHON2_DIST} = a4f05a0720ce0fd92626f0278b6b433eee9a6173ddf2bced7957dfb599a5ece1
 SHA256_${PY3C_DIST} = c7ffc22bc92dded0ca859db53ef3a0b466f89a9f8aad29359c9fe4ff18ebdd20
 SHA256_${JUNIT_DIST} = 36a747ca1e0b86f6ea88055b8723bb87030d627766da6288bf077afdeeb0f75a
 SHA256_${GETTEXT_DIST} = ff942af0e438ced4a8b0ea4b0b6e0d6d657157c5e2364de57baa279c1c125c43
@@ -178,6 +185,7 @@ DISTFILES	= $(DISTDIR)/$(NEON_DIST) \
 		$(DISTDIR)/$(RUBY_DIST) \
 		$(DISTDIR)/$(BZ2_DIST) \
 		$(DISTDIR)/$(PYTHON_DIST) \
+		$(DISTDIR)/$(PYTHON2_DIST) \
 		$(DISTDIR)/$(PY3C_DIST) \
 		$(DISTDIR)/$(JUNIT_DIST) \
 		$(DISTDIR)/$(GETTEXT_DIST)
@@ -202,6 +210,7 @@ LIBMAGIC_URL	= ftp://ftp.astron.com/pub/
 RUBY_URL	= https://cache.ruby-lang.org/pub/ruby/2.4/$(RUBY_DIST)
 BZ2_URL		= https://stsp.name/distfiles/$(BZ2_DIST)
 PYTHON_URL	= https://python.org/ftp/python/$(PYTHON_VER)/$(PYTHON_DIST)
+PYTHON2_URL	= https://python.org/ftp/python/$(PYTHON2_VER)/$(PYTHON2_DIST)
 PY3C_URL	= https://stsp.name/distfiles/py3c-${PY3C_VER}.tar.gz
 JUNIT_URL	= https://stsp.name/distfiles/$(JUNIT_DIST)
 GETTEXT_URL	= https://ftp.gnu.org/pub/gnu/gettext/$(GETTEXT_DIST)
@@ -224,6 +233,7 @@ LIBMAGIC_SRCDIR	= $(SRCDIR)/file-$(LIBMA
 RUBY_SRCDIR	= $(SRCDIR)/ruby-$(RUBY_VER)
 BZ2_SRCDIR	= $(SRCDIR)/bzip2-$(BZ2_VER)
 PYTHON_SRCDIR	= $(SRCDIR)/Python-$(PYTHON_VER)
+PYTHON2_SRCDIR	= $(SRCDIR)/Python-$(PYTHON2_VER)
 PY3C_SRCDIR	= $(SRCDIR)/py3c-$(PY3C_VER)
 GETTEXT_SRCDIR	= $(SRCDIR)/gettext-$(GETTEXT_VER)
 LZ4_SRCDIR	= ${SRCDIR}/lz4-$(LZ4_VER)
@@ -245,6 +255,7 @@ LIBMAGIC_OBJDIR	= $(OBJDIR)/file-$(LIBMA
 RUBY_OBJDIR	= $(OBJDIR)/ruby-$(RUBY_VER)
 BZ2_OBJDIR	= $(OBJDIR)/bzip2-$(BZ2_VER)
 PYTHON_OBJDIR	= $(OBJDIR)/python-$(PYTHON_VER)
+PYTHON2_OBJDIR	= $(OBJDIR)/python-$(PYTHON2_VER)
 PY3C_OBJDIR	= $(OBJDIR)/py3c-$(PY3C_VER)
 GETTEXT_OBJDIR	= $(OBJDIR)/gettext-$(GETTEXT_VER)
 LZ4_OBJDIR	= ${OBJDIR}/lz4-$(LZ4_VER)
@@ -260,10 +271,10 @@ PROFILE_CFLAGS=-pg
 endif
 
 # We need this to make sure some targets below pick up the right libraries
-LD_LIBRARY_PATH=$(PREFIX)/apr/lib:$(PREFIX)/gettext/lib:$(PREFIX)/iconv/lib:$(PREFIX)/bdb/lib:$(PREFIX)/neon/lib:$(PREFIX)/serf/lib:$(PREFIX)/sqlite/lib:$(PREFIX)/cyrus-sasl/lib:$(PREFIX)/iconv/lib:$(PREFIX)/libmagic/lib:$(PREFIX)/ruby/lib:$(PREFIX)/python/lib:$(PREFIX)/svn-$(WC)/lib
+LD_LIBRARY_PATH=$(PREFIX)/apr/lib:$(PREFIX)/gettext/lib:$(PREFIX)/iconv/lib:$(PREFIX)/bdb/lib:$(PREFIX)/neon/lib:$(PREFIX)/serf/lib:$(PREFIX)/sqlite/lib:$(PREFIX)/cyrus-sasl/lib:$(PREFIX)/iconv/lib:$(PREFIX)/libmagic/lib:$(PREFIX)/ruby/lib:$(PREFIX)/svn-$(WC)/lib
 
 # We need this to make sure some targets below pick up the right pkg-config files
-PKG_CONFIG_PATH=$(PREFIX)/apr/lib/pkgconfig:$(PREFIX)/neon/lib/pkgconfig:$(PREFIX)/serf/lib/pkgconfig:$(PREFIX)/sqlite/lib/pkgconfig:$(PREFIX)/ruby/lib/pkgconfig:$(PREFIX)/python/lib/pkgconfig:$(PREFIX)/lz4/lib/pkgconfig
+PKG_CONFIG_PATH=$(PREFIX)/apr/lib/pkgconfig:$(PREFIX)/neon/lib/pkgconfig:$(PREFIX)/serf/lib/pkgconfig:$(PREFIX)/sqlite/lib/pkgconfig:$(PREFIX)/ruby/lib/pkgconfig:$(PREFIX)/lz4/lib/pkgconfig
 
 
 #######################################################################
@@ -275,20 +286,20 @@ PKG_CONFIG_PATH=$(PREFIX)/apr/lib/pkgcon
 all: dirs-create bdb-install apr-install iconv-install apr-util-install \
 	pcre-install httpd-install neon-install serf-install serf-old-install \
 	sqlite-install cyrus-sasl-install libmagic-install \
-	ruby-install bz2-install python-install py3c-retrieve gettext-install \
-	lz4-install svn-install svn-bindings-install
+	ruby-install bz2-install python-install python2-install py3c-retrieve \
+	gettext-install lz4-install svn-install svn-bindings-install
 
 # Use these to start a build from the beginning.
 reset: dirs-reset bdb-reset apr-reset iconv-reset apr-util-reset \
 	pcre-reset httpd-reset neon-reset serf-reset serf-old-reset \
 	sqlite-reset cyrus-sasl-reset libmagic-reset ruby-reset python-reset \
-	bz2-reset gettext-reset lz4-reset svn-reset
+	python2-reset bz2-reset gettext-reset lz4-reset svn-reset
 
 # Use to save disk space.
 clean: bdb-clean apr-clean iconv-clean apr-util-clean pcre-clean httpd-clean \
 	neon-clean serf-clean serf-old-clean sqlite-clean cyrus-sasl-clean \
-	libmagic-clean ruby-clean bz2-clean python-clean gettext-clean \
-	lz4-clean svn-clean
+	libmagic-clean ruby-clean bz2-clean python-clean python2-clean \
+	gettext-clean lz4-clean svn-clean
 
 # Nukes everything (including installed binaries!)
 # Use this to start ALL OVER AGAIN! Use with caution!
@@ -1392,7 +1403,7 @@ $(PYTHON_OBJDIR)/.configured: $(PYTHON_O
 		CC=$(CC) CXX=$(CXX) \
 		CPPFLAGS="-I$(PREFIX)/bz2/include" \
 		LDFLAGS="-Wl,-rpath=$(PREFIX)/python/lib -L$(PREFIX)/bz2/lib" \
-		LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH" \
+		LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$(PREFIX)/python/lib:$$LD_LIBRARY_PATH" \
 		PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \
 		$(PYTHON_SRCDIR)/configure \
 		--prefix=$(PREFIX)/python \
@@ -1407,7 +1418,7 @@ $(PYTHON_OBJDIR)/.configured: $(PYTHON_O
 $(PYTHON_OBJDIR)/.compiled: $(PYTHON_OBJDIR)/.configured
 	(cd $(PYTHON_OBJDIR) && \
 		env MAKEFLAGS= \
-		LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH" \
+		LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$(PREFIX)/python/lib:$$LD_LIBRARY_PATH" \
 		make -j${MAKE_JOBS})
 	touch $@
 
@@ -1415,12 +1426,99 @@ $(PYTHON_OBJDIR)/.compiled: $(PYTHON_OBJ
 $(PYTHON_OBJDIR)/.installed: $(PYTHON_OBJDIR)/.compiled
 	(cd $(PYTHON_OBJDIR) && \
 		env MAKEFLAGS= \
-		LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH" \
+		LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$(PREFIX)/python/lib:$$LD_LIBRARY_PATH" \
 		make install)
 	ln -sf $(PREFIX)/python/bin/python3 $(PREFIX)/python/bin/python
 	touch $@
 
 #######################################################################
+# python 2
+#######################################################################
+
+python2-retrieve:	$(PYTHON2_OBJDIR)/.retrieved
+python2-configure:	$(PYTHON2_OBJDIR)/.configured
+python2-compile:	$(PYTHON2_OBJDIR)/.compiled
+python2-install:	$(PYTHON2_OBJDIR)/.installed
+python2-reset:
+	$(foreach f, .retrieved .configured .compiled .installed, \
+		rm -f $(PYTHON2_OBJDIR)/$(f);)
+
+python2-clean:
+	-(cd $(PYTHON2_OBJDIR) && env MAKEFLAGS= make distclean)
+
+# fetch distfile for python 2
+$(DISTDIR)/$(PYTHON2_DIST):
+	cd $(DISTDIR) && $(FETCH_CMD) $(PYTHON2_URL)
+
+# https://bugs.python.org/issue12560
+$(DISTDIR)/python-issue12560.patch:
+	cd $(DISTDIR) && $(FETCH_CMD) -O "$@" \
+		https://hg.python.org/cpython/raw-rev/32cc37a89b58
+
+# retrieve python 2
+#
+$(PYTHON2_OBJDIR)/.retrieved: $(DISTDIR)/$(PYTHON2_DIST) $(DISTDIR)/python-issue12560.patch
+	$(call do_check_sha256,$(PYTHON2_DIST))
+	[ -d $(PYTHON2_OBJDIR) ] || mkdir -p $(PYTHON2_OBJDIR)
+	tar -C $(SRCDIR) -zxf $(DISTDIR)/$(PYTHON2_DIST)
+	# Make setup.py use our own dependencies instead of system ones
+	sed -e "s#sqlite_inc_paths = \[ '/usr/include',#sqlite_inc_paths = [ '$(PREFIX)/sqlite/include',#" \
+		-e "s#'/usr/include/db4'#'$(PREFIX)/bdb/include'#" \
+		-e "s|\(add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')\)|pass #\1|" \
+		-e "s|\(add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')\)|pass #\1|" \
+		-e "s#find_library_file(lib_dirs, 'bz2'#find_library_file(['$(PREFIX)/bz2/lib'] + lib_dirs, 'bz2'#" \
+		< $(PYTHON2_SRCDIR)/setup.py \
+		> $(PYTHON2_SRCDIR)/setup.py.patched
+	mv $(PYTHON2_SRCDIR)/setup.py.patched $(PYTHON2_SRCDIR)/setup.py
+	chmod +x $(PYTHON2_SRCDIR)/setup.py
+	cd $(PYTHON2_SRCDIR) && patch -p1 < $(DISTDIR)/python-issue12560.patch
+	mkdir -p $(PYTHON2_OBJDIR)/bin
+	ln -s "`which python2`" $(PYTHON2_OBJDIR)/bin/python
+	touch $@
+
+# configure python 2
+ifdef PROFILE
+PYTHON2_PROFILING=--enable-profiling
+endif
+$(PYTHON2_OBJDIR)/.configured: $(PYTHON2_OBJDIR)/.retrieved \
+	$(BZ2_OBJDIR)/.installed
+	cd $(PYTHON2_OBJDIR) \
+		&& env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`" \
+		CC=$(CC) CXX=$(CXX) \
+		CPPFLAGS="-I$(PREFIX)/bz2/include" \
+		LDFLAGS="-Wl,-rpath=$(PREFIX)/python2/lib -L$(PREFIX)/bz2/lib" \
+		LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$(PREFIX)/python2/lib:$$LD_LIBRARY_PATH" \
+		PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \
+		PATH=$(PYTHON2_OBJDIR)/bin:$$PATH \
+		$(PYTHON2_SRCDIR)/configure \
+		--prefix=$(PREFIX)/python2 \
+		--enable-shared \
+		--with-system-expat \
+		--with-dbmliborder=bdb \
+		--without-pymalloc \
+		$(PYTHON2_PROFILING)
+	touch $@
+
+# compile python 2
+$(PYTHON2_OBJDIR)/.compiled: $(PYTHON2_OBJDIR)/.configured
+	(cd $(PYTHON2_OBJDIR) && \
+		env MAKEFLAGS= \
+		LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$(PREFIX)/python2/lib:$$LD_LIBRARY_PATH" \
+		PATH=$(PYTHON2_OBJDIR)/bin:$$PATH \
+		make -j${MAKE_JOBS})
+	touch $@
+
+# install python 2
+$(PYTHON2_OBJDIR)/.installed: $(PYTHON2_OBJDIR)/.compiled
+	(cd $(PYTHON2_OBJDIR) && \
+		env MAKEFLAGS= \
+		LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$(PREFIX)/python2/lib:$$LD_LIBRARY_PATH" \
+		PATH=$(PYTHON2_OBJDIR)/bin:$$PATH \
+		make install)
+	ln -sf $(PREFIX)/python2/bin/python2 $(PREFIX)/python2/bin/python
+	touch $@
+
+#######################################################################
 # py3c
 #######################################################################
 
@@ -1628,7 +1726,7 @@ DISABLE_NEON_VERSION_CHECK=--disable-neo
 W_NO_SYSTEM_HEADERS=-Wno-system-headers
 NEON_FLAG=--with-neon="$(PREFIX)/neon"
 JAVAHL_CHECK_TARGET=check-javahl
-else ifeq ($(BRANCH_MAJOR), $(filter $(BRANCH_MAJOR), 1.8 1.9))
+else ifeq ($(BRANCH_MAJOR), $(filter 1.8 1.9, $(BRANCH_MAJOR)))
 BDB_FLAG=db.h:$(PREFIX)/bdb/include:$(PREFIX)/bdb/lib:db-$(BDB_MAJOR_VER)
 SERF_FLAG=--with-serf="$(PREFIX)/serf"
 # serf >= 1.3.0 is built with scons and no longer sets up rpath linker flags,
@@ -1639,7 +1737,7 @@ MOD_AUTHZ_SVN=modules/svn-$(WC)/mod_auth
 MOD_DONTDOTHAT=modules/svn-$(WC)/mod_dontdothat.so
 LIBMAGIC_FLAG=--with-libmagic=$(PREFIX)/libmagic
 JAVAHL_CHECK_TARGET=check-all-javahl
-else # 1.10
+else # 1.10, 1.11, 1.12, 1.13, 1.14, trunk
 BDB_FLAG=db.h:$(PREFIX)/bdb/include:$(PREFIX)/bdb/lib:db-$(BDB_MAJOR_VER)
 SERF_FLAG=--with-serf="$(PREFIX)/serf"
 # serf >= 1.3.0 is built with scons and no longer sets up rpath linker flags,
@@ -1697,11 +1795,11 @@ $(SVN_OBJDIR)/.configured: $(SVN_OBJDIR)
 			CC=$(CC) CXX=$(CXX) \
 			CFLAGS="-I$(PREFIX)/gettext/include -DAPR_POOL_DEBUG" \
 			CXXFLAGS="-I$(PREFIX)/gettext/include -DAPR_POOL_DEBUG" \
-			LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH" \
-			PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \
-			PYTHON=$(PREFIX)/python/bin/python3 \
+			LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$(PREFIX)/$(PYTHON)/lib:$$LD_LIBRARY_PATH" \
+			PKG_CONFIG_PATH=$(PKG_CONFIG_PATH):$(PREFIX)/$(PYTHON)/lib/pkgconfig \
+			PYTHON=$(PREFIX)/$(PYTHON)/bin/python \
 			GREP="`which grep`" \
-			PATH=$(PREFIX)/ruby/bin:$(PREFIX)/python/bin:$(PREFIX)/gettext/bin:$$PATH \
+			PATH=$(PREFIX)/ruby/bin:$(PREFIX)/$(PYTHON)/bin:$(PREFIX)/gettext/bin:$$PATH \
 			$(SVN_SRCDIR)/configure \
 			--enable-maintainer-mode \
 			--prefix="$(SVN_PREFIX)" \