source: trunk/base/aclocal.m4 @ 117754

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

aclocal: Remove dangerous flags in MP_FLAGS_SCAN from $ac_configure_args and the $ac_env_* and $ac_cv_env_* variables, too. Fixes #42756.

Also rename some variables to avoid conflicts and fix some sed expressions (because we're in m4 with [] as quote characters).

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