Log message:
[[[
Make the config script be named apr-MAJOR-config, even in the build
directory.

* .cvsignore: Add apr-*-config.

* Makefile.in: Throughout, change apr-config to $(APR_CONFIG).
    Do not install the config script as apr-config as well as $(APR_CONFIG).

* apr-config.in: Add @APR_MAJOR_VERSION@ where appropriate so the help
output
    reflects reality.

* configure.in: Generate apr-MAJOR-config from apr-config.in .

Enhance the APR_FIND_APR macro, to correctly handle multiple major API
versions.

* build/find_apr.m4 (APR_FIND_APR): Introduce an additional argument
specifying
    desired major versions. Correct text not accounting for the full range
of
    possible types of arguments to --with-apr.
]]]


I see from the mail on the dev list that I need to explain my rationale for
some of what I've done above.

Summary aim: Allow apr-0 and apr-1 to be installed and used side-by-side in
the same prefix.

Stopping installing apr-config alongside apr-1-config permits side-by-side
installs.

The APR_FIND_APR macro is updated to take a new mandatory argument listing
acceptable apr major versions.

Any library which uses apr and exposes apr types in it's own ABI *must*
limit itself to one major version of apr, if it is to maintain any ABI
guarantees itself. Therefore, the ability to require just 1 version of apr
is required.

Any app coded to the intersection of the apr-0 and apr-1 APIs may be able to
work with either, so the macro allows for multiple apr versions to be deemed
acceptable.

Note: I also make the apr-config be named apr-MAJOR-config in the *build*
directory, as well as in the install. This means that when a bundled apr is
used, the patch uses sed to probe the major, so it knows the name of the
apr-MAJOR-config that will be created.

This change is important! Apr currently
supports --with-apr=path/to/built/but/not/installed/apr. We cannot continue
to do this without the above change, as we must *not* accept a bare
apr-config file as valid unless apr-0 is deemed acceptable by the macro
invoker. Therefore the apr-config in a build directory must include the
major version, so that APR_FIND_APR can know it is acceptable to use.



OK, so here it is, the patch, complete AFAIK.

Comments welcomed.

As soon as this is approved, I will produce the equivalent patch for
apr-util.

Regarding httpd-HEAD: the only change they need to make is to call
APR_FIND_APR with a new 4th argument of "1".

Regarding httpd-2.0.x: will remain using apr-0.9.x, will never see any of
these changes.

Regarding subversion: will probably want to absorb the new find_apr.m4, in
order to permit experimental building against apr-1.0.0, but are locked into
apr-0 for the 1.x release cycle officially by ABI guarantees, AFAIK.
Subversion can absorb the new find_apr.m4, and just needs to add a 4th
argument of "0" to the APR_FIND_APR invocation. Apr-1 builds can be forced
despite this with --with-apr=/path/to/apr-1-config when desired.


Max.



Index: .cvsignore
===================================================================
RCS file: /home/mirror/cvsmirror/misc-cvs/apr/.cvsignore,v
retrieving revision 1.24
diff -u -p -r1.24 .cvsignore
--- .cvsignore  9 Jul 2004 15:51:58 -0000       1.24
+++ .cvsignore  15 Jul 2004 11:54:04 -0000
@@ -6,6 +6,7 @@ config.status
 configure
 libtool
 apr-config
+apr-*-config
 apr-config.out
 LibD
 LibR
Index: Makefile.in
===================================================================
RCS file: /home/mirror/cvsmirror/misc-cvs/apr/Makefile.in,v
retrieving revision 1.106
diff -u -p -r1.106 Makefile.in
--- Makefile.in 1 Jul 2004 14:34:48 -0000       1.106
+++ Makefile.in 15 Jul 2004 11:50:27 -0000
@@ -44,7 +44,7 @@ CLEAN_TARGETS = apr-config.out apr.exp e
        build/apr_rules.out
 DISTCLEAN_TARGETS = config.cache config.log config.status \
        include/apr.h include/arch/unix/apr_private.h \
-       libtool apr-config build/apr_rules.mk apr.pc
+       libtool $(APR_CONFIG) build/apr_rules.mk apr.pc
 EXTRACLEAN_TARGETS = configure aclocal.m4 include/arch/unix/apr_private.h.in \
        build-outputs.mk build/ltcf-c.sh build/ltmain.sh build/libtool.m4
 
@@ -56,8 +56,8 @@ [EMAIL PROTECTED]@
 [EMAIL PROTECTED]@
 
 # Create apr-config script suitable for the install tree
-apr-config.out: apr-config
-       sed 's,^\(location=\).*$$,\1installed,' < apr-config > $@
+apr-config.out: $(APR_CONFIG)
+       sed 's,^\(location=\).*$$,\1installed,' < $(APR_CONFIG) > $@
 
 # Create apr_rules.mk suitable for the install tree
 build/apr_rules.out: build/apr_rules.mk
