You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by jc...@apache.org on 2010/12/02 22:13:38 UTC
svn commit: r1041583 [5/5] - in
/subversion/branches/diff-optimizations-bytes: ./ build/
contrib/hook-scripts/ contrib/server-side/ subversion/bindings/javahl/native/
subversion/bindings/javahl/src/org/apache/subversion/javahl/
subversion/bindings/java...
Modified: subversion/branches/diff-optimizations-bytes/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/tools/dev/unix-build/Makefile.svn?rev=1041583&r1=1041582&r2=1041583&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/diff-optimizations-bytes/tools/dev/unix-build/Makefile.svn Thu Dec 2 21:13:35 2010
@@ -38,7 +38,7 @@ APR_UTIL_VER = 1.3.9
HTTPD_VER = 2.2.15
NEON_VER = 0.29.3
SERF_VER = 0.7.x
-SERF_OLD_VER = 0.6.x
+SERF_OLD_VER = 0.3.1
CYRUS_SASL_VER = 2.1.23
SQLITE_VER = 3.6.23.1
@@ -70,7 +70,7 @@ HTTPD_URL = http://archive.apache.org/di
NEON_URL = http://webdav.org/neon/$(NEON_DIST)
#SERF_URL = http://serf.googlecode.com/files/$(SERF_DIST)
SERF_URL = http://serf.googlecode.com/svn/branches/$(SERF_VER)
-SERF_OLD_URL = http://serf.googlecode.com/svn/branches/$(SERF_OLD_VER)
+SERF_OLD_URL = http://serf.googlecode.com/svn/tags/$(SERF_OLD_VER)
SQLITE_URL = http://www.sqlite.org/$(SQLITE_DIST)
CYRUS_SASL_URL = ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/$(CYRUS_SASL_DIST)
@@ -105,6 +105,10 @@ SVN_OBJDIR = $(OBJDIR)/$(SVN_REL_WC)
# builds!
svn_builddir ?=$(SVN_WC)
+ifdef PROFILE
+PROFILE_CFLAGS=-pg
+endif
+
#######################################################################
# Main targets.
#######################################################################
@@ -117,12 +121,13 @@ all: dirs-create bdb-install apr-install
# Use these to start a build from the beginning.
reset: dirs-reset bdb-reset apr-reset iconv-reset apr-util-reset \
- httpd-reset neon-reset serf-reset sqlite-reset cyrus-sasl-reset \
- svn-reset
+ httpd-reset neon-reset serf-reset serf-old-reset sqlite-reset \
+ cyrus-sasl-reset svn-reset
-# Use to save disc space.
+# Use to save disk space.
clean: bdb-clean apr-clean iconv-clean apr-util-clean httpd-clean \
- neon-clean serf-clean cyrus-sasl-clean svn-clean
+ neon-clean serf-clean serf-old-clean sqlite-clean cyrus-sasl-clean \
+ svn-clean
# Nukes everything (including installed binaries!)
# Use this to start ALL OVER AGAIN! Use with caution!
@@ -189,7 +194,8 @@ $(BDB_OBJDIR)/.retrieved: $(DISTDIR)/$(B
# configure bdb
$(BDB_OBJDIR)/.configured: $(BDB_OBJDIR)/.retrieved
cd $(BDB_SRCDIR)/build_unix \
- && env CFLAGS="-g" ../dist/configure \
+ && env CFLAGS="-g $(PROFILE_CFLAGS)" \
+ ../dist/configure \
--prefix=$(PREFIX)/bdb \
--enable-debug
touch $@
@@ -227,6 +233,12 @@ $(APR_OBJDIR)/.retrieved:
fi
touch $@
+ifdef THREADING
+THREADS_FLAG=--enable-threads
+else
+THREADS_FLAG=--disable-threads
+endif
+
# configure apr
$(APR_OBJDIR)/.configured: $(APR_OBJDIR)/.retrieved
cp $(APR_SRCDIR)/build/apr_hints.m4 \
@@ -236,10 +248,11 @@ $(APR_OBJDIR)/.configured: $(APR_OBJDIR)
> $(APR_SRCDIR)/build/apr_hints.m4
cd $(APR_SRCDIR) && ./buildconf
cd $(APR_OBJDIR) \
- && env CFLAGS="-O0 -g" $(APR_SRCDIR)/configure \
+ && env CFLAGS="-O0 -g $(PROFILE_CFLAGS)" \
+ $(APR_SRCDIR)/configure \
--prefix=$(PREFIX)/apr \
--enable-maintainer-mode \
- --disable-threads
+ $(THREADS_FLAG)
touch $@
# compile apr
@@ -280,7 +293,8 @@ $(APR_ICONV_OBJDIR)/.retrieved: $(DISTDI
# configure apr-iconv
$(APR_ICONV_OBJDIR)/.configured: $(APR_ICONV_OBJDIR)/.retrieved
cd $(APR_ICONV_OBJDIR) \
- && env CFLAGS="-g" $(APR_ICONV_SRCDIR)/configure \
+ && env CFLAGS="-g $(PROFILE_CFLAGS)" \
+ $(APR_ICONV_SRCDIR)/configure \
--prefix=$(PREFIX)/apr \
--with-apr=$(PREFIX)/apr
touch $@
@@ -288,7 +302,7 @@ $(APR_ICONV_OBJDIR)/.configured: $(APR_I
# compile apr-iconv
$(APR_ICONV_OBJDIR)/.compiled: $(APR_ICONV_OBJDIR)/.configured
(cd $(APR_ICONV_OBJDIR) \
- && make CPPFLAGS="-D_OSD_POSIX" CFLAGS="-g -O0")
+ && make CPPFLAGS="-D_OSD_POSIX" CFLAGS="-g -O0 $(PROFILE_CFLAGS)")
touch $@
# install apr-iconv
@@ -359,7 +373,8 @@ $(GNU_ICONV_OBJDIR)/.configured: $(GNU_I
cd $(SRCDIR)/libiconv-${GNU_ICONV_VER} && \
${MAKE} -f Makefile.devel lib/aliases.h
cd $(GNU_ICONV_OBJDIR) \
- && env CFLAGS="-g" $(GNU_ICONV_SRCDIR)/configure \
+ && env CFLAGS="-g $(PROFILE_CFLAGS)" \
+ $(GNU_ICONV_SRCDIR)/configure \
--prefix=$(PREFIX)/iconv \
--enable-extra-encodings
touch $@
@@ -426,7 +441,7 @@ $(APR_UTIL_OBJDIR)/.configured: $(APR_UT
cd $(APR_UTIL_SRCDIR) && ./buildconf --with-apr=$(APR_SRCDIR)
cd $(APR_UTIL_OBJDIR) \
&& env LD_LIBRARY_PATH=$(PREFIX)/bdb/lib \
- CFLAGS="-O0 -g" \
+ CFLAGS="-O0 -g $(PROFILE_CFLAGS)" \
$(APR_UTIL_SRCDIR)/configure \
--prefix=$(PREFIX)/apr \
--enable-maintainer-mode \
@@ -474,7 +489,8 @@ $(HTTPD_OBJDIR)/.retrieved: $(DISTDIR)/$
# configure httpd
$(HTTPD_OBJDIR)/.configured: $(HTTPD_OBJDIR)/.retrieved
cd $(HTTPD_OBJDIR) \
- && $(HTTPD_SRCDIR)/configure \
+ && CFLAGS="$(PROFILE_CFLAGS)" \
+ $(HTTPD_SRCDIR)/configure \
--prefix=$(PREFIX)/httpd \
--enable-maintainer-mode \
--enable-ssl \
@@ -553,7 +569,8 @@ $(NEON_OBJDIR)/.configured: $(NEON_OBJDI
chmod +x $(NEON_OBJDIR)/krb5-config; \
fi
cd $(NEON_OBJDIR) \
- && env CFLAGS="-g" $(NEON_SRCDIR)/configure \
+ && env CFLAGS="-g $(PROFILE_CFLAGS)" \
+ $(NEON_SRCDIR)/configure \
PATH=$(NEON_OBJDIR):$$PATH \
--prefix=$(PREFIX)/neon \
--with-ssl \
@@ -611,7 +628,8 @@ $(SERF_OBJDIR)/.retrieved:
# compile serf (serf won't compile outside its source tree)
$(SERF_OBJDIR)/.compiled: $(SERF_OBJDIR)/.retrieved
cd $(SERF_SRCDIR) && \
- env CFLAGS="-O0 -g" ./serfmake --with-apr=$(PREFIX)/apr \
+ env CFLAGS="-O0 -g $(PROFILE_CFLAGS)" \
+ ./serfmake --with-apr=$(PREFIX)/apr \
--prefix=$(PREFIX)/serf \
build
touch $@
@@ -651,7 +669,8 @@ $(SERF_OLD_OBJDIR)/.retrieved:
# compile serf (serf won't compile outside its source tree)
$(SERF_OLD_OBJDIR)/.compiled: $(SERF_OLD_OBJDIR)/.retrieved
cd $(SERF_OLD_SRCDIR) && \
- env CFLAGS="-O0 -g" ./serfmake --with-apr=$(PREFIX)/apr \
+ env CFLAGS="-O0 -g $(PROFILE_CFLAGS)" \
+ ./serfmake --with-apr=$(PREFIX)/apr \
--prefix=$(PREFIX)/serf-old \
build
touch $@
@@ -678,6 +697,9 @@ sqlite-reset:
$(foreach f, .retrieved .configured .compiled .installed, \
rm -f $(SQLITE_OBJDIR)/$(f);)
+sqlite-clean:
+ -cd $(SQLITE_OBJDIR) && make clean
+
# fetch distfile for sqlite
$(DISTDIR)/$(SQLITE_DIST):
cd $(DISTDIR) && $(FETCH_CMD) $(SQLITE_URL)
@@ -688,13 +710,20 @@ $(SQLITE_OBJDIR)/.retrieved: $(DISTDIR)/
tar -C $(SRCDIR) -zxf $(DISTDIR)/$(SQLITE_DIST)
touch $@
+ifdef THREADING
+THREADSAFE_FLAG=--enable-threadsafe
+else
+THREADSAFE_FLAG=--disable-threadsafe
+endif
+
# configure sqlite
$(SQLITE_OBJDIR)/.configured: $(SQLITE_OBJDIR)/.retrieved
cd $(SQLITE_OBJDIR) \
- && env CFLAGS="-g" $(SQLITE_SRCDIR)/configure \
+ && env CFLAGS="-g $(PROFILE_CFLAGS)" \
+ $(SQLITE_SRCDIR)/configure \
--prefix=$(PREFIX)/sqlite \
--disable-tcl \
- --disable-threadsafe
+ $(THREADSAFE_FLAG)
touch $@
# compile sqlite
@@ -720,7 +749,7 @@ cyrus-sasl-reset:
rm -f $(CYRUS_SASL_OBJDIR)/$(f);)
cyrus-sasl-clean:
- -(cd $(CYRUS_SASL_OBJDIR) && make clean)
+ -(cd $(CYRUS_SASL_OBJDIR) && make distclean)
# fetch distfile for cyrus-sasl
$(DISTDIR)/$(CYRUS_SASL_DIST):
@@ -736,12 +765,22 @@ $(CYRUS_SASL_OBJDIR)/.retrieved: $(DISTD
> $(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
touch $@
# configure cyrus-sasl
$(CYRUS_SASL_OBJDIR)/.configured: $(CYRUS_SASL_OBJDIR)/.retrieved
cd $(CYRUS_SASL_OBJDIR) \
- && env CFLAGS="-g" $(CYRUS_SASL_SRCDIR)/configure \
+ && env CFLAGS="-g $(PROFILE_CFLAGS)" \
+ CPPFLAGS="-I/usr/include/kerberosV" \
+ $(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 \
@@ -810,19 +849,39 @@ $(SVN_OBJDIR)/.retrieved:
ifeq ($(BRANCH_MAJOR),1.5)
BDB_FLAG=$(PREFIX)/bdb
SERF_FLAG=--with-serf="$(PREFIX)/serf-old"
+MOD_DAV_SVN=modules/mod_dav_svn.so
+MOD_AUTHZ_SVN=modules/mod_authz_svn.so
+DISABLE_NEON_VERSION_CHECK=--disable-neon-version-check
else ifeq ($(BRANCH_MAJOR),1.4)
BDB_FLAG=$(PREFIX)/bdb
+MOD_DAV_SVN=modules/mod_dav_svn.so
+MOD_AUTHZ_SVN=modules/mod_authz_svn.so
+DISABLE_NEON_VERSION_CHECK=--disable-neon-version-check
else ifeq ($(BRANCH_MAJOR),1.3)
BDB_FLAG=$(PREFIX)/bdb
+MOD_DAV_SVN=modules/mod_dav_svn.so
+MOD_AUTHZ_SVN=modules/mod_authz_svn.so
+DISABLE_NEON_VERSION_CHECK=--disable-neon-version-check
else ifeq ($(BRANCH_MAJOR),1.2)
BDB_FLAG=$(PREFIX)/bdb
+MOD_DAV_SVN=modules/mod_dav_svn.so
+MOD_AUTHZ_SVN=modules/mod_authz_svn.so
+DISABLE_NEON_VERSION_CHECK=--disable-neon-version-check
else ifeq ($(BRANCH_MAJOR),1.1)
BDB_FLAG=$(PREFIX)/bdb
+MOD_DAV_SVN=modules/mod_dav_svn.so
+MOD_AUTHZ_SVN=modules/mod_authz_svn.so
+DISABLE_NEON_VERSION_CHECK=--disable-neon-version-check
else ifeq ($(BRANCH_MAJOR),1.0)
BDB_FLAG=$(PREFIX)/bdb
+MOD_DAV_SVN=modules/mod_dav_svn.so
+MOD_AUTHZ_SVN=modules/mod_authz_svn.so
+DISABLE_NEON_VERSION_CHECK=--disable-neon-version-check
else
BDB_FLAG=db.h:$(PREFIX)/bdb/include:$(PREFIX)/bdb/lib:db-$(BDB_MAJOR_VER)
SERF_FLAG=--with-serf="$(PREFIX)/serf"
+MOD_DAV_SVN=modules/svn-$(WC)/mod_dav_svn.so
+MOD_AUTHZ_SVN=modules/svn-$(WC)/mod_authz_svn.so
endif
ifeq ($(ENABLE_JAVA_BINDINGS),yes)
@@ -832,6 +891,14 @@ else
JAVAHL_FLAG=--enable-javahl=no
endif
+ifdef PROFILE
+SVN_ALL_STATIC=--enable-all-static
+else
+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
+
# configure svn
$(SVN_OBJDIR)/.configured: $(SVN_OBJDIR)/.retrieved
@if [ $(ENABLE_JAVA_BINDINGS) = yes ]; then \
@@ -850,22 +917,23 @@ $(SVN_OBJDIR)/.configured: $(SVN_OBJDIR)
--prefix="$(SVN_PREFIX)" \
--with-apr="$(PREFIX)/apr" \
--with-apr-util="$(PREFIX)/apr" \
- --with-apxs="$(PREFIX)/httpd/bin/apxs" \
- --with-apache-libexecdir=$(PREFIX)/httpd/modules/svn-$(WC) \
--with-neon="$(PREFIX)/neon" \
+ $(SVN_WITH_HTTPD) \
+ $(SVN_WITH_SASL) \
$(SERF_FLAG) \
--with-sqlite="$(PREFIX)/sqlite" \
--with-berkeley-db="$(BDB_FLAG)" \
- --with-sasl="$(PREFIX)/cyrus-sasl" \
--with-ruby-sitedir="$(SVN_PREFIX)/lib/ruby/site_ruby" \
--disable-mod-activation \
- $(JAVAHL_FLAG)
+ $(JAVAHL_FLAG) \
+ $(SVN_ALL_STATIC) \
+ $(DISABLE_NEON_VERSION_CHECK)
touch $@
# compile svn
$(SVN_OBJDIR)/.compiled: $(SVN_OBJDIR)/.configured
cd $(svn_builddir) \
- && make
+ && make EXTRA_CFLAGS="$(PROFILE_CFLAGS)"
touch $@
# install svn
@@ -925,8 +993,8 @@ httpd-conf:
echo "# httpd config for make check" > $(HTTPD_CHECK_CONF)
echo "ServerRoot \"$(PREFIX)/httpd\"" >> $(HTTPD_CHECK_CONF)
echo "Listen localhost:$(HTTPD_CHECK_PORT)" >> $(HTTPD_CHECK_CONF)
- echo "LoadModule dav_svn_module modules/svn-$(WC)/mod_dav_svn.so" >> $(HTTPD_CHECK_CONF)
- echo "LoadModule authz_svn_module modules/svn-$(WC)/mod_authz_svn.so" >> $(HTTPD_CHECK_CONF)
+ echo "LoadModule dav_svn_module $(MOD_DAV_SVN)" >> $(HTTPD_CHECK_CONF)
+ echo "LoadModule authz_svn_module $(MOD_AUTHZ_SVN)" >> $(HTTPD_CHECK_CONF)
echo "DocumentRoot "$(PREFIX)/httpd/htdocs"" >> $(HTTPD_CHECK_CONF)
echo "# These two Locations are used for 'make check'" >> $(HTTPD_CHECK_CONF)
echo "<Directory />" >> $(HTTPD_CHECK_CONF)
@@ -965,6 +1033,10 @@ httpd-conf:
# We need this to make sure some targets below pick up the right libraries
LD_LIBRARY_PATH=$(PREFIX)/apr/lib:$(PREFIX)/iconv/lib:$(PREFIX)/bdb/lib:$(PREFIX)/neon/lib:$(PREFIX)/serf/lib:$(PREFIX)/sqlite/lib:$(PREFIX)/cyrus-sasl/lib:$(PREFIX)/iconv/lib:$(PREFIX)/svn-$(WC)/lib
+.PHONY: libpath
+libpath:
+ @echo export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH
+
.PHONY: start-svnserve stop-svnserve start-httpd stop-httpd
HTTPD_CMD = env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
@@ -998,17 +1070,22 @@ stop-svnserve:
# run tests in parallel
PARALLEL=PARALLEL=1 CLEANUP=1
+TEST_LOGS=tests.log fails.log
svn-check-neon: httpd-conf $(SVN_OBJDIR)/.compiled $(SVN_OBJDIR)/.bindings-compiled
$(HTTPD_START_CMD)
-cd $(svn_builddir) && make check FS_TYPE=fsfs \
BASE_URL=http://localhost:$(HTTPD_CHECK_PORT) HTTP_LIBRARY=neon \
$(PARALLEL)
- cp -f $(svn_builddir)/tests.log $(svn_builddir)/tests.log.ra_neon-fsfs
+ -$(foreach log, $(TEST_LOGS), \
+ test -f $(svn_builddir)/$(log) && cp -f $(svn_builddir)/$(log) \
+ $(svn_builddir)/$(log).$@-fsfs;)
-cd $(svn_builddir) && make check FS_TYPE=bdb \
BASE_URL=http://localhost:$(HTTPD_CHECK_PORT) HTTP_LIBRARY=neon \
$(PARALLEL)
- cp -f $(svn_builddir)/tests.log $(svn_builddir)/tests.log.ra_neon-bdb
+ -$(foreach log, $(TEST_LOGS), \
+ test -f $(svn_builddir)/$(log) && cp -f $(svn_builddir)/$(log) \
+ $(svn_builddir)/$(log).$@-bdb;)
$(HTTPD_STOP_CMD)
svn-check-serf: httpd-conf $(SVN_OBJDIR)/.compiled $(SVN_OBJDIR)/.bindings-compiled
@@ -1016,27 +1093,39 @@ svn-check-serf: httpd-conf $(SVN_OBJDIR)
-cd $(svn_builddir) && make check FS_TYPE=fsfs \
BASE_URL=http://localhost:$(HTTPD_CHECK_PORT) HTTP_LIBRARY=serf \
$(PARALLEL)
- cp -f $(svn_builddir)/tests.log $(svn_builddir)/tests.log.ra_serf-fsfs
+ -$(foreach log, $(TEST_LOGS), \
+ test -f $(svn_builddir)/$(log) && cp -f $(svn_builddir)/$(log) \
+ $(svn_builddir)/$(log).$@-fsfs;)
-cd $(svn_builddir) && make check FS_TYPE=bdb \
BASE_URL=http://localhost:$(HTTPD_CHECK_PORT) HTTP_LIBRARY=serf \
$(PARALLEL)
- cp -f $(svn_builddir)/tests.log $(svn_builddir)/tests.log.ra_serf-bdb
+ -$(foreach log, $(TEST_LOGS), \
+ test -f $(svn_builddir)/$(log) && cp -f $(svn_builddir)/$(log) \
+ $(svn_builddir)/$(log).$@-bdb;)
$(HTTPD_STOP_CMD)
svn-check-local:
-cd $(svn_builddir) && make check FS_TYPE=fsfs $(PARALLEL)
- cp -f $(svn_builddir)/tests.log $(svn_builddir)/tests.log.ra_local-fsfs
+ -$(foreach log, $(TEST_LOGS), \
+ test -f $(svn_builddir)/$(log) && cp -f $(svn_builddir)/$(log) \
+ $(svn_builddir)/$(log).$@-fsfs;)
-cd $(svn_builddir) && make check FS_TYPE=bdb $(PARALLEL)
- cp -f $(svn_builddir)/tests.log $(svn_builddir)/tests.log.ra_local-bdb
+ -$(foreach log, $(TEST_LOGS), \
+ test -f $(svn_builddir)/$(log) && cp -f $(svn_builddir)/$(log) \
+ $(svn_builddir)/$(log).$@-bdb;)
svn-check-svn:
$(SVNSERVE_START_CMD)
-cd $(svn_builddir) && make check FS_TYPE=fsfs \
BASE_URL=svn://127.0.0.1 $(PARALLEL)
- cp -f $(svn_builddir)/tests.log $(svn_builddir)/tests.log.ra_svn-fsfs
+ -$(foreach log, $(TEST_LOGS), \
+ test -f $(svn_builddir)/$(log) && cp -f $(svn_builddir)/$(log) \
+ $(svn_builddir)/$(log).$@-fsfs;)
-cd $(svn_builddir) && make check FS_TYPE=bdb \
BASE_URL=svn://127.0.0.1 $(PARALLEL)
- cp -f $(svn_builddir)/tests.log $(svn_builddir)/tests.log.ra_svn-bdb
+ -$(foreach log, $(TEST_LOGS), \
+ test -f $(svn_builddir)/$(log) && cp -f $(svn_builddir)/$(log) \
+ $(svn_builddir)/$(log).$@-bdb;)
$(SVNSERVE_STOP_CMD)
.PHONY: svn-check-swig-pl svn-check-swig-py svn-check-swig-rb svn-check-javahl
@@ -1050,36 +1139,39 @@ RUBYLIB=$(SVN_PREFIX)/lib/ruby/site_ruby
cut -d'=' -f2)
svn-check-swig-pl:
-if [ $(ENABLE_PERL_BINDINGS) = yes ]; then \
- cd $(svn_builddir) && \
+ (cd $(svn_builddir) && \
env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
- make check-swig-pl; \
+ make check-swig-pl 2>&1) | \
+ tee $(svn_builddir)/tests.log.bindings.pl; \
fi
- touch $@
svn-check-swig-py:
-if [ $(ENABLE_PYTHON_BINDINGS) = yes ]; then \
- cd $(svn_builddir) && \
+ (cd $(svn_builddir) && \
env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
- make check-swig-py; \
+ make check-swig-py 2>&1) | \
+ tee $(svn_builddir)/tests.log.bindings.py; \
fi
- touch $@
+# 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:
-if [ $(ENABLE_RUBY_BINDINGS) = yes ]; then \
- cd $(svn_builddir)/subversion/bindings/swig/ruby/test && \
+ (cd $(svn_builddir)/subversion/bindings/swig/ruby/test && \
env RUBYLIB=$(RUBYLIB) \
LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
- ruby run-test.rb --verbose=normal; \
+ PATH=$(SVN_PREFIX)/bin:$$PATH \
+ ruby run-test.rb --verbose=normal 2>&1) | \
+ tee $(svn_builddir)/tests.log.bindings.rb; \
fi
- touch $@
svn-check-javahl:
-if [ $(ENABLE_JAVA_BINDINGS) = yes ]; then \
- cd $(svn_builddir) && \
+ (cd $(svn_builddir) && \
env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
- make check-javahl; \
+ make check-javahl 2>&1) | \
+ tee $(svn_builddir)/tests.log.bindings.javahl; \
fi
- touch $@
svn-check: svn-check-local svn-check-svn svn-check-neon svn-check-serf svn-check-bindings
@@ -1114,7 +1206,7 @@ endif
@echo "openssl: `openssl version | cut -d' ' -f2`"
@echo "swig: `swig -version | grep Version | cut -d' ' -f3`"
@echo "python: `python --version 2>&1 | cut -d' ' -f2`"
- @echo "perl: `perl -version | grep ^This | cut -d' ' -f4 | sed -e 's/^v//'`"
+ @echo "perl: `eval \`perl -V:version\`; echo $$version`"
@echo "ruby: `ruby --version | cut -d' ' -f2`"
ifeq ($(ENABLE_JAVA_BINDINGS),yes)
@echo "java: `java -version 2>&1 | grep version | cut -d' ' -f3 | sed -e 's/\"//g'`"
Modified: subversion/branches/diff-optimizations-bytes/tools/dist/collect_sigs.py
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/tools/dist/collect_sigs.py?rev=1041583&r1=1041582&r2=1041583&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/tools/dist/collect_sigs.py (original)
+++ subversion/branches/diff-optimizations-bytes/tools/dist/collect_sigs.py Thu Dec 2 21:13:35 2010
@@ -1,10 +1,107 @@
#!/usr/bin/env python
+#
+#
+# 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.
+#
+#
+# A script intended to be useful in helping to collect signatures for a
+# release. This is a pretty rough, and patches are welcome to improve it.
+#
+# Some thoughts about future improvement:
+# * Display of per-file and per-release statistics
+# * Make use of the python-gpg package (http://code.google.com/p/python-gnupg/)
+# * Post to IRC when a new signature is collected
+# - Since we don't want to have a long running bot, perhaps we could
+# also patch wayita to accept and then echo a privmsg?
+#
+
+import sys, os
+import sqlite3
+
+def make_config():
+ 'Output a blank config file'
+
+ if os.path.exists('config.py'):
+ print "'config.py' already exists!'"
+ sys.exit(1)
+
+ conf = open('config.py', 'w')
+ conf.write("version = ''\n")
+ conf.write("sigdir = ''\n")
+ conf.write("filesdir = ''\n")
+ conf.close()
+
+ print "'config.py' generated"
+
+def make_db():
+ 'Initialize a blank database'
+
+ db = sqlite3.connect('sigs.db')
+ db.execute('''
+ CREATE TABLE signatures (
+ keyid TEXT, filename TEXT, signature BLOB,
+ UNIQUE(keyid,filename)
+ );
+''');
+
+# This function is web-facing
+def generate_asc_files(target_dir='.'):
+ fds = {}
+ def _open(filename):
+ if not fds.has_key(filename):
+ fd = open(os.path.join(target_dir, filename + '.asc'), 'w')
+ fds[filename] = fd
+ return fds[filename]
+
+ db = sqlite3.connect(os.path.join(target_dir, 'sigs.db'))
+ curs = db.cursor()
+ curs.execute('SELECT filename, signature FROM signatures;')
+ for filename, signature in curs:
+ fd = _open(filename)
+ fd.write(signature + "\n")
+
+ for fd in fds.values():
+ fd.flush()
+ fd.close()
+
+actions = {
+ 'make_config' : make_config,
+ 'make_db' : make_db,
+ 'make_asc' : generate_asc_files,
+}
+
+
+if __name__ == '__main__':
+ if len(sys.argv) > 1:
+ if sys.argv[1] in actions:
+ actions[sys.argv[1]]()
+ sys.exit(0)
+
+
+# Stuff below this line is the web-facing side
+# ======================================================================
+
import cgi
import cgitb
cgitb.enable()
-import sys, os, string, subprocess, re
+import string, subprocess, re
try:
sys.path.append(os.path.dirname(sys.argv[0]))
@@ -17,6 +114,18 @@ except:
r = re.compile('\[GNUPG\:\] GOODSIG (\w*) (.*)')
+def files():
+ for f in os.listdir(config.filesdir):
+ if config.version in f and (f.endswith('.tar.gz') or f.endswith('.zip') or f.endswith('.tar.bz2')):
+ yield f
+
+def ordinal(N):
+ try:
+ return [None, 'first', 'second', 'third', 'fourth', 'fifth', 'sixth'][N]
+ except:
+ # Huh? We only have six files to sign.
+ return "%dth" % N
+
shell_content = '''
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
@@ -25,48 +134,67 @@ shell_content = '''
<title>Signature collection for Subversion $version</title>
</head>
<body style="font-size: 14pt; text-align: justify;
- background-color: #f0f0f0; padding: 0 5%">
-<p>This page is used to collect signatures for the proposed release of
-Apache Subversion $version.</p>
+ background-color: #f0f0f0; padding: 0 5%%">
+<p>This page is used to collect <a href="%s/list">signatures</a> for the
+proposed release of Apache Subversion $version.</p>
$content
</body>
</html>
-'''
+''' % os.getenv('SCRIPT_NAME')
-def default_page():
- c = '''
-<form method="post">
-File: <select name="filename">
-%s
-</select>
-<br/>
-<p>Paste signature in the area below:<br/>
-<textarea name="signature" rows="10" cols="80"></textarea>
+signature_area = '''
+<hr/>
+<form method="post" action="%s">
+<p>Paste one or more signatures in the area below:<br/>
+<textarea name="signatures" rows="20" cols="80"></textarea>
</p>
<input type="submit" value="Submit" />
+<p>Any text not between the <tt>BEGIN PGP SIGNATURE</tt>
+and <tt>END PGP SIGNATURE</tt> lines will be ignored.</p>
</form>
+<hr/>
+''' % os.getenv('SCRIPT_NAME')
+
+
+
+def split(sigs):
+ lines = []
+ for line in sigs.split('\n'):
+ if lines or '--BEGIN' in line:
+ lines.append(line)
+ if '--END' in line:
+ yield "\n".join(lines) + "\n"
+ lines = []
+
+def list_signatures():
+ db = sqlite3.connect(os.path.join(config.sigdir, 'sigs.db'))
+ template = '''
+<hr/>
+<p>The following signature files are available:</p>
+<p>%s</p>
'''
- contents = [f for f in os.listdir('.')
- if f.endswith('.tar.gz') or f.endswith('.zip')
- or f.endswith('.tar.bz2')]
- contents.sort()
-
- options = ''
- for f in contents:
- options = options + '<option value="%s">%s</option>\n' % (f, f)
-
- return c % options
-
+ lines = ""
+ curs = db.cursor()
+ curs.execute('''SELECT filename, COUNT(*) FROM signatures
+ GROUP BY filename ORDER BY filename''')
+ for filename, count in curs:
+ lines += '<a href="%s/%s.asc">%s.asc</a>: %d signature%s<br/>\n' \
+ % (os.getenv('SCRIPT_NAME'), filename, filename,
+ count, ['s', ''][count == 1])
+ return (template % lines) + signature_area
+
+def save_valid_sig(db, filename, keyid, signature):
+ db.execute('INSERT OR REPLACE INTO signatures VALUES (?,?,?);',
+ (keyid, filename, buffer(signature)))
+ db.commit()
-def save_valid_sig(filename, signature):
- f = open(os.path.join(config.sigdir, filename + '.asc'), 'a')
- f.write(signature)
+ generate_asc_files(config.sigdir)
-
-def verify_sig(signature, filename):
+def verify_sig_for_file(signature, filename):
args = ['gpg', '--logger-fd', '1', '--no-tty',
- '--status-fd', '2', '--verify', '-', filename]
+ '--status-fd', '2', '--verify', '-',
+ os.path.join(config.filesdir, filename)]
gpg = subprocess.Popen(args,
stdin=subprocess.PIPE,
@@ -87,49 +215,115 @@ def verify_sig(signature, filename):
for line in lines:
match = r.search(line)
if match:
- keyid = match.group(1)[-8:]
+ keyid = match.group(1)
user = match.group(2)
- return (True, (keyid, user))
-
+ return (True, (filename, keyid, user))
-def process_sig(signature, filename):
+def verify_sig(signature):
+ all_failures = ""
+ for filename in files():
+ (verified, result) = verify_sig_for_file(signature, filename)
+ if verified:
+ return (verified, result)
+ else:
+ all_failures += "%s:\n[[[\n%s]]]\n\n" % (filename, result)
+ return (False, all_failures)
+
+def process_sigs(signatures):
+ success = '''
+ <p style="color: green;">All %d signatures verified!</p>
+'''
+ failure = '''
+ <p style="color: red;">%d of %d signatures failed to verify; details below.</p>
+'''
c_verified = '''
<p style="color: green;">The signature is verified!</p>
<p>Filename: <code>%s</code></p>
<p>Key ID: <code>%s</code></p>
<p>User: <code>%s</code></p>
<p>This signature has been saved, and will be included as part of the
- release signatures. Please send mail to
- <a href="mailto:dev@subversion.apache.org">dev@subversion.apache.org</a>
- acknowledging your successful signature.</p>
+ release signatures.</p>
'''
c_unverified = '''
<p style="color: red;">The signature was not able to be verified!</p>
- <p>Filename: <code>%s</code></p>
+ <p>Signature: <pre>%s</pre></p>
<p>Reason:</p><pre>%s</pre>
<p>Please talk to the release manager if this is in error.</p>
'''
- (verified, result) = verify_sig(signature, filename)
-
- if verified:
- save_valid_sig(filename, signature)
-
- return c_verified % (filename, result[0], result[1])
+ outcomes = []
+ N_sigs = 0
+ N_verified = 0
+ retval = ''
+
+ # Verify
+ db = sqlite3.connect(os.path.join(config.sigdir, 'sigs.db'))
+ for signature in split(signatures):
+ N_sigs += 1
+ (verified, result) = verify_sig(signature)
+ outcomes.append((verified, result))
+
+ if verified:
+ (filename, keyid, user) = result
+ save_valid_sig(db, filename, keyid, signature)
+ N_verified += 1
+
+ # Output header
+ if N_verified == N_sigs:
+ retval += success % N_sigs
else:
- return c_unverified % (filename, result)
+ retval += failure % (N_sigs-N_verified, N_sigs)
+ # Output details
+ N = 0
+ for outcome in outcomes:
+ N += 1
+ (verified, result) = outcome
+ retval += "<h1>Results for the %s signature</h1>" % ordinal(N)
+ if verified:
+ (filename, keyid, user) = result
+ retval += c_verified % (filename, keyid[-8:], user)
+ else:
+ retval += c_unverified % (signature, result)
+
+ return retval + signature_area
+
+
+def cat_signatures(basename):
+ # strip '.asc' extension
+ assert basename[:-4] in files()
+
+ # cat
+ ascfile = os.path.join(config.sigdir, basename)
+ if os.path.exists(ascfile):
+ return (open(ascfile, 'r').read())
-def main():
- print "Content-Type: text/html"
+def print_content_type(mimetype):
+ print "Content-Type: " + mimetype
print
+def main():
form = cgi.FieldStorage()
- if 'signature' not in form:
- content = default_page()
- else:
- content = process_sig(form['signature'].value, form['filename'].value)
+ pathinfo = os.getenv('PATH_INFO')
+
+ # default value, to be changed below
+ content = signature_area
+
+ if 'signatures' in form:
+ content = process_sigs(form['signatures'].value)
+
+ elif pathinfo and pathinfo[1:]:
+ basename = pathinfo.split('/')[-1]
+
+ if basename == 'list':
+ content = list_signatures()
+
+ elif basename[:-4] in files():
+ # early exit; bypass 'content' entirely
+ print_content_type('text/plain')
+ print cat_signatures(basename)
+ return
# These are "global" values, not specific to our action.
mapping = {
@@ -137,6 +331,8 @@ def main():
'content' : content,
}
+ print_content_type('text/html')
+
template = string.Template(shell_content)
print template.safe_substitute(mapping)