# vim: noexpandtab tabstop=8 shiftwidth=8 syntax=make # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # WARNING: This may or may not work on your system. This Makefile is # an example, rather than a ready-made universal solution. PERL ?= yes ENABLE_PERL_BINDINGS = $(PERL) THREADING ?= yes ifeq ($(THREADING),yes) JAVA ?= yes else JAVA ?= no endif ENABLE_JAVA_BINDINGS = $(JAVA) USE_APR_ICONV ?= no # set to yes to use APR iconv instead of GNU iconv PARALLEL ?= 1 CLEANUP ?= 1 EXCLUSIVE_WC_LOCKS ?= 1 USE_HTTPV1 ?= no USE_AUTHZ_SHORT_CIRCUIT ?= no RAMDISK ?= /ramdisk MAKE_JOBS ?= 4 # available backends: fsfs fsx bdb SVN_CHECK_FS_BACKENDS ?= fsfs PWD = $(shell pwd) UNAME = $(shell uname) RUBY = $(shell which ruby 2>/dev/null) ifeq ($(RUBY),) RUBY = $(shell which ruby27 2>/dev/null) ifeq ($(RUBY),) RUBY = $(shell which ruby26 2>/dev/null) ifeq ($(RUBY),) RUBY = $(shell which ruby25 2>/dev/null) ifeq ($(RUBY),) RUBY = $(shell which ruby24 2>/dev/null) ifeq ($(RUBY),) RUBY = $(shell which ruby23 2>/dev/null) ifeq ($(RUBY),) RUBY = $(shell which ruby22 2>/dev/null) ifeq ($(RUBY),) RUBY = $(shell which ruby21 2>/dev/null) ifeq ($(RUBY),) RUBY = $(shell which ruby20 2>/dev/null) ifeq ($(RUBY),) RUBY = $(shell which ruby19 2>/dev/null) ifeq ($(RUBY),) RUBY = $(shell which ruby18) endif # 1.8 endif # 1.9 endif # 2.0 endif # 2.1 endif # 2.2 endif # 2.3 endif # 2.4 endif # 2.5 endif # 2.6 endif # 2.7 ifeq ($(UNAME),OpenBSD) # Pick the correct base compiler (ie. clang rather than ancient gcc 4.2.1) CC = cc CXX = c++ endif TAG ?= none ifeq ($(TAG),none) BRANCH ?= trunk else BRANCH = $(TAG) endif WC ?= $(BRANCH) 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 = python3 endif SVN_REL_WC = svn-$(WC) SVN_WC = $(PWD)/$(SVN_REL_WC) PREFIX = $(PWD)/prefix SVN_PREFIX = $(PREFIX)/svn-$(WC) DISTDIR = $(PWD)/distfiles SRCDIR = $(PWD)/src OBJDIR = $(PWD)/objdir # Default dependency versions BDB_MAJOR_VER = 4.7 BDB_VER = $(BDB_MAJOR_VER).25 APR_VER = 1.7.5 APR_ICONV_VER = 1.2.1 GNU_ICONV_VER = 1.15 APR_UTIL_VER = 1.6.1 PCRE_VER = 8.41 HTTPD_VER = 2.4.37 NEON_VER = 0.32.5 SERF_VER = 1.3.10 CYRUS_SASL_VER = 2.1.28 SQLITE_VER = 3390400 LIBMAGIC_VER = 5.30 RUBY_MAJOR_VER = 2.7 RUBY_VER = $(RUBY_MAJOR_VER).4 BZ2_VER = 1.0.6 PYTHON_VER = 3.11.10 PYTHON2_VER = 2.7.13 PY3C_VER = 1.1 JUNIT_VER = 4.10 GETTEXT_VER = 0.19.8.1 LZ4_VER = 1.7.5 ifeq ($(BRANCH_MAJOR), $(filter 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13, $(BRANCH_MAJOR))) SWIG_VER = 3.0.12 else SWIG_VER = endif # Get local dependency versions include Makefile.local BDB_DIST = db-$(BDB_VER).tar.gz APR_ICONV_DIST = apr-iconv-$(APR_ICONV_VER).tar.gz GNU_ICONV_DIST = libiconv-$(GNU_ICONV_VER).tar.gz NEON_DIST = neon-$(NEON_VER).tar.gz SQLITE_DIST = sqlite-autoconf-$(SQLITE_VER).tar.gz CYRUS_SASL_DIST = cyrus-sasl-$(CYRUS_SASL_VER).tar.gz PCRE_DIST = pcre-$(PCRE_VER).tar.gz HTTPD_DIST = httpd-$(HTTPD_VER).tar.gz LIBMAGIC_DIST = file-$(LIBMAGIC_VER).tar.gz 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 LZ4_DIST = lz4-$(LZ4_VER).tar.gz SWIG_DIST = swig-$(SWIG_VER).tar.gz SHA256_${BDB_DIST} = f14fd96dd38915a1d63dcb94a63fbb8092334ceba6b5060760427096f631263e SHA256_${APR_ICONV_DIST} = 19381959d50c4a5f3b9c84d594a5f9ffb3809786919b3058281f4c87e1f4b245 SHA256_${GNU_ICONV_DIST} = ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178 SHA256_${PCRE_DIST} = 244838e1f1d14f7e2fa7681b857b3a8566b74215f28133f14a8f5e59241b682c SHA256_${HTTPD_DIST} = aa97a834a32d51974be8d8a013b561e28d327387cb1da2c3c2762acd0146aabd SHA256_${NEON_DIST} = 4872e12f802572dedd4b02f870065814b2d5141f7dbdaf708eedab826b51a58a SHA256_${CYRUS_SASL_DIST} = 7ccfc6abd01ed67c1a0924b353e526f1b766b21f42d4562ee635a8ebfc5bb38c SHA256_${SQLITE_DIST} = f31d445b48e67e284cf206717cc170ab63cbe4fd7f79a82793b772285e78fdbb SHA256_${LIBMAGIC_DIST} = 694c2432e5240187524c9e7cf1ec6acc77b47a0e19554d34c14773e43dbbf214 SHA256_ruby-2.7.4.tar.gz = 3043099089608859fc8cce7f9fdccaa1f53a462457e3838ec3b25a7d609fbc5b SHA256_ruby-2.7.7.tar.gz = e10127db691d7ff36402cfe88f418c8d025a3f1eea92044b162dd72f0b8c7b90 SHA256_ruby-2.7.8.tar.gz = c2dab63cbc8f2a05526108ad419efa63a67ed4074dbbcf9fc2b1ca664cb45ba0 SHA256_ruby-3.0.7.tar.gz = 2a3411977f2850431136b0fab8ad53af09fb74df2ee2f4fb7f11b378fe034388 SHA256_ruby-3.1.6.tar.gz = 0d0dafb859e76763432571a3109d1537d976266be3083445651dc68deed25c22 SHA256_${BZ2_DIST} = a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd SHA256_${PYTHON_DIST} = 92f2faf242681bfa406d53a51e17d42c5373affe23a130cd9697e132ef574706 SHA256_${PYTHON2_DIST} = a4f05a0720ce0fd92626f0278b6b433eee9a6173ddf2bced7957dfb599a5ece1 SHA256_${PY3C_DIST} = c7ffc22bc92dded0ca859db53ef3a0b466f89a9f8aad29359c9fe4ff18ebdd20 SHA256_${JUNIT_DIST} = 36a747ca1e0b86f6ea88055b8723bb87030d627766da6288bf077afdeeb0f75a SHA256_${GETTEXT_DIST} = ff942af0e438ced4a8b0ea4b0b6e0d6d657157c5e2364de57baa279c1c125c43 SHA256_${LZ4_DIST} = 0190cacd63022ccb86f44fa5041dc6c3804407ad61550ca21c382827319e7e7e SHA256_swig-3.0.12.tar.gz = 7cf9f447ae7ed1c51722efc45e7f14418d15d7a1e143ac9f09a668999f4fc94d SHA256_swig-4.2.1.tar.gz = fa045354e2d048b2cddc69579e4256245d4676894858fcf0bab2290ecf59b7d8 SHA256_swig-4.3.0.tar.gz = f7203ef796f61af986c70c05816236cbd0d31b7aa9631e5ab53020ab7804aa9e define do_check_sha256 if [ -x /bin/sha256 ]; then \ (cd $(DISTDIR) && \ echo "SHA256 (${1}) = ${SHA256_${1}}" | /bin/sha256 -C /dev/stdin "${1}"); \ elif [ -x /usr/bin/sha256sum ]; then \ (cd $(DISTDIR) && \ echo "${SHA256_${1}} ${1}" | /usr/bin/sha256sum --quiet --check); \ elif [ -x /sbin/sha256sum ]; then \ (cd $(DISTDIR) && \ echo "${SHA256_${1}} ${1}" | /sbin/sha256sum --quiet --check /dev/stdin); \ elif [ -x /usr/bin/shasum ]; then \ echo "${SHA256_${1}} ${1}"; \ (cd $(DISTDIR) && \ echo "${SHA256_${1}} ${1}" | /usr/bin/shasum -a 256 -c /dev/stdin ); \ else \ echo "Error: No tool found to verify checksum"; \ false; \ fi endef DISTFILES = $(DISTDIR)/$(NEON_DIST) \ $(DISTDIR)/$(SERF_DIST) \ $(DISTDIR)/$(SQLITE_DIST) \ $(DISTDIR)/$(PCRE_DIST) \ $(DISTDIR)/$(HTTPD_DIST) \ $(DISTDIR)/$(APR_ICONV_DIST) \ $(DISTDIR)/$(GNU_ICONV_DIST) \ $(DISTDIR)/$(CYRUS_SASL_DIST) \ $(DISTDIR)/$(LIBMAGIC_DIST) \ $(DISTDIR)/$(RUBY_DIST) \ $(DISTDIR)/$(BZ2_DIST) \ $(DISTDIR)/$(PYTHON_DIST) \ $(DISTDIR)/$(PYTHON2_DIST) \ $(DISTDIR)/$(PY3C_DIST) \ $(DISTDIR)/$(JUNIT_DIST) \ $(DISTDIR)/$(GETTEXT_DIST) \ $(DISTDIR)/$(SWIG_DIST) FETCH_CMD = wget -c SUBVERSION_REPOS_URL = https://svn.apache.org/repos/asf/subversion BDB_URL = http://download.oracle.com/berkeley-db/$(BDB_DIST) APR_URL = https://svn.apache.org/repos/asf/apr/apr APR_ICONV_URL = https://archive.apache.org/dist/apr/$(APR_ICONV_DIST) GNU_ICONV_URL = https://ftp.gnu.org/pub/gnu/libiconv/$(GNU_ICONV_DIST) APR_UTIL_URL = https://svn.apache.org/repos/asf/apr/apr-util PCRE_URL = https://downloads.sourceforge.net/project/pcre/pcre/$(PCRE_VER)/$(PCRE_DIST) HTTPD_URL = https://archive.apache.org/dist/httpd/$(HTTPD_DIST) NEON_URL = https://notroj.github.io/neon/$(NEON_DIST) SERF_URL = https://svn.apache.org/repos/asf/serf/tags/$(SERF_VER) SQLITE_URL = https://www.sqlite.org/2022/$(SQLITE_DIST) CYRUS_SASL_URL = https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-${CYRUS_SASL_VER}/$(CYRUS_SASL_DIST) LIBMAGIC_URL = ftp://ftp.astron.com/pub/file/$(LIBMAGIC_DIST) RUBY_URL = https://cache.ruby-lang.org/pub/ruby/$(RUBY_MAJOR_VER)/$(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) LZ4_URL = https://github.com/lz4/lz4/archive/v$(LZ4_VER).tar.gz SWIG_URL = https://downloads.sourceforge.net/sourceforge/swig/swig-$(SWIG_VER).tar.gz BDB_SRCDIR = $(SRCDIR)/db-$(BDB_VER) APR_SRCDIR = $(SRCDIR)/apr-$(APR_VER) APR_ICONV_SRCDIR = $(SRCDIR)/apr-iconv-$(APR_ICONV_VER) GNU_ICONV_SRCDIR = $(SRCDIR)/libiconv-$(GNU_ICONV_VER) APR_UTIL_SRCDIR = $(SRCDIR)/apr-util-$(APR_UTIL_VER) PCRE_SRCDIR = $(SRCDIR)/pcre-$(PCRE_VER) HTTPD_SRCDIR = $(SRCDIR)/httpd-$(HTTPD_VER) NEON_SRCDIR = $(SRCDIR)/neon-$(NEON_VER) SERF_SRCDIR = $(SRCDIR)/serf-$(SERF_VER) SQLITE_SRCDIR = $(SRCDIR)/sqlite-autoconf-$(SQLITE_VER) CYRUS_SASL_SRCDIR = $(SRCDIR)/cyrus-sasl-$(CYRUS_SASL_VER) LIBMAGIC_SRCDIR = $(SRCDIR)/file-$(LIBMAGIC_VER) 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) SWIG_SRCDIR = ${SRCDIR}/swig-$(SWIG_VER) SVN_SRCDIR = $(SVN_WC) BDB_OBJDIR = $(OBJDIR)/db-$(BDB_VER) APR_OBJDIR = $(OBJDIR)/apr-$(APR_VER) APR_ICONV_OBJDIR = $(OBJDIR)/apr-iconv-$(APR_ICONV_VER) GNU_ICONV_OBJDIR = $(OBJDIR)/libiconv-$(GNU_ICONV_VER) APR_UTIL_OBJDIR = $(OBJDIR)/apr-util-$(APR_UTIL_VER) PCRE_OBJDIR = $(OBJDIR)/pcre-$(PCRE_VER) HTTPD_OBJDIR = $(OBJDIR)/httpd-$(HTTPD_VER) NEON_OBJDIR = $(OBJDIR)/neon-$(NEON_VER) SERF_OBJDIR = $(OBJDIR)/serf-$(SERF_VER) SQLITE_OBJDIR = $(OBJDIR)/sqlite-$(SQLITE_VER) CYRUS_SASL_OBJDIR = $(OBJDIR)/cyrus-sasl-$(CYRUS_SASL_VER) LIBMAGIC_OBJDIR = $(OBJDIR)/file-$(LIBMAGIC_VER) 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) SWIG_OBJDIR = ${OBJDIR}/swig-$(SWIG_VER) SVN_OBJDIR = $(OBJDIR)/$(SVN_REL_WC) # Tweak this for out-of-tree builds. Note that running individual # tests in the test suite won't work conveniently with out-of-tree # builds! svn_builddir ?=$(SVN_WC) ifdef PROFILE 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)/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)/lz4/lib/pkgconfig ####################################################################### # Main targets. ####################################################################### .PHONY: all reset clean nuke fetch all: dirs-create bdb-install apr-install iconv-install apr-util-install \ pcre-install httpd-install neon-install serf-install \ sqlite-install cyrus-sasl-install libmagic-install \ ruby-install bz2-install python-install python2-install py3c-retrieve \ gettext-install lz4-install swig-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 \ sqlite-reset cyrus-sasl-reset libmagic-reset ruby-reset python-reset \ python2-reset bz2-reset gettext-reset lz4-reset swig-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 sqlite-clean cyrus-sasl-clean \ libmagic-clean ruby-clean bz2-clean python-clean python2-clean \ gettext-clean lz4-clean swig-clean svn-clean # Nukes everything (including installed binaries!) # Use this to start ALL OVER AGAIN! Use with caution! nuke: @echo @echo "I will now remove the following directories PERMANENTLY:" @echo @echo " $(SRCDIR)" @echo " $(OBJDIR)" @echo " $(PREFIX)" @echo @echo -n 'Do you want me to continue? ([no]/yes): ' @read ANSWER ; \ case $$ANSWER in \ yes) echo "You said $$ANSWER. I will continue."; \ echo rm -rf $(SRCDIR) $(OBJDIR) $(PREFIX); \ rm -rf $(SRCDIR) $(OBJDIR) $(PREFIX); \ $(MAKE) reset; \ ;; \ "") echo "You said no."; \ ;; \ *) echo "You said $$ANSWER."; \ ;; \ esac fetch: $(DISTFILES) ####################################################################### # Local version override file ####################################################################### Makefile.local: cp unix-build/Makefile.local . ####################################################################### # directories ####################################################################### dirs-create: $(PWD)/.dirs-created dirs-reset: rm -f $(PWD)/.dirs-created $(PWD)/.dirs-created: $(foreach d, $(PREFIX) $(DISTDIR) $(SRCDIR) $(OBJDIR), \ [ -d $(d) ] || mkdir -p $(d);) touch $@ ####################################################################### # bdb ####################################################################### bdb-retrieve: $(BDB_OBJDIR)/.retrieved bdb-configure: $(BDB_OBJDIR)/.configured bdb-compile: $(BDB_OBJDIR)/.compiled bdb-install: $(BDB_OBJDIR)/.installed bdb-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(BDB_OBJDIR)/$(f);) bdb-clean: -(cd $(BDB_SRCDIR)/build_unix/ && env MAKEFLAGS= make clean) # fetch distfile for bdb $(DISTDIR)/$(BDB_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(BDB_URL) # retrieve bdb $(BDB_OBJDIR)/.retrieved: $(DISTDIR)/$(BDB_DIST) $(call do_check_sha256,$(BDB_DIST)) [ -d $(BDB_OBJDIR) ] || mkdir -p $(BDB_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(BDB_DIST) touch $@ # configure bdb $(BDB_OBJDIR)/.configured: $(BDB_OBJDIR)/.retrieved cd $(BDB_SRCDIR)/build_unix \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`" \ CC=$(CC) CXX=$(CXX) \ ../dist/configure \ --prefix=$(PREFIX)/bdb \ --enable-debug touch $@ # compile bdb $(BDB_OBJDIR)/.compiled: $(BDB_OBJDIR)/.configured (cd $(BDB_SRCDIR)/build_unix && env MAKEFLAGS= make -j${MAKE_JOBS}) touch $@ # install bdb $(BDB_OBJDIR)/.installed: $(BDB_OBJDIR)/.compiled (cd $(BDB_SRCDIR)/build_unix && env MAKEFLAGS= make install) touch $@ ####################################################################### # apr ####################################################################### apr-retrieve: $(APR_OBJDIR)/.retrieved apr-configure: $(APR_OBJDIR)/.configured apr-compile: $(APR_OBJDIR)/.compiled apr-install: $(APR_OBJDIR)/.installed apr-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(APR_OBJDIR)/$(f);) apr-clean: -(cd $(APR_OBJDIR) && env MAKEFLAGS= make clean) # retrieve apr if not present yet $(APR_OBJDIR)/.retrieved: [ -d $(APR_OBJDIR) ] || mkdir -p $(APR_OBJDIR) if [ ! -d $(APR_SRCDIR) ]; then \ svn export $(APR_URL)/tags/$(APR_VER)/ $(APR_SRCDIR); \ fi touch $@ ifeq ($(THREADING),yes) THREADS_FLAG=--enable-threads else THREADS_FLAG=--disable-threads endif ifdef POOL_DEBUG POOL_DEBUG_FLAG=--enable-pool-debug=all else # Map apr_palloc()/apr_pool_{clear,destroy}() to malloc()/free(). # This also puts poison bytes into freed memory to help detect use after free. POOL_DEBUG_FLAG=--enable-pool-debug=yes endif # configure apr $(APR_OBJDIR)/.configured: $(APR_OBJDIR)/.retrieved $(BDB_OBJDIR)/.installed cd $(APR_SRCDIR) && ./buildconf cd $(APR_OBJDIR) \ && env CFLAGS="-O0 -g $(PROFILE_CFLAGS)" GREP="`which grep`" \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ CC=$(CC) CXX=$(CXX) \ $(APR_SRCDIR)/configure \ --prefix=$(PREFIX)/apr \ --enable-maintainer-mode \ $(THREADS_FLAG) \ $(POOL_DEBUG_FLAG) touch $@ # compile apr $(APR_OBJDIR)/.compiled: $(APR_OBJDIR)/.configured (cd $(APR_OBJDIR) && env MAKEFLAGS= make -j${MAKE_JOBS}) touch $@ # install apr $(APR_OBJDIR)/.installed: $(APR_OBJDIR)/.compiled (cd $(APR_OBJDIR) && env MAKEFLAGS= make install) touch $@ ####################################################################### # apr-iconv ####################################################################### apr-iconv-retrieve: $(APR_ICONV_OBJDIR)/.retrieved apr-iconv-configure: $(APR_ICONV_OBJDIR)/.configured apr-iconv-compile: $(APR_ICONV_OBJDIR)/.compiled apr-iconv-install: $(APR_ICONV_OBJDIR)/.installed apr-iconv-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(APR_ICONV_OBJDIR)/$(f);) apr-iconv-clean: -(cd $(APR_ICONV_OBJDIR) && env MAKEFLAGS= make clean) # fetch distfile for apr-iconv $(DISTDIR)/$(APR_ICONV_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(APR_ICONV_URL) # retrieve apr-iconv $(APR_ICONV_OBJDIR)/.retrieved: $(DISTDIR)/$(APR_ICONV_DIST) $(call do_check_sha256,$(APR_ICONV_DIST)) [ -d $(APR_ICONV_OBJDIR) ] || mkdir -p $(APR_ICONV_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(APR_ICONV_DIST) touch $@ # configure apr-iconv $(APR_ICONV_OBJDIR)/.configured: $(APR_ICONV_OBJDIR)/.retrieved \ $(APR_OBJDIR)/.installed cd $(APR_ICONV_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS) -DAPR_POOL_DEBUG" \ CC=$(CC) CXX=$(CXX) \ GREP="`which grep`" \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(APR_ICONV_SRCDIR)/configure \ --prefix=$(PREFIX)/apr \ --with-apr=$(PREFIX)/apr touch $@ # compile apr-iconv $(APR_ICONV_OBJDIR)/.compiled: $(APR_ICONV_OBJDIR)/.configured (cd $(APR_ICONV_OBJDIR) \ && env MAKEFLAGS= make CPPFLAGS="-D_OSD_POSIX" CFLAGS="-g -O0 $(PROFILE_CFLAGS)" -j${MAKE_JOBS}) touch $@ # install apr-iconv $(APR_ICONV_OBJDIR)/.installed: $(APR_ICONV_OBJDIR)/.compiled (cd $(APR_ICONV_OBJDIR) && env MAKEFLAGS= make install) touch $@ ####################################################################### # gnu-iconv ####################################################################### gnu-iconv-retrieve: $(GNU_ICONV_OBJDIR)/.retrieved gnu-iconv-configure: $(GNU_ICONV_OBJDIR)/.configured gnu-iconv-compile: $(GNU_ICONV_OBJDIR)/.compiled gnu-iconv-install: $(GNU_ICONV_OBJDIR)/.installed gnu-iconv-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(GNU_ICONV_OBJDIR)/$(f);) gnu-iconv-clean: -(cd $(GNU_ICONV_OBJDIR) && env MAKEFLAGS= make clean) rm -f $(GNU_ICONV_OBJDIR)/lib_encodings.def.diff rm -f $(GNU_ICONV_OBJDIR)/lib_aliases.gperf.diff # fetch distfile for gnu-iconv $(DISTDIR)/$(GNU_ICONV_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(GNU_ICONV_URL) $(GNU_ICONV_OBJDIR)/lib_encodings.def.diff: mkdir -p $(dir $@) echo > $@.tmp '--- lib/encodings.def.orig Wed Oct 24 23:41:41 2007' echo >>$@.tmp '+++ lib/encodings.def Wed Oct 24 23:43:47 2007' echo >>$@.tmp '@@ -37,6 +37,7 @@' echo >>$@.tmp ' ' echo >>$@.tmp ' ' echo >>$@.tmp ' DEFENCODING(( "US-ASCII", /* IANA */' echo >>$@.tmp '+ "646",' echo >>$@.tmp ' "ASCII", /* IANA, JDK 1.1 */' echo >>$@.tmp ' "ISO646-US", /* IANA */' echo >>$@.tmp ' "ISO_646.IRV:1991", /* IANA */' mv -f $@.tmp $@ $(GNU_ICONV_OBJDIR)/lib_aliases.gperf.diff: mkdir -p $(dir $@) echo > $@.tmp '--- lib/aliases.gperf.orig Wed Oct 24 23:41:32 2007' echo >>$@.tmp '+++ lib/aliases.gperf Wed Oct 24 23:47:38 2007' echo >>$@.tmp '@@ -10,6 +10,7 @@ struct alias { int name; unsigned int encoding_index; ' echo >>$@.tmp ' %pic' echo >>$@.tmp ' %%' echo >>$@.tmp ' US-ASCII, ei_ascii' echo >>$@.tmp '+646, ei_ascii' echo >>$@.tmp ' ASCII, ei_ascii' echo >>$@.tmp ' ISO646-US, ei_ascii' echo >>$@.tmp ' ISO_646.IRV:1991, ei_ascii' mv -f $@.tmp $@ # retrieve gnu-iconv # Add 646 as an alias for ASCII to fix prop_test 22 on OpenBSD $(GNU_ICONV_OBJDIR)/.retrieved: $(DISTDIR)/$(GNU_ICONV_DIST) \ $(GNU_ICONV_OBJDIR)/lib_encodings.def.diff \ $(GNU_ICONV_OBJDIR)/lib_aliases.gperf.diff $(call do_check_sha256,$(GNU_ICONV_DIST)) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(GNU_ICONV_DIST) cd $(SRCDIR)/libiconv-$(GNU_ICONV_VER) && \ patch -p0 < $(GNU_ICONV_OBJDIR)/lib_encodings.def.diff && \ patch -p0 < $(GNU_ICONV_OBJDIR)/lib_aliases.gperf.diff cd $(SRCDIR)/libiconv-${GNU_ICONV_VER} && \ sed -i 's/gcc/${CC}/' Makefile.devel touch $@ # configure gnu-iconv $(GNU_ICONV_OBJDIR)/.configured: $(GNU_ICONV_OBJDIR)/.retrieved cd $(SRCDIR)/libiconv-${GNU_ICONV_VER} && \ ${MAKE} -f Makefile.devel lib/aliases.h cd $(GNU_ICONV_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`"\ CC=$(CC) CXX=$(CXX) \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(GNU_ICONV_SRCDIR)/configure \ --prefix=$(PREFIX)/iconv \ --enable-extra-encodings touch $@ # compile gnu-iconv $(GNU_ICONV_OBJDIR)/.compiled: $(GNU_ICONV_OBJDIR)/.configured (cd $(GNU_ICONV_OBJDIR) && env MAKEFLAGS= make -j${MAKE_JOBS}) touch $@ # install gnu-iconv $(GNU_ICONV_OBJDIR)/.installed: $(GNU_ICONV_OBJDIR)/.compiled (cd $(GNU_ICONV_OBJDIR) && env MAKEFLAGS= make install) touch $@ ####################################################################### # iconv ####################################################################### .PHONY: iconv-install iconv-reset iconv-clean ifeq ($(USE_APR_ICONV),yes) iconv-install: apr-iconv-install iconv-reset: apr-iconv-reset iconv-clean: apr-iconv-clean else iconv-install: gnu-iconv-install iconv-reset: gnu-iconv-reset iconv-clean: gnu-iconv-clean endif ####################################################################### # apr-util ####################################################################### apr-util-retrieve: $(APR_UTIL_OBJDIR)/.retrieved apr-util-configure: $(APR_UTIL_OBJDIR)/.configured apr-util-compile: $(APR_UTIL_OBJDIR)/.compiled apr-util-install: $(APR_UTIL_OBJDIR)/.installed apr-util-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(APR_UTIL_OBJDIR)/$(f);) apr-util-clean: -(cd $(APR_UTIL_OBJDIR) && env MAKEFLAGS= make clean) # retrieve apr-util if not present yet $(APR_UTIL_OBJDIR)/.retrieved: [ -d $(APR_UTIL_OBJDIR) ] || mkdir -p $(APR_UTIL_OBJDIR) if [ ! -d $(APR_UTIL_SRCDIR) ]; then \ svn export $(APR_UTIL_URL)/tags/$(APR_UTIL_VER)/ \ $(APR_UTIL_SRCDIR); \ fi touch $@ ifeq ($(USE_APR_ICONV),yes) ICONV_FLAG=--with-iconv=$(PREFIX)/apr ICONV_OBJDIR=$(APR_ICONV_OBJDIR) else ICONV_FLAG=--with-iconv=$(PREFIX)/iconv ICONV_OBJDIR=$(GNU_ICONV_OBJDIR) endif # configure apr-util $(APR_UTIL_OBJDIR)/.configured: $(APR_UTIL_OBJDIR)/.retrieved \ $(APR_OBJDIR)/.installed $(ICONV_OBJDIR)/.installed cd $(APR_UTIL_SRCDIR) && ./buildconf --with-apr=$(APR_SRCDIR) cd $(APR_UTIL_OBJDIR) \ && env LD_LIBRARY_PATH=$(PREFIX)/bdb/lib \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ CFLAGS="-O0 -g $(PROFILE_CFLAGS) -DAPR_POOL_DEBUG" \ CC=$(CC) CXX=$(CXX) \ GREP="`which grep`" \ $(APR_UTIL_SRCDIR)/configure \ --prefix=$(PREFIX)/apr \ --enable-maintainer-mode \ --with-apr=$(PREFIX)/apr \ --with-berkeley-db=$(PREFIX)/bdb \ $(ICONV_FLAG) touch $@ # compile apr-util $(APR_UTIL_OBJDIR)/.compiled: $(APR_UTIL_OBJDIR)/.configured (cd $(APR_UTIL_OBJDIR) && env MAKEFLAGS= make -j${MAKE_JOBS}) touch $@ # install apr-util $(APR_UTIL_OBJDIR)/.installed: $(APR_UTIL_OBJDIR)/.compiled (cd $(APR_UTIL_OBJDIR) && env MAKEFLAGS= make install) touch $@ ####################################################################### # pcre ####################################################################### pcre-retrieve: $(PCRE_OBJDIR)/.retrieved pcre-configure: $(PCRE_OBJDIR)/.configured pcre-compile: $(PCRE_OBJDIR)/.compiled pcre-install: $(PCRE_OBJDIR)/.installed pcre-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(PCRE_OBJDIR)/$(f);) pcre-clean: -(cd $(PCRE_OBJDIR) && env MAKEFLAGS= make clean) # fetch distfile for pcre $(DISTDIR)/$(PCRE_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(PCRE_URL) # retrieve pcre $(PCRE_OBJDIR)/.retrieved: $(DISTDIR)/$(PCRE_DIST) $(call do_check_sha256,$(PCRE_DIST)) [ -d $(PCRE_OBJDIR) ] || mkdir -p $(PCRE_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(PCRE_DIST) touch $@ # configure pcre $(PCRE_OBJDIR)/.configured: $(PCRE_OBJDIR)/.retrieved cd $(PCRE_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" \ CC=$(CC) CXX=$(CXX) \ GREP="`which grep`" \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(PCRE_SRCDIR)/configure \ --prefix=$(PREFIX)/pcre touch $@ # compile pcre $(PCRE_OBJDIR)/.compiled: $(PCRE_OBJDIR)/.configured (cd $(PCRE_OBJDIR) && env MAKEFLAGS= make -j${MAKE_JOBS}) touch $@ # install pcre $(PCRE_OBJDIR)/.installed: $(PCRE_OBJDIR)/.compiled (cd $(PCRE_OBJDIR) && env MAKEFLAGS= make install) touch $@ ####################################################################### # httpd ####################################################################### HTTPD_CONF= $(PREFIX)/httpd/conf/httpd-$(SVN_REL_WC).conf httpd-retrieve: $(HTTPD_OBJDIR)/.retrieved httpd-configure: $(HTTPD_OBJDIR)/.configured httpd-compile: $(HTTPD_OBJDIR)/.compiled httpd-install: $(HTTPD_OBJDIR)/.installed $(HTTPD_CONF) httpd-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(HTTPD_OBJDIR)/$(f);) httpd-clean: -(cd $(HTTPD_OBJDIR) && env MAKEFLAGS= make clean) rm -f $(HTTPD_OBJDIR)/mod-proxy-no-threads-2.4.diff rm -f $(HTTPD_OBJDIR)/ssl-init-proxy-certs.diff # fetch distfile for httpd $(DISTDIR)/$(HTTPD_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(HTTPD_URL) $(HTTPD_OBJDIR)/ssl-init-proxy-certs.diff: mkdir -p $(dir $@) echo > $@.tmp '--- modules/ssl/ssl_engine_init.c.orig Sun Dec 16 13:34:14 2018' echo >> $@.tmp '+++ modules/ssl/ssl_engine_init.c Sun Dec 16 13:34:59 2018' echo >> $@.tmp '@@ -1492,7 +1492,7 @@' echo >> $@.tmp ' X509_STORE_CTX *sctx;' echo >> $@.tmp ' X509_STORE *store = SSL_CTX_get_cert_store(mctx->ssl_ctx);' echo >> $@.tmp ' ' echo >> $@.tmp '-#if OPENSSL_VERSION_NUMBER >= 0x1010100fL' echo >> $@.tmp '+#if OPENSSL_VERSION_NUMBER >= 0x1010100fL && !defined(LIBRESSL_VERSION_NUMBER)' echo >> $@.tmp ' /* For OpenSSL >=1.1.1, turn on client cert support which is' echo >> $@.tmp ' * otherwise turned off by default (by design).' echo >> $@.tmp ' * https://github.com/openssl/openssl/issues/6933 */' mv -f $@.tmp $@ $(HTTPD_OBJDIR)/mod-proxy-no-threads-2.4.diff: cd $(HTTPD_OBJDIR) && $(FETCH_CMD) https://stsp.name/mod-proxy-no-threads-2.4.diff # retrieve httpd $(HTTPD_OBJDIR)/.retrieved: $(DISTDIR)/$(HTTPD_DIST) \ $(HTTPD_OBJDIR)/ssl-init-proxy-certs.diff \ $(HTTPD_OBJDIR)/mod-proxy-no-threads-2.4.diff $(call do_check_sha256,$(HTTPD_DIST)) [ -d $(HTTPD_OBJDIR) ] || mkdir -p $(HTTPD_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(HTTPD_DIST) (cd $(HTTPD_SRCDIR) && patch -p0 < $(HTTPD_OBJDIR)/ssl-init-proxy-certs.diff) (cd $(HTTPD_SRCDIR) && patch -p0 < $(HTTPD_OBJDIR)/mod-proxy-no-threads-2.4.diff) (cd $(HTTPD_SRCDIR) && svn diff -cr1849590 https://svn.apache.org/repos/asf/httpd/httpd/trunk | patch -p0) (cd $(HTTPD_SRCDIR) && svn diff -cr1663375 https://svn.apache.org/repos/asf/httpd/httpd/trunk | patch -p0) touch $@ # configure httpd $(HTTPD_OBJDIR)/.configured: $(HTTPD_OBJDIR)/.retrieved \ $(APR_UTIL_OBJDIR)/.installed $(PCRE_OBJDIR)/.installed cd $(HTTPD_SRCDIR) && ./buildconf \ --with-apr="$(PREFIX)/apr/bin/apr-1-config" \ --with-apr-util="$(PREFIX)/apr/bin/apu-1-config" cd $(HTTPD_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS) -DAPR_POOL_DEBUG" \ CC=$(CC) CXX=$(CXX) \ GREP="`which grep`" \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(HTTPD_SRCDIR)/configure \ --prefix=$(PREFIX)/httpd \ --with-mpm=prefork \ --enable-ssl \ --enable-dav \ --enable-proxy \ --disable-md \ --disable-http2 \ --disable-brotli \ --with-apr="$(PREFIX)/apr/bin/apr-1-config" \ --with-apr-util="$(PREFIX)/apr/bin/apu-1-config" \ --with-pcre="$(PREFIX)/pcre" touch $@ # compile httpd $(HTTPD_OBJDIR)/.compiled: $(HTTPD_OBJDIR)/.configured (cd $(HTTPD_OBJDIR) && env MAKEFLAGS= make -j${MAKE_JOBS}) touch $@ # install httpd $(HTTPD_OBJDIR)/.installed: $(HTTPD_OBJDIR)/.compiled (cd $(HTTPD_OBJDIR) && env MAKEFLAGS= make install) touch $@ # create a httpd.conf for mod_dav_svn $(HTTPD_CONF): mkdir -p $(dir $@) echo > $@.tmp '# httpd config for use with mod_dav_svn' echo >>$@.tmp 'ServerRoot "$(PREFIX)/httpd"' echo >>$@.tmp 'Listen localhost:8080' echo >>$@.tmp 'LoadModule unixd_module modules/mod_unixd.so' echo >>$@.tmp 'LoadModule alias_module modules/mod_alias.so' echo >>$@.tmp 'LoadModule access_compat_module modules/mod_access_compat.so' echo >>$@.tmp 'LoadModule authn_core_module modules/mod_authn_core.so' echo >>$@.tmp 'LoadModule authn_file_module modules/mod_authn_file.so' echo >>$@.tmp 'LoadModule authz_core_module modules/mod_authz_core.so' echo >>$@.tmp 'LoadModule authz_user_module modules/mod_authz_user.so' echo >>$@.tmp 'LoadModule authz_groupfile_module modules/mod_authz_groupfile.so' echo >>$@.tmp 'LoadModule auth_basic_module modules/mod_auth_basic.so' echo >>$@.tmp 'LoadModule dav_module modules/mod_dav.so' echo >>$@.tmp 'LoadModule dav_svn_module modules/svn-$(WC)/mod_dav_svn.so' echo >>$@.tmp 'LoadModule authz_svn_module modules/svn-$(WC)/mod_authz_svn.so' echo >>$@.tmp 'DocumentRoot "$(PREFIX)/httpd/htdocs"' echo >>$@.tmp '' echo >>$@.tmp ' Options FollowSymLinks' echo >>$@.tmp ' AllowOverride None' echo >>$@.tmp ' Require all denied' echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNPath /tmp/svn-sandbox/repos' echo >>$@.tmp ' Require ip localhost' echo >>$@.tmp '' mv -f $@.tmp $@ ####################################################################### # neon ####################################################################### neon-retrieve: $(NEON_OBJDIR)/.retrieved neon-configure: $(NEON_OBJDIR)/.configured neon-compile: $(NEON_OBJDIR)/.compiled neon-install: $(NEON_OBJDIR)/.installed neon-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(NEON_OBJDIR)/$(f);) neon-clean: -(cd $(NEON_OBJDIR) && env MAKEFLAGS= make clean) # fetch distfile for neon $(DISTDIR)/$(NEON_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(NEON_URL) # retrieve neon $(NEON_OBJDIR)/.retrieved: $(DISTDIR)/$(NEON_DIST) $(call do_check_sha256,$(NEON_DIST)) [ -d $(NEON_OBJDIR) ] || mkdir -p $(NEON_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(NEON_DIST) touch $@ # OpenBSD does not have krb5-config in PATH, but the neon port has # a suitable replacement. ifeq ($(UNAME),OpenBSD) KRB5_CONFIG_PATH=/usr/ports/net/neon/files endif # configure neon $(NEON_OBJDIR)/.configured: $(NEON_OBJDIR)/.retrieved cd $(NEON_SRCDIR) && ./autogen.sh if [ -n "$(KRB5_CONFIG_PATH)" ] && [ -d "$(KRB5_CONFIG_PATH)" ]; then \ cp $(KRB5_CONFIG_PATH)/krb5-config $(NEON_OBJDIR); \ chmod +x $(NEON_OBJDIR)/krb5-config; \ fi cd $(NEON_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`" \ CC=$(CC) CXX=$(CXX) \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(NEON_SRCDIR)/configure \ PATH=$(NEON_OBJDIR):$$PATH \ --prefix=$(PREFIX)/neon \ --with-ssl \ --enable-shared \ --without-libproxy touch $@ # compile neon $(NEON_OBJDIR)/.compiled: $(NEON_OBJDIR)/.configured (cd $(NEON_OBJDIR) && env MAKEFLAGS= make -j${MAKE_JOBS}) (cd $(NEON_OBJDIR) && env MAKEFLAGS= make docs) touch $@ # install neon $(NEON_OBJDIR)/.installed: $(NEON_OBJDIR)/.compiled (cd $(NEON_OBJDIR) && env MAKEFLAGS= make install) touch $@ ####################################################################### # serf ####################################################################### serf-retrieve: $(SERF_OBJDIR)/.retrieved serf-configure: $(SERF_OBJDIR)/.configured serf-compile: $(SERF_OBJDIR)/.compiled serf-install: $(SERF_OBJDIR)/.installed serf-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(SERF_OBJDIR)/$(f);) serf-clean: -(cd $(SERF_SRCDIR) && scons -c) # fetch distfile for serf #$(DISTDIR)/$(SERF_DIST): # cd $(DISTDIR) && $(FETCH_CMD) $(SERF_URL) # # retrieve serf #$(SERF_OBJDIR)/.retrieved: $(DISTDIR)/$(SERF_DIST) # [ -d $(SERF_OBJDIR) ] || mkdir -p $(SERF_OBJDIR) # tar -C $(SRCDIR) -zxf $(DISTDIR)/$(SERF_DIST) # touch $@ # retrieve serf if not present yet $(SERF_OBJDIR)/.retrieved: [ -d $(SERF_OBJDIR) ] || mkdir -p $(SERF_OBJDIR) if [ ! -d $(SERF_SRCDIR) ]; then \ svn co $(SERF_URL) $(SERF_SRCDIR); \ svn merge ^/serf/branches/1.3.x-sslbuild@1910116 $(SERF_SRCDIR); \ fi touch $@ # compile serf (serf won't compile outside its source tree) $(SERF_OBJDIR)/.compiled: $(SERF_OBJDIR)/.retrieved \ $(APR_UTIL_OBJDIR)/.installed cd $(SERF_SRCDIR) && \ scons -j${MAKE_JOBS} DEBUG=1 \ CFLAGS="-O0 -g $(PROFILE_CFLAGS) -fPIC -DAPR_POOL_DEBUG" \ CC=$(CC) CXX=$(CXX) \ APR=$(PREFIX)/apr \ APU=$(PREFIX)/apr \ PREFIX=$(PREFIX)/serf \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) touch $@ # install serf $(SERF_OBJDIR)/.installed: $(SERF_OBJDIR)/.compiled rm -rf $(PREFIX)/serf # XXX scons cannot reinstall :( cd $(SERF_SRCDIR) && \ scons install # work around unportable scons shared lib support -ln -s libserf-1.so.$(shell echo $(SERF_VER) | sed -e 's/[0-9]$$/0/') \ $(PREFIX)/serf/lib/libserf-1.so -ln -s libserf-1.so.$(shell echo $(SERF_VER) | sed -e 's/[0-9]$$/0/') \ $(PREFIX)/serf/lib/libserf-1.so.$(shell echo $(SERF_VER) | sed -e 's/\.[0-9]$$//') touch $@ ####################################################################### # sqlite ####################################################################### sqlite-retrieve: $(SQLITE_OBJDIR)/.retrieved sqlite-configure: $(SQLITE_OBJDIR)/.configured sqlite-compile: $(SQLITE_OBJDIR)/.compiled sqlite-install: $(SQLITE_OBJDIR)/.installed sqlite-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(SQLITE_OBJDIR)/$(f);) sqlite-clean: -cd $(SQLITE_OBJDIR) && env MAKEFLAGS= make clean # fetch distfile for sqlite $(DISTDIR)/$(SQLITE_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(SQLITE_URL) # retrieve sqlite $(SQLITE_OBJDIR)/.retrieved: $(DISTDIR)/$(SQLITE_DIST) $(call do_check_sha256,$(SQLITE_DIST)) [ -d $(SQLITE_OBJDIR) ] || mkdir -p $(SQLITE_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(SQLITE_DIST) touch $@ ifeq ($(THREADING),yes) THREADSAFE_FLAG=--enable-threadsafe else THREADSAFE_FLAG=--disable-threadsafe endif # configure sqlite $(SQLITE_OBJDIR)/.configured: $(SQLITE_OBJDIR)/.retrieved cd $(SQLITE_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`" \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ CC=$(CC) CXX=$(CXX) \ $(SQLITE_SRCDIR)/configure \ --prefix=$(PREFIX)/sqlite \ $(THREADSAFE_FLAG) touch $@ # compile sqlite $(SQLITE_OBJDIR)/.compiled: $(SQLITE_OBJDIR)/.configured (cd $(SQLITE_OBJDIR) && env MAKEFLAGS= make -j${MAKE_JOBS}) touch $@ # install sqlite $(SQLITE_OBJDIR)/.installed: $(SQLITE_OBJDIR)/.compiled (cd $(SQLITE_OBJDIR) && env MAKEFLAGS= make install) touch $@ ####################################################################### # cyrus-sasl ####################################################################### cyrus-sasl-retrieve: $(CYRUS_SASL_OBJDIR)/.retrieved cyrus-sasl-configure: $(CYRUS_SASL_OBJDIR)/.configured cyrus-sasl-compile: $(CYRUS_SASL_OBJDIR)/.compiled cyrus-sasl-install: $(CYRUS_SASL_OBJDIR)/.installed cyrus-sasl-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(CYRUS_SASL_OBJDIR)/$(f);) cyrus-sasl-clean: -(cd $(CYRUS_SASL_OBJDIR) && env MAKEFLAGS= make distclean) # fetch distfile for cyrus-sasl $(DISTDIR)/$(CYRUS_SASL_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(CYRUS_SASL_URL) # retrieve cyrus-sasl $(CYRUS_SASL_OBJDIR)/.retrieved: $(DISTDIR)/$(CYRUS_SASL_DIST) $(call do_check_sha256,$(CYRUS_SASL_DIST)) [ -d $(CYRUS_SASL_OBJDIR) ] || mkdir -p $(CYRUS_SASL_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(CYRUS_SASL_DIST) # fixes build on Debian: sed 's/#elif WITH_DES/#elif defined(WITH_DES)/' \ < $(CYRUS_SASL_SRCDIR)/plugins/digestmd5.c \ > $(CYRUS_SASL_SRCDIR)/plugins/digestmd5.c.patched mv $(CYRUS_SASL_SRCDIR)/plugins/digestmd5.c.patched \ $(CYRUS_SASL_SRCDIR)/plugins/digestmd5.c ifeq ($(UNAME),OpenBSD) # Fixes GSSAPI support on OpenBSD, which hasn't got libroken: for f in `grep -l -R -- -lroken $(CYRUS_SASL_SRCDIR)`; do \ sed -e 's/-lroken//g' < $$f > $$f.tmp && \ mv $$f.tmp $$f; \ done chmod +x $(CYRUS_SASL_SRCDIR)/configure endif # Fixes excessive auth log spam from sasl if broken .la files exist sed 's/SASL_LOG_WARN/SASL_LOG_DEBUG/' \ < $(CYRUS_SASL_SRCDIR)/lib/dlopen.c \ > $(CYRUS_SASL_SRCDIR)/lib/dlopen.c.patched mv $(CYRUS_SASL_SRCDIR)/lib/dlopen.c.patched \ $(CYRUS_SASL_SRCDIR)/lib/dlopen.c # Fix a weird autotools error about missing cmulocal dir (cd $(CYRUS_SASL_SRCDIR)/saslauthd/ && ln -sf ../cmulocal) # Fix 64-bit time_t format-string issues sed -i 's/t%020ld"/t%020lld"/' $(CYRUS_SASL_SRCDIR)/plugins/otp.c touch $@ # configure cyrus-sasl $(CYRUS_SASL_OBJDIR)/.configured: $(CYRUS_SASL_OBJDIR)/.retrieved \ $(BDB_OBJDIR)/.installed $(SQLITE_OBJDIR)/.installed cd $(CYRUS_SASL_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" \ CC=$(CC) CXX=$(CXX) MAKE=$(MAKE) \ GREP="`which grep`" \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(CYRUS_SASL_SRCDIR)/configure \ --with-dbpath=$(PREFIX)/cyrus-sasl/etc/sasldb2 \ --with-plugindir=$(PREFIX)/cyrus-sasl/lib/sasl2 \ --with-configdir=$(PREFIX)/cyrus-sasl/lib/sasl2 \ --with-bdb-libdir=$(PREFIX)/bdb/lib \ --with-bdb-incdir=$(PREFIX)/bdb/include \ --with-dblib=berkeley \ --with-sqlite=$(PREFIX)/sqlite \ --prefix=$(PREFIX)/cyrus-sasl touch $@ # compile cyrus-sasl (ignore MAKE_JOBS; multiple jobs cause random build failures) $(CYRUS_SASL_OBJDIR)/.compiled: $(CYRUS_SASL_OBJDIR)/.configured (cd $(CYRUS_SASL_OBJDIR) && env MAKE=$(MAKE) MAKEFLAGS= $(MAKE)) touch $@ # install cyrus-sasl $(CYRUS_SASL_OBJDIR)/.installed: $(CYRUS_SASL_OBJDIR)/.compiled (cd $(CYRUS_SASL_OBJDIR) && env MAKE=$(MAKE) MAKEFLAGS= $(MAKE) install) touch $@ ####################################################################### # libmagic ####################################################################### libmagic-retrieve: $(LIBMAGIC_OBJDIR)/.retrieved libmagic-configure: $(LIBMAGIC_OBJDIR)/.configured libmagic-compile: $(LIBMAGIC_OBJDIR)/.compiled libmagic-install: $(LIBMAGIC_OBJDIR)/.installed libmagic-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(LIBMAGIC_OBJDIR)/$(f);) libmagic-clean: -(cd $(LIBMAGIC_OBJDIR) && env MAKEFLAGS= make distclean) # fetch distfile for libmagic $(DISTDIR)/$(LIBMAGIC_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(LIBMAGIC_URL) # retrieve libmagic $(LIBMAGIC_OBJDIR)/.retrieved: $(DISTDIR)/$(LIBMAGIC_DIST) $(call do_check_sha256,$(LIBMAGIC_DIST)) [ -d $(LIBMAGIC_OBJDIR) ] || mkdir -p $(LIBMAGIC_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(LIBMAGIC_DIST) touch $@ # configure libmagic $(LIBMAGIC_OBJDIR)/.configured: $(LIBMAGIC_OBJDIR)/.retrieved cd $(LIBMAGIC_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`"\ CC=$(CC) CXX=$(CXX) \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(LIBMAGIC_SRCDIR)/configure \ --enable-fsect-man5 \ --prefix=$(PREFIX)/libmagic touch $@ # compile libmagic $(LIBMAGIC_OBJDIR)/.compiled: $(LIBMAGIC_OBJDIR)/.configured (cd $(LIBMAGIC_OBJDIR) && env MAKEFLAGS= make -j${MAKE_JOBS}) touch $@ # install libmagic $(LIBMAGIC_OBJDIR)/.installed: $(LIBMAGIC_OBJDIR)/.compiled (cd $(LIBMAGIC_OBJDIR) && env MAKEFLAGS= make install) touch $@ ####################################################################### # ruby ####################################################################### ruby-retrieve: $(RUBY_OBJDIR)/.retrieved ruby-configure: $(RUBY_OBJDIR)/.configured ruby-compile: $(RUBY_OBJDIR)/.compiled ruby-install: $(RUBY_OBJDIR)/.installed ruby-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(RUBY_OBJDIR)/$(f);) ruby-clean: -(cd $(RUBY_OBJDIR) && env MAKEFLAGS= make distclean) # fetch distfile for ruby $(DISTDIR)/$(RUBY_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(RUBY_URL) $(RUBY_OBJDIR)/openssl_missing.patch: mkdir -p $(dir $@) ifeq ($(shell test $(RUBY_MAJOR_VER) \< 3.0 && echo 1), 1) echo > $@.tmp 'Index: ext/openssl/openssl_missing.h' echo >> $@.tmp '--- ext/openssl/openssl_missing.h.orig' echo >> $@.tmp '+++ ext/openssl/openssl_missing.h' echo >> $@.tmp '@@ -119,6 +119,9 @@ void ossl_HMAC_CTX_free(HMAC_CTX *);' echo >> $@.tmp ' #if !defined(HAVE_X509_STORE_SET_EX_DATA)' echo >> $@.tmp ' # define X509_STORE_set_ex_data(x, idx, data) \' echo >> $@.tmp ' CRYPTO_set_ex_data(&(x)->ex_data, (idx), (data))' echo >> $@.tmp '+#endif' echo >> $@.tmp '+' echo >> $@.tmp '+#if !defined(HAVE_X509_STORE_GET_EX_NEW_INDEX)' echo >> $@.tmp ' # define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \' echo >> $@.tmp ' CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, (l), (p), \' echo >> $@.tmp ' (newf), (dupf), (freef))' echo >> $@.tmp '@@ -192,6 +195,7 @@ void ossl_X509_REQ_get0_signature(const X509_REQ *, co' echo >> $@.tmp ' #endif' echo >> $@.tmp ' ' echo >> $@.tmp ' #if !defined(HAVE_OPAQUE_OPENSSL)' echo >> $@.tmp '+#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL' echo >> $@.tmp ' #define IMPL_PKEY_GETTER(_type, _name) \' echo >> $@.tmp ' static inline _type *EVP_PKEY_get0_##_type(EVP_PKEY *pkey) { \' echo >> $@.tmp ' return pkey->pkey._name; }' echo >> $@.tmp '@@ -243,6 +247,7 @@ IMPL_PKEY_GETTER(EC_KEY, ec)' echo >> $@.tmp ' #undef IMPL_PKEY_GETTER' echo >> $@.tmp ' #undef IMPL_KEY_ACCESSOR2' echo >> $@.tmp ' #undef IMPL_KEY_ACCESSOR3' echo >> $@.tmp '+#endif' echo >> $@.tmp ' #endif /* HAVE_OPAQUE_OPENSSL */' echo >> $@.tmp ' ' echo >> $@.tmp ' #if defined(HAVE_AUTHENTICATED_ENCRYPTION) && !defined(EVP_CTRL_AEAD_GET_TAG)' mv -f $@.tmp $@ else touch $@ endif $(RUBY_OBJDIR)/sparc64_buserror.patch: mkdir -p $(dir $@) ifeq ($(shell test $(RUBY_MAJOR_VER) \< 3.0 && echo 1), 1) echo > $@.tmp '--- compile.c.orig Thu Mar 12 12:58:26 2020' echo >> $@.tmp '+++ compile.c Thu Mar 12 16:36:55 2020' echo >> $@.tmp '@@ -751,6 +751,16 @@' echo >> $@.tmp ' #define STRICT_ALIGNMENT' echo >> $@.tmp ' #endif' echo >> $@.tmp ' ' echo >> $@.tmp '+/*' echo >> $@.tmp '+ * Some OpenBSD platforms (including sparc64) require strict alignment.' echo >> $@.tmp '+ */' echo >> $@.tmp '+#if defined(__OpenBSD__)' echo >> $@.tmp '+ #include ' echo >> $@.tmp '+ #ifdef __STRICT_ALIGNMENT' echo >> $@.tmp '+ #define STRICT_ALIGNMENT' echo >> $@.tmp '+ #endif' echo >> $@.tmp '+#endif' echo >> $@.tmp '+' echo >> $@.tmp ' #ifdef STRICT_ALIGNMENT' echo >> $@.tmp ' #if defined(HAVE_TRUE_LONG_LONG) && SIZEOF_LONG_LONG > SIZEOF_VALUE' echo >> $@.tmp ' #define ALIGNMENT_SIZE SIZEOF_LONG_LONG' mv -f $@.tmp $@ else touch $@ endif ifeq ($(UNAME),OpenBSD) RUBY_SSL_EX_NEW_DATA_PATCH = sed -i -e '/^have_func("X509_STORE_set_ex_data")$$/ { p; s/^.*$$/\have_func("X509_STORE_get_ex_new_index")/; }' else RUBY_SSL_EX_NEW_DATA_PATCH = true endif # retrieve ruby # $(RUBY_OBJDIR)/.retrieved: $(DISTDIR)/$(RUBY_DIST) $(RUBY_OBJDIR)/openssl_missing.patch $(RUBY_OBJDIR)/sparc64_buserror.patch $(call do_check_sha256,$(RUBY_DIST)) [ -d $(RUBY_OBJDIR) ] || mkdir -p $(RUBY_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(RUBY_DIST) -which ghead && sed -i -e "s/head -c/ghead -c/" $(RUBY_SRCDIR)/configure $(RUBY_SSL_EX_NEW_DATA_PATCH) $(RUBY_SRCDIR)/ext/openssl/extconf.rb ifeq ($(shell test $(RUBY_MAJOR_VER) \< 3.0 && echo 1), 1) cd $(RUBY_SRCDIR) && patch -p0 < $(RUBY_OBJDIR)/openssl_missing.patch cd $(RUBY_SRCDIR) && patch -p0 < $(RUBY_OBJDIR)/sparc64_buserror.patch endif sed -i 's/X509_num(bs->certs)/X509_num(OCSP_resp_get0_certs(bs))/' \ $(RUBY_SRCDIR)/ext/openssl/ossl_ocsp.c touch $@ ifeq ($(THREADING),yes) THREADSAFE_FLAG=--enable-pthread else THREADSAFE_FLAG=--disable-pthread endif # configure ruby $(RUBY_OBJDIR)/.configured: $(RUBY_OBJDIR)/.retrieved cd $(RUBY_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`"\ CC=$(CC) CXX=$(CXX) \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(RUBY_SRCDIR)/configure \ --prefix=$(PREFIX)/ruby \ --enable-shared \ --with-baseruby="$(RUBY)" \ $(THREADSAFE_FLAG) \ --disable-install-doc \ --without-valgrind \ --without-gmp touch $@ # compile ruby (ignore MAKE_JOBS; multiple jobs cause random build failures) $(RUBY_OBJDIR)/.compiled: $(RUBY_OBJDIR)/.configured (cd $(RUBY_OBJDIR) && env MAKEFLAGS= make) touch $@ # install ruby $(RUBY_OBJDIR)/.installed: $(RUBY_OBJDIR)/.compiled (cd $(RUBY_OBJDIR) && env MAKEFLAGS= make install) touch $@ ####################################################################### # bz2 ####################################################################### bz2-retrieve: $(BZ2_OBJDIR)/.retrieved bz2-compile: $(BZ2_OBJDIR)/.compiled bz2-install: $(BZ2_OBJDIR)/.installed bz2-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(BZ2_OBJDIR)/$(f);) bz2-clean: -(cd $(BZ2_SRCDIR) && env MAKEFLAGS= make distclean) # fetch distfile for bz2 $(DISTDIR)/$(BZ2_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(BZ2_URL) # retrieve bz2 $(BZ2_OBJDIR)/.retrieved: $(DISTDIR)/$(BZ2_DIST) $(call do_check_sha256,$(BZ2_DIST)) [ -d $(BZ2_OBJDIR) ] || mkdir -p $(BZ2_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(BZ2_DIST) touch $@ # compile bz2 $(BZ2_OBJDIR)/.compiled: $(BZ2_OBJDIR)/.retrieved (cd $(BZ2_SRCDIR) && env MAKEFLAGS= make CC=$(CC) CXX=$(CXX) \ CFLAGS="-g $(PROFILE_CFLAGS) -fPIC" -j${MAKE_JOBS}) touch $@ # install bz2 $(BZ2_OBJDIR)/.installed: $(BZ2_OBJDIR)/.compiled (cd $(BZ2_SRCDIR) && env MAKEFLAGS= make install PREFIX=$(PREFIX)/bz2) touch $@ ####################################################################### # python ####################################################################### python-retrieve: $(PYTHON_OBJDIR)/.retrieved python-configure: $(PYTHON_OBJDIR)/.configured python-compile: $(PYTHON_OBJDIR)/.compiled python-install: $(PYTHON_OBJDIR)/.installed python-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(PYTHON_OBJDIR)/$(f);) python-clean: -(cd $(PYTHON_OBJDIR) && env MAKEFLAGS= make distclean) # fetch distfile for python $(DISTDIR)/$(PYTHON_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(PYTHON_URL) $(PYTHON_OBJDIR)/openbsd-march.diff: mkdir -p $(dir $@) echo >$@.tmp '--- configure.ac.orig Mon Nov 21 13:32:19 2022' echo >>$@.tmp '+++ configure.ac Mon Nov 21 13:32:40 2022' echo >>$@.tmp '@@ -878,2 +878,3 @@' echo >>$@.tmp ' [FreeBSD*], [MULTIARCH=""],' echo >>$@.tmp '+ [OpenBSD*], [MULTIARCH=""],' echo >>$@.tmp ' [MULTIARCH=$$($$CC --print-multiarch 2>/dev/null)]' mv -f $@.tmp $@ $(PYTHON_OBJDIR)/openbsd-make.diff: mkdir -p $(dir $@) echo >$@.tmp 'Index: Makefile.pre.in' echo >>$@.tmp '--- Makefile.pre.in.orig' echo >>$@.tmp '+++ Makefile.pre.in' echo >>$@.tmp '@@ -534,8 +534,6 @@ LIBMPDEC_OBJS= \' echo >>$@.tmp ' Modules/_decimal/libmpdec/numbertheory.o \' echo >>$@.tmp ' Modules/_decimal/libmpdec/sixstep.o \' echo >>$@.tmp ' Modules/_decimal/libmpdec/transpose.o' echo >>$@.tmp '- # _decimal does not use signaling API' echo >>$@.tmp '- # Modules/_decimal/libmpdec/mpsignal.o' echo >>$@.tmp ' ' echo >>$@.tmp ' LIBMPDEC_HEADERS= \' echo >>$@.tmp ' $(srcdir)/Modules/_decimal/libmpdec/basearith.h \' mv -f $@.tmp $@ # retrieve python # $(PYTHON_OBJDIR)/.retrieved: $(DISTDIR)/$(PYTHON_DIST) $(PYTHON_OBJDIR)/openbsd-march.diff $(PYTHON_OBJDIR)/openbsd-make.diff $(call do_check_sha256,$(PYTHON_DIST)) [ -d $(PYTHON_OBJDIR) ] || mkdir -p $(PYTHON_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(PYTHON_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'#" \ < $(PYTHON_SRCDIR)/setup.py \ > $(PYTHON_SRCDIR)/setup.py.patched mv $(PYTHON_SRCDIR)/setup.py.patched $(PYTHON_SRCDIR)/setup.py chmod +x $(PYTHON_SRCDIR)/setup.py cd $(PYTHON_SRCDIR) && patch -p0 < $(PYTHON_OBJDIR)/openbsd-march.diff cd $(PYTHON_SRCDIR) && patch -p0 < $(PYTHON_OBJDIR)/openbsd-make.diff touch $@ # configure python ifdef PROFILE PYTHON_PROFILING=--enable-profiling endif $(PYTHON_OBJDIR)/.configured: $(PYTHON_OBJDIR)/.retrieved \ $(BZ2_OBJDIR)/.installed cd $(PYTHON_SRCDIR) && autoconf cd $(PYTHON_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`" \ 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):$(PREFIX)/python/lib:$$LD_LIBRARY_PATH" \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(PYTHON_SRCDIR)/configure \ --prefix=$(PREFIX)/python \ --enable-shared \ --with-system-expat \ --with-dbmliborder=bdb \ --without-pymalloc \ $(PYTHON_PROFILING) touch $@ # compile python $(PYTHON_OBJDIR)/.compiled: $(PYTHON_OBJDIR)/.configured (cd $(PYTHON_OBJDIR) && \ env MAKEFLAGS= \ LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$(PREFIX)/python/lib:$$LD_LIBRARY_PATH" \ make -j${MAKE_JOBS}) touch $@ # install python $(PYTHON_OBJDIR)/.installed: $(PYTHON_OBJDIR)/.compiled (cd $(PYTHON_OBJDIR) && \ env MAKEFLAGS= \ 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 -sf "`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 ####################################################################### py3c-retrieve: $(PY3C_OBJDIR)/.retrieved py3c-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(PY3C_OBJDIR)/$(f);) # fetch distfile for py3c $(DISTDIR)/$(PY3C_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(PY3C_URL) # retrieve py3c $(PY3C_OBJDIR)/.retrieved: $(DISTDIR)/$(PY3C_DIST) $(call do_check_sha256,$(PY3C_DIST)) [ -d $(PY3C_OBJDIR) ] || mkdir -p $(PY3C_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(PY3C_DIST) touch $@ ####################################################################### # junit ####################################################################### # fetch distfile for junit $(DISTDIR)/$(JUNIT_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(JUNIT_URL) $(call do_check_sha256,$(JUNIT_DIST)) ####################################################################### # gettext ####################################################################### gettext-retrieve: $(GETTEXT_OBJDIR)/.retrieved gettext-configure: $(GETTEXT_OBJDIR)/.configured gettext-compile: $(GETTEXT_OBJDIR)/.compiled gettext-install: $(GETTEXT_OBJDIR)/.installed gettext-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(GETTEXT_OBJDIR)/$(f);) gettext-clean: -(cd $(GETTEXT_SRCDIR) && env MAKEFLAGS= make clean) # fetch distfile for gettext $(DISTDIR)/$(GETTEXT_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(GETTEXT_URL) # retrieve gettext $(GETTEXT_OBJDIR)/.retrieved: $(DISTDIR)/$(GETTEXT_DIST) $(call do_check_sha256,$(GETTEXT_DIST)) [ -d $(GETTEXT_OBJDIR) ] || mkdir -p $(GETTEXT_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(GETTEXT_DIST) touch $@ # (gettext won't compile outside its source tree) # configure gettext $(GETTEXT_OBJDIR)/.configured: $(GETTEXT_OBJDIR)/.retrieved cd $(GETTEXT_SRCDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`"\ CC=$(CC) CXX=$(CXX) \ LDFLAGS="-L$(PREFIX)/iconv/lib" \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(GETTEXT_SRCDIR)/configure \ --prefix=$(PREFIX)/gettext \ --with-libiconv-prefix=$(PREFIX)/iconv \ --disable-c++ \ --disable-java \ --disable-csharp \ $(THREADS_FLAG) -which gsed && \ sed -e 's/sed /gsed /g' < $(GETTEXT_SRCDIR)/build-aux/moopp \ > $(GETTEXT_SRCDIR)/build-aux/moopp.fixed && \ mv $(GETTEXT_SRCDIR)/build-aux/moopp.fixed \ $(GETTEXT_SRCDIR)/build-aux/moopp && \ chmod +x $(GETTEXT_SRCDIR)/build-aux/moopp touch $@ # compile gettext $(GETTEXT_OBJDIR)/.compiled: $(GETTEXT_OBJDIR)/.configured (cd $(GETTEXT_SRCDIR) && env MAKEFLAGS= make -j${MAKE_JOBS}) touch $@ # install gettext $(GETTEXT_OBJDIR)/.installed: $(GETTEXT_OBJDIR)/.compiled (cd $(GETTEXT_SRCDIR) && env MAKEFLAGS= make install) touch $@ ####################################################################### # lz4 ####################################################################### lz4-retrieve: $(LZ4_OBJDIR)/.retrieved lz4-configure: $(LZ4_OBJDIR)/.configured lz4-compile: $(LZ4_OBJDIR)/.compiled lz4-install: $(LZ4_OBJDIR)/.installed lz4-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(LZ4_OBJDIR)/$(f);) lz4-clean: -(cd $(LZ4_SRCDIR) && env MAKEFLAGS= $(MAKE) clean) # fetch distfile for lz4 $(DISTDIR)/$(LZ4_DIST): cd $(DISTDIR) && $(FETCH_CMD) -O $(LZ4_DIST) $(LZ4_URL) # retrieve lz4 $(LZ4_OBJDIR)/.retrieved: $(DISTDIR)/$(LZ4_DIST) $(call do_check_sha256,$(LZ4_DIST)) [ -d $(LZ4_OBJDIR) ] || mkdir -p $(LZ4_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(LZ4_DIST) touch $@ # configure lz4 $(LZ4_OBJDIR)/.configured: $(LZ4_OBJDIR)/.retrieved touch $@ # compile lz4 $(LZ4_OBJDIR)/.compiled: $(LZ4_OBJDIR)/.configured (cd $(LZ4_SRCDIR)/lib && \ env MAKEFLAGS= $(MAKE) CC=$(CC) CXX=$(CXX) \ -j${MAKE_JOBS} PREFIX=$(PREFIX)/lz4) touch $@ # install lz4 $(LZ4_OBJDIR)/.installed: $(LZ4_OBJDIR)/.compiled mkdir -p $(PREFIX)/lz4/lib (cd $(LZ4_SRCDIR)/lib && \ env MAKEFLAGS= $(MAKE) PREFIX=$(PREFIX)/lz4 install) touch $@ ####################################################################### # swig ####################################################################### swig-retrieve: $(SWIG_OBJDIR)/.retrieved swig-configure: $(SWIG_OBJDIR)/.configured swig-compile: $(SWIG_OBJDIR)/.compiled swig-install: $(SWIG_OBJDIR)/.installed swig-reset: $(foreach f, .retrieved .configured .compiled .installed, \ rm -f $(SWIG_OBJDIR)/$(f);) swig-clean: -(cd $(SWIG_SRCDIR) && env MAKEFLAGS= $(MAKE) clean) # fetch distfile for swig $(DISTDIR)/$(SWIG_DIST): ifneq ($(SWIG_VER),) cd $(DISTDIR) && $(FETCH_CMD) -O $(SWIG_DIST) $(SWIG_URL) endif # retrieve swig $(SWIG_OBJDIR)/.retrieved: $(DISTDIR)/$(SWIG_DIST) ifneq ($(SWIG_VER),) $(call do_check_sha256,$(SWIG_DIST)) [ -d $(SWIG_OBJDIR) ] || mkdir -p $(SWIG_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(SWIG_DIST) touch $@ endif # configure swig $(SWIG_OBJDIR)/.configured: $(SWIG_OBJDIR)/.retrieved ifneq ($(SWIG_VER),) cd $(SWIG_SRCDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`"\ CC=$(CC) CXX=$(CXX) \ LDFLAGS="-L$(PREFIX)/iconv/lib" \ PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(SWIG_SRCDIR)/configure \ --prefix=$(PREFIX)/swig touch $@ endif # compile swig $(SWIG_OBJDIR)/.compiled: $(SWIG_OBJDIR)/.configured ifneq ($(SWIG_VER),) (cd $(SWIG_SRCDIR) && \ env MAKEFLAGS= $(MAKE) CC=$(CC) CXX=$(CXX) \ -j${MAKE_JOBS} PREFIX=$(PREFIX)/swig) touch $@ endif # install swig $(SWIG_OBJDIR)/.installed: $(SWIG_OBJDIR)/.compiled ifneq ($(SWIG_VER),) (cd $(SWIG_SRCDIR) && \ env MAKEFLAGS= $(MAKE) PREFIX=$(PREFIX)/swig install) touch $@ endif ####################################################################### # svn ####################################################################### .PHONY: svn-configure svn-compile svn-install svn-bindings-compile \ svn-bindings-install svn-bindings-reset svn-clean svn-install-all: svn-install svn-bindings-install svn-retrieve: $(SVN_OBJDIR)/.retrieved svn-configure: $(SVN_OBJDIR)/.configured svn-compile: $(SVN_OBJDIR)/.compiled svn-bindings-compile: $(SVN_OBJDIR)/.bindings-compiled svn-install: $(SVN_OBJDIR)/.installed svn-bindings-install: $(SVN_OBJDIR)/.bindings-installed svn-bindings-reset: $(foreach f, .bindings-compiled .bindings-installed, \ rm -f $(SVN_OBJDIR)/$(f);) svn-reset: svn-bindings-reset $(foreach f, .retrieved .configured .compiled .installed \ .bindings-compiled .bindings-installed, \ rm -f $(SVN_OBJDIR)/$(f);) svn-clean: -(cd $(svn_builddir) && env MAKEFLAGS= make distclean) # retrieve svn if not present yet $(SVN_OBJDIR)/.retrieved: [ -d $(SVN_OBJDIR) ] || mkdir -p $(SVN_OBJDIR) if [ "$(TAG)" != "none" ]; then \ branchdir="tags/$(TAG)"; \ co="export"; \ elif [ $(BRANCH) != trunk ]; then \ branchdir="branches/$(BRANCH)"; \ co="co"; \ else \ branchdir="$(BRANCH)"; \ co="co"; \ fi; \ if [ ! -d $(SVN_WC) ] && [ ! -h $(SVN_WC) ]; then \ svn $${co} $(SUBVERSION_REPOS_URL)/$${branchdir} \ $(SVN_WC); \ fi touch $@ ifeq ($(BRANCH_MAJOR),1.7) BDB_FLAG=db.h:$(PREFIX)/bdb/include:$(PREFIX)/bdb/lib:db-$(BDB_MAJOR_VER) SERF_LDFLAG=-Wl,-rpath,$(PREFIX)/serf/lib -Wl,-rpath,$(PREFIX)/bdb/lib MOD_DAV_SVN=modules/svn-$(WC)/mod_dav_svn.so MOD_AUTHZ_SVN=modules/svn-$(WC)/mod_authz_svn.so MOD_DONTDOTHAT=modules/svn-$(WC)/mod_dontdothat.so LIBMAGIC_FLAG=--with-libmagic=$(PREFIX)/libmagic NEON_FLAG=--with-neon="$(PREFIX)/neon" JAVAHL_CHECK_TARGET=check-javahl SWIG_FLAG=--with-swig=$(PREFIX)/swig/bin/swig PYTHON_BIN_PATH=$(PREFIX)/python2/bin else ifeq ($(BRANCH_MAJOR),1.6) BDB_FLAG=db.h:$(PREFIX)/bdb/include:$(PREFIX)/bdb/lib:db-$(BDB_MAJOR_VER) SERF_LDFLAG=-Wl,-rpath,$(PREFIX)/serf/lib -Wl,-rpath,$(PREFIX)/bdb/lib MOD_DAV_SVN=modules/svn-$(WC)/mod_dav_svn.so MOD_AUTHZ_SVN=modules/svn-$(WC)/mod_authz_svn.so MOD_DONTDOTHAT=modules/svn-$(WC)/mod_dontdothat.so W_NO_SYSTEM_HEADERS=-Wno-system-headers NEON_FLAG=--with-neon="$(PREFIX)/neon" JAVAHL_CHECK_TARGET=check-javahl SWIG_FLAG=--with-swig=$(PREFIX)/swig/bin/swig PYTHON_BIN_PATH=$(PREFIX)/python2/bin 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 >= 1.3.0 is built with scons and no longer sets up rpath linker flags, # so we have to do that ourselves :( SERF_LDFLAG=-Wl,-rpath,$(PREFIX)/serf/lib -Wl,-rpath,$(PREFIX)/bdb/lib MOD_DAV_SVN=modules/svn-$(WC)/mod_dav_svn.so MOD_AUTHZ_SVN=modules/svn-$(WC)/mod_authz_svn.so MOD_DONTDOTHAT=modules/svn-$(WC)/mod_dontdothat.so LIBMAGIC_FLAG=--with-libmagic=$(PREFIX)/libmagic JAVAHL_CHECK_TARGET=check-all-javahl SWIG_FLAG=--with-swig=$(PREFIX)/swig/bin/swig PYTHON_BIN_PATH=$(PREFIX)/python2/bin else ifeq ($(BRANCH_MAJOR), $(filter 1.10 1.11, 1.12, 1.13 $(BRANCH_MAJOR))) BDB_FLAG=db.h:$(PREFIX)/bdb/include:$(PREFIX)/bdb/lib:db-$(BDB_MAJOR_VER) # serf >= 1.3.0 is built with scons and no longer sets up rpath linker flags, # so we have to do that ourselves :( SERF_LDFLAG=-Wl,-rpath,$(PREFIX)/serf/lib -Wl,-rpath,$(PREFIX)/bdb/lib LZ4_LDFLAG=-Wl,-rpath,$(PREFIX)/lz4/lib MOD_DAV_SVN=modules/svn-$(WC)/mod_dav_svn.so MOD_AUTHZ_SVN=modules/svn-$(WC)/mod_authz_svn.so MOD_DONTDOTHAT=modules/svn-$(WC)/mod_dontdothat.so LIBMAGIC_FLAG=--with-libmagic=$(PREFIX)/libmagic JAVAHL_CHECK_TARGET=check-all-javahl LZ4_FLAG=--with-lz4=$(PREFIX)/lz4 UTF8PROC_FLAG=--with-utf8proc=internal SWIG_FLAG=--with-swig=$(PREFIX)/swig/bin/swig PYTHON_BIN_PATH=$(PREFIX)/python2/bin else # 1.14, trunk BDB_FLAG=db.h:$(PREFIX)/bdb/include:$(PREFIX)/bdb/lib:db-$(BDB_MAJOR_VER) # serf >= 1.3.0 is built with scons and no longer sets up rpath linker flags, # so we have to do that ourselves :( SERF_LDFLAG=-Wl,-rpath,$(PREFIX)/serf/lib -Wl,-rpath,$(PREFIX)/bdb/lib LZ4_LDFLAG=-Wl,-rpath,$(PREFIX)/lz4/lib MOD_DAV_SVN=modules/svn-$(WC)/mod_dav_svn.so MOD_AUTHZ_SVN=modules/svn-$(WC)/mod_authz_svn.so MOD_DONTDOTHAT=modules/svn-$(WC)/mod_dontdothat.so LIBMAGIC_FLAG=--with-libmagic=$(PREFIX)/libmagic JAVAHL_CHECK_TARGET=check-all-javahl LZ4_FLAG=--with-lz4=$(PREFIX)/lz4 UTF8PROC_FLAG=--with-utf8proc=internal ifneq ($(SWIG_VER),) SWIG_FLAG=--with-swig=$(PREFIX)/swig/bin/swig endif PYTHON_BIN_PATH=$(PREFIX)/python/bin endif ifeq ($(ENABLE_JAVA_BINDINGS),yes) JAVAHL_FLAG=--enable-javahl=yes --with-jdk --with-jikes=no \ --with-junit=$(DISTDIR)/$(JUNIT_DIST) else JAVAHL_FLAG=--with-jdk=no endif ifdef PROFILE SVN_STATIC_FLAG=--enable-all-static else SVN_STATIC_FLAG=--disable-static SVN_WITH_HTTPD=--with-apxs="$(PREFIX)/httpd/bin/apxs" \ --with-apache-libexecdir="$(PREFIX)/httpd/modules/svn-$(WC)" SVN_WITH_SASL=--with-sasl="$(PREFIX)/cyrus-sasl" endif # On OpenBSD, MExtUtils -e ldopts outputs -L/usr/local/lib, which can # cause us to link Perl bindings against the wrong set of SVN libraries. # As a workaround, we patch the configure script after it has been generated. ifeq ($(UNAME),OpenBSD) SWIG_PL_INCLUDES_HACK= sed -i 's^\($$PERL -MExtUtils::Embed -e ccopts\)^\1 | sed -e s@-I/usr/local/include@@^' $(svn_builddir)/configure SWIG_PL_LINK_HACK= sed -i 's^\($$PERL -MExtUtils::Embed -e ldopts\)^\1 | sed -e s@-L/usr/local/lib@@^' $(svn_builddir)/configure else SWIG_PL_INCLUDES_HACK=true SWIG_PL_LINK_HACK=true endif $(SVN_OBJDIR)/.configured: $(SVN_OBJDIR)/.retrieved $(DISTDIR)/$(JUNIT_DIST) \ $(APR_OBJDIR)/.installed $(APR_UTIL_OBJDIR)/.installed \ $(BDB_OBJDIR)/.installed $(SQLITE_OBJDIR)/.installed \ $(HTTPD_OBJDIR)/.installed $(CYRUS_SASL_OBJDIR)/.installed \ $(LIBMAGIC_OBJDIR)/.installed $(NEON_OBJDIR)/.installed \ $(SERF_OBJDIR)/.installed $(SWIG_OBJDIR)/.installed \ $(RUBY_OBJDIR)/.installed $(PYTHON_OBJDIR)/.installed ifeq ($(BRANCH_MAJOR), $(filter 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13, $(BRANCH_MAJOR))) ifneq ($(shell test $(SWIG_VER) \< 4.0 && echo 1), 1) @echo "SWIG 3 is required for Subversion < 1.14" @exit 1 endif endif cd $(SVN_SRCDIR) && ./autogen.sh $(SWIG_PL_INCLUDES_HACK) $(SWIG_PL_LINK_HACK) cd $(svn_builddir) && \ env LDFLAGS="-L$(PREFIX)/neon/lib -L$(PREFIX)/apr/lib -L$(PREFIX)/serf/lib $(SERF_LDFLAG) -lcrypto -lssl $(LZ4_LDFLAG) -L$(PREFIX)/gettext/lib -L$(PREFIX)/iconv/lib" \ 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):$(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 \ $(SVN_SRCDIR)/configure \ --enable-maintainer-mode \ --prefix="$(SVN_PREFIX)" \ --with-apr="$(PREFIX)/apr" \ --with-apr-util="$(PREFIX)/apr" \ $(NEON_FLAG) \ $(SVN_WITH_HTTPD) \ $(SVN_WITH_SASL) \ --with-serf="$(PREFIX)/serf" \ --with-sqlite="$(PREFIX)/sqlite" \ --with-zlib="/usr" \ --without-gnome-keyring \ --with-berkeley-db="$(BDB_FLAG)" \ --with-ruby-sitedir="$(SVN_PREFIX)/lib/ruby/site_ruby" \ --with-py3c="$(SRCDIR)/py3c-${PY3C_VER}" \ --disable-mod-activation \ --with-boost=no \ $(JAVAHL_FLAG) \ $(LIBMAGIC_FLAG) \ $(LZ4_FLAG) \ $(UTF8PROC_FLAG) \ $(SWIG_FLAG) \ --with-swig-python=$(PYTHON_BIN_PATH)/python \ $(SVN_STATIC_FLAG) \ $(DISABLE_NEON_VERSION_CHECK) touch $@ # compile svn $(SVN_OBJDIR)/.compiled: $(SVN_OBJDIR)/.configured cd $(svn_builddir) \ && env MAKEFLAGS= make -j${MAKE_JOBS} EXTRA_CFLAGS="$(PROFILE_CFLAGS) $(W_NO_SYSTEM_HEADERS)" touch $@ # install svn $(SVN_OBJDIR)/.installed: $(SVN_OBJDIR)/.compiled cd $(svn_builddir) \ && env MAKEFLAGS= make install install-tools touch $@ # SWIG 1.x and 2.x are not compatible. If SWIG 2.x is used to generated .swg # files and 1.x is used to build the bindings, the Python bindings fail to # load with errors such as "undefined symbol 'SWIG_Python_str_AsChar'". # So clean any pre-generated .swg files to make sure everything is done # by the same version of SWIG. $(SVN_OBJDIR)/.pre-generated-swig-cleaned: -cd $(svn_builddir) \ && env MAKEFLAGS= make clean-swig touch $@ # On OpenBSD, Perl's LDDLFLAGS include -L/usr/local/lib, which can cause # us to link Perl bindings against the wrong set of SVN libraries. # We manually fix up the generated Makefile.PL to work around this issue. ifeq ($(UNAME),OpenBSD) MAKEFILE_PL_LDDLFLAGS_HACK= sed -i 's@^WriteMakefile@$$config{LDDLFLAGS} =~ s+-L/usr/local/lib++; WriteMakefile@' \ $(SVN_SRCDIR)/subversion/bindings/swig/perl/native/Makefile.PL else MAKEFILE_PL_LDDLFLAGS_HACK=true endif $(SVN_OBJDIR)/.bindings-compiled: $(SVN_OBJDIR)/.installed $(SVN_OBJDIR)/.pre-generated-swig-cleaned cd $(svn_builddir) \ && env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ env MAKEFLAGS= make -j${MAKE_JOBS} swig-py cd $(svn_builddir) && \ env PATH=$(PREFIX)/ruby/bin:$$PATH \ LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) env MAKEFLAGS= make -j${MAKE_JOBS} swig-rb if [ $(ENABLE_PERL_BINDINGS) = yes ]; then \ cd $(svn_builddir) && make $(SVN_SRCDIR)/subversion/bindings/swig/perl/native/Makefile.PL; \ $(MAKEFILE_PL_LDDLFLAGS_HACK); \ cd $(svn_builddir) \ && env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ env MAKEFLAGS= make -j${MAKE_JOBS} swig-pl; \ fi if [ $(ENABLE_JAVA_BINDINGS) = yes ]; then \ cd $(svn_builddir) \ && env MAKEFLAGS= make javahl; \ fi touch $@ $(SVN_OBJDIR)/.bindings-installed: $(SVN_OBJDIR)/.bindings-compiled cd $(svn_builddir) \ && env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ env MAKEFLAGS= make install-swig-py cd $(svn_builddir) && \ env PATH=$(PREFIX)/ruby/bin:$$PATH \ LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) MAKEFLAGS= make install-swig-rb if [ $(ENABLE_PERL_BINDINGS) = yes ]; then \ cd $(svn_builddir) \ && env MAKEFLAGS= LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ make install-swig-pl-lib; \ cd subversion/bindings/swig/perl/native \ && perl Makefile.PL PREFIX="$(SVN_PREFIX)" \ && env MAKEFLAGS= LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ make install; \ fi if [ $(ENABLE_JAVA_BINDINGS) = yes ]; then \ cd $(svn_builddir) \ && env MAKEFLAGS= make install-javahl; \ fi touch $@ # run svn regression tests HTTPD_CHECK_CONF=$(PREFIX)/httpd/conf/httpd-svn-check-$(WC).conf HTTPD_PROXY_CONF=$(PREFIX)/httpd/conf/httpd-svn-proxy-$(WC).conf HTTPD_CHECK_USERS=$(PREFIX)/httpd/conf/httpd-svn-check-users HTTPD_CHECK_GROUPS=$(PREFIX)/httpd/conf/httpd-svn-check-groups HTTPD_CHECK_PORT=8081 HTTPD_PROXY_PORT=8082 MOD_DONTDOTHAT_CONF=$(PREFIX)/httpd/conf/dontdothat $(MOD_DONTDOTHAT_CONF): mkdir -p $(dir $@) echo > $@.tmp '[recursive-actions]' echo >>$@.tmp '/ = deny' mv -f $@.tmp $@ $(HTTPD_CHECK_GROUPS): mkdir -p $(dir $@) printf "random: jrandom\nconstant: jconstant\n" > $@ $(HTTPD_CHECK_CONF): $(MOD_DONTDOTHAT_CONF) $(HTTPD_CHECK_GROUPS) mkdir -p $(dir $@) env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(PREFIX)/httpd/bin/htpasswd -bc $(HTTPD_CHECK_USERS).tmp jrandom rayjandom env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(PREFIX)/httpd/bin/htpasswd -b $(HTTPD_CHECK_USERS).tmp jconstant rayjandom env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(PREFIX)/httpd/bin/htpasswd -b $(HTTPD_CHECK_USERS).tmp __dumpster__ __loadster__ env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(PREFIX)/httpd/bin/htpasswd -b $(HTTPD_CHECK_USERS).tmp JRANDOM rayjandom env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(PREFIX)/httpd/bin/htpasswd -b $(HTTPD_CHECK_USERS).tmp JCONSTANT rayjandom mv -f $(HTTPD_CHECK_USERS).tmp $(HTTPD_CHECK_USERS) echo > $@.tmp '# httpd config for make check' echo >>$@.tmp 'ServerRoot "$(PREFIX)/httpd"' echo >>$@.tmp 'Listen localhost:$(HTTPD_CHECK_PORT)' echo >>$@.tmp 'LogLevel warn' echo >>$@.tmp 'LoadModule unixd_module modules/mod_unixd.so' echo >>$@.tmp 'LoadModule alias_module modules/mod_alias.so' echo >>$@.tmp 'LoadModule access_compat_module modules/mod_access_compat.so' echo >>$@.tmp 'LoadModule authn_core_module modules/mod_authn_core.so' echo >>$@.tmp 'LoadModule authn_file_module modules/mod_authn_file.so' echo >>$@.tmp 'LoadModule authz_core_module modules/mod_authz_core.so' echo >>$@.tmp 'LoadModule authz_user_module modules/mod_authz_user.so' echo >>$@.tmp 'LoadModule authz_groupfile_module modules/mod_authz_groupfile.so' echo >>$@.tmp 'LoadModule auth_basic_module modules/mod_auth_basic.so' echo >>$@.tmp 'LoadModule dav_module modules/mod_dav.so' echo >>$@.tmp 'LoadModule dav_svn_module $(MOD_DAV_SVN)' echo >>$@.tmp 'LoadModule authz_svn_module $(MOD_AUTHZ_SVN)' echo >>$@.tmp 'LoadModule dontdothat_module $(MOD_DONTDOTHAT)' echo >>$@.tmp 'DocumentRoot "$(PREFIX)/httpd/htdocs"' echo >>$@.tmp '# These two Locations are used for "make check"' echo >>$@.tmp '' echo >>$@.tmp ' Options FollowSymLinks' echo >>$@.tmp ' AllowOverride None' echo >>$@.tmp ' Require all granted' echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/repositories' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' Require valid-user' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp/repos' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' Require valid-user' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp/trojan' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' Require valid-user' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '# This Location lets you access repositories dropped in /tmp/' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath /tmp' echo >>$@.tmp ' Require all granted' echo >>$@.tmp ' #AuthType Basic' echo >>$@.tmp ' #AuthName "Subversion Repository"' echo >>$@.tmp ' #AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' #Require valid-user' ifeq ($(USE_HTTPV1),yes) echo >> $@.tmp ' SVNAdvertiseV2Protocol off' endif ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >> $@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '# Location for tests using mod_dontdothat' echo >>$@.tmp '' echo >> $@.tmp 'DAV svn' echo >> $@.tmp 'SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/repositories' echo >> $@.tmp 'AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' echo >> $@.tmp 'AuthType Basic' echo >> $@.tmp 'AuthName "Subversion Repository"' echo >> $@.tmp 'AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' echo >> $@.tmp 'AuthUserFile $(HTTPD_CHECK_USERS)' echo >> $@.tmp 'Require valid-user' ifeq ($(USE_HTTPV1),yes) echo >> $@.tmp ' SVNAdvertiseV2Protocol off' endif echo >> $@.tmp 'DontDoThatConfigFile "$(MOD_DONTDOTHAT_CONF)"' echo >> $@.tmp '' echo >>$@.tmp '# Several locations for mod_authz_svn test follow' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif echo >>$@.tmp ' SVNListParentPath On' echo >>$@.tmp ' ' echo >>$@.tmp ' Require all granted' echo >>$@.tmp ' ' echo >>$@.tmp ' ' echo >>$@.tmp ' Requite all granted' echo >>$@.tmp ' ' ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/repositories' echo >>$@.tmp ' AuthzSVNReposRelativeAccessFile "^/authz"' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' Require valid-user' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif echo >>$@.tmp ' SVNListParentPath On' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' Require valid-user' echo >>$@.tmp ' Satisfy Any' ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif echo >>$@.tmp ' SVNListParentPath On' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' Require valid-user' echo >>$@.tmp ' AuthzSVNNoAuthWhenAnonymousAllowed On' echo >>$@.tmp ' SVNPathAuthz On' ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif echo >>$@.tmp ' SVNListParentPath On' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' Require valid-user' ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif echo >>$@.tmp ' SVNListParentPath On' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' Require valid-user' echo >>$@.tmp ' AuthzSVNAnonymous Off' echo >>$@.tmp ' SVNPathAuthz On' echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif echo >>$@.tmp ' SVNListParentPath On' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' Require valid-user' echo >>$@.tmp ' AuthzForceUsernameCase Lower' ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif echo >>$@.tmp ' SVNListParentPath On' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' AuthGroupFile $(HTTPD_CHECK_GROUPS)' echo >>$@.tmp ' Require group random' echo >>$@.tmp ' AuthzSVNAuthoritative Off' echo >>$@.tmp ' SVNPathAuthz On' echo >>$@.tmp '' echo >>$@.tmp '' echo >>$@.tmp ' ' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif echo >>$@.tmp ' SVNListParentPath On' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' AuthzSendForbiddenOnFailure On' echo >>$@.tmp ' Satisfy All' echo >>$@.tmp ' ' echo >>$@.tmp ' Require valid-user' echo >>$@.tmp ' Require expr req("ALLOW") == "1"' echo >>$@.tmp ' ' ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp ' ' echo >>$@.tmp ' ' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath $(SVN_WC)/subversion/tests/cmdline/svn-test-work/local_tmp' echo >>$@.tmp ' AuthzSVNAccessFile $(SVN_WC)/subversion/tests/cmdline/svn-test-work/authz' ifeq ($(USE_HTTPV1),yes) echo >>$@.tmp ' SVNAdvertiseV2Protocol off' endif echo >>$@.tmp ' SVNListParentPath On' echo >>$@.tmp ' AuthType Basic' echo >>$@.tmp ' AuthName "Subversion Repository"' echo >>$@.tmp ' AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' AuthzSendForbiddenOnFailure On' echo >>$@.tmp ' Satisfy All' echo >>$@.tmp ' ' echo >>$@.tmp ' Require valid-user' echo >>$@.tmp ' Require expr req("ALLOW") == "1"' echo >>$@.tmp ' ' ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >>$@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp ' ' echo >>$@.tmp '' echo >>$@.tmp 'RedirectMatch permanent ^/svn-test-work/repositories/REDIRECT-PERM-(.*)$$ /svn-test-work/repositories/$$1' echo >>$@.tmp 'RedirectMatch ^/svn-test-work/repositories/REDIRECT-TEMP-(.*)$$ /svn-test-work/repositories/$$1' echo >>$@.tmp 'IncludeOptional "conf/$(SVN_REL_WC)*-custom.conf"' echo >> $@.tmp '#SVNInMemoryCacheSize 0' echo >> $@.tmp '#SVNCacheTextDeltas Off' echo >> $@.tmp '#SVNCacheRevProps Off' mv -f $@.tmp $@ $(HTTPD_PROXY_CONF): $(HTTPD_CHECK_CONF) mkdir -p $(dir $@) echo > $@.tmp '# httpd config for a write-through proxy' echo >>$@.tmp 'ServerRoot "$(PREFIX)/httpd"' echo >>$@.tmp 'Listen localhost:$(HTTPD_PROXY_PORT)' echo >>$@.tmp 'LoadModule unixd_module modules/mod_unixd.so' echo >>$@.tmp 'LoadModule alias_module modules/mod_alias.so' echo >>$@.tmp 'LoadModule access_compat_module modules/mod_access_compat.so' echo >>$@.tmp 'LoadModule authn_core_module modules/mod_authn_core.so' echo >>$@.tmp 'LoadModule authn_file_module modules/mod_authn_file.so' echo >>$@.tmp 'LoadModule authz_core_module modules/mod_authz_core.so' echo >>$@.tmp 'LoadModule authz_user_module modules/mod_authz_user.so' echo >>$@.tmp 'LoadModule authz_groupfile_module modules/mod_authz_groupfile.so' echo >>$@.tmp 'LoadModule auth_basic_module modules/mod_auth_basic.so' echo >>$@.tmp 'LoadModule dav_module modules/mod_dav.so' echo >>$@.tmp 'LoadModule dav_svn_module $(MOD_DAV_SVN)' echo >>$@.tmp 'LoadModule authz_svn_module $(MOD_AUTHZ_SVN)' echo >>$@.tmp 'LoadModule dontdothat_module $(MOD_DONTDOTHAT)' echo >>$@.tmp 'DocumentRoot "$(PREFIX)/httpd/htdocs"' echo >>$@.tmp '# This Location lets you access repositories dropped in /tmp/svn-$(BRANCH)-proxy' echo >>$@.tmp '' echo >>$@.tmp ' DAV svn' echo >>$@.tmp ' SVNParentPath /tmp/svn-$(BRANCH)-proxy' echo >>$@.tmp ' SVNMasterURI http://localhost:$(HTTPD_CHECK_PORT)/svn/' echo >>$@.tmp ' Requite all granted' echo >>$@.tmp ' #AuthType Basic' echo >>$@.tmp ' #AuthName "Subversion Repository"' echo >>$@.tmp ' #AuthUserFile $(HTTPD_CHECK_USERS)' echo >>$@.tmp ' #Require valid-user' ifeq ($(USE_HTTPV1),yes) echo >> $@.tmp ' SVNAdvertiseV2Protocol off' endif ifeq ($(USE_AUTHZ_SHORT_CIRCUIT),yes) echo >> $@.tmp ' SVNPathAuthz short_circuit' endif echo >>$@.tmp '' echo >>$@.tmp '# This Location allows repositories to be synced' echo >>$@.tmp '' echo >>$@.tmp 'DAV svn' echo >>$@.tmp 'SVNParentPath /tmp/svn-$(BRANCH)-proxy' echo >>$@.tmp 'Require all granted' echo >>$@.tmp '' mv -f $@.tmp $@ .PHONY: libpath libpath: @echo export LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH" \ "PYTHONPATH=$(SVN_PREFIX)/lib/svn-python" # # OpenBSD requires an LD_PRELOAD hack to dlopen() libraries linked to # libpthread (e.g. libsvn_auth_gnome_keyring.so) into executables that # aren't linked to libpthread. ifeq ($(UNAME),OpenBSD) LIB_PTHREAD_HACK=LD_PRELOAD=libpthread.so endif .PHONY: start-svnserve stop-svnserve start-httpd stop-httpd HTTPD_CMD = env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(LIB_PTHREAD_HACK) \ $(PREFIX)/httpd/bin/apachectl HTTPD_LOG_ROTATE = mv $(PREFIX)/httpd/logs/error_log $(PREFIX)/httpd/logs/error_log.old HTTPD_START_CMD = $(HTTPD_CMD) -f $(HTTPD_CHECK_CONF) -k start HTTPD_START_CMD_PROXY = $(HTTPD_CMD) -f $(HTTPD_PROXY_CONF) HTTPD_START_CMD_DEBUG = $(HTTPD_START_CMD) -X HTTPD_STOP_CMD = $(HTTPD_CMD) -f $(HTTPD_CHECK_CONF) -k stop; sleep 3 SVNSERVE_START_CMD = (test -e $(PWD)/svnserve-*.pid && \ ls $(PWD)/svnserve-*.pid | while read pidfile; do \ kill `cat "$$pidfile"`; sleep 3; \ rm -f $$pidfile; \ done); \ $(SVN_PREFIX)/bin/svnserve \ --listen-host 127.0.0.1 \ --pid-file $(PWD)/svnserve-$(WC).pid \ -d -r $(svn_builddir)/subversion/tests/cmdline SVNSERVE_STOP_CMD = kill `cat $(PWD)/svnserve-$(WC).pid`; sleep 3; \ rm -f $(PWD)/svnserve-$(WC).pid start-httpd: $(HTTPD_CHECK_CONF) -$(HTTPD_LOG_ROTATE) $(HTTPD_START_CMD) @echo "To run tests over http, run:" @echo " make check BASE_URL=http://localhost:$(HTTPD_CHECK_PORT)" @echo "The URL http://localhost:$(HTTPD_CHECK_PORT)/svn/" @echo "lets you access repositories dropped into /tmp" start-httpd-debug: $(HTTPD_CHECK_CONF) $(HTTPD_START_CMD_DEBUG) & @echo "To run tests over http, run:" @echo " make check BASE_URL=http://localhost:$(HTTPD_CHECK_PORT)" @echo "The URL http://localhost:$(HTTPD_CHECK_PORT)/svn/" @echo "lets you access repositories dropped into /tmp" @echo "Trying to attach gdb to httpd..." @sleep 1 gdb $(PREFIX)/httpd/bin/httpd `cat $(PREFIX)/httpd/logs/httpd.pid` start-httpd-proxy: $(HTTPD_PROXY_CONF) $(HTTPD_START_CMD_PROXY) @echo "The URL http://localhost:$(HTTPD_PROXY_PORT)/svn/" @echo "lets you access repositories dropped into /tmp/svn-$(BRANCH)-proxy" stop-httpd: $(HTTPD_CHECK_CONF) $(HTTPD_STOP_CMD) stop-httpd-proxy: $(HTTPD_PROXY_CONF) pkill -f '$(PREFIX)/httpd/bin/httpd -f $(HTTPD_PROXY_CONF)' start-svnserve: $(SVN_OBJDIR)/.compiled $(SVNSERVE_START_CMD) stop-svnserve: $(SVNSERVE_STOP_CMD) define do_check -cd $(svn_builddir) && for fs in $(SVN_CHECK_FS_BACKENDS); do \ echo "Begin test: $(subst svn-check-,,$@) x $$fs"; \ test -d "$(RAMDISK)/tmp" && export TMPDIR="$(RAMDISK)/tmp"; \ env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(LIB_PTHREAD_HACK) \ env MAKEFLAGS= make check PARALLEL=$(PARALLEL) CLEANUP=$(CLEANUP) \ EXCLUSIVE_WC_LOCKS=$(EXCLUSIVE_WC_LOCKS) \ THREADED=$(THREADED) \ SVN_BIN_DIR=$(SVN_PREFIX)/bin \ MEMCACHED_SERVER=$(MEMCACHED_SERVER) $1 FS_TYPE=$$fs; \ for log in tests.log fails.log; do \ test -f $$log && mv -f $$log $$log.$@-$$fs; \ done; \ done endef TEST_WORK=$(svn_builddir)/subversion/tests/cmdline/svn-test-work svn-check-prepare-ramdisk: -rm -rf "$(TEST_WORK)"; \ if [ -d "$(RAMDISK)" ] && \ touch "$(RAMDISK)/$(SVN_REL_WC).writetest" && \ mkdir -p "$(RAMDISK)/$(SVN_REL_WC)"; then \ rm -f "$(RAMDISK)/$(SVN_REL_WC).writetest"; \ ln -s "$(RAMDISK)/$(SVN_REL_WC)" "$(TEST_WORK)"; \ mkdir -p "$(RAMDISK)/tmp"; \ fi ifndef NEON_FLAG svn-check-neon: @echo Neon is not supported by this build of Subversion, skipping tests @true else svn-check-neon: $(HTTPD_CHECK_CONF) $(SVN_OBJDIR)/.compiled $(SVN_OBJDIR)/.bindings-compiled svn-check-prepare-ramdisk $(HTTPD_START_CMD) $(call do_check,BASE_URL=http://localhost:$(HTTPD_CHECK_PORT) HTTP_LIBRARY=neon) $(HTTPD_STOP_CMD) endif svn-check-serf: $(HTTPD_CHECK_CONF) $(SVN_OBJDIR)/.compiled $(SVN_OBJDIR)/.bindings-compiled svn-check-prepare-ramdisk $(HTTPD_START_CMD) $(call do_check,BASE_URL=http://localhost:$(HTTPD_CHECK_PORT) HTTP_LIBRARY=serf) $(HTTPD_STOP_CMD) svn-check-local: svn-check-prepare-ramdisk $(call do_check) svn-check-svn: svn-check-prepare-ramdisk $(SVNSERVE_START_CMD) $(call do_check,BASE_URL=svn://127.0.0.1) $(SVNSERVE_STOP_CMD) .PHONY: svn-check-swig-pl svn-check-swig-py svn-check-swig-rb svn-check-javahl svn-check-bindings: svn-check-swig-pl svn-check-swig-py svn-check-swig-rb \ svn-check-javahl RUBYLIB=$(SVN_PREFIX)/lib/ruby/site_ruby$(shell grep \ ^svn_cv_ruby_sitedir_archsuffix $(svn_builddir)/config.log | \ cut -d'=' -f2):$(SVN_PREFIX)/lib/ruby/site_ruby$(shell \ grep ^svn_cv_ruby_sitedir_libsuffix $(svn_builddir)/config.log | \ cut -d'=' -f2) svn-check-swig-pl: -if [ $(ENABLE_PERL_BINDINGS) = yes ]; then \ (cd $(svn_builddir) && \ env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ $(LIB_PTHREAD_HACK) \ env MAKEFLAGS= make check-swig-pl 2>&1) | \ tee $(svn_builddir)/tests.log.bindings.pl; \ fi svn-check-swig-py: -(cd $(svn_builddir) && \ env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ PATH=$(PYTHON_BIN_PATH):$$PATH \ MAKEFLAGS= make check-swig-py 2>&1) | \ tee $(svn_builddir)/tests.log.bindings.py # We add the svn prefix to PATH here because the ruby tests # attempt to start an svnserve binary found in PATH. svn-check-swig-rb: (cd $(svn_builddir) && \ env RUBYLIB=$(RUBYLIB) \ LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ PATH=$(SVN_PREFIX)/bin:$$PATH \ $(LIB_PTHREAD_HACK) \ env MAKEFLAGS= make check-swig-rb 2>&1) | \ tee $(svn_builddir)/tests.log.bindings.rb svn-check-javahl: -if [ $(ENABLE_JAVA_BINDINGS) = yes ]; then \ ln -s libsvnjavahl-1.so.0.0 $(PREFIX)/svn-$(WC)/lib/libsvnjavahl-1.so; \ (cd $(svn_builddir) && \ env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ MAKEFLAGS= make $(JAVAHL_CHECK_TARGET) 2>&1) | \ tee $(svn_builddir)/tests.log.bindings.javahl; \ fi svn-check: svn-check-prepare-ramdisk svn-check-local svn-check-svn \ svn-check-neon svn-check-serf svn-check-bindings .PHONY: sign-email ifdef NEON_FLAG NEON_STR=ra_neon | NEON_VER_LINE=@echo "neon: $(NEON_VER)" endif sign-email: @echo "Summary: +1 to release" @echo "" @echo "Tested: [bdb | fsfs] x [ra_local | ra_svn | $(NEON_STR)ra_serf]" @echo " swig bindings" ifeq ($(ENABLE_JAVA_BINDINGS),yes) @echo " javahl bindings" endif @echo "" @echo "Test results: All passed." @echo "" @echo "Platform: `uname -r -s -m`" @echo "" @echo "Dependencies:" @echo "bdb: $(BDB_VER)" ifeq ($(USE_APR_ICONV),yes) @echo "apr-iconv: $(APR_ICONV_VER)" else @echo "GNU-iconv: $(GNU_ICONV_VER)" endif @echo "apr: $(APR_VER)" @echo "apr-util: $(APR_UTIL_VER)" @echo "httpd: $(HTTPD_VER)" $(NEON_VER_LINE) @echo "serf: $(SERF_VER)" @echo "cyrus-sasl: $(CYRUS_SASL_VER)" @echo "sqlite: $(SQLITE_VER)" ifdef LZ4_FLAG @echo "lz4: $(LZ4_VER)" endif @echo "libssl: `openssl version`" ifdef SWIG_FLAG @echo "swig: `$(PREFIX)/swig/bin/swig -version | grep Version | cut -d' ' -f3`" else @echo "swig: `swig -version | grep Version | cut -d' ' -f3`" endif @echo "python: $(PYTHON_VER)" @echo "perl: `eval \`perl -V:version\`; echo $$version`" @echo "ruby: $(RUBY_VER)" ifeq ($(ENABLE_JAVA_BINDINGS),yes) @echo "java: `java -version 2>&1 | grep version | cut -d' ' -f3 | sed -e 's/\"//g'`" endif @echo "" @echo "Signatures:" @echo @echo "subversion-$(TAG).tar.gz" @echo "`cat subversion-$(TAG).tar.gz.asc`" @echo @echo "subversion-$(TAG).tar.bz2" @echo "`cat subversion-$(TAG).tar.bz2.asc`"