@@ -97,9 +97,8 @@ install: $(TARGET_LIB) apr-config.out bu
        if [ ! -d $(DESTDIR)$(bindir) ]; then \
            $(top_srcdir)/build/mkdir.sh $(DESTDIR)$(bindir); \
        fi;
-       $(LIBTOOL) --mode=install cp apr-config.out 
$(DESTDIR)$(bindir)/apr-config
        $(LIBTOOL) --mode=install cp apr-config.out 
$(DESTDIR)$(bindir)/$(APR_CONFIG)
-       chmod 755 $(DESTDIR)$(bindir)/apr-config 
$(DESTDIR)$(bindir)/$(APR_CONFIG)
+       chmod 755 $(DESTDIR)$(bindir)/$(APR_CONFIG)
        @if [ $(INSTALL_SUBDIRS) != "none" ]; then \
             for i in $(INSTALL_SUBDIRS); do \
                ( cd $$i ; $(MAKE) DESTDIR=$(DESTDIR) install ); \
Index: apr-config.in
===================================================================
RCS file: /home/mirror/cvsmirror/misc-cvs/apr/apr-config.in,v
retrieving revision 1.38
diff -u -p -r1.38 apr-config.in
--- apr-config.in       28 Feb 2004 18:31:41 -0000      1.38
+++ apr-config.in       15 Jul 2004 11:50:27 -0000
@@ -49,7 +49,7 @@ [EMAIL PROTECTED]@
 show_usage()
 {
     cat << EOF
-Usage: apr-config [OPTION]
+Usage: [EMAIL PROTECTED]@-config [OPTION]
 
 Known values for OPTION are:
   --prefix[=DIR]    change prefix to DIR
@@ -75,9 +75,9 @@ Known values for OPTION are:
   --help            print this help
 
 When linking with libtool, an application should do something like:
-  APR_LIBS="\`apr-config --link-libtool --libs\`"
+  APR_LIBS="[EMAIL PROTECTED]@-config --link-libtool --libs\`"
 or when linking directly:
-  APR_LIBS="\`apr-config --link-ld --libs\`"
+  APR_LIBS="[EMAIL PROTECTED]@-config --link-ld --libs\`"
 
 An application should use the results of --cflags, --cppflags, --includes,
 and --ldflags in their build process.
Index: configure.in
===================================================================
RCS file: /home/mirror/cvsmirror/misc-cvs/apr/configure.in,v
retrieving revision 1.596
diff -u -p -r1.596 configure.in
--- configure.in        8 Jul 2004 23:18:52 -0000       1.596
+++ configure.in        15 Jul 2004 11:50:51 -0000
@@ -2016,7 +2016,7 @@ AC_OUTPUT([
        $MAKEFILES
        include/apr.h
        build/apr_rules.mk
-       apr-config
+       apr-$APR_MAJOR_VERSION-config:apr-config.in
         apr.pc
 ],[
 for i in $SAVE_FILES; do
@@ -2026,5 +2026,7 @@ for i in $SAVE_FILES; do
   fi
   rm -f $i.save
 done
-chmod +x apr-config
+chmod +x apr-$APR_MAJOR_VERSION-config
+],[
+APR_MAJOR_VERSION=$APR_MAJOR_VERSION
 ])
Index: build/find_apr.m4
===================================================================
RCS file: /home/mirror/cvsmirror/misc-cvs/apr/build/find_apr.m4,v
retrieving revision 1.14
diff -u -p -r1.14 find_apr.m4
--- build/find_apr.m4   5 Nov 2002 22:09:19 -0000       1.14
+++ build/find_apr.m4   15 Jul 2004 23:21:42 -0000
@@ -6,17 +6,23 @@ dnl library. It provides a standardized 
 dnl embedding APR into the application source, or locating an installed
 dnl copy of APR.
 dnl
-dnl APR_FIND_APR([srcdir [, builddir, implicit-install-check]])
+dnl APR_FIND_APR(srcdir, builddir, implicit-install-check, acceptable-majors)
 dnl
 dnl   where srcdir is the location of the bundled APR source directory, or
 dnl   empty if source is not bundled.
 dnl
-dnl   where blddir is the location where the bundled APR will will be built,
+dnl   where builddir is the location where the bundled APR will will be built,
 dnl   or empty if the build will occur in the srcdir.
 dnl
 dnl   where implicit-install-check set to 1 indicates if there is no
 dnl   --with-apr option specified, we will look for installed copies.
 dnl
+dnl   where acceptable-majors is a space seperated list of acceptable major
+dnl   version numbers. Often only a single major version will be acceptable.
+dnl   If multiple versions are specified, and --with-apr=PREFIX or the
+dnl   implicit installed search are used, then the first (leftmost) version
+dnl   in the list that is found will be used.
+dnl
 dnl Sets the following variables on exit:
 dnl
 dnl   apr_found : "yes", "no", "reconfig"
@@ -47,56 +53,95 @@ AC_DEFUN(APR_FIND_APR, [
     TEST_X="test -x"
   fi
 
+  if test -z "$4"; then
+    AC_MSG_ERROR([the APR_FI@&[EMAIL PROTECTED] macro requires an 
acceptable-majors parameter])
+  fi
+  apr_temp_acceptable_apr_config=""
+  for apr_temp_major in $4
+  do
+    case $apr_temp_major in
+      0)
+      apr_temp_acceptable_apr_config="$apr_temp_acceptable_apr_config 
apr-config"
+      ;;
+      *)
+      apr_temp_acceptable_apr_config="$apr_temp_acceptable_apr_config 
apr-$apr_temp_major-config"
+      ;;
+    esac
+  done
+
   AC_MSG_CHECKING(for APR)
   AC_ARG_WITH(apr,
-  [  --with-apr=DIR|FILE     prefix for installed APR, path to APR build tree,
+  [  --with-apr=PATH         prefix for installed APR, path to APR build tree,
                           or the full path to apr-config],
   [
     if test "$withval" = "no" || test "$withval" = "yes"; then
-      AC_MSG_ERROR([--with-apr requires a directory to be provided])
+      AC_MSG_ERROR([--with-apr requires a directory or file to be provided])
     fi
 
-    if $TEST_X "$withval/bin/apr-config"; then
-      apr_found="yes"
-      apr_config="$withval/bin/apr-config"
-    elif $TEST_X "$withval/apr-config"; then
-      apr_found="yes"
-      apr_config="$withval/apr-config"
-    elif $TEST_X "$withval" && $withval --help > /dev/null 2>&1 ; then
+    for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config
+    do
+      for lookdir in "$withval/bin" "$withval"
+      do
+        if $TEST_X "$lookdir/$apr_temp_apr_config_file"; then
+          apr_found="yes"
+          apr_config="$lookdir/$apr_temp_apr_config_file"
+          break 2
+        fi
+      done
+    done
+
+    if test "$apr_found" != "yes" && $TEST_X "$withval" && $withval --help > 
/dev/null 2>&1 ; then
       apr_found="yes"
       apr_config="$withval"
     fi
 
-    dnl if --with-apr is used, then the target prefix/directory must be valid
+    dnl if --with-apr is used, it is a fatal error for its argument
+    dnl to be invalid
     if test "$apr_found" != "yes"; then
-      AC_MSG_ERROR([the --with-apr parameter is incorrect. It must specify an 
install prefix, a
-build directory, or an apr-config file.])
+      AC_MSG_ERROR([the --with-apr parameter is incorrect. It must specify an 
install prefix, a build directory, or an apr-config file.])
     fi
   ],[
     dnl if we have a bundled source directory, use it
     if test -d "$1"; then
       apr_temp_abs_srcdir="`cd $1 && pwd`"
       apr_found="reconfig"
+      echo "sed -n '/#define.*APR_MAJOR_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p' 
\"$1/include/apr_version.h\""
+      apr_bundled_major="`sed -n 
'/#define.*APR_MAJOR_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p' 
\"$1/include/apr_version.h\"`"
+      case $apr_bundled_major in
+        "")
+          AC_MSG_ERROR([failed to find major version of bundled APR])
+        ;;
+        0)
+          apr_temp_apr_config_file="apr-config"
+        ;;
+        *)
+          apr_temp_apr_config_file="apr-$apr_bundled_major-config"
+        ;;
+      esac
       if test -n "$2"; then
-        apr_config="$2/apr-config"
+        apr_config="$2/$apr_temp_apr_config_file"
       else
-        apr_config="$1/apr-config"
+        apr_config="$1/$apr_temp_apr_config_file"
       fi
     fi
     if test "$apr_found" = "no" && test -n "$3" && test "$3" = "1"; then
-      if apr-config --help > /dev/null 2>&1 ; then
-        apr_found="yes"
-        apr_config="apr-config"
-      else
-        dnl look in some standard places (apparently not in builtin/default)
-        for lookdir in /usr /usr/local /opt/apr /usr/local/apache2 ; do
-          if $TEST_X "$lookdir/bin/apr-config"; then
-            apr_found="yes"
-            apr_config="$lookdir/bin/apr-config"
-            break
-          fi
-        done
-      fi
+      for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config
+      do
+        if $apr_temp_apr_config_file --help > /dev/null 2>&1 ; then
+          apr_found="yes"
+          apr_config="$apr_temp_apr_config_file"
+          break
+        else
+          dnl look in some standard places (apparently not in builtin/default)
+          for lookdir in /usr /usr/local /opt/apr /usr/local/apache2 ; do
+            if $TEST_X "$lookdir/bin/$apr_temp_apr_config_file"; then
+              apr_found="yes"
+              apr_config="$lookdir/bin/$apr_temp_apr_config_file"
+              break 2
+            fi
+          done
+        fi
+      done
     fi
   ])
 

Reply via email to