You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Karl Fogel <kf...@collab.net> on 2001/07/10 15:08:28 UTC

Re: Upgrading apr to autoconf 2.50 and libtool 1.4

(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 <md...@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 <rs...@engelschall.com>."
> ##
> ## 4. Redistributions of any form whatsoever must retain the following
> ##    acknowledgment:
> ##    "This product includes software developed by
> ##     Ralf S. Engelschall <rs...@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