source: trunk/base/aclocal.m4 @ 119421

Last change on this file since 119421 was 119421, checked in by eborisch@…, 6 years ago

Change optional tool settings from environment variables to --with-foo=/bin/foo style. Resolves issues with bzip2 and BZIP2. See #43204. Still needs regen.

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