source: trunk/base/aclocal.m4 @ 120074

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

base: aclocal.m4: use umask 0022 when extracting vendor tarballs

Some of the vendor tarballs (tcllib!) don't use install(1) with explicit modes
but just copy files from the build dir to destroot or prefix on installation,
preserving permissions. That can lead to non rwXr-Xr-X files and directories in
the installation.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 39.0 KB
Line 
1dnl $Id: aclocal.m4 120074 2014-05-14 22:57:43Z cal@macports.org $
2builtin(include,m4/tcl.m4)
3builtin(include,m4/pthread.m4)
4builtin(include,m4/foundation.m4)
5
6dnl Search for a variable in a list. Run ACTION-IF-FOUND if it is in the list,
7dnl ACTION-IF-NOT-FOUND otherwise.
8dnl
9dnl Parameters:
10dnl  - The name of the list.
11dnl  - The name of the variable that should be searched in the list.
12dnl  - An optional action to be run if found
13dnl  - An optional action to be run if not found
14dnl
15dnl _MP_LIST_CONTAINS_QUOTED([listname], [varname], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
16AC_DEFUN([_MP_LIST_CONTAINS], [dnl
17        mp_list_contains_present=
18        eval "mp_list_contains_list=\"$$1\""
19        for mp_list_contains_entry in $mp_list_contains_list; do
20                test -z "$mp_list_contains_entry" && continue
21                if test "x$$2" = "x$mp_list_contains_entry"; then
22                        mp_list_contains_present=1
23                        break
24                fi
25        done
26        if test "x$mp_list_contains_present" = "x"; then
27                m4_ifvaln([$3], [$3], [:])dnl
28                m4_ifvaln([$4], [else $4])dnl
29        fi
30])
31
32dnl Quote a variable and prepend it to a list.
33dnl
34dnl Parameters:
35dnl  - The name of the list.
36dnl  - The name of the variable that should be quoted and prepended to the
37dnl    list.
38AC_DEFUN([_MP_LIST_PREPEND_QUOTED], [dnl
39        _MP_QUOTE([$2])
40        _MP_VAR_PREPEND([$1], ["$$2 "])
41])
42
43
44dnl Quote a variable and append it to a list.
45dnl
46dnl Parameters:
47dnl  - The name of the list.
48dnl  - The name of the variable that should be quoted and appended to the list.
49AC_DEFUN([_MP_LIST_APPEND_QUOTED], [dnl
50        _MP_QUOTE([$2])
51        AS_VAR_APPEND([$1], [" $$2"])
52])
53
54dnl Prepend the shell expansion of a value to a variable.
55dnl
56dnl Parameters:
57dnl  - The name of the variable to which the second argument should be
58dnl    prepended.
59dnl  - The value that should be expanded using the shell expansion rules and
60dnl    prepended to the variable given in the first argument.
61AC_DEFUN([_MP_VAR_PREPEND], [dnl
62        AC_REQUIRE([_MP_VAR_PREPEND_PREPARE])dnl
63        mp_fn_var_prepend $1 $2
64])
65
66dnl Define the function required for _MP_VAR_PREPEND
67AC_DEFUN([_MP_VAR_PREPEND_PREPARE], [dnl
68        mp_fn_var_prepend() {
69                eval "$[]1=\"$[]2\$$[]1\""
70        }
71])
72
73dnl Quote a variable in single quotes (escaping any existing single quotes) and
74dnl store it in itself.
75dnl
76dnl Parameters:
77dnl  - The name of the variable that should be quoted using single quotes.
78AC_DEFUN([_MP_QUOTE], [dnl
79        case $$1 in
80                *\'*)
81                        $1=$(AS_ECHO(["$$1"]) | sed "s/'/'\\\\\\\\''/g")
82                ;;
83        esac
84        $1="'$$1'"dnl
85])
86
87
88dnl Extract the key part of a key-value pair given as string in the form
89dnl  --key=value or
90dnl   -key=value
91dnl
92dnl Parameters:
93dnl  - The variable name to assign to
94dnl  - The (quoted, if necessary) key-value pair
95AC_DEFUN([_MP_EXTRACT_KEY], [dnl
96        $1=$(AS_ECHO([$2]) | sed -E 's/^--?([[^=]]+)=.*$/\1/')dnl
97])
98
99dnl Similar to AC_ARG_VAR, but implemented with --with-pkg=PATH for PKG.
100dnl
101dnl Parameters: Similar to AC_ARG_VAR ($2 gets some boiler plate around it)
102AC_DEFUN([MP_TOOL_PATH], [dnl
103        AC_ARG_WITH([m4_tolower($1)], [AS_HELP_STRING([--with-m4_tolower($1)=PATH],
104                        [Path to alternate $2 command])], [$1=$withval],dnl
105                [])dnl
106])
107
108dnl Configure a project contained in a .tar.gz, .tgz or .tar.bz2 tarball,
109dnl extracting it previously, if necessary. Different from AC_CONFIG_SUBDIRS
110dnl (on which this macro is based), you can pass parameters to the
111dnl sub-configure script.
112dnl
113dnl Parameters:
114dnl  - The relative path to the tarball
115dnl  - The relative path to the directory that will be extracted from the
116dnl    tarball and contains the configure script to be run (can be a sub directory of the extracted directory)
117dnl  - Parameters to pass to the configure script
118dnl
119dnl MP_CONFIG_TARBALL([path-to-tarball], [dir-extracted-from-tarball-with-configure], [configure-parameters])
120AC_DEFUN([MP_CONFIG_TARBALL], [
121        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"; umask 0022; "$mp_tarball_extract_cmd" -d < "$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.