source: trunk/base/aclocal.m4 @ 143448

Last change on this file since 143448 was 125362, checked in by cal@…, 5 years ago

base: Avoid using $GZIP and $BZIP2, since those might be interpreted as flags and cause the build to fail, e.g. #43245

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 39.2 KB
Line 
1dnl $Id: aclocal.m4 125362 2014-09-14 19:27:18Z cal@macports.org $
2builtin(include,m4/tcl.m4)
3builtin(include,m4/pthread.m4)
4builtin(include,m4/foundation.m4)
5
6dnl Search for a variable in a list. Run ACTION-IF-FOUND if it is in the list,
7dnl ACTION-IF-NOT-FOUND otherwise.
8dnl
9dnl Parameters:
10dnl  - The name of the list.
11dnl  - The name of the variable that should be searched in the list.
12dnl  - An optional action to be run if found
13dnl  - An optional action to be run if not found
14dnl
15dnl _MP_LIST_CONTAINS_QUOTED([listname], [varname], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
16AC_DEFUN([_MP_LIST_CONTAINS], [dnl
17        mp_list_contains_present=
18        eval "mp_list_contains_list=\"$$1\""
19        for mp_list_contains_entry in $mp_list_contains_list; do
20                test -z "$mp_list_contains_entry" && continue
21                if test "x$$2" = "x$mp_list_contains_entry"; then
22                        mp_list_contains_present=1
23                        break
24                fi
25        done
26        if test "x$mp_list_contains_present" = "x"; then
27                m4_ifvaln([$3], [$3], [:])dnl
28                m4_ifvaln([$4], [else $4])dnl
29        fi
30])
31
32dnl Quote a variable and prepend it to a list.
33dnl
34dnl Parameters:
35dnl  - The name of the list.
36dnl  - The name of the variable that should be quoted and prepended to the
37dnl    list.
38AC_DEFUN([_MP_LIST_PREPEND_QUOTED], [dnl
39        _MP_QUOTE([$2])
40        _MP_VAR_PREPEND([$1], ["$$2 "])
41])
42
43
44dnl Quote a variable and append it to a list.
45dnl
46dnl Parameters:
47dnl  - The name of the list.
48dnl  - The name of the variable that should be quoted and appended to the list.
49AC_DEFUN([_MP_LIST_APPEND_QUOTED], [dnl
50        _MP_QUOTE([$2])
51        AS_VAR_APPEND([$1], [" $$2"])
52])
53
54dnl Prepend the shell expansion of a value to a variable.
55dnl
56dnl Parameters:
57dnl  - The name of the variable to which the second argument should be
58dnl    prepended.
59dnl  - The value that should be expanded using the shell expansion rules and
60dnl    prepended to the variable given in the first argument.
61AC_DEFUN([_MP_VAR_PREPEND], [dnl
62        AC_REQUIRE([_MP_VAR_PREPEND_PREPARE])dnl
63        mp_fn_var_prepend $1 $2
64])
65
66dnl Define the function required for _MP_VAR_PREPEND
67AC_DEFUN([_MP_VAR_PREPEND_PREPARE], [dnl
68        mp_fn_var_prepend() {
69                eval "$[]1=\"$[]2\$$[]1\""
70        }
71])
72
73dnl Quote a variable in single quotes (escaping any existing single quotes) and
74dnl store it in itself.
75dnl
76dnl Parameters:
77dnl  - The name of the variable that should be quoted using single quotes.
78AC_DEFUN([_MP_QUOTE], [dnl
79        case $$1 in
80                *\'*)
81                        $1=$(AS_ECHO(["$$1"]) | sed "s/'/'\\\\\\\\''/g")
82                ;;
83        esac
84        $1="'$$1'"dnl
85])
86
87
88dnl Extract the key part of a key-value pair given as string in the form
89dnl  --key=value or
90dnl   -key=value
91dnl
92dnl Parameters:
93dnl  - The variable name to assign to
94dnl  - The (quoted, if necessary) key-value pair
95AC_DEFUN([_MP_EXTRACT_KEY], [dnl
96        $1=$(AS_ECHO([$2]) | sed -E 's/^--?([[^=]]+)=.*$/\1/')dnl
97])
98
99dnl Similar to AC_ARG_VAR, but implemented with --with-pkg=PATH for PKG.
100dnl
101dnl Parameters: Similar to AC_ARG_VAR ($2 gets some boiler plate around it)
102AC_DEFUN([MP_TOOL_PATH], [dnl
103        AC_ARG_WITH([m4_tolower($1)], [AS_HELP_STRING([--with-m4_tolower($1)=PATH],
104                        [Path to alternate $2 command])], [$1=$withval],dnl
105                [])dnl
106])
107
108dnl Configure a project contained in a .tar.gz, .tgz or .tar.bz2 tarball,
109dnl extracting it previously, if necessary. Different from AC_CONFIG_SUBDIRS
110dnl (on which this macro is based), you can pass parameters to the
111dnl sub-configure script.
112dnl
113dnl Parameters:
114dnl  - The relative path to the tarball
115dnl  - The relative path to the directory that will be extracted from the
116dnl    tarball and contains the configure script to be run (can be a sub directory of the extracted directory)
117dnl  - Parameters to pass to the configure script
118dnl
119dnl MP_CONFIG_TARBALL([path-to-tarball], [dir-extracted-from-tarball-with-configure], [configure-parameters])
120AC_DEFUN([MP_CONFIG_TARBALL], [
121        dnl Warning: Don't use $GZIP and $BZIP2 here, both tools interpret these
122        dnl env variables as additional parameters.
123        AC_PATH_PROG(GZIP_BIN, [gzip], [])
124        AC_PATH_PROG(BZIP2_BIN, [bzip2], [])
125
126        mp_tarball="$1"
127        ac_dir=$2
128
129        mp_popdir=$(pwd)
130        if ! test -d "$ac_dir"; then
131                mp_tarball_vendordir="$(dirname "$mp_tarball")"
132                AS_MKDIR_P(["$mp_tarball_vendordir"])
133                AC_MSG_NOTICE([=== extracting $mp_tarball])
134                mp_tarball_extract_cmd=
135                case "$mp_tarball" in
136                        *.tar.gz | *.tgz)
137                                if test "x$GZIP_BIN" = "x"; then
138                                        AC_MSG_ERROR([gzip not found])
139                                fi
140                                mp_tarball_extract_cmd="$GZIP_BIN"
141                                ;;
142                        *.tar.bz2 | *.tbz2)
143                                if test "x$BZIP2_BIN" = "x"; then
144                                        AC_MSG_ERROR([bzip2 not found])
145                                fi
146                                mp_tarball_extract_cmd="$BZIP2_BIN"
147                                ;;
148                        *)
149                                AC_MSG_ERROR([Don't know how to extract tarball $mp_tarball])
150                                ;;
151                esac
152                (cd "$mp_tarball_vendordir"; umask 0022; "$mp_tarball_extract_cmd" -d < "$ac_abs_confdir/$mp_tarball" | tar xf - || AC_MSG_ERROR([failed to extract $mp_tarball]))
153        fi
154        if ! test -d "$ac_dir"; then
155                AC_MSG_ERROR([tarball $mp_tarball did not extract to $ac_dir])
156        fi
157
158        AS_MKDIR_P(["$ac_dir"])
159        _AC_SRCDIRS(["$ac_dir"])
160        cd "$ac_dir"
161
162        if test "$no_recursion" != yes || test ! -f "$ac_srcdir/config.status"; then
163                AC_MSG_NOTICE([=== configuring in $ac_dir ($mp_popdir/$ac_dir)])
164                if test -f "$ac_srcdir/configure"; then
165                        mp_sub_configure_args=
166                        mp_sub_configure_keys=
167                        # Compile a list of keys that have been given to the MP_CONFIG_TARBALL
168                        # macro; we want to skip copying those parameters from the original
169                        # configure invocation.
170                        for mp_arg in $3; do
171                                case $mp_arg in
172                                        --*=* | -*=*)
173                                                _MP_EXTRACT_KEY([mp_arg_key], ["$mp_arg"])
174                                                _MP_LIST_APPEND_QUOTED([mp_sub_configure_keys], [mp_arg_key])
175                                        ;;
176                                esac
177                                _MP_LIST_APPEND_QUOTED([mp_sub_configure_args], [mp_arg])
178                        done
179                        # Walk the list of arguments given to the original configure script;
180                        # filter out a few common ones we likely would not want to pass along,
181                        # add --disable-option-checking and filter those already given as
182                        # argument to MP_CONFIG_TARBALL.
183                        # Most of this code is adapted from _AC_OUTPUT_SUBDIRS in
184                        # $prefix/share/autoconf/autoconf/status.m4.
185                        mp_prev=
186                        eval "set x $ac_configure_args"
187                        shift
188                        for mp_arg; do
189                                if test -n "$mp_prev"; then
190                                        mp_prev=
191                                        continue
192                                fi
193                                case $mp_arg in
194                                          -cache-file \
195                                        | --cache-file \
196                                        | --cache-fil \
197                                        | --cache-fi \
198                                        | --cache-f \
199                                        | --cache- \
200                                        | --cache \
201                                        | --cach \
202                                        | --cac \
203                                        | --ca \
204                                        | --c)
205                                                mp_prev=cache_file
206                                        ;;
207                                          -cache-file=* \
208                                        | --cache-file=* \
209                                        | --cache-fil=* \
210                                        | --cache-fi=* \
211                                        | --cache-f=* \
212                                        | --cache-=* \
213                                        | --cache=* \
214                                        | --cach=* \
215                                        | --cac=* \
216                                        | --ca=* \
217                                        | --c=*)
218                                                # ignore --cache-file
219                                        ;;
220                                          --config-cache \
221                                        | -C)
222                                                # ignore -C
223                                        ;;
224                                          -srcdir \
225                                        | --srcdir \
226                                        | -srcdi \
227                                        | -srcd \
228                                        | -src \
229                                        | -sr)
230                                                mp_prev=srcdir
231                                        ;;
232                                          -srcdir=* \
233                                        | --srcdir=* \
234                                        | --srcdi=* \
235                                        | --srcd=* \
236                                        | --src=* \
237                                        | --sr=*)
238                                                # ignore --srcdir
239                                        ;;
240                                          -prefix \
241                                        | --prefix \
242                                        | --prefi \
243                                        | --pref \
244                                        | --pre \
245                                        | --pr \
246                                        | --p)
247                                                mp_prev=prefix
248                                        ;;
249                                          -prefix=* \
250                                        | --prefix=* \
251                                        | --prefi=* \
252                                        | --pref=* \
253                                        | --pre=* \
254                                        | --pr=* \
255                                        | --p=*)
256                                                # ignore --prefix
257                                        ;;
258                                        --disable-option-checking)
259                                                # ignore --disable-option-checking
260                                        ;;
261                                        --*=* | -*=*)
262                                                _MP_EXTRACT_KEY([mp_arg_key], ["$mp_arg"])
263                                                _MP_LIST_CONTAINS([mp_sub_configure_keys], [mp_arg_key], [], [
264                                                        _MP_LIST_APPEND_QUOTED([mp_sub_configure_args], [mp_arg])
265                                                ])
266                                        ;;
267                                        *)
268                                                # always pass positional arguments
269                                                _MP_LIST_APPEND_QUOTED([mp_sub_configure_args], [mp_arg])
270                                        ;;
271                                esac
272                        done
273
274                        # Now prepend some arguments that should always be present unless
275                        # overriden, such as --prefix, --silent, --disable-option-checking,
276                        # --cache-file, --srcdir
277                        # Pass --prefix unless already given
278                        mp_arg_key=prefix
279                        _MP_LIST_CONTAINS([mp_sub_configure_args], [mp_arg_key], [], [
280                                mp_arg="--prefix=$prefix"
281                                _MP_LIST_PREPEND_QUOTED([mp_sub_configure_args], [mp_arg])
282                        ])
283
284                        # Pass --silent
285                        if test "$silent" = yes; then
286                                mp_arg="--silent"
287                                _MP_LIST_PREPEND_QUOTED([mp_sub_configure_args], [mp_arg])
288                        fi
289
290                        # Always prepend --disable-option-checking to silence warnings, since
291                        # different subdirs can have different --enable and --with options.
292                        mp_arg="--disable-option-checking"
293                        _MP_LIST_PREPEND_QUOTED([mp_sub_configure_args], [mp_arg])
294
295                        # Make the cache file name correct relative to the subdirectory.
296                        case $cache_file in
297                                [[\\/]]* | ?:[[\\/]]* )
298                                        mp_sub_cache_file=$cache_file
299                                ;;
300                                *) # Relative name.
301                                        mp_sub_cache_file=$ac_top_build_prefix$cache_file
302                                ;;
303                        esac
304                        mp_arg="--cache-file=$mp_sub_cache_file"
305                        _MP_LIST_PREPEND_QUOTED([mp_sub_configure_args], [mp_arg])
306
307                        mp_arg="--srcdir=$ac_srcdir"
308                        _MP_LIST_APPEND_QUOTED([mp_sub_configure_args], [mp_arg])
309
310                        AC_MSG_NOTICE([running $SHELL $ac_srcdir/configure $mp_sub_configure_args in $ac_dir])
311                        eval "\$SHELL \$ac_srcdir/configure $mp_sub_configure_args" || AC_MSG_ERROR([configure failed for $ac_dir])
312                else
313                        AC_MSG_ERROR([no configure script found in $ac_dir])
314                fi
315                AC_MSG_NOTICE([=== finished configuring in $ac_dir ($mp_popdir/$ac_dir)])
316        fi
317        cd "$mp_popdir"
318])
319
320
321#------------------------------------------------------------------------
322# MP_CHECK_FRAMEWORK_COREFOUNDATION --
323#
324#       Check if CoreFoundation framework is available, define HAVE_FRAMEWORK_COREFOUNDATION if so.
325#
326# Arguments:
327#       None.
328#
329# Requires:
330#       None.
331#
332# Depends:
333#               AC_LANG_PROGRAM
334#
335# Results:
336#       Result is cached.
337#
338#       If CoreFoundation framework is available, defines the following variables:
339#               HAVE_FRAMEWORK_COREFOUNDATION
340#
341#------------------------------------------------------------------------
342AC_DEFUN(MP_CHECK_FRAMEWORK_COREFOUNDATION, [
343        FRAMEWORK_LIBS="-framework CoreFoundation"
344
345        AC_MSG_CHECKING([for CoreFoundation framework])
346
347        AC_CACHE_VAL(mp_cv_have_framework_corefoundation, [
348                ac_save_LIBS="$LIBS"
349                LIBS="$FRAMEWORK_LIBS $LIBS"
350               
351                AC_LINK_IFELSE([
352                        AC_LANG_PROGRAM([
353                                        #include <CoreFoundation/CoreFoundation.h>
354                                ], [
355                                        CFURLRef url = CFURLCreateWithFileSystemPath(NULL, CFSTR("/testing"), kCFURLPOSIXPathStyle, 1);
356                                        CFArrayRef bundles = CFBundleCreateBundlesFromDirectory(NULL, url, CFSTR("pkg"));
357                        ])
358                        ], [
359                                mp_cv_have_framework_corefoundation="yes"
360                        ], [
361                                mp_cv_have_framework_corefoundation="no"
362                        ]
363                )
364
365                LIBS="$ac_save_LIBS"
366        ])
367
368        AC_MSG_RESULT(${mp_cv_have_framework_corefoundation})
369
370        if test x"${mp_cv_have_framework_corefoundation}" = "xyes"; then
371                AC_DEFINE([HAVE_FRAMEWORK_COREFOUNDATION], [], [Define if CoreFoundation framework is available])
372        fi
373
374        AC_SUBST(HAVE_FRAMEWORK_COREFOUNDATION)
375])
376
377
378#------------------------------------------------------------------------
379# MP_CHECK_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER --
380#
381#       Check if if the routine CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER
382#       is available in CoreFoundation.
383#
384# Arguments:
385#       None.
386#
387# Requires:
388#       None.
389#
390# Depends:
391#               AC_LANG_PROGRAM
392#
393# Results:
394#       Result is cached.
395#
396#       If function CFNotificationCenterGetDarwinNotifyCenter is in the CoreFoundation framework, defines the following variables:
397#               HAVE_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER
398#
399#------------------------------------------------------------------------
400AC_DEFUN(MP_CHECK_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER, [
401        FRAMEWORK_LIBS="-framework CoreFoundation"
402
403        AC_MSG_CHECKING([for CFNotificationCenterGetDarwinNotifyCenter])
404
405        AC_CACHE_VAL(mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter, [
406                ac_save_LIBS="$LIBS"
407                LIBS="$FRAMEWORK_LIBS $LIBS"
408               
409                AC_LINK_IFELSE([
410                        AC_LANG_PROGRAM([
411                                        #include <CoreFoundation/CoreFoundation.h>
412                                ], [
413                                        CFNotificationCenterRef ref = CFNotificationCenterGetDarwinNotifyCenter();
414                        ])
415                        ], [
416                                mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter="yes"
417                        ], [
418                                mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter="no"
419                        ]
420                )
421
422                LIBS="$ac_save_LIBS"
423        ])
424
425        AC_MSG_RESULT(${mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter})
426
427        if test x"${mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter}" = "xyes"; then
428                AC_DEFINE([HAVE_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER], [], [Define if function CFNotificationCenterGetDarwinNotifyCenter in CoreFoundation framework])
429        fi
430
431        AC_SUBST(HAVE_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER)
432])
433
434
435#------------------------------------------------------------------------
436# MP_CHECK_FRAMEWORK_SYSTEMCONFIGURATION --
437#
438#       Check if SystemConfiguration framework is available, define HAVE_FRAMEWORK_SYSTEMCONFIGURATION if so.
439#
440# Arguments:
441#       None.
442#
443# Requires:
444#       None.
445#
446# Depends:
447#               AC_LANG_PROGRAM
448#
449# Results:
450#       Result is cached.
451#
452#       If SystemConfiguration framework is available, defines the following variables:
453#               HAVE_FRAMEWORK_SYSTEMCONFIGURATION
454#
455#------------------------------------------------------------------------
456AC_DEFUN(MP_CHECK_FRAMEWORK_SYSTEMCONFIGURATION, [
457        FRAMEWORK_LIBS="-framework SystemConfiguration"
458
459        AC_MSG_CHECKING([for SystemConfiguration framework])
460
461        AC_CACHE_VAL(mp_cv_have_framework_systemconfiguration, [
462                ac_save_LIBS="$LIBS"
463                LIBS="$FRAMEWORK_LIBS $LIBS"
464               
465                AC_LINK_IFELSE([
466                        AC_LANG_PROGRAM([
467                                        #include <SystemConfiguration/SystemConfiguration.h>
468                                ], [
469                                        int err = SCError();
470                                        SCDynamicStoreRef dsRef = SCDynamicStoreCreate(NULL, NULL, NULL, NULL);
471                        ])
472                        ], [
473                                mp_cv_have_framework_systemconfiguration="yes"
474                        ], [
475                                mp_cv_have_framework_systemconfiguration="no"
476                        ]
477                )
478
479                LIBS="$ac_save_LIBS"
480        ])
481
482        AC_MSG_RESULT(${mp_cv_have_framework_systemconfiguration})
483
484        if test x"${mp_cv_have_framework_systemconfiguration}" = "xyes"; then
485                AC_DEFINE([HAVE_FRAMEWORK_SYSTEMCONFIGURATION], [], [Define if SystemConfiguration framework is available])
486        fi
487
488        AC_SUBST(HAVE_FRAMEWORK_SYSTEMCONFIGURATION)
489])
490
491
492#------------------------------------------------------------------------
493# MP_CHECK_FRAMEWORK_IOKIT --
494#
495#       Check if IOKit framework is available, define HAVE_FRAMEWORK_IOKIT if so.
496#
497# Arguments:
498#       None.
499#
500# Requires:
501#       None.
502#
503# Depends:
504#               AC_LANG_PROGRAM
505#
506# Results:
507#       Result is cached.
508#
509#       If IOKit framework is available, defines the following variables:
510#               HAVE_FRAMEWORK_IOKIT
511#
512#------------------------------------------------------------------------
513AC_DEFUN(MP_CHECK_FRAMEWORK_IOKIT, [
514        FRAMEWORK_LIBS="-framework IOKit"
515
516        AC_MSG_CHECKING([for IOKit framework])
517
518        AC_CACHE_VAL(mp_cv_have_framework_iokit, [
519                ac_save_LIBS="$LIBS"
520                LIBS="$FRAMEWORK_LIBS $LIBS"
521               
522                AC_LINK_IFELSE([
523                        AC_LANG_PROGRAM([
524                                        #include <IOKit/IOKitLib.h>
525                                ], [
526                                        IOCreateReceivePort(0, NULL);
527                                        IORegisterForSystemPower(0, NULL, NULL, NULL);
528                        ])
529                        ], [
530                                mp_cv_have_framework_iokit="yes"
531                        ], [
532                                mp_cv_have_framework_iokit="no"
533                        ]
534                )
535
536                LIBS="$ac_save_LIBS"
537        ])
538
539        AC_MSG_RESULT(${mp_cv_have_framework_iokit})
540
541        if test x"${mp_cv_have_framework_iokit}" = "xyes"; then
542                AC_DEFINE([HAVE_FRAMEWORK_IOKIT], [], [Define if IOKit framework is available])
543        fi
544
545        AC_SUBST(HAVE_FRAMEWORK_IOKIT)
546])
547
548
549dnl This macro checks if the user specified a ports tree
550dnl explicitly. If not, search for it
551
552# MP_PATH_PORTSDIR(DEFAULT_PORTSDIR)
553#---------------------------------------
554 AC_DEFUN([MP_PATH_PORTSDIR],[
555        dnl For ease of reading, run after gcc has been found/configured
556        AC_REQUIRE([AC_PROG_CC])
557
558        AC_ARG_WITH(ports-dir, [AS_HELP_STRING([--with-ports-dir=DIR],[Specify alternate ports directory])], [ portsdir="$withval" ] )
559
560
561        AC_MSG_CHECKING([for ports tree])
562        if test "x$portsdir" != "x" ; then
563          if test -d "$portsdir" -a -e "$portsdir/PortIndex" ; then
564                :
565          else
566                AC_MSG_ERROR([$portsdir not a valid ports tree])
567          fi
568        else
569                dnl If the user didn't give a path, look for default
570                if test "x$1" != "x" ; then
571                  if test -d "$1" -a -e "$1/PortIndex" ; then
572                        portsdir=$1
573                  fi
574                fi
575        fi
576
577        if test "x$portsdir" != "x" ; then
578                AC_MSG_RESULT($portsdir)
579                PORTSDIR="$portsdir"
580                AC_SUBST(PORTSDIR)
581        else
582                AC_MSG_WARN([No ports tree found])
583        fi
584
585         ])
586
587
588# MP_PATH_MPCONFIGDIR
589#---------------------------------------
590AC_DEFUN([MP_PATH_MPCONFIGDIR],[
591        dnl if the user actually specified --prefix, shift
592        dnl mpconfigdir to $prefix/etc/macports
593        dnl     AC_REQUIRE([MP_PATH_PORTSDIR])
594       
595        AC_MSG_CHECKING([for MacPorts config directory])
596
597        mpconfigdir='${sysconfdir}/macports'
598
599        AC_MSG_RESULT([$mpconfigdir])
600        MPCONFIGDIR="$mpconfigdir"
601        AC_SUBST(MPCONFIGDIR)
602
603        ])
604
605# MP_CHECK_OLDLAYOUT
606#---------------------------------------
607AC_DEFUN([MP_CHECK_OLDLAYOUT],[
608        dnl Bail if there is an existing install of DP/MP older than 1.5
609
610        AC_MSG_CHECKING([that any existing MacPorts install can be upgraded])
611
612        eval dpversionfile="${sysconfdir}/ports/dp_version"
613        if test -f "$dpversionfile"; then
614                AC_MSG_ERROR([Existing MacPorts or DarwinPorts install is too old to be upgraded. Install MacPorts 1.7.1 first.])
615        else
616                AC_MSG_RESULT([yes])
617        fi
618
619        ])
620
621# MP_CHECK_NOROOTPRIVILEGES
622#-------------------------------------------------
623AC_DEFUN([MP_CHECK_NOROOTPRIVILEGES],[
624        dnl if with user specifies --with-no-root-privileges,
625        dnl use current user and group.
626        dnl use ~/Library/Tcl as Tcl package directory
627        AC_REQUIRE([MP_PATH_MPCONFIGDIR])
628
629        AC_ARG_WITH(no-root-privileges, [AS_HELP_STRING([--with-no-root-privileges],[Specify that MacPorts should be installed in your home directory])], [ROOTPRIVS=$withval] )
630
631        if test "${ROOTPRIVS+set}" = set; then
632                # Set install-user to current user
633                AC_MSG_CHECKING([for install user])
634                DSTUSR=`id -un`
635                AC_MSG_RESULT([$DSTUSR])
636                AC_SUBST(DSTUSR)
637
638                # Set install-group to current user
639                AC_MSG_CHECKING([for install group])
640                DSTGRP=`id -gn`
641                AC_MSG_RESULT([$DSTGRP])
642                AC_SUBST(DSTGRP)
643
644                # Set run-user to current user
645                AC_MSG_CHECKING([for macports user])
646                RUNUSR=`id -un`
647                AC_MSG_RESULT([$RUNUSR])
648                AC_SUBST(RUNUSR)
649        fi
650
651])
652
653# MP_CHECK_RUNUSER
654#-------------------------------------------------
655AC_DEFUN([MP_CHECK_RUNUSER],[
656        dnl if with user specifies --with-macports-user,
657        dnl use it. otherwise default to platform defaults
658        AC_REQUIRE([MP_PATH_MPCONFIGDIR])
659
660        AC_ARG_WITH(macports-user, [AS_HELP_STRING([--with-macports-user=USER],[Specify user to drop privileges to, if possible, during compiles etc.])], [ RUNUSR=$withval ] )
661       
662        AC_MSG_CHECKING([for macports user])
663        if test "x$RUNUSR" = "x" ; then
664                RUNUSR=macports
665        fi
666
667        AC_MSG_RESULT([$RUNUSR])
668        AC_SUBST(RUNUSR)
669])
670
671
672# MP_SHARED_DIRECTORY
673#-------------------------------------------------
674AC_DEFUN([MP_SHARED_DIRECTORY],[
675        dnl if with user specifies --with-shared-directory,
676        dnl use 0775 permissions for ${prefix} directories
677        AC_REQUIRE([MP_PATH_MPCONFIGDIR])
678
679        AC_ARG_WITH(shared-directory, [AS_HELP_STRING([--with-shared-directory],[Use 0775 permissions for installed directories])], [ SHAREDIR=$withval ] )
680
681        if test "${SHAREDIR+set}" = set; then   
682                AC_MSG_CHECKING([whether to share the install directory with all members of the install group])
683                DSTMODE=0775
684
685                AC_MSG_RESULT([$DSTMODE])
686                AC_SUBST(DSTMODE)
687        fi
688])
689
690# MP_CHECK_INSTALLUSER
691#-------------------------------------------------
692AC_DEFUN([MP_CHECK_INSTALLUSER],[
693        dnl if with user specifies --with-install-user,
694        dnl use it. otherwise default to platform defaults
695        AC_REQUIRE([MP_PATH_MPCONFIGDIR])
696
697        AC_ARG_WITH(install-user, [AS_HELP_STRING([--with-install-user=USER],[Specify user ownership of installed files])], [ DSTUSR=$withval ] )
698       
699        AC_MSG_CHECKING([for install user])
700        if test "x$DSTUSR" = "x" ; then
701                DSTUSR=root
702        fi
703
704        AC_MSG_RESULT([$DSTUSR])
705        AC_SUBST(DSTUSR)
706])
707
708# MP_CHECK_INSTALLGROUP
709#-------------------------------------------------
710AC_DEFUN([MP_CHECK_INSTALLGROUP],[
711        dnl if with user specifies --with-install-group,
712        dnl use it. otherwise default to platform defaults
713        AC_REQUIRE([MP_CHECK_INSTALLUSER])
714
715        AC_ARG_WITH(install-group, [AS_HELP_STRING([--with-install-group=GROUP],[Specify group ownership of installed files])], [ DSTGRP=$withval ] )
716
717        AC_MSG_CHECKING([for install group])
718        if test "x$DSTGRP" = "x" ; then
719                case $host_os in
720                        darwin*)
721                                DSTGRP="admin"
722                        ;;
723                        freebsd*)
724                                DSTGRP="wheel"
725                        ;;
726                        linux*)
727                                DSTGRP="root"
728                        ;;
729                        *)
730                                DSTGRP="wheel"
731                        ;;
732                esac
733        fi
734
735        AC_MSG_RESULT([$DSTGRP])
736        AC_SUBST(DSTGRP)
737])
738
739# MP_DIRECTORY_MODE
740#-------------------------------------------------
741AC_DEFUN([MP_DIRECTORY_MODE],[
742        dnl if with user specifies --with-directory-mode,
743        dnl use the specified permissions for ${prefix} directories
744        dnl otherwise use 0755
745        AC_REQUIRE([MP_PATH_MPCONFIGDIR])
746
747        AC_ARG_WITH(directory-mode, [AS_HELP_STRING([--with-directory-mode=MODE],[Specify directory mode of installed directories])], [ DSTMODE=$withval ] )
748       
749        AC_MSG_CHECKING([what permissions to use for installation directories])
750        if test "x$DSTMODE" = "x" ; then
751                DSTMODE=0755
752        fi
753
754        AC_MSG_RESULT([$DSTMODE])
755        AC_SUBST(DSTMODE)
756])
757
758# MP_PATH_APPLICATIONS
759#---------------------------------------
760AC_DEFUN([MP_PATH_APPLICATIONS],[
761        AC_REQUIRE([MP_CHECK_INSTALLUSER])
762
763        AC_ARG_WITH(applications-dir,[AS_HELP_STRING([--with-applications-dir],[Applications installation directory.])], MPAPPLICATIONSDIR=${withval})
764
765        oldprefix=$prefix
766        if test "x$prefix" = "xNONE" ; then
767                prefix=$ac_default_prefix
768        fi
769        AC_MSG_CHECKING([for Applications installation directory])
770
771        if test "x$MPAPPLICATIONSDIR" = "x" ; then
772                if test "$DSTUSR" = "root" ; then
773                        MPAPPLICATIONSDIR="/Applications/MacPorts"
774                else
775                        MPAPPLICATIONSDIR="$(eval echo ~$DSTUSR)/Applications/MacPorts"
776                fi
777        fi
778
779        AC_MSG_RESULT([$MPAPPLICATIONSDIR])
780        AC_SUBST(MPAPPLICATIONSDIR)
781        prefix=$oldprefix
782])
783
784# MP_PATH_FRAMEWORKS
785#---------------------------------------
786AC_DEFUN([MP_PATH_FRAMEWORKS],[
787        AC_REQUIRE([MP_CHECK_INSTALLUSER])
788
789        AC_ARG_WITH(frameworks-dir,[AS_HELP_STRING([--with-frameworks-dir],[Frameworks installation directory.])], MPFRAMEWORKSDIR=${withval})
790
791        oldprefix=$prefix
792        if test "x$prefix" = "xNONE" ; then
793                prefix=$ac_default_prefix
794        fi
795        AC_MSG_CHECKING([for Frameworks installation directory])
796
797        if test "x$MPFRAMEWORKSDIR" = "x" ; then
798                MPFRAMEWORKSDIR="${prefix}/Library/Frameworks"
799        fi
800
801        AC_MSG_RESULT([$MPFRAMEWORKSDIR])
802        AC_SUBST(MPFRAMEWORKSDIR)
803        prefix=$oldprefix
804])
805
806# MP_UNIVERSAL_OPTIONS
807#---------------------------------------
808AC_DEFUN([MP_UNIVERSAL_OPTIONS],[
809        AC_ARG_WITH(universal-archs,[AS_HELP_STRING([--with-universal-archs="CPU"],[Universal CPU architectures (space separated)])], UNIVERSAL_ARCHS=${withval})
810
811        if test "x$UNIVERSAL_ARCHS" = "x"; then
812                case "$MACOSX_VERSION" in
813                        10.1[[0-9]]*)
814                                UNIVERSAL_ARCHS="x86_64 i386"
815                        ;;
816                        10.[[0-5]]*)
817                                UNIVERSAL_ARCHS="i386 ppc"
818                        ;;
819                        *)
820                                UNIVERSAL_ARCHS="x86_64 i386"
821                        ;;
822                esac
823        fi
824
825        UNIVERSAL_ARCHFLAGS=
826        for arch in $UNIVERSAL_ARCHS; do
827                UNIVERSAL_ARCHFLAGS="$UNIVERSAL_ARCHFLAGS -arch $arch"
828        done
829
830        AC_MSG_CHECKING([for Universal CPU architectures])
831        AC_MSG_RESULT([$UNIVERSAL_ARCHS])
832        AC_SUBST(UNIVERSAL_ARCHS)
833        AC_SUBST(UNIVERSAL_ARCHFLAGS)
834])
835
836# MP_LIB_MD5
837#---------------------------------------
838# Check for an md5 implementation
839AC_DEFUN([MP_LIB_MD5],[
840        # Check for libmd from FreeBSD, which is preferred
841        AC_CHECK_LIB([md], [MD5File],[
842                AC_CHECK_HEADERS([md5.h sha.h], ,[
843                        AC_MSG_ERROR([libmd was found, but md5.h or sha.h is missing.])
844                ])
845                ac_save_LIBS="$LIBS"
846                LIBS="-lmd $LIBS"
847                AC_CHECK_FUNCS([SHA1_File])
848                LIBS="$ac_save_LIBS"
849                AC_CHECK_HEADERS([ripemd.h sha256.h])
850                AC_DEFINE([HAVE_LIBMD], ,[Define if you have the `md' library (-lmd).])
851                MD5_LIBS="-lmd"]
852        )
853        if test "x$MD5_LIBS" = "x"; then
854                # If libmd is not found, check for libcrypto from OpenSSL
855                AC_CHECK_LIB([crypto], [MD5_Update],[
856                        AC_CHECK_HEADERS([openssl/md5.h openssl/sha.h], ,[
857                                AC_MSG_ERROR([libcrypto was found, but openssl/md5.h or openssl/sha.h is missing.])
858                        ])
859                        AC_CHECK_HEADERS([openssl/ripemd.h])
860                        ac_save_LIBS="$LIBS"
861                        LIBS="-lcrypto $LIBS"
862                        AC_CHECK_FUNCS([SHA256_Update])
863                        LIBS="$ac_save_LIBS"
864                        AC_DEFINE([HAVE_LIBCRYPTO], ,[Define if you have the `crypto' library (-lcrypto).])
865                        MD5_LIBS="-lcrypto"]
866                )
867        fi
868        if test "x$MD5_LIBS" = "x"; then
869                AC_MSG_ERROR([Neither CommonCrypto, libmd nor libcrypto were found. A working md5 implementation is required.])
870        fi
871        AC_SUBST([MD5_LIBS])
872])
873
874# MP_PROG_DAEMONDO
875#---------------------------------------
876AC_DEFUN([MP_PROG_DAEMONDO],[
877        AC_REQUIRE([MP_CHECK_FRAMEWORK_COREFOUNDATION])
878        AC_REQUIRE([MP_CHECK_FRAMEWORK_SYSTEMCONFIGURATION])
879        AC_REQUIRE([MP_CHECK_FRAMEWORK_IOKIT])
880        AC_REQUIRE([MP_CHECK_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER])
881       
882        AC_MSG_CHECKING(for whether we will build daemondo)
883        result=no
884        case $host_os in
885                darwin*)
886                        if test "x$mp_cv_have_framework_corefoundation" == "xyes" &&
887                           test "x$mp_cv_have_framework_systemconfiguration" == "xyes" &&
888                           test "x$mp_cv_have_framework_iokit" == "xyes" &&
889                           test "x$mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter" == "xyes"; then
890                                result=yes
891                                EXTRA_PROGS="$EXTRA_PROGS daemondo"
892                                AC_CONFIG_FILES([src/programs/daemondo/Makefile])
893                        fi
894                ;;
895                *)
896        esac
897        AC_MSG_RESULT(${result})
898])
899
900# MP_LIBCURL_FLAGS
901#       Sets the flags to compile with libcurl.
902#
903# Arguments:
904#       None.
905#
906# Requires:
907#   curl-config or user parameters to define the flags.
908#
909# Results:
910#   defines some help strings.
911#   sets CFLAGS_LIBCURL and LDFLAGS_LIBCURL
912#---------------------------------------
913AC_DEFUN([MP_LIBCURL_FLAGS],[
914        AC_ARG_WITH(curlprefix,
915                   [  --with-curlprefix       base directory for the cURL install '/usr', '/usr/local',...],
916                   [  curlprefix=$withval ])
917
918        if test "x$curlprefix" = "x"; then
919                AC_PATH_PROG([CURL_CONFIG], [curl-config])
920        else
921                AC_PATH_PROG([CURL_CONFIG], [curl-config], , [$curlprefix/bin])
922        fi
923
924        if test "x$CURL_CONFIG" = "x"; then
925                AC_MSG_ERROR([cannot find curl-config. Is libcurl installed?])
926        fi
927
928        CFLAGS_LIBCURL=$($CURL_CONFIG --cflags)
929        if test "x$curlprefix" = "x"; then
930                # System curl-config emits absurd output for --libs
931                # See rdar://7244457
932                LDFLAGS_LIBCURL="-lcurl"
933        else
934                # Due to a bug in dist, --arch flags are improperly supplied by curl-config.
935                # Get rid of them.
936                LDFLAGS_LIBCURL=$($CURL_CONFIG --libs | [sed 's/-arch [A-Za-z0-9_]* //g'])
937        fi
938
939        AC_SUBST(CFLAGS_LIBCURL)
940        AC_SUBST(LDFLAGS_LIBCURL)
941])
942
943# MP_SQLITE3_FLAGS
944#       Sets the flags to compile with libsqlite3 and tclsqlite3.
945#
946# Arguments:
947#       None.
948#
949# Requires:
950#   pkgconfig, libsqlite3 in /usr/lib, or user parameters to define the flags.
951#
952# Results:
953#   defines some help strings.
954#   sets CFLAGS_SQLITE3 and LDFLAGS_SQLITE3
955#---------------------------------------
956AC_DEFUN([MP_SQLITE3_FLAGS],[
957    # first sqlite3 itself
958        AC_ARG_WITH(sqlite3prefix,
959                   [  --with-sqlite3prefix       base directory for the sqlite3 install '/usr', '/usr/local',...],
960                   [  sqlite3prefix=$withval ])
961
962        if test "x$sqlite3prefix" = "x"; then
963                # see if it's somewhere like /usr that needs no extra flags
964                LDFLAGS_SQLITE3="-lsqlite3"
965                AC_CHECK_HEADER(sqlite3.h, [],[
966                    # nope - try pkg-config
967                        AC_PATH_PROG([PKG_CONFIG], [pkg-config])
968                        if test "x$PKG_CONFIG" = "x" || ! $PKG_CONFIG --exists sqlite3; then
969                                AC_MSG_ERROR([cannot find sqlite3 header])
970                        else
971                                CFLAGS_SQLITE3=$($PKG_CONFIG --cflags sqlite3)
972                                LDFLAGS_SQLITE3=$($PKG_CONFIG --libs sqlite3)
973                                # for tclsqlite below
974                                mp_sqlite3_dir=$($PKG_CONFIG --variable=prefix sqlite3)
975                                if test "x$mp_sqlite3_dir" != "x"; then
976                                        mp_sqlite3_dir=${mp_sqlite3_dir}/lib/sqlite3
977                                fi
978                        fi
979                ])
980        else
981            CFLAGS_SQLITE3="-I${sqlite3prefix}/include"
982                LDFLAGS_SQLITE3="-L${sqlite3prefix}/lib -lsqlite3"
983        fi
984
985        # check if we have sqlite3ext.h, using the appropriate cppflags
986        CPPFLAGS_OLD="${CPPFLAGS}"
987        CPPFLAGS="${CPPFLAGS} ${CFLAGS_SQLITE3}"
988        AC_CHECK_HEADERS(sqlite3ext.h)
989        CPPFLAGS="${CPPFLAGS_OLD}"
990
991        AC_SUBST(CFLAGS_SQLITE3)
992        AC_SUBST(LDFLAGS_SQLITE3)
993])
994
995dnl This macro tests if the compiler supports GCC's
996dnl __attribute__ syntax for unused variables/parameters
997AC_DEFUN([MP_COMPILER_ATTRIBUTE_UNUSED], [
998        AC_MSG_CHECKING([how to mark unused variables])
999        AC_COMPILE_IFELSE(
1000                [AC_LANG_SOURCE([[int a __attribute__ ((unused));]])],
1001                [AC_DEFINE(UNUSED, [__attribute__((unused))], [Attribute to mark unused variables])],
1002                [AC_DEFINE(UNUSED, [])])
1003
1004        AC_MSG_RESULT([])
1005       
1006])
1007
1008dnl This macro ensures MP installation prefix paths are NOT in CFLAGS,
1009dnl CPPFLAGS, OBJCFLAGS, LDFLAGS for configure to prevent potential problems
1010dnl when base/ code is updated and ports are installed that would match needed
1011dnl items.
1012AC_DEFUN([MP_FLAGS_SCAN],[
1013        AC_ARG_ENABLE(
1014                [flag-sanitization],
1015                AS_HELP_STRING([--disable-flag-sanitization], [Do not sanitize CPPFLAGS, CFLAGS, OBJCFLAGS and LDFLAGS]),
1016                [disable_mp_flags_scan=yes],
1017                [disable_mp_flags_scan=no])
1018
1019        if test x"$disable_mp_flags_scan" != "xyes"; then
1020                # Get a value for $prefix
1021                oldprefix=$prefix
1022                if test "x$prefix" = "xNONE" ; then
1023                        prefix=$ac_default_prefix
1024                fi
1025
1026                mp_flags_scan_found=
1027
1028                # Clean CFLAGS CPPFLAGS OBJCFLAGS and LDFLAGS
1029                for mp_flags_flagname in CFLAGS CPPFLAGS OBJCFLAGS LDFLAGS; do
1030                        mp_flags_scan_flag_cleaned=
1031                        eval "set x \$$mp_flags_flagname"
1032                        shift
1033                        for mp_flags_scan_val; do
1034                                case "$mp_flags_scan_val" in
1035                                        -I$prefix/* | -L$prefix/*)
1036                                                AC_MSG_NOTICE([Removing `$mp_flags_scan_val' from \$$mp_flags_flagname because it might cause a self-dependency])
1037                                                mp_flags_scan_found=1
1038                                                ;; #(
1039                                        *)
1040                                                if test -z "$mp_flags_scan_flag_cleaned"; then
1041                                                        mp_flags_scan_flag_cleaned=$mp_flags_scan_val
1042                                                else
1043                                                        AS_VAR_APPEND([mp_flags_scan_flag_cleaned], [" $mp_flags_scan_val"])
1044                                                fi
1045                                                ;;
1046                                esac
1047                        done
1048                        if test -z "$mp_flags_scan_flag_cleaned"; then
1049                                (unset $mp_flags_flagname) >/dev/null 2>&1 && unset $mp_flags_flagname
1050                                (export -n $mp_flags_flagname) >/dev/null 2>&1 && export -n $mp_flags_flagname
1051                        else
1052                                eval "$mp_flags_flagname=\"$mp_flags_scan_flag_cleaned\""
1053                                export $mp_flags_flagname
1054                        fi
1055                        eval "ac_env_${mp_flags_flagname}_set=\${${mp_flags_flagname}+set}"
1056                        eval "ac_env_${mp_flags_flagname}_value=\${${mp_flags_flagname}}"
1057                        eval "ac_cv_env_${mp_flags_flagname}_set=\${${mp_flags_flagname}+set}"
1058                        eval "ac_cv_env_${mp_flags_flagname}_value=\${${mp_flags_flagname}}"
1059                done
1060
1061                # Since those are all precious variables they have been saved into config.cache and put into $ac_configure_args
1062                # We need to remove them at least from $ac_configure_args, because that's being passed to sub-configures
1063                eval "set x $ac_configure_args"
1064                shift
1065                ac_configure_args=
1066                for mp_flags_configure_arg; do
1067                        case "$mp_flags_configure_arg" in
1068                                CFLAGS=* | CPPFLAGS=* | OBJCFLAGS=* | LDFLAGS=*)
1069                                        mp_flags_configure_arg_key=$(AS_ECHO(["$mp_flags_configure_arg"]) | sed -E 's/^([[^=]]+)=.*$/\1/')
1070                                        eval "mp_flags_configure_arg_newval=\$$mp_flags_configure_arg_key"
1071                                        if test -n "$mp_flags_configure_arg_newval"; then
1072                                                AS_VAR_APPEND([ac_configure_args], [" '$mp_flags_configure_arg_key=$mp_flags_configure_arg_newval'"])
1073                                        fi
1074                                        ;;
1075                                *)
1076                                        AS_VAR_APPEND([ac_configure_args], [" '$mp_flags_configure_arg'"])
1077                                        ;;
1078                        esac
1079                done
1080
1081                if ! test -z "$mp_flags_scan_found"; then
1082                        AC_MSG_NOTICE([See https://trac.macports.org/ticket/42756 for rationale on why this script is removing these values])
1083                        AC_MSG_NOTICE([Pass --disable-flag-sanitization if you're aware of the potential problems and want to risk them anyway])
1084                fi
1085
1086                # Restore $prefix
1087                prefix=$oldprefix
1088        fi
1089])
1090
1091
1092dnl This macro ensures MP installation prefix paths are NOT in PATH
1093dnl for configure to prevent potential problems when base/ code is updated
1094dnl and ports are installed that would match needed items.
1095AC_DEFUN([MP_PATH_SCAN],[
1096        oldprefix=$prefix
1097        if test "x$prefix" = "xNONE" ; then
1098                prefix=$ac_default_prefix
1099        fi
1100        oldPATH=$PATH
1101        newPATH=
1102        as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
1103        for as_dir in $oldPATH
1104        do
1105                IFS=$as_save_IFS
1106                case "$as_dir" in
1107                        $prefix/*)
1108                                ;;
1109                        *)
1110                                if test -z "$newPATH"; then
1111                                        newPATH=$as_dir
1112                                else
1113                                        newPATH=$newPATH$PATH_SEPARATOR$as_dir
1114                                fi
1115                                ;;
1116                esac
1117        done
1118        PATH=$newPATH; export PATH
1119        AC_SUBST(PATH_CLEANED,$newPATH)
1120        prefix=$oldprefix
1121])
1122
1123dnl This macro tests for sed support of -E (BSD) or -r (GNU)
1124AC_DEFUN([MP_SED_EXTENDED_REGEXP],[
1125        AC_PATH_PROG(SED, [sed])
1126
1127        if test "x$SED" = "x"; then
1128                AC_MSG_ERROR([cannot find sed. Is sed installed?])
1129        fi
1130
1131        AC_MSG_CHECKING([which sed flag to use for extended regexp])
1132        [any_sed_flag=`echo foo | $SED    -e s/foo+/OK/ 2>&1 | grep OK`]
1133        [bsd_sed_flag=`echo foo | $SED -E -e s/foo+/OK/ 2>&1 | grep OK`]
1134        [gnu_sed_flag=`echo foo | $SED -r -e s/foo+/OK/ 2>&1 | grep OK`]
1135        if test "x$any_sed_flag" = "xOK" ; then
1136                AC_MSG_RESULT([none])
1137                SED_EXT=
1138        elif test "x$bsd_sed_flag" = "xOK" ; then
1139                AC_MSG_RESULT([-E (BSD)])
1140                SED_EXT=-E
1141        elif test "x$gnu_sed_flag" = "xOK" ; then
1142                AC_MSG_RESULT([-r (GNU)])
1143                SED_EXT=-r
1144        else
1145                AC_MSG_RESULT([not available])
1146                SED_EXT='N/A'
1147        fi
1148        AC_SUBST(SED_EXT)
1149])
1150
1151dnl This macro tests for tar support of -q (BSD) or not (GNU)
1152AC_DEFUN([MP_TAR_FAST_READ],[
1153        AC_PATH_PROG(TAR, [tar])
1154       
1155        AC_MSG_CHECKING([whether tar supports -q])
1156        if $TAR -t -q -f - </dev/null 2>/dev/null ; then
1157                AC_MSG_RESULT([yes (bsdtar)])
1158                TAR_Q='q'
1159        else
1160                AC_MSG_RESULT([no (gnutar)])
1161                TAR_Q=
1162        fi
1163        AC_SUBST(TAR_Q)
1164])
1165
1166dnl This macro tests for tar support of --no-same-owner
1167AC_DEFUN([MP_TAR_NO_SAME_OWNER],[
1168        AC_PATH_PROG(TAR, [tar])
1169        AC_PATH_PROG(GNUTAR, [gnutar])
1170       
1171        AC_MSG_CHECKING([for which tar variant to use])
1172        AS_IF([test -n "$GNUTAR"], [TAR_CMD=$GNUTAR], [TAR_CMD=$TAR])
1173        AC_MSG_RESULT([$TAR_CMD])
1174        AC_SUBST(TAR_CMD)
1175
1176        AC_MSG_CHECKING([for $TAR_CMD --no-same-owner support])
1177        [no_same_owner_support=`$TAR_CMD --help 2>&1 | grep no-same-owner`]
1178        if test -z "$no_same_owner_support" ; then
1179                AC_MSG_RESULT([no])
1180        else
1181                AC_MSG_RESULT([yes])
1182                TAR_CMD="$TAR_CMD --no-same-owner"
1183        fi
1184])
1185
1186dnl This macro tests for GNU patch
1187AC_DEFUN([MP_PATCH_GNU_VERSION],[
1188        AC_PATH_PROG(PATCH, [patch])
1189        AC_PATH_PROG(GNUPATCH, [gpatch])
1190       
1191        AC_MSG_CHECKING([for GNU (FSF) patch])
1192        AS_IF([test -n "$GNUPATCH"], [PATCH_CMD=$GNUPATCH], [PATCH_CMD=$PATCH])
1193        [fsf_version=`$PATCH_CMD --version 2>&1 | grep "Free Software Foundation"`]
1194        if test -z "$fsf_version" ; then
1195                AC_MSG_RESULT([none])
1196        else
1197                AC_MSG_RESULT([$PATCH_CMD])
1198                GNUPATCH="$PATCH_CMD"
1199        fi
1200])
1201
1202#------------------------------------------------------------------------
1203# MP_CHECK_READLINK_IS_P1003_1A --
1204#
1205#       Check if readlink conforms to POSIX 1003.1a standard, define
1206#       READLINK_IS_NOT_P1003_1A if it doesn't.
1207#
1208# Arguments:
1209#       None.
1210#
1211# Requires:
1212#       None.
1213#
1214# Depends:
1215#               AC_LANG_PROGRAM
1216#
1217# Results:
1218#       Result is cached.
1219#
1220#       If readlink doesn't conform to POSIX 1003.1a, defines the following variables:
1221#               READLINK_IS_NOT_P1003_1A
1222#
1223#------------------------------------------------------------------------
1224AC_DEFUN(MP_CHECK_READLINK_IS_P1003_1A, [
1225        AC_MSG_CHECKING([if readlink conforms to POSIX 1003.1a])
1226
1227        AC_CACHE_VAL(mp_cv_readlink_is_posix_1003_1a, [
1228                AC_COMPILE_IFELSE([
1229                        AC_LANG_PROGRAM([
1230                                        #include <unistd.h>
1231                                        ssize_t readlink(const char *, char *, size_t);
1232                                ], [
1233                        ])
1234                        ], [
1235                                mp_cv_readlink_is_posix_1003_1a="yes"
1236                        ], [
1237                                mp_cv_readlink_is_posix_1003_1a="no"
1238                        ]
1239                )
1240        ])
1241
1242        AC_MSG_RESULT(${mp_cv_readlink_is_posix_1003_1a})
1243
1244        if test x"${mp_cv_readlink_is_posix_1003_1a}" = "xno"; then
1245                AC_DEFINE([READLINK_IS_NOT_P1003_1A], [], [Define to 1 if readlink does not conform with POSIX 1003.1a (where third argument is a size_t and return value is a ssize_t)])
1246        fi
1247
1248        AC_SUBST(READLINK_IS_NOT_P1003_1A)
1249])
1250
1251#------------------------------------------------------------------------
1252# MP_WERROR --
1253#
1254#       Enable -Werror
1255#
1256# Arguments:
1257#       None.
1258#
1259# Requires:
1260#       none
1261#
1262# Depends:
1263#       none
1264#
1265# Results:
1266#       Substitutes WERROR_CFLAGS variable
1267#------------------------------------------------------------------------
1268AC_DEFUN([MP_WERROR],[
1269        AC_REQUIRE([AC_PROG_CC])
1270        AC_ARG_ENABLE(werror, AS_HELP_STRING([--enable-werror],[Add -Werror to CFLAGS. Used for development.]), [enable_werror=${enableval}], [enable_werror=no])
1271        if test x"$enable_werror" != "xno"; then
1272                CFLAGS_WERROR="-Werror"
1273        else
1274                CFLAGS_WERROR=""
1275        fi
1276        AC_SUBST([CFLAGS_WERROR])
1277])
1278
1279#------------------------------------------------------------------------
1280# MP_CHECK_SQLITE_VERSION --
1281#
1282#       Check for a specific SQLite version and execute commands depending on availability
1283#
1284# Arguments:
1285#       Required SQLite version for the test to succeed in the form of SQLITE_VERSION_NUMBER
1286#
1287# Requires:
1288#       MP_SQLITE3_FLAGS
1289#
1290# Depends:
1291#               AC_LANG_SOURCE
1292#
1293# Results:
1294#               Result is cached.
1295#
1296#       sets mp_sqlite_version_ge_$1 to yes or no
1297#
1298#------------------------------------------------------------------------
1299AC_DEFUN(MP_CHECK_SQLITE_VERSION, [
1300        AC_REQUIRE([MP_SQLITE3_FLAGS])
1301
1302        AC_MSG_CHECKING([for SQLite >= $1])
1303
1304        mp_check_sqlite_version_cppflags_save=$CPPFLAGS
1305        CPPFLAGS="$CPPFLAGS $CFLAGS_SQLITE3"
1306
1307        AC_CACHE_VAL(mp_cv_sqlite_version_defined, [
1308                AC_PREPROC_IFELSE(
1309                        [AC_LANG_SOURCE(
1310                                [[
1311                                        #include <sqlite3.h>
1312                                        #ifndef SQLITE_VERSION_NUMBER
1313                                        #  error "SQLITE_VERSION_NUMBER undefined"
1314                                        #endif
1315                                ]]
1316                        )],
1317                        [mp_cv_sqlite_version_defined="yes"],
1318                        [AC_MSG_ERROR("SQLITE_VERSION_NUMBER undefined or sqlite3.h not found")]
1319                )
1320        ])
1321
1322        if test x"${mp_cv_sqlite_version_defined}" = "xno"; then
1323                AC_MSG_RESULT([SQLite version not found])
1324                mp_sqlite_version_ge_$1="no"
1325        else
1326                AC_CACHE_VAL(mp_cv_sqlite_version_ge_$1, [
1327                        AC_PREPROC_IFELSE(
1328                                [AC_LANG_SOURCE(
1329                                        [[
1330                                                #include <sqlite3.h>
1331                                                #if (SQLITE_VERSION_NUMBER >= $1)
1332                                                /* Everything is fine */
1333                                                #else
1334                                                #  error "SQLite version too old"
1335                                                #endif
1336                                        ]]
1337                                )],
1338                                [mp_cv_sqlite_version_ge_$1="yes"],
1339                                [mp_cv_sqlite_version_ge_$1="no"]
1340                        )
1341                ])
1342
1343                AC_MSG_RESULT(${mp_cv_sqlite_version_ge_$1})
1344                mp_sqlite_version_ge_$1=${mp_cv_sqlite_version_ge_$1}
1345        fi
1346
1347        CPPFLAGS=$mp_check_sqlite_version_cppflags_save
1348])
1349
1350#------------------------------------------------------------------------
1351# MP_PLATFORM --
1352#
1353#       Export target platform and major version
1354#
1355# Arguments:
1356#       none.
1357#
1358# Requires:
1359#       none.
1360#
1361# Depends:
1362#       none.
1363#
1364# Results:
1365#       Defines OS_PLATFORM and OS_MAJOR.
1366#
1367#------------------------------------------------------------------------
1368AC_DEFUN([MP_PLATFORM],[
1369        AC_MSG_CHECKING([for target platform])
1370        OS_PLATFORM=`uname -s | tr '[[:upper:]]' '[[:lower:]]'`
1371                OS_MAJOR=`uname -r | cut -d '.' -f 1`
1372        AC_MSG_RESULT($OS_PLATFORM $OS_MAJOR)
1373        AC_SUBST(OS_PLATFORM)
1374        AC_SUBST(OS_MAJOR)
1375])
1376
1377#------------------------------------------------------------------------
1378# MP_TRACEMODE_SUPPORT --
1379#
1380#       Check whether trace mode is supported on this platform
1381#
1382# Arguments:
1383#       none.
1384#
1385# Requires:
1386#       OS_PLATOFRM and OS_MAJOR from MP_PLATFORM.
1387#
1388# Depends:
1389#       none.
1390#
1391# Results:
1392#       Defines the TRACEMODE_SUPPORT substitution and the
1393#       HAVE_TRACEMODE_SUPPORT macro.
1394#
1395#------------------------------------------------------------------------
1396AC_DEFUN([MP_TRACEMODE_SUPPORT],[
1397                AC_REQUIRE([MP_PLATFORM])
1398
1399                AC_CHECK_FUNCS([kqueue kevent])
1400
1401                AC_MSG_CHECKING([whether trace mode is supported on this platform])
1402                if test x"${OS_PLATFORM}" != "xdarwin"; then
1403                        AC_MSG_RESULT([not darwin, no])
1404                        TRACEMODE_SUPPORT=0
1405                elif test x"${ac_cv_func_kqueue}" != "xyes"; then
1406                        AC_MSG_RESULT([kqueue() not available, no])
1407                        TRACEMODE_SUPPORT=0
1408                elif test x"${ac_cv_func_kevent}" != "xyes"; then
1409                        AC_MSG_RESULT([kevent() not available, no])
1410                        TRACEMODE_SUPPORT=0
1411                else
1412                        AC_EGREP_CPP(yes_have_ev_receipt, [
1413                                #include <sys/types.h>
1414                                #include <sys/event.h>
1415                                #include <sys/time.h>
1416                                #ifdef EV_RECEIPT
1417                                yes_have_ev_receipt
1418                                #endif
1419                        ],[
1420                                AC_MSG_RESULT([yes])
1421                                TRACEMODE_SUPPORT=1
1422                                AC_DEFINE([HAVE_TRACEMODE_SUPPORT], [1], [Platform supports tracemode.])
1423                        ],[
1424                                AC_MSG_RESULT([EV_RECEIPT not available, no])
1425                                TRACEMODE_SUPPORT=0
1426                        ])
1427                fi
1428        AC_SUBST(TRACEMODE_SUPPORT)
1429])
Note: See TracBrowser for help on using the repository browser.