| 1 | dnl -------------------------------------------------------- -*- autoconf -*- |
| 2 | dnl Licensed to the Apache Software Foundation (ASF) under one or more |
| 3 | dnl contributor license agreements. See the NOTICE file distributed with |
| 4 | dnl this work for additional information regarding copyright ownership. |
| 5 | dnl The ASF licenses this file to You under the Apache License, Version 2.0 |
| 6 | dnl (the "License"); you may not use this file except in compliance with |
| 7 | dnl the License. You may obtain a copy of the License at |
| 8 | dnl |
| 9 | dnl http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | dnl |
| 11 | dnl Unless required by applicable law or agreed to in writing, software |
| 12 | dnl distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | dnl See the License for the specific language governing permissions and |
| 15 | dnl limitations under the License. |
| 16 | |
| 17 | dnl |
| 18 | dnl find_apr.m4 : locate the APR include files and libraries |
| 19 | dnl |
| 20 | dnl This macro file can be used by applications to find and use the APR |
| 21 | dnl library. It provides a standardized mechanism for using APR. It supports |
| 22 | dnl embedding APR into the application source, or locating an installed |
| 23 | dnl copy of APR. |
| 24 | dnl |
| 25 | dnl APR_FIND_APR(srcdir, builddir, implicit-install-check, acceptable-majors, |
| 26 | dnl detailed-check) |
| 27 | dnl |
| 28 | dnl where srcdir is the location of the bundled APR source directory, or |
| 29 | dnl empty if source is not bundled. |
| 30 | dnl |
| 31 | dnl where builddir is the location where the bundled APR will will be built, |
| 32 | dnl or empty if the build will occur in the srcdir. |
| 33 | dnl |
| 34 | dnl where implicit-install-check set to 1 indicates if there is no |
| 35 | dnl --with-apr option specified, we will look for installed copies. |
| 36 | dnl |
| 37 | dnl where acceptable-majors is a space separated list of acceptable major |
| 38 | dnl version numbers. Often only a single major version will be acceptable. |
| 39 | dnl If multiple versions are specified, and --with-apr=PREFIX or the |
| 40 | dnl implicit installed search are used, then the first (leftmost) version |
| 41 | dnl in the list that is found will be used. Currently defaults to [0 1]. |
| 42 | dnl |
| 43 | dnl where detailed-check is an M4 macro which sets the apr_acceptable to |
| 44 | dnl either "yes" or "no". The macro will be invoked for each installed |
| 45 | dnl copy of APR found, with the apr_config variable set appropriately. |
| 46 | dnl Only installed copies of APR which are considered acceptable by |
| 47 | dnl this macro will be considered found. If no installed copies are |
| 48 | dnl considered acceptable by this macro, apr_found will be set to either |
| 49 | dnl either "no" or "reconfig". |
| 50 | dnl |
| 51 | dnl Sets the following variables on exit: |
| 52 | dnl |
| 53 | dnl apr_found : "yes", "no", "reconfig" |
| 54 | dnl |
| 55 | dnl apr_config : If the apr-config tool exists, this refers to it. If |
| 56 | dnl apr_found is "reconfig", then the bundled directory |
| 57 | dnl should be reconfigured *before* using apr_config. |
| 58 | dnl |
| 59 | dnl Note: this macro file assumes that apr-config has been installed; it |
| 60 | dnl is normally considered a required part of an APR installation. |
| 61 | dnl |
| 62 | dnl If a bundled source directory is available and needs to be (re)configured, |
| 63 | dnl then apr_found is set to "reconfig". The caller should reconfigure the |
| 64 | dnl (passed-in) source directory, placing the result in the build directory, |
| 65 | dnl as appropriate. |
| 66 | dnl |
| 67 | dnl If apr_found is "yes" or "reconfig", then the caller should use the |
| 68 | dnl value of apr_config to fetch any necessary build/link information. |
| 69 | dnl |
| 70 | |
| 71 | AC_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 | ]) |