(I'm posting this to both the APR and Subversion dev lists because
it's relevant to both.)
Summary reaction to Mo DeJong's recent autoconf work on both APR and
Subversion: "+1".
Longer reaction:
If it's possible, for a time, to make APR work with both autoconf 2.13
and 2.50, that would really help a lot of developers. Although some
have pointed out (wisely, I think) that trying to maintain backward
compatibility with old versions of autoconf is a losing battle in the
long run, and that at a certain point a project just has to commit to
using the latest version, 2.50 is still new enough that many people
have not switched to it, for various reasons.
Therefore, to switch a project exclusively to 2.50 would be
problematic right now, and probably for the next couple of months.
That's why we've been holding off on switching Subversion to use
autoconf 2.50; we don't want to deal with the headache of forced
autoconf upgrades right now.
If Mo can make APR work with both, even if only for a while, I think
we should go for it. (I'm presuming the same can be done with
Subversion; Mo, would you be willing to take that on?). Then, after a
couple of months or so, we can stop worrying about 2.13 support.
A general principle here might be: we should work with the latest
version of a tool plus (at least for a while) the second-to-latest
version, except when there are gross incompatibilities. That way,
we're maintaining a "constant" complexity -- we don't have to support
*all* past versions -- yet at the same time, we're not forcing
everyone to upgrade in real-time just to keep working.
I'm not familiar enough with the technical issues here to evaluate
Mo's patch; however, assuming it does what it's intended to do, let's
apply it, and then do the same to Subversion.
Thoughts?,
-Karl
Mo DeJong <mdejong@cygnus.com> writes:
> Since my last patch re upgrading autoconf and libtool was not received
> with open arms, I decided to take the decidedly less fun route and
> get things working with both autoconf 2.13 and 2.50 as well as
> libtool 1.3 and 1.4. Here is a patch that implements that change.
>
> The first step is to remove the shmem/unix/mm/aclocal.m4
> and add the attached shmem/unix/mm/apr_mm.m4 file:
>
> rm shmem/unix/mm/aclocal.m4
> cvs rm shmem/unix/mm/aclocal.m4
> cvs add shmem/unix/mm/apr_mm.m4
>
> Then, the following patch should be applied:
>
> Index: buildconf
> ===================================================================
> RCS file: /home/cvspublic/apr/buildconf,v
> retrieving revision 1.17
> diff -u -r1.17 buildconf
> --- buildconf 2001/05/01 02:06:09 1.17
> +++ buildconf 2001/07/08 21:50:11
> @@ -74,7 +74,7 @@
> #
> echo "Copying libtool helper files ..."
>
> -$libtoolize --copy --automake
> +$libtoolize --copy --force --automake
>
> ltpath=`dirname $libtoolize`
> ltfile=`cd $ltpath/../share/aclocal ; pwd`/libtool.m4
> @@ -101,6 +101,6 @@
> ### do some work to toss config.cache?
> autoconf
>
> -(cd shmem/unix/mm && autoconf)
> +(cd shmem/unix/mm && aclocal && autoconf)
>
> exit 0
> Index: shmem/unix/mm/Makefile.in
> ===================================================================
> RCS file: /home/cvspublic/apr/shmem/unix/mm/Makefile.in,v
> retrieving revision 1.4
> diff -u -r1.4 Makefile.in
> --- shmem/unix/mm/Makefile.in 2000/05/03 17:15:48 1.4
> +++ shmem/unix/mm/Makefile.in 2001/07/08 21:50:12
> @@ -51,6 +51,10 @@
> includedir = @includedir@
> mandir = @mandir@
>
> +# This is a nasty hack that is needed because libtool
> +# 1.4 uses top_builddir which is undefined here.
> +top_builddir = .
> +
> SHELL = /bin/sh
> CC = @CC@
> CFLAGS = @CFLAGS@
> Index: shmem/unix/mm/configure.in
> ===================================================================
> RCS file: /home/cvspublic/apr/shmem/unix/mm/configure.in,v
> retrieving revision 1.9
> diff -u -r1.9 configure.in
> --- shmem/unix/mm/configure.in 2001/02/18 15:52:12 1.9
> +++ shmem/unix/mm/configure.in 2001/07/08 21:50:12
> @@ -2,6 +2,8 @@
> dnl ## Autoconf specification for MM library
> dnl ##
>
> +builtin(include,apr_mm.m4)
> +
> dnl #
> dnl # standard Autoconf prolog
> dnl #
>
> cheers
> Mo DeJong
> Red Hat Inc## ====================================================================
> ## Copyright (c) 1999-2000 Ralf S. Engelschall. All rights reserved.
> ##
> ## Redistribution and use in source and binary forms, with or without
> ## modification, are permitted provided that the following conditions
> ## are met:
> ##
> ## 1. Redistributions of source code must retain the above copyright
> ## notice, this list of conditions and the following disclaimer.
> ##
> ## 2. Redistributions in binary form must reproduce the above copyright
> ## notice, this list of conditions and the following disclaimer in
> ## the documentation and/or other materials provided with the
> ## distribution.
> ##
> ## 3. All advertising materials mentioning features or use of this
> ## software must display the following acknowledgment:
> ## "This product includes software developed by
> ## Ralf S. Engelschall <rse@engelschall.com>."
> ##
> ## 4. Redistributions of any form whatsoever must retain the following
> ## acknowledgment:
> ## "This product includes software developed by
> ## Ralf S. Engelschall <rse@engelschall.com>."
> ##
> ## THIS SOFTWARE IS PROVIDED BY RALF S. ENGELSCHALL ``AS IS'' AND ANY
> ## EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> ## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> ## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RALF S. ENGELSCHALL OR
> ## ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
> ## NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
> ## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> ## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> ## STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> ## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
> ## OF THE POSSIBILITY OF SUCH DAMAGE.
> ## ====================================================================
> divert(-1)
>
> define(AC_CHECK_DEBUGGING,[dnl
> AC_MSG_CHECKING(for compilation debug mode)
> AC_ARG_ENABLE(debug,dnl
> [ --enable-debug build for debugging (default=no)],
> [dnl
> if test ".$ac_cv_prog_gcc" = ".yes"; then
> case "$CFLAGS" in
> *-O2* ) ;;
> * ) CFLAGS="$CFLAGS -O2" ;;
> esac
> case "$CFLAGS" in
> *-g* ) ;;
> * ) CFLAGS="$CFLAGS -g" ;;
> esac
> CFLAGS="$CFLAGS -ggdb3"
> CFLAGS="$CFLAGS -Wall -Wshadow -Wpointer-arith -Wcast-align"
> CFLAGS="$CFLAGS -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline"
> else
> case "$CFLAGS" in
> *-g* ) ;;
> * ) CFLAGS="$CFLAGS -g" ;;
> esac
> fi
> msg="enabled"
> AC_DEFINE(MM_DEBUG)
> ],[
> case "$CFLAGS" in
> *-g* ) CFLAGS=`echo "$CFLAGS" |\
> sed -e 's/ -g / /g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
> esac
> msg=disabled
> ])
> AC_MSG_RESULT([$msg])
> ])
>
> define(AC_CONFIGURE_PART,[dnl
> AC_MSG_RESULT()
> AC_MSG_RESULT(${T_MD}$1:${T_ME})
> ])dnl
>
> define(AC_CHECK_DEFINE,[dnl
> AC_CACHE_CHECK(for $1 in $2, ac_cv_define_$1,
> AC_EGREP_CPP([YES_IS_DEFINED], [
> #include <$2>
> #ifdef $1
> YES_IS_DEFINED
> #endif
> ], ac_cv_define_$1=yes, ac_cv_define_$1=no)
> )
> if test "$ac_cv_define_$1" = "yes" ; then
> AC_DEFINE(HAVE_$1)
> fi
> ])dnl
> AC_DEFINE(HAVE_$1)
>
> define(AC_IFALLYES,[dnl
> ac_rc=yes
> for ac_spec in $1; do
> ac_type=`echo "$ac_spec" | sed -e 's/:.*$//'`
> ac_item=`echo "$ac_spec" | sed -e 's/^.*://'`
> case $ac_type in
> header )
> ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'`
> ac_var="ac_cv_header_$ac_item"
> ;;
> file )
> ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'`
> ac_var="ac_cv_file_$ac_item"
> ;;
> func ) ac_var="ac_cv_func_$ac_item" ;;
> define ) ac_var="ac_cv_define_$ac_item" ;;
> custom ) ac_var="$ac_item" ;;
> esac
> eval "ac_val=\$$ac_var"
> if test ".$ac_val" != .yes; then
> ac_rc=no
> break
> fi
> done
> if test ".$ac_rc" = .yes; then
> :
> $2
> else
> :
> $3
> fi
> ])dnl
>
> define(AC_BEGIN_DECISION,[dnl
> ac_decision_item='$1'
> ac_decision_msg='FAILED'
> ac_decision=''
> ])dnl
> define(AC_DECIDE,[dnl
> ac_decision='$1'
> ac_decision_msg='$2'
> ac_decision_$1=yes
> ac_decision_$1_msg='$2'
> ])dnl
> define(AC_DECISION_OVERRIDE,[dnl
> ac_decision=''
> for ac_item in $1; do
> eval "ac_decision_this=\$ac_decision_${ac_item}"
> if test ".$ac_decision_this" = .yes; then
> ac_decision=$ac_item
> eval "ac_decision_msg=\$ac_decision_${ac_item}_msg"
> fi
> done
> ])dnl
> define(AC_DECISION_FORCE,[dnl
> ac_decision="$1"
> eval "ac_decision_msg=\"\$ac_decision_${ac_decision}_msg\""
> ])dnl
> define(AC_END_DECISION,[dnl
> if test ".$ac_decision" = .; then
> echo "[$]0:Error: decision on $ac_decision_item failed" 1>&2
> exit 1
> else
> if test ".$ac_decision_msg" = .; then
> ac_decision_msg="$ac_decision"
> fi
> AC_MSG_RESULT([decision on $ac_decision_item... $ac_decision_msg])
> fi
> ])dnl
>
> AC_DEFUN(AC_TEST_FILE,
> [AC_REQUIRE([AC_PROG_CC])
> ac_safe=`echo "$1" | sed 'y%./+-%__p_%'`
> AC_MSG_CHECKING([for $1])
> AC_CACHE_VAL(ac_cv_file_$ac_safe, [
> if test -r $1; then
> eval "ac_cv_file_$ac_safe=yes"
> else
> eval "ac_cv_file_$ac_safe=no"
> fi
> ])dnl
> if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
> AC_MSG_RESULT(yes)
> ifelse([$2], , :, [$2])
> else
> AC_MSG_RESULT(no)
> ifelse([$3], , , [$3])
> fi
> ])
>
> define(AC_CHECK_MAXSEGSIZE,[dnl
> AC_MSG_CHECKING(for shared memory maximum segment size)
> AC_CACHE_VAL(ac_cv_maxsegsize,
> [
> OCFLAGS="$CFLAGS"
> case "$1" in
> MM_SHMT_MM* ) CFLAGS="-DTEST_MMAP $CFLAGS" ;;
> MM_SHMT_IPCSHM ) CFLAGS="-DTEST_SHMGET $CFLAGS" ;;
> MM_SHMT_BEOS ) CFLAGS="-DTEST_AREAS $CFLAGS" ;;
> esac
> AC_TRY_RUN(
> changequote(<<, >>)dnl
> <<
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <fcntl.h>
> #include <sys/file.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #ifdef TEST_MMAP
> #include <sys/mman.h>
> #endif
> #ifdef TEST_SHMGET
> #ifdef MM_OS_SUNOS
> #define KERNEL 1
> #endif
> #ifdef MM_OS_BS2000
> #define _KMEMUSER
> #endif
> #include <sys/ipc.h>
> #include <sys/shm.h>
> #ifdef MM_OS_SUNOS
> #undef KERNEL
> #endif
> #ifdef MM_OS_BS2000
> #undef _KMEMUSER
> #endif
> #if !defined(SHM_R)
> #define SHM_R 0400
> #endif
> #if !defined(SHM_W)
> #define SHM_W 0200
> #endif
> #endif
> #if !defined(MAP_FAILED)
> #define MAP_FAILED ((void *)-1)
> #endif
> #ifdef MM_OS_BEOS
> #include <kernel/OS.h>
> #endif
>
>
> int testit(int size)
> {
> int fd;
> void *segment;
> #ifdef TEST_MMAP
> char file[] = "./ac_test.tmp";
> unlink(file);
> if ((fd = open(file, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR)) == -1)
> return 0;
> if (ftruncate(fd, size) == -1)
> return 0;
> if ((segment = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE,
> MAP_SHARED, fd, 0)) == MAP_FAILED) {
> close(fd);
> return 0;
> }
> munmap((caddr_t)segment, size);
> close(fd);
> unlink(file);
> #endif
> #ifdef TEST_SHMGET
> if ((fd = shmget(IPC_PRIVATE, size, SHM_R|SHM_W|IPC_CREAT)) == -1)
> return 0;
> if ((segment = (void *)shmat(fd, NULL, 0)) == ((void *)-1)) {
> shmctl(fd, IPC_RMID, NULL);
> return 0;
> }
> shmdt(segment);
> shmctl(fd, IPC_RMID, NULL);
> #endif
> #ifdef TEST_BEOS
> area_id id;
> id = create_area("mm_test", (void*)&segment, B_ANY_ADDRESS, size,
> B_LAZY_LOCK, B_READ_AREA|B_WRITE_AREA);
> if (id < 0)
> return 0;
> delete_area(id);
> #endif
> return 1;
> }
>
> #define ABS(n) ((n) >= 0 ? (n) : (-(n)))
>
> int main(int argc, char *argv[])
> {
> int t, m, b;
> int d;
> int rc;
> FILE *f;
>
> /*
> * Find maximum possible allocation size by performing a
> * binary search starting with a search space between 0 and
> * 64MB of memory.
> */
> t = 1024*1024*64 /* = 67108864 */;
> if (testit(t))
> m = t;
> else {
> m = 1024*1024*32;
> b = 0;
> for (;;) {
> /* fprintf(stderr, "t=%d, m=%d, b=%d\n", t, m, b); */
> rc = testit(m);
> if (rc) {
> d = ((t-m)/2);
> b = m;
> }
> else {
> d = -((m-b)/2);
> t = m;
> }
> if (ABS(d) < 1024*1) {
> if (!rc)
> m = b;
> break;
> }
> if (m < 1024*8)
> break;
> m += d;
> }
> if (m < 1024*8)
> m = 0;
> }
> if ((f = fopen("conftestval", "w")) == NULL)
> exit(1);
> fprintf(f, "%d\n", m);
> fclose(f);
> exit(0);
> }
> >>
> changequote([, ])dnl
> ,[ac_cv_maxsegsize="`cat conftestval`"
> ],
> ac_cv_maxsegsize=0
> ,
> ac_cv_maxsegsize=0
> )
> CFLAGS="$OCFLAGS"
> ])
> msg="$ac_cv_maxsegsize"
> if test $msg -eq 67108864; then
> msg="64MB (soft limit)"
> elif test $msg -gt 1048576; then
> msg="`expr $msg / 1024`"
> msg="`expr $msg / 1024`"
> msg="${msg}MB"
> elif test $msg -gt 1024; then
> msg="`expr $msg / 1024`"
> msg="${msg}KB"
> else
> ac_cv_maxsegsize=0
> msg=unknown
> fi
> MM_SHM_MAXSEGSIZE=$ac_cv_maxsegsize
> test ".$msg" = .unknown && AC_MSG_ERROR([Unable to determine maximum shared memory segment size])
> AC_MSG_RESULT([$msg])
> AC_DEFINE_UNQUOTED(MM_SHM_MAXSEGSIZE, $MM_SHM_MAXSEGSIZE)
> ])
>
> divert
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sat Oct 21 14:36:33 2006