1dnl -------------------------------------------------------- -*- autoconf -*-
2dnl Licensed to the Apache Software Foundation (ASF) under one or more
3dnl contributor license agreements.  See the NOTICE file distributed with
4dnl this work for additional information regarding copyright ownership.
5dnl The ASF licenses this file to You under the Apache License, Version 2.0
6dnl (the "License"); you may not use this file except in compliance with
7dnl the License.  You may obtain a copy of the License at
8dnl
9dnl     http://www.apache.org/licenses/LICENSE-2.0
10dnl
11dnl Unless required by applicable law or agreed to in writing, software
12dnl distributed under the License is distributed on an "AS IS" BASIS,
13dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14dnl See the License for the specific language governing permissions and
15dnl limitations under the License.
16
17dnl
18dnl find_apr.m4 : locate the APR include files and libraries
19dnl
20dnl This macro file can be used by applications to find and use the APR
21dnl library. It provides a standardized mechanism for using APR. It supports
22dnl embedding APR into the application source, or locating an installed
23dnl copy of APR.
24dnl
25dnl APR_FIND_APR(srcdir, builddir, implicit-install-check, acceptable-majors,
26dnl              detailed-check)
27dnl
28dnl   where srcdir is the location of the bundled APR source directory, or
29dnl   empty if source is not bundled.
30dnl
31dnl   where builddir is the location where the bundled APR will will be built,
32dnl   or empty if the build will occur in the srcdir.
33dnl
34dnl   where implicit-install-check set to 1 indicates if there is no
35dnl   --with-apr option specified, we will look for installed copies.
36dnl
37dnl   where acceptable-majors is a space separated list of acceptable major
38dnl   version numbers. Often only a single major version will be acceptable.
39dnl   If multiple versions are specified, and --with-apr=PREFIX or the
40dnl   implicit installed search are used, then the first (leftmost) version
41dnl   in the list that is found will be used.  Currently defaults to [0 1].
42dnl
43dnl   where detailed-check is an M4 macro which sets the apr_acceptable to
44dnl   either "yes" or "no". The macro will be invoked for each installed
45dnl   copy of APR found, with the apr_config variable set appropriately.
46dnl   Only installed copies of APR which are considered acceptable by
47dnl   this macro will be considered found. If no installed copies are
48dnl   considered acceptable by this macro, apr_found will be set to either
49dnl   either "no" or "reconfig".
50dnl
51dnl Sets the following variables on exit:
52dnl
53dnl   apr_found : "yes", "no", "reconfig"
54dnl
55dnl   apr_config : If the apr-config tool exists, this refers to it. If
56dnl                apr_found is "reconfig", then the bundled directory
57dnl                should be reconfigured *before* using apr_config.
58dnl
59dnl Note: this macro file assumes that apr-config has been installed; it
60dnl       is normally considered a required part of an APR installation.
61dnl
62dnl If a bundled source directory is available and needs to be (re)configured,
63dnl then apr_found is set to "reconfig". The caller should reconfigure the
64dnl (passed-in) source directory, placing the result in the build directory,
65dnl as appropriate.
66dnl
67dnl If apr_found is "yes" or "reconfig", then the caller should use the
68dnl value of apr_config to fetch any necessary build/link information.
69dnl
70
71AC_DEFUN([APR_FIND_APR], [
72  apr_found="no"
73
74  if test "$target_os" = "os2-emx"; then
75    # Scripts don't pass test -x on OS/2
76    TEST_X="test -f"
77  else
78    TEST_X="test -x"
79  fi
80
81  ifelse([$4], [], [
82         ifdef(AC_WARNING,AC_WARNING([$0: missing argument 4 (acceptable-majors): Defaulting to APR 0.x then APR 1.x]))
83         acceptable_majors="0 1"],
84         [acceptable_majors="$4"])
85
86  apr_temp_acceptable_apr_config=""
87  for apr_temp_major in $acceptable_majors
88  do
89    case $apr_temp_major in
90      0)
91      apr_temp_acceptable_apr_config="$apr_temp_acceptable_apr_config apr-config"
92      ;;
93      *)
94      apr_temp_acceptable_apr_config="$apr_temp_acceptable_apr_config apr-$apr_temp_major-config"
95      ;;
96    esac
97  done
98
99  AC_MSG_CHECKING(for APR)
100  AC_ARG_WITH(apr,
101  [  --with-apr=PATH         prefix for installed APR or the full path to
102                             apr-config],
103  [
104    if test "$withval" = "no" || test "$withval" = "yes"; then
105      AC_MSG_ERROR([--with-apr requires a directory or file to be provided])
106    fi
107
108    for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config
109    do
110      for lookdir in "$withval/bin" "$withval"
111      do
112        if $TEST_X "$lookdir/$apr_temp_apr_config_file"; then
113          apr_config="$lookdir/$apr_temp_apr_config_file"
114          ifelse([$5], [], [], [
115          apr_acceptable="yes"
116          $5
117          if test "$apr_acceptable" != "yes"; then
118            AC_MSG_WARN([Found APR in $apr_config, but we think it is considered unacceptable])
119            continue
120          fi])
121          apr_found="yes"
122          break 2
123        fi
124      done
125    done
126
127    if test "$apr_found" != "yes" && $TEST_X "$withval" && $withval --help > /dev/null 2>&1 ; then
128      apr_config="$withval"
129      ifelse([$5], [], [apr_found="yes"], [
130          apr_acceptable="yes"
131          $5
132          if test "$apr_acceptable" = "yes"; then
133                apr_found="yes"
134          fi])
135    fi
136
137    dnl if --with-apr is used, it is a fatal error for its argument
138    dnl to be invalid
139    if test "$apr_found" != "yes"; then
140      AC_MSG_ERROR([the --with-apr parameter is incorrect. It must specify an install prefix, a build directory, or an apr-config file.])
141    fi
142  ],[
143    dnl If we allow installed copies, check those before using bundled copy.
144    if test -n "$3" && test "$3" = "1"; then
145      for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config
146      do
147        if $apr_temp_apr_config_file --help > /dev/null 2>&1 ; then
148          apr_config="$apr_temp_apr_config_file"
149          ifelse([$5], [], [], [
150          apr_acceptable="yes"
151          $5
152          if test "$apr_acceptable" != "yes"; then
153            AC_MSG_WARN([skipped APR at $apr_config, version not acceptable])
154            continue
155          fi])
156          apr_found="yes"
157          break
158        else
159          dnl look in some standard places
160          for lookdir in /usr /usr/local /usr/local/apr /opt/apr; do
161            if $TEST_X "$lookdir/bin/$apr_temp_apr_config_file"; then
162              apr_config="$lookdir/bin/$apr_temp_apr_config_file"
163              ifelse([$5], [], [], [
164              apr_acceptable="yes"
165              $5
166              if test "$apr_acceptable" != "yes"; then
167                AC_MSG_WARN([skipped APR at $apr_config, version not acceptable])
168                continue
169              fi])
170              apr_found="yes"
171              break 2
172            fi
173          done
174        fi
175      done
176    fi
177    dnl if we have not found anything yet and have bundled source, use that
178    if test "$apr_found" = "no" && test -d "$1"; then
179      apr_temp_abs_srcdir="`cd \"$1\" && pwd`"
180      apr_found="reconfig"
181      apr_bundled_major="`sed -n '/#define.*APR_MAJOR_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p' \"$1/include/apr_version.h\"`"
182      case $apr_bundled_major in
183        "")
184          AC_MSG_ERROR([failed to find major version of bundled APR])
185        ;;
186        0)
187          apr_temp_apr_config_file="apr-config"
188        ;;
189        *)
190          apr_temp_apr_config_file="apr-$apr_bundled_major-config"
191        ;;
192      esac
193      if test -n "$2"; then
194        apr_config="$2/$apr_temp_apr_config_file"
195      else
196        apr_config="$1/$apr_temp_apr_config_file"
197      fi
198    fi
199  ])
200
201  AC_MSG_RESULT($apr_found)
202])
203