source: trunk/base/aclocal.m4 @ 113478

Last change on this file since 113478 was 113478, checked in by raimue@…, 7 years ago

Check if the current platform is compatible

If the platform is not the same as configure was run on, error out and refer to
the migration instructions in the wiki.

https://lists.macosforge.org/pipermail/macports-dev/2013-November/024948.html

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 31.4 KB
Line 
1dnl $Id: aclocal.m4 113478 2013-11-17 12:54:58Z raimue@macports.org $
2builtin(include,m4/tcl.m4)
3builtin(include,m4/pthread.m4)
4builtin(include,m4/foundation.m4)
5
6#------------------------------------------------------------------------
7# MP_CHECK_FRAMEWORK_COREFOUNDATION --
8#
9#       Check if CoreFoundation framework is available, define HAVE_FRAMEWORK_COREFOUNDATION if so.
10#
11# Arguments:
12#       None.
13#
14# Requires:
15#       None.
16#
17# Depends:
18#               AC_LANG_PROGRAM
19#
20# Results:
21#       Result is cached.
22#
23#       If CoreFoundation framework is available, defines the following variables:
24#               HAVE_FRAMEWORK_COREFOUNDATION
25#
26#------------------------------------------------------------------------
27AC_DEFUN(MP_CHECK_FRAMEWORK_COREFOUNDATION, [
28        FRAMEWORK_LIBS="-framework CoreFoundation"
29
30        AC_MSG_CHECKING([for CoreFoundation framework])
31
32        AC_CACHE_VAL(mp_cv_have_framework_corefoundation, [
33                ac_save_LIBS="$LIBS"
34                LIBS="$FRAMEWORK_LIBS $LIBS"
35               
36                AC_LINK_IFELSE([
37                        AC_LANG_PROGRAM([
38                                        #include <CoreFoundation/CoreFoundation.h>
39                                ], [
40                                        CFURLRef url = CFURLCreateWithFileSystemPath(NULL, CFSTR("/testing"), kCFURLPOSIXPathStyle, 1);
41                                        CFArrayRef bundles = CFBundleCreateBundlesFromDirectory(NULL, url, CFSTR("pkg"));
42                        ])
43                        ], [
44                                mp_cv_have_framework_corefoundation="yes"
45                        ], [
46                                mp_cv_have_framework_corefoundation="no"
47                        ]
48                )
49
50                LIBS="$ac_save_LIBS"
51        ])
52
53        AC_MSG_RESULT(${mp_cv_have_framework_corefoundation})
54
55        if test x"${mp_cv_have_framework_corefoundation}" = "xyes"; then
56                AC_DEFINE([HAVE_FRAMEWORK_COREFOUNDATION], [], [Define if CoreFoundation framework is available])
57        fi
58
59        AC_SUBST(HAVE_FRAMEWORK_COREFOUNDATION)
60])
61
62
63#------------------------------------------------------------------------
64# MP_CHECK_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER --
65#
66#       Check if if the routine CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER
67#       is available in CoreFoundation.
68#
69# Arguments:
70#       None.
71#
72# Requires:
73#       None.
74#
75# Depends:
76#               AC_LANG_PROGRAM
77#
78# Results:
79#       Result is cached.
80#
81#       If function CFNotificationCenterGetDarwinNotifyCenter is in the CoreFoundation framework, defines the following variables:
82#               HAVE_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER
83#
84#------------------------------------------------------------------------
85AC_DEFUN(MP_CHECK_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER, [
86        FRAMEWORK_LIBS="-framework CoreFoundation"
87
88        AC_MSG_CHECKING([for CFNotificationCenterGetDarwinNotifyCenter])
89
90        AC_CACHE_VAL(mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter, [
91                ac_save_LIBS="$LIBS"
92                LIBS="$FRAMEWORK_LIBS $LIBS"
93               
94                AC_LINK_IFELSE([
95                        AC_LANG_PROGRAM([
96                                        #include <CoreFoundation/CoreFoundation.h>
97                                ], [
98                                        CFNotificationCenterRef ref = CFNotificationCenterGetDarwinNotifyCenter();
99                        ])
100                        ], [
101                                mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter="yes"
102                        ], [
103                                mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter="no"
104                        ]
105                )
106
107                LIBS="$ac_save_LIBS"
108        ])
109
110        AC_MSG_RESULT(${mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter})
111
112        if test x"${mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter}" = "xyes"; then
113                AC_DEFINE([HAVE_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER], [], [Define if function CFNotificationCenterGetDarwinNotifyCenter in CoreFoundation framework])
114        fi
115
116        AC_SUBST(HAVE_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER)
117])
118
119
120#------------------------------------------------------------------------
121# MP_CHECK_FRAMEWORK_SYSTEMCONFIGURATION --
122#
123#       Check if SystemConfiguration framework is available, define HAVE_FRAMEWORK_SYSTEMCONFIGURATION if so.
124#
125# Arguments:
126#       None.
127#
128# Requires:
129#       None.
130#
131# Depends:
132#               AC_LANG_PROGRAM
133#
134# Results:
135#       Result is cached.
136#
137#       If SystemConfiguration framework is available, defines the following variables:
138#               HAVE_FRAMEWORK_SYSTEMCONFIGURATION
139#
140#------------------------------------------------------------------------
141AC_DEFUN(MP_CHECK_FRAMEWORK_SYSTEMCONFIGURATION, [
142        FRAMEWORK_LIBS="-framework SystemConfiguration"
143
144        AC_MSG_CHECKING([for SystemConfiguration framework])
145
146        AC_CACHE_VAL(mp_cv_have_framework_systemconfiguration, [
147                ac_save_LIBS="$LIBS"
148                LIBS="$FRAMEWORK_LIBS $LIBS"
149               
150                AC_LINK_IFELSE([
151                        AC_LANG_PROGRAM([
152                                        #include <SystemConfiguration/SystemConfiguration.h>
153                                ], [
154                                        int err = SCError();
155                                        SCDynamicStoreRef dsRef = SCDynamicStoreCreate(NULL, NULL, NULL, NULL);
156                        ])
157                        ], [
158                                mp_cv_have_framework_systemconfiguration="yes"
159                        ], [
160                                mp_cv_have_framework_systemconfiguration="no"
161                        ]
162                )
163
164                LIBS="$ac_save_LIBS"
165        ])
166
167        AC_MSG_RESULT(${mp_cv_have_framework_systemconfiguration})
168
169        if test x"${mp_cv_have_framework_systemconfiguration}" = "xyes"; then
170                AC_DEFINE([HAVE_FRAMEWORK_SYSTEMCONFIGURATION], [], [Define if SystemConfiguration framework is available])
171        fi
172
173        AC_SUBST(HAVE_FRAMEWORK_SYSTEMCONFIGURATION)
174])
175
176
177#------------------------------------------------------------------------
178# MP_CHECK_FRAMEWORK_IOKIT --
179#
180#       Check if IOKit framework is available, define HAVE_FRAMEWORK_IOKIT if so.
181#
182# Arguments:
183#       None.
184#
185# Requires:
186#       None.
187#
188# Depends:
189#               AC_LANG_PROGRAM
190#
191# Results:
192#       Result is cached.
193#
194#       If IOKit framework is available, defines the following variables:
195#               HAVE_FRAMEWORK_IOKIT
196#
197#------------------------------------------------------------------------
198AC_DEFUN(MP_CHECK_FRAMEWORK_IOKIT, [
199        FRAMEWORK_LIBS="-framework IOKit"
200
201        AC_MSG_CHECKING([for IOKit framework])
202
203        AC_CACHE_VAL(mp_cv_have_framework_iokit, [
204                ac_save_LIBS="$LIBS"
205                LIBS="$FRAMEWORK_LIBS $LIBS"
206               
207                AC_LINK_IFELSE([
208                        AC_LANG_PROGRAM([
209                                        #include <IOKit/IOKitLib.h>
210                                ], [
211                                        IOCreateReceivePort(0, NULL);
212                                        IORegisterForSystemPower(0, NULL, NULL, NULL);
213                        ])
214                        ], [
215                                mp_cv_have_framework_iokit="yes"
216                        ], [
217                                mp_cv_have_framework_iokit="no"
218                        ]
219                )
220
221                LIBS="$ac_save_LIBS"
222        ])
223
224        AC_MSG_RESULT(${mp_cv_have_framework_iokit})
225
226        if test x"${mp_cv_have_framework_iokit}" = "xyes"; then
227                AC_DEFINE([HAVE_FRAMEWORK_IOKIT], [], [Define if IOKit framework is available])
228        fi
229
230        AC_SUBST(HAVE_FRAMEWORK_IOKIT)
231])
232
233
234dnl This macro checks if the user specified a ports tree
235dnl explicitly. If not, search for it
236
237# MP_PATH_PORTSDIR(DEFAULT_PORTSDIR)
238#---------------------------------------
239 AC_DEFUN([MP_PATH_PORTSDIR],[
240        dnl For ease of reading, run after gcc has been found/configured
241        AC_REQUIRE([AC_PROG_CC])
242
243        AC_ARG_WITH(ports-dir, [AS_HELP_STRING([--with-ports-dir=DIR],[Specify alternate ports directory])], [ portsdir="$withval" ] )
244
245
246        AC_MSG_CHECKING([for ports tree])
247        if test "x$portsdir" != "x" ; then
248          if test -d "$portsdir" -a -e "$portsdir/PortIndex" ; then
249                :
250          else
251                AC_MSG_ERROR([$portsdir not a valid ports tree])
252          fi
253        else
254                dnl If the user didn't give a path, look for default
255                if test "x$1" != "x" ; then
256                  if test -d "$1" -a -e "$1/PortIndex" ; then
257                        portsdir=$1
258                  fi
259                fi
260        fi
261
262        if test "x$portsdir" != "x" ; then
263                AC_MSG_RESULT($portsdir)
264                PORTSDIR="$portsdir"
265                AC_SUBST(PORTSDIR)
266        else
267                AC_MSG_WARN([No ports tree found])
268        fi
269
270         ])
271
272
273# MP_PATH_MPCONFIGDIR
274#---------------------------------------
275AC_DEFUN([MP_PATH_MPCONFIGDIR],[
276        dnl if the user actually specified --prefix, shift
277        dnl mpconfigdir to $prefix/etc/macports
278        dnl     AC_REQUIRE([MP_PATH_PORTSDIR])
279       
280        AC_MSG_CHECKING([for MacPorts config directory])
281
282        mpconfigdir='${sysconfdir}/macports'
283
284        AC_MSG_RESULT([$mpconfigdir])
285        MPCONFIGDIR="$mpconfigdir"
286        AC_SUBST(MPCONFIGDIR)
287
288        ])
289
290# MP_CHECK_OLDLAYOUT
291#---------------------------------------
292AC_DEFUN([MP_CHECK_OLDLAYOUT],[
293        dnl Bail if there is an existing install of DP/MP older than 1.5
294
295        AC_MSG_CHECKING([that any existing MacPorts install can be upgraded])
296
297        eval dpversionfile="${sysconfdir}/ports/dp_version"
298        if test -f "$dpversionfile"; then
299                AC_MSG_ERROR([Existing MacPorts or DarwinPorts install is too old to be upgraded. Install MacPorts 1.7.1 first.])
300        else
301                AC_MSG_RESULT([yes])
302        fi
303
304        ])
305
306# MP_CHECK_NOROOTPRIVILEGES
307#-------------------------------------------------
308AC_DEFUN([MP_CHECK_NOROOTPRIVILEGES],[
309        dnl if with user specifies --with-no-root-privileges,
310        dnl use current user and group.
311        dnl use ~/Library/Tcl as Tcl package directory
312                AC_REQUIRE([MP_PATH_MPCONFIGDIR])
313
314        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] )
315
316        if test "${ROOTPRIVS+set}" = set; then
317
318                # Set install-user to current user
319                AC_MSG_CHECKING([for install user])
320                DSTUSR=`id -un`
321                AC_MSG_RESULT([$DSTUSR])
322                AC_SUBST(DSTUSR)
323               
324                # Set install-group to current user
325                AC_MSG_CHECKING([for install group])
326                DSTGRP=`id -gn`
327                AC_MSG_RESULT([$DSTGRP])
328                AC_SUBST(DSTGRP)
329
330                # Set run-user to current user
331                AC_MSG_CHECKING([for macports user])
332                RUNUSR=`id -un`
333                AC_MSG_RESULT([$RUNUSR])
334                AC_SUBST(RUNUSR)
335
336                # Set Tcl package directory to ~/Library/Tcl
337            AC_MSG_CHECKING(for Tcl package directory)
338                ac_cv_c_tclpkgd=`eval echo ~$DSTUSR/Library/Tcl`
339            # Convert to a native path and substitute into the output files.
340            PACKAGE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclpkgd}`
341            TCL_PACKAGE_DIR=${PACKAGE_DIR_NATIVE}
342            AC_SUBST(TCL_PACKAGE_DIR)
343                if test x"${ac_cv_c_tclpkgd}" = x ; then
344                        AC_MSG_ERROR(Tcl package directory not found.  Please specify its location with --with-tclpackage)
345            else
346                        AC_MSG_RESULT(${ac_cv_c_tclpkgd})
347            fi
348        fi
349
350])
351
352# MP_CHECK_RUNUSER
353#-------------------------------------------------
354AC_DEFUN([MP_CHECK_RUNUSER],[
355        dnl if with user specifies --with-macports-user,
356        dnl use it. otherwise default to platform defaults
357       AC_REQUIRE([MP_PATH_MPCONFIGDIR])
358
359        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 ] )
360       
361        AC_MSG_CHECKING([for macports user])
362        if test "x$RUNUSR" = "x" ; then
363           RUNUSR=macports
364        fi
365
366        AC_MSG_RESULT([$RUNUSR])
367        AC_SUBST(RUNUSR)
368])
369
370
371# MP_SHARED_DIRECTORY
372#-------------------------------------------------
373AC_DEFUN([MP_SHARED_DIRECTORY],[
374        dnl if with user specifies --with-shared-directory,
375        dnl use 0775 permissions for ${prefix} directories
376        AC_REQUIRE([MP_PATH_MPCONFIGDIR])
377
378        AC_ARG_WITH(shared-directory, [AS_HELP_STRING([--with-shared-directory],[Use 0775 permissions for installed directories])], [ SHAREDIR=$withval ] )
379
380        if test "${SHAREDIR+set}" = set; then   
381                AC_MSG_CHECKING([whether to share the install directory with all members of the install group])
382            DSTMODE=0775
383
384                AC_MSG_RESULT([$DSTMODE])
385                AC_SUBST(DSTMODE)
386        fi
387])
388
389# MP_CHECK_INSTALLUSER
390#-------------------------------------------------
391AC_DEFUN([MP_CHECK_INSTALLUSER],[
392        dnl if with user specifies --with-install-user,
393        dnl use it. otherwise default to platform defaults
394        AC_REQUIRE([MP_PATH_MPCONFIGDIR])
395
396        AC_ARG_WITH(install-user, [AS_HELP_STRING([--with-install-user=USER],[Specify user ownership of installed files])], [ DSTUSR=$withval ] )
397       
398        AC_MSG_CHECKING([for install user])
399        if test "x$DSTUSR" = "x" ; then
400           DSTUSR=root
401        fi
402
403        AC_MSG_RESULT([$DSTUSR])
404        AC_SUBST(DSTUSR)
405])
406
407# MP_CHECK_INSTALLGROUP
408#-------------------------------------------------
409AC_DEFUN([MP_CHECK_INSTALLGROUP],[
410        dnl if with user specifies --with-install-group,
411        dnl use it. otherwise default to platform defaults
412        AC_REQUIRE([MP_CHECK_INSTALLUSER])
413
414        AC_ARG_WITH(install-group, [AS_HELP_STRING([--with-install-group=GROUP],[Specify group ownership of installed files])], [ DSTGRP=$withval ] )
415
416        AC_MSG_CHECKING([for install group])
417        if test "x$DSTGRP" = "x" ; then
418           
419           case $host_os in
420           darwin*)
421                DSTGRP="admin"
422                ;;
423           freebsd*)
424                DSTGRP="wheel"
425                ;;
426           linux*)
427                DSTGRP="root"
428                ;;
429           *)
430                DSTGRP="wheel"
431                ;;
432           esac
433        fi
434
435        AC_MSG_RESULT([$DSTGRP])
436        AC_SUBST(DSTGRP)
437])
438
439# MP_DIRECTORY_MODE
440#-------------------------------------------------
441AC_DEFUN([MP_DIRECTORY_MODE],[
442        dnl if with user specifies --with-directory-mode,
443        dnl use the specified permissions for ${prefix} directories
444        dnl otherwise use 0755
445        AC_REQUIRE([MP_PATH_MPCONFIGDIR])
446
447        AC_ARG_WITH(directory-mode, [AS_HELP_STRING([--with-directory-mode=MODE],[Specify directory mode of installed directories])], [ DSTMODE=$withval ] )
448       
449        AC_MSG_CHECKING([what permissions to use for installation directories])
450        if test "x$DSTMODE" = "x" ; then
451           DSTMODE=0755
452        fi
453
454        AC_MSG_RESULT([$DSTMODE])
455        AC_SUBST(DSTMODE)
456])
457
458# MP_PATH_APPLICATIONS
459#---------------------------------------
460AC_DEFUN([MP_PATH_APPLICATIONS],[
461        AC_REQUIRE([MP_CHECK_INSTALLUSER])
462
463    AC_ARG_WITH(applications-dir,[AS_HELP_STRING([--with-applications-dir],[Applications installation directory.])], MPAPPLICATIONSDIR=${withval})
464
465    oldprefix=$prefix
466    if test "x$prefix" = "xNONE" ; then
467        prefix=$ac_default_prefix
468    fi
469    AC_MSG_CHECKING([for Applications installation directory])
470
471        if test "x$MPAPPLICATIONSDIR" = "x" ; then
472            if test "$DSTUSR" = "root" ; then
473                MPAPPLICATIONSDIR="/Applications/MacPorts"
474            else
475                MPAPPLICATIONSDIR="$(eval echo ~$DSTUSR)/Applications/MacPorts"
476            fi
477        fi
478
479        AC_MSG_RESULT([$MPAPPLICATIONSDIR])
480    AC_SUBST(MPAPPLICATIONSDIR)
481    prefix=$oldprefix
482])
483
484# MP_PATH_FRAMEWORKS
485#---------------------------------------
486AC_DEFUN([MP_PATH_FRAMEWORKS],[
487        AC_REQUIRE([MP_CHECK_INSTALLUSER])
488
489    AC_ARG_WITH(frameworks-dir,[AS_HELP_STRING([--with-frameworks-dir],[Frameworks installation directory.])], MPFRAMEWORKSDIR=${withval})
490
491    oldprefix=$prefix
492    if test "x$prefix" = "xNONE" ; then
493        prefix=$ac_default_prefix
494    fi
495    AC_MSG_CHECKING([for Frameworks installation directory])
496
497        if test "x$MPFRAMEWORKSDIR" = "x" ; then
498                MPFRAMEWORKSDIR="${prefix}/Library/Frameworks"
499        fi
500
501        AC_MSG_RESULT([$MPFRAMEWORKSDIR])
502    AC_SUBST(MPFRAMEWORKSDIR)
503    prefix=$oldprefix
504])
505
506
507# MP_UNIVERSAL_OPTIONS
508#---------------------------------------
509AC_DEFUN([MP_UNIVERSAL_OPTIONS],[
510  AC_ARG_WITH(universal-archs,[AS_HELP_STRING([--with-universal-archs="CPU"],[Universal CPU architectures (space separated)])], UNIVERSAL_ARCHS=${withval})
511
512  if test "x$UNIVERSAL_ARCHS" = "x"; then
513    case "$MACOSX_VERSION" in
514      10.1[[0-9]]*)
515        UNIVERSAL_ARCHS="x86_64 i386"
516        ;;
517      10.[[0-5]]*)
518        UNIVERSAL_ARCHS="i386 ppc"
519        ;;
520      *)
521        UNIVERSAL_ARCHS="x86_64 i386"
522        ;;
523    esac
524  fi
525
526  UNIVERSAL_ARCHFLAGS=
527  for arch in $UNIVERSAL_ARCHS; do
528    UNIVERSAL_ARCHFLAGS="$UNIVERSAL_ARCHFLAGS -arch $arch"
529  done
530
531  AC_MSG_CHECKING([for Universal CPU architectures])
532  AC_MSG_RESULT([$UNIVERSAL_ARCHS])
533  AC_SUBST(UNIVERSAL_ARCHS)
534  AC_SUBST(UNIVERSAL_ARCHFLAGS)
535])
536
537# MP_LIB_MD5
538#---------------------------------------
539# Check for an md5 implementation
540AC_DEFUN([MP_LIB_MD5],[
541
542        # Check for libmd from FreeBSD, which is preferred
543        AC_CHECK_LIB([md], [MD5File],[
544                AC_CHECK_HEADERS([md5.h sha.h], ,[
545                        AC_MSG_ERROR([libmd was found, but md5.h or sha.h is missing.])
546                ])
547                ac_save_LIBS="$LIBS"
548                LIBS="-lmd $LIBS"
549                AC_CHECK_FUNCS([SHA1_File])
550                LIBS="$ac_save_LIBS"
551                AC_CHECK_HEADERS([ripemd.h sha256.h])
552                AC_DEFINE([HAVE_LIBMD], ,[Define if you have the `md' library (-lmd).])
553                MD5_LIBS="-lmd"]
554        )
555        if test "x$MD5_LIBS" = "x"; then
556                # If libmd is not found, check for libcrypto from OpenSSL
557                AC_CHECK_LIB([crypto], [MD5_Update],[
558                        AC_CHECK_HEADERS([openssl/md5.h openssl/sha.h], ,[
559                                AC_MSG_ERROR([libcrypto was found, but openssl/md5.h or openssl/sha.h is missing.])
560                        ])
561                        AC_CHECK_HEADERS([openssl/ripemd.h])
562                        ac_save_LIBS="$LIBS"
563                        LIBS="-lcrypto $LIBS"
564                        AC_CHECK_FUNCS([SHA256_Update])
565                        LIBS="$ac_save_LIBS"
566                        AC_DEFINE([HAVE_LIBCRYPTO], ,[Define if you have the `crypto' library (-lcrypto).])
567                        MD5_LIBS="-lcrypto"]
568                )
569        fi
570        if test "x$MD5_LIBS" = "x"; then
571                AC_MSG_ERROR([Neither CommonCrypto, libmd nor libcrypto were found. A working md5 implementation is required.])
572        fi
573        AC_SUBST([MD5_LIBS])
574])
575
576# MP_PROG_DAEMONDO
577#---------------------------------------
578AC_DEFUN([MP_PROG_DAEMONDO],[
579        AC_REQUIRE([MP_CHECK_FRAMEWORK_COREFOUNDATION])
580        AC_REQUIRE([MP_CHECK_FRAMEWORK_SYSTEMCONFIGURATION])
581        AC_REQUIRE([MP_CHECK_FRAMEWORK_IOKIT])
582        AC_REQUIRE([MP_CHECK_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER])
583       
584    AC_MSG_CHECKING(for whether we will build daemondo)
585    result=no
586        case $host_os in
587        darwin*)
588                if test "x$mp_cv_have_framework_corefoundation" == "xyes" &&
589                   test "x$mp_cv_have_framework_systemconfiguration" == "xyes" &&
590                   test "x$mp_cv_have_framework_iokit" == "xyes" &&
591                   test "x$mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter" == "xyes"; then
592                        result=yes
593                        EXTRA_PROGS="$EXTRA_PROGS daemondo"
594                        AC_CONFIG_FILES([src/programs/daemondo/Makefile])
595                fi
596                ;;
597        *)
598        esac
599        AC_MSG_RESULT(${result})
600])
601
602#------------------------------------------------------------------------
603# MP_TCL_PACKAGE_DIR --
604#
605#       Locate the correct directory for Tcl package installation
606#
607# Arguments:
608#       None.
609#
610# Requires:
611#       TCLVERSION must be set
612#       CYGPATH must be set
613#       TCLSH must be set
614#
615# Results:
616#
617#       Adds a --with-tclpackage switch to configure.
618#       Result is cached.
619#
620#       Substs the following vars:
621#               TCL_PACKAGE_DIR
622#------------------------------------------------------------------------
623
624AC_DEFUN(MP_TCL_PACKAGE_DIR, [
625        AC_REQUIRE([MP_CHECK_INSTALLUSER])
626
627    AC_MSG_CHECKING(for Tcl package directory)
628
629    AC_ARG_WITH(tclpackage, [  --with-tclpackage       Tcl package installation directory.], with_tclpackagedir=${withval})
630
631    if test x"${with_tclpackagedir}" != x ; then
632        ac_cv_c_tclpkgd=${with_tclpackagedir}
633    else
634        AC_CACHE_VAL(ac_cv_c_tclpkgd, [
635            # Use the value from --with-tclpackage, if it was given
636
637            if test x"${with_tclpackagedir}" != x ; then
638                echo "tclpackagedir"
639                ac_cv_c_tclpkgd=${with_tclpackagedir}
640            else
641                # On darwin we can do some intelligent guessing
642                case $host_os in
643                    darwin*)
644                        tcl_autopath=`echo 'puts -nonewline \$auto_path' | $TCLSH`
645                        for path in $tcl_autopath; do
646                        if test "$DSTUSR" = "root" ; then
647                            if test "$path" = "/Library/Tcl"; then
648                                ac_cv_c_tclpkgd="$path"
649                                break
650                            fi
651                            if test "$path" = "/System/Library/Tcl"; then
652                                if test -d "$path"; then
653                                    ac_cv_c_tclpkgd="$path"
654                                    break
655                                fi
656                            fi
657                        elif test "$path" = "~/Library/Tcl"; then
658                            ac_cv_c_tclpkgd=`eval echo ~$DSTUSR/Library/Tcl`
659                            break
660                        fi
661                        done
662                    ;;
663                esac
664                if test x"${ac_cv_c_tclpkgd}" = x ; then
665                    # Fudge a path from the first entry in the auto_path
666                    tcl_pkgpath=`echo 'puts -nonewline [[lindex \$auto_path 0]]' | $TCLSH`
667                    if test -d "$tcl_pkgpath"; then
668                        ac_cv_c_tclpkgd="$tcl_pkgpath"
669                    fi
670                    # If the first entry does not exist, do nothing
671                fi
672            fi
673        ])
674    fi
675
676    if test x"${ac_cv_c_tclpkgd}" = x ; then
677        AC_MSG_ERROR(Tcl package directory not found.  Please specify its location with --with-tclpackage)
678    else
679        AC_MSG_RESULT(${ac_cv_c_tclpkgd})
680    fi
681
682    # Convert to a native path and substitute into the output files.
683
684    PACKAGE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclpkgd}`
685
686    TCL_PACKAGE_DIR=${PACKAGE_DIR_NATIVE}
687
688    AC_SUBST(TCL_PACKAGE_DIR)
689])
690
691# MP_PROG_TCLSH
692#---------------------------------------
693AC_DEFUN([MP_PROG_TCLSH],[
694
695
696        case $host_os in
697                freebsd*)
698                        # FreeBSD installs a dummy tclsh (annoying)
699                        # Look for a real versioned tclsh with threads first
700                        # Look for a real versioned tclsh without threads second
701                        AC_PATH_PROG([TCLSH], [tclsh${TCL_VERSION}-threads tclsh${TCL_VERSION} tclsh])
702                        ;;
703                *)
704                        # Otherwise, look for a non-versioned tclsh
705                        AC_PATH_PROG([TCLSH], [tclsh tclsh${TCL_VERSION}])
706                        ;;
707        esac
708        if test "x$TCLSH" = "x" ; then
709                AC_MSG_ERROR([Could not find tclsh])
710        fi
711
712        AC_SUBST(TCLSH)
713])
714
715# MP_TCL_PACKAGE
716#       Determine if a Tcl package is present.
717#
718# Arguments:
719#       Package name (may include the version)
720#
721# Syntax:
722#   MP_TCL_PACKAGE (package, [action-if-found], [action-if-not-found])
723#
724# Requires:
725#       TCLSH must be set
726#
727# Results:
728#       Execute action-if-found or action-if-not-found
729#---------------------------------------
730AC_DEFUN([MP_TCL_PACKAGE],[
731        AC_MSG_CHECKING([for Tcl $1 package])
732        package_present=`echo 'if {[[catch {package require $1}]]} {puts -nonewline 0} else {puts -nonewline 1}' | $TCLSH`
733        AS_IF([test "$package_present" = "1"], [$2], [$3])[]
734])
735
736# MP_TCL_THREAD_SUPPORT
737#       Determine if thread support is available in tclsh.
738#
739# Arguments:
740#       None.
741#
742# Requires:
743#       TCLSH must be set
744#
745# Results:
746#   Fails if thread support isn't available.
747#---------------------------------------
748AC_DEFUN([MP_TCL_THREAD_SUPPORT],[
749        AC_MSG_CHECKING([whether tclsh was compiled with threads])
750        tcl_threadenabled=`echo 'puts -nonewline [[info exists tcl_platform(threaded)]]' | $TCLSH`
751        if test "$tcl_threadenabled" = "1" ; then
752                AC_MSG_RESULT([yes])
753        else
754                AC_MSG_RESULT([no])
755                AC_MSG_ERROR([tcl wasn't compiled with threads enabled])
756        fi
757])
758
759# MP_LIBCURL_FLAGS
760#       Sets the flags to compile with libcurl.
761#
762# Arguments:
763#       None.
764#
765# Requires:
766#   curl-config or user parameters to define the flags.
767#
768# Results:
769#   defines some help strings.
770#   sets CFLAGS_LIBCURL and LDFLAGS_LIBCURL
771#---------------------------------------
772AC_DEFUN([MP_LIBCURL_FLAGS],[
773        AC_ARG_WITH(curlprefix,
774                   [  --with-curlprefix       base directory for the cURL install '/usr', '/usr/local',...],
775                   [  curlprefix=$withval ])
776
777        if test "x$curlprefix" = "x"; then
778                AC_PATH_PROG([CURL_CONFIG], [curl-config])
779        else
780                AC_PATH_PROG([CURL_CONFIG], [curl-config], , [$curlprefix/bin])
781        fi
782
783        if test "x$CURL_CONFIG" = "x"; then
784                AC_MSG_ERROR([cannot find curl-config. Is libcurl installed?])
785        fi
786
787        CFLAGS_LIBCURL=$($CURL_CONFIG --cflags)
788        if test "x$curlprefix" = "x"; then
789                # System curl-config emits absurd output for --libs
790                # See rdar://7244457
791                LDFLAGS_LIBCURL="-lcurl"
792        else
793                # Due to a bug in dist, --arch flags are improperly supplied by curl-config.
794                # Get rid of them.
795                LDFLAGS_LIBCURL=$($CURL_CONFIG --libs | [sed 's/-arch [A-Za-z0-9_]* //g'])
796        fi
797
798        AC_SUBST(CFLAGS_LIBCURL)
799        AC_SUBST(LDFLAGS_LIBCURL)
800])
801
802# MP_SQLITE3_FLAGS
803#       Sets the flags to compile with libsqlite3 and tclsqlite3.
804#
805# Arguments:
806#       None.
807#
808# Requires:
809#   pkgconfig, libsqlite3 in /usr/lib, or user parameters to define the flags.
810#
811# Results:
812#   defines some help strings.
813#   sets CFLAGS_SQLITE3 and LDFLAGS_SQLITE3
814#---------------------------------------
815AC_DEFUN([MP_SQLITE3_FLAGS],[
816    # first sqlite3 itself
817        AC_ARG_WITH(sqlite3prefix,
818                   [  --with-sqlite3prefix       base directory for the sqlite3 install '/usr', '/usr/local',...],
819                   [  sqlite3prefix=$withval ])
820
821        if test "x$sqlite3prefix" = "x"; then
822                # see if it's somewhere like /usr that needs no extra flags
823                LDFLAGS_SQLITE3="-lsqlite3"
824                AC_CHECK_HEADER(sqlite3.h, [],[
825                    # nope - try pkg-config
826                        AC_PATH_PROG([PKG_CONFIG], [pkg-config])
827                        if test "x$PKG_CONFIG" = "x" || ! $PKG_CONFIG --exists sqlite3; then
828                                AC_MSG_ERROR([cannot find sqlite3 header])
829                        else
830                                CFLAGS_SQLITE3=$($PKG_CONFIG --cflags sqlite3)
831                                LDFLAGS_SQLITE3=$($PKG_CONFIG --libs sqlite3)
832                                # for tclsqlite below
833                                mp_sqlite3_dir=$($PKG_CONFIG --variable=prefix sqlite3)
834                                if test "x$mp_sqlite3_dir" != "x"; then
835                                        mp_sqlite3_dir=${mp_sqlite3_dir}/lib/sqlite3
836                                fi
837                        fi
838                ])
839        else
840            CFLAGS_SQLITE3="-I${sqlite3prefix}/include"
841                LDFLAGS_SQLITE3="-L${sqlite3prefix}/lib -lsqlite3"
842        fi
843
844    # check if we have sqlite3ext.h, using the appropriate cppflags
845    CPPFLAGS_OLD="${CPPFLAGS}"
846    CPPFLAGS="${CPPFLAGS} ${CFLAGS_SQLITE3}"
847    AC_CHECK_HEADERS(sqlite3ext.h)
848    CPPFLAGS="${CPPFLAGS_OLD}"
849
850        AC_SUBST(CFLAGS_SQLITE3)
851        AC_SUBST(LDFLAGS_SQLITE3)
852
853        # now the sqlite Tcl bindings
854        AC_ARG_WITH(tcl-sqlite3,
855                AS_HELP_STRING([--with-tcl-sqlite3=DIR],
856                        [directory for Tcl sqlite3 (default /usr/lib/sqlite3)]),
857                [mp_sqlite3_dir=$withval])
858
859    if test "x$mp_sqlite3_dir" = "x"; then
860        case $host_os in
861            darwin*)
862                mp_sqlite3_dir="/usr/lib/sqlite3"
863                ;;
864            freebsd*)
865                mp_sqlite3_dir="/usr/local/lib/sqlite"
866                ;;
867            *)
868                mp_sqlite3_dir="/usr/share/tcl${TCL_VERSION}/sqlite3"
869                ;;
870        esac
871    fi
872
873        AC_CACHE_CHECK([for Tcl sqlite3 location], [mp_cv_sqlite3_dir],
874                [mp_cv_sqlite3_dir=
875                test -r "${mp_sqlite3_dir}/pkgIndex.tcl" && mp_cv_sqlite3_dir=$mp_sqlite3_dir
876                ])
877
878        SQLITE3_TCL_DIR=$mp_cv_sqlite3_dir
879        AC_SUBST(SQLITE3_TCL_DIR)
880])
881
882dnl This macro tests if the compiler supports GCC's
883dnl __attribute__ syntax for unused variables/parameters
884AC_DEFUN([MP_COMPILER_ATTRIBUTE_UNUSED], [
885        AC_MSG_CHECKING([how to mark unused variables])
886        AC_COMPILE_IFELSE(
887                [AC_LANG_SOURCE([[int a __attribute__ ((unused));]])],
888                [AC_DEFINE(UNUSED, [__attribute__((unused))], [Attribute to mark unused variables])],
889                [AC_DEFINE(UNUSED, [])])
890
891        AC_MSG_RESULT([])
892       
893])
894
895dnl This macro ensures MP installation prefix paths are NOT in PATH
896dnl for configure to prevent potential problems when base/ code is updated
897dnl and ports are installed that would match needed items.
898AC_DEFUN([MP_PATH_SCAN],[
899        oldprefix=$prefix
900        if test "x$prefix" = "xNONE" ; then
901                prefix=$ac_default_prefix
902        fi
903        oldPATH=$PATH
904        newPATH=
905        as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
906        for as_dir in $oldPATH
907        do
908                IFS=$as_save_IFS
909                case "$as_dir" in
910                        $prefix/*)
911                                ;;
912                        *)
913                                if test -z "$newPATH"; then
914                                        newPATH=$as_dir
915                                else
916                                        newPATH=$newPATH$PATH_SEPARATOR$as_dir
917                                fi
918                                ;;
919                esac
920        done
921        PATH=$newPATH; export PATH
922        AC_SUBST(PATH_CLEANED,$newPATH)
923        prefix=$oldprefix
924])
925
926dnl This macro tests for sed support of -E (BSD) or -r (GNU)
927AC_DEFUN([MP_SED_EXTENDED_REGEXP],[
928        AC_PATH_PROG(SED, [sed])
929
930        if test "x$SED" = "x"; then
931                AC_MSG_ERROR([cannot find sed. Is sed installed?])
932        fi
933
934        AC_MSG_CHECKING([which sed flag to use for extended regexp])
935        [any_sed_flag=`echo foo | $SED    -e s/foo+/OK/ 2>&1 | grep OK`]
936        [bsd_sed_flag=`echo foo | $SED -E -e s/foo+/OK/ 2>&1 | grep OK`]
937        [gnu_sed_flag=`echo foo | $SED -r -e s/foo+/OK/ 2>&1 | grep OK`]
938        if test "x$any_sed_flag" = "xOK" ; then
939                AC_MSG_RESULT([none])
940                SED_EXT=
941        elif test "x$bsd_sed_flag" = "xOK" ; then
942                AC_MSG_RESULT([-E (BSD)])
943                SED_EXT=-E
944        elif test "x$gnu_sed_flag" = "xOK" ; then
945                AC_MSG_RESULT([-r (GNU)])
946                SED_EXT=-r
947        else
948                AC_MSG_RESULT([not available])
949                SED_EXT='N/A'
950        fi
951        AC_SUBST(SED_EXT)
952])
953
954dnl This macro tests for tar support of -q (BSD) or not (GNU)
955AC_DEFUN([MP_TAR_FAST_READ],[
956        AC_PATH_PROG(TAR, [tar])
957       
958        AC_MSG_CHECKING([whether tar supports -q])
959        if $TAR -t -q -f - </dev/null 2>/dev/null ; then
960                AC_MSG_RESULT([yes (bsdtar)])
961                TAR_Q='q'
962        else
963                AC_MSG_RESULT([no (gnutar)])
964                TAR_Q=
965        fi
966        AC_SUBST(TAR_Q)
967])
968
969dnl This macro tests for tar support of --no-same-owner
970AC_DEFUN([MP_TAR_NO_SAME_OWNER],[
971        AC_PATH_PROG(TAR, [tar])
972        AC_PATH_PROG(GNUTAR, [gnutar])
973       
974        AC_MSG_CHECKING([for which tar variant to use])
975        AS_IF([test -n "$GNUTAR"], [TAR_CMD=$GNUTAR], [TAR_CMD=$TAR])
976        AC_MSG_RESULT([$TAR_CMD])
977        AC_SUBST(TAR_CMD)
978
979        AC_MSG_CHECKING([for $TAR_CMD --no-same-owner support])
980        [no_same_owner_support=`$TAR_CMD --help 2>&1 | grep no-same-owner`]
981        if test -z "$no_same_owner_support" ; then
982                AC_MSG_RESULT([no])
983        else
984                AC_MSG_RESULT([yes])
985                TAR_CMD="$TAR_CMD --no-same-owner"
986        fi
987])
988
989dnl This macro tests for GNU patch
990AC_DEFUN([MP_PATCH_GNU_VERSION],[
991        AC_PATH_PROG(PATCH, [patch])
992        AC_PATH_PROG(GNUPATCH, [gpatch])
993       
994        AC_MSG_CHECKING([for GNU (FSF) patch])
995        AS_IF([test -n "$GNUPATCH"], [PATCH_CMD=$GNUPATCH], [PATCH_CMD=$PATCH])
996        [fsf_version=`$PATCH_CMD --version 2>&1 | grep "Free Software Foundation"`]
997        if test -z "$fsf_version" ; then
998                AC_MSG_RESULT([none])
999        else
1000                AC_MSG_RESULT([$PATCH_CMD])
1001                GNUPATCH="$PATCH_CMD"
1002        fi
1003])
1004
1005#------------------------------------------------------------------------
1006# MP_CHECK_READLINK_IS_P1003_1A --
1007#
1008#       Check if readlink conforms to POSIX 1003.1a standard, define
1009#       READLINK_IS_NOT_P1003_1A if it doesn't.
1010#
1011# Arguments:
1012#       None.
1013#
1014# Requires:
1015#       None.
1016#
1017# Depends:
1018#               AC_LANG_PROGRAM
1019#
1020# Results:
1021#       Result is cached.
1022#
1023#       If readlink doesn't conform to POSIX 1003.1a, defines the following variables:
1024#               READLINK_IS_NOT_P1003_1A
1025#
1026#------------------------------------------------------------------------
1027AC_DEFUN(MP_CHECK_READLINK_IS_P1003_1A, [
1028        AC_MSG_CHECKING([if readlink conforms to POSIX 1003.1a])
1029
1030        AC_CACHE_VAL(mp_cv_readlink_is_posix_1003_1a, [
1031                AC_COMPILE_IFELSE([
1032                        AC_LANG_PROGRAM([
1033                                        #include <unistd.h>
1034                                        ssize_t readlink(const char *, char *, size_t);
1035                                ], [
1036                        ])
1037                        ], [
1038                                mp_cv_readlink_is_posix_1003_1a="yes"
1039                        ], [
1040                                mp_cv_readlink_is_posix_1003_1a="no"
1041                        ]
1042                )
1043        ])
1044
1045        AC_MSG_RESULT(${mp_cv_readlink_is_posix_1003_1a})
1046
1047        if test x"${mp_cv_readlink_is_posix_1003_1a}" = "xno"; then
1048                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)])
1049        fi
1050
1051        AC_SUBST(READLINK_IS_NOT_P1003_1A)
1052])
1053
1054#------------------------------------------------------------------------
1055# MP_WERROR --
1056#
1057#       Enable -Werror
1058#
1059# Arguments:
1060#       None.
1061#
1062# Requires:
1063#       none
1064#
1065# Depends:
1066#       none
1067#
1068# Results:
1069#       Substitutes WERROR_CFLAGS variable
1070#------------------------------------------------------------------------
1071AC_DEFUN([MP_WERROR],[
1072        AC_REQUIRE([AC_PROG_CC])
1073        AC_ARG_ENABLE(werror, AS_HELP_STRING([--enable-werror],[Add -Werror to CFLAGS. Used for development.]), [enable_werror=${enableval}], [enable_werror=no])
1074        if test x"$enable_werror" != "xno"; then
1075                CFLAGS_WERROR="-Werror"
1076        else
1077                CFLAGS_WERROR=""
1078        fi
1079        AC_SUBST([CFLAGS_WERROR])
1080])
1081
1082#------------------------------------------------------------------------
1083# MP_CHECK_SQLITE_VERSION --
1084#
1085#       Check for a specific SQLite version and execute commands depending on availability
1086#
1087# Arguments:
1088#       Required SQLite version for the test to succeed in the form of SQLITE_VERSION_NUMBER
1089#
1090# Requires:
1091#       MP_SQLITE3_FLAGS
1092#
1093# Depends:
1094#               AC_LANG_SOURCE
1095#
1096# Results:
1097#               Result is cached.
1098#
1099#       sets mp_sqlite_version_ge_$1 to yes or no
1100#
1101#------------------------------------------------------------------------
1102AC_DEFUN(MP_CHECK_SQLITE_VERSION, [
1103        AC_REQUIRE([MP_SQLITE3_FLAGS])
1104
1105        AC_MSG_CHECKING([for SQLite >= $1])
1106
1107        mp_check_sqlite_version_cppflags_save=$CPPFLAGS
1108        CPPFLAGS="$CPPFLAGS $CFLAGS_SQLITE3"
1109
1110        AC_CACHE_VAL(mp_cv_sqlite_version_defined, [
1111                AC_PREPROC_IFELSE(
1112                        [AC_LANG_SOURCE(
1113                                [[
1114                                        #include <sqlite3.h>
1115                                        #ifndef SQLITE_VERSION_NUMBER
1116                                        #  error "SQLITE_VERSION_NUMBER undefined"
1117                                        #endif
1118                                ]]
1119                        )],
1120                        [mp_cv_sqlite_version_defined="yes"],
1121                        [AC_MSG_ERROR("SQLITE_VERSION_NUMBER undefined or sqlite3.h not found")]
1122                )
1123        ])
1124
1125        if test x"${mp_cv_sqlite_version_defined}" = "xno"; then
1126                AC_MSG_RESULT([SQLite version not found])
1127                mp_sqlite_version_ge_$1="no"
1128        else
1129                AC_CACHE_VAL(mp_cv_sqlite_version_ge_$1, [
1130                        AC_PREPROC_IFELSE(
1131                                [AC_LANG_SOURCE(
1132                                        [[
1133                                                #include <sqlite3.h>
1134                                                #if (SQLITE_VERSION_NUMBER >= $1)
1135                                                /* Everything is fine */
1136                                                #else
1137                                                #  error "SQLite version too old"
1138                                                #endif
1139                                        ]]
1140                                )],
1141                                [mp_cv_sqlite_version_ge_$1="yes"],
1142                                [mp_cv_sqlite_version_ge_$1="no"]
1143                        )
1144                ])
1145
1146                AC_MSG_RESULT(${mp_cv_sqlite_version_ge_$1})
1147                mp_sqlite_version_ge_$1=${mp_cv_sqlite_version_ge_$1}
1148        fi
1149
1150        CPPFLAGS=$mp_check_sqlite_version_cppflags_save
1151])
1152
1153#------------------------------------------------------------------------
1154# MP_TCL_PLATFORM --
1155#
1156#       Export target platform and major version
1157#
1158# Arguments:
1159#       none.
1160#
1161# Requires:
1162#       TCLSH must be set.
1163#
1164# Depends:
1165#       none.
1166#
1167# Results:
1168#       Defines OS_PLATFORM and OS_MAJOR.
1169#
1170#------------------------------------------------------------------------
1171AC_DEFUN([MP_TCL_PLATFORM],[
1172        AC_MSG_CHECKING([for Tcl target platform])
1173        OS_PLATFORM=`echo 'puts -nonewline [[string tolower \$tcl_platform(os)]]' | $TCLSH`
1174        OS_MAJOR=`echo 'puts -nonewline [[lindex [split \$tcl_platform(osVersion) .] 0]]' | $TCLSH`
1175        AC_MSG_RESULT($OS_PLATFORM $OS_MAJOR)
1176        AC_SUBST(OS_PLATFORM)
1177        AC_SUBST(OS_MAJOR)
1178])
Note: See TracBrowser for help on using the repository browser.