Files
macports-base/aclocal.m4
T
Joshua Root b882c32cdb MP_TAR_KEEP_OLD: correct output redirection
(cherry picked from commit efb8744580)
2026-02-05 19:21:09 +11:00

1207 lines
33 KiB
Plaintext

builtin(include,m4/tcl.m4)
dnl Search for a variable in a list. Run ACTION-IF-FOUND if it is in the list,
dnl ACTION-IF-NOT-FOUND otherwise.
dnl
dnl Parameters:
dnl - The name of the list.
dnl - The name of the variable that should be searched in the list.
dnl - An optional action to be run if found
dnl - An optional action to be run if not found
dnl
dnl _MP_LIST_CONTAINS_QUOTED([listname], [varname], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
AC_DEFUN([_MP_LIST_CONTAINS], [dnl
mp_list_contains_present=
eval "mp_list_contains_list=\"$$1\""
for mp_list_contains_entry in $mp_list_contains_list; do
test -z "$mp_list_contains_entry" && continue
if test "x$$2" = "x$mp_list_contains_entry"; then
mp_list_contains_present=1
break
fi
done
if test "x$mp_list_contains_present" = "x"; then
m4_ifvaln([$3], [$3], [:])dnl
m4_ifvaln([$4], [else $4])dnl
fi
])
dnl Quote a variable and prepend it to a list.
dnl
dnl Parameters:
dnl - The name of the list.
dnl - The name of the variable that should be quoted and prepended to the
dnl list.
AC_DEFUN([_MP_LIST_PREPEND_QUOTED], [dnl
_MP_QUOTE([$2])
_MP_VAR_PREPEND([$1], ["$$2 "])
])
dnl Quote a variable and append it to a list.
dnl
dnl Parameters:
dnl - The name of the list.
dnl - The name of the variable that should be quoted and appended to the list.
AC_DEFUN([_MP_LIST_APPEND_QUOTED], [dnl
_MP_QUOTE([$2])
AS_VAR_APPEND([$1], [" $$2"])
])
dnl Prepend the shell expansion of a value to a variable.
dnl
dnl Parameters:
dnl - The name of the variable to which the second argument should be
dnl prepended.
dnl - The value that should be expanded using the shell expansion rules and
dnl prepended to the variable given in the first argument.
AC_DEFUN([_MP_VAR_PREPEND], [dnl
AC_REQUIRE([_MP_VAR_PREPEND_PREPARE])dnl
mp_fn_var_prepend $1 $2
])
dnl Define the function required for _MP_VAR_PREPEND
AC_DEFUN([_MP_VAR_PREPEND_PREPARE], [dnl
mp_fn_var_prepend() {
eval "$[]1=\"$[]2\$$[]1\""
}
])
dnl Quote a variable in single quotes (escaping any existing single quotes) and
dnl store it in itself.
dnl
dnl Parameters:
dnl - The name of the variable that should be quoted using single quotes.
AC_DEFUN([_MP_QUOTE], [dnl
case $$1 in
*\'*)
$1=$(AS_ECHO(["$$1"]) | sed "s/'/'\\\\\\\\''/g")
;;
esac
$1="'$$1'"dnl
])
dnl Extract the key part of a key-value pair given as string in the form
dnl --key=value or
dnl -key=value
dnl
dnl Parameters:
dnl - The variable name to assign to
dnl - The (quoted, if necessary) key-value pair
AC_DEFUN([_MP_EXTRACT_KEY], [dnl
$1=$(AS_ECHO([$2]) | sed -E 's/^--?([[^=]]+)=.*$/\1/')dnl
])
dnl Similar to AC_ARG_VAR, but implemented with --with-pkg=PATH for PKG.
dnl
dnl Parameters: Similar to AC_ARG_VAR ($2 gets some boiler plate around it)
AC_DEFUN([MP_TOOL_PATH], [dnl
AC_ARG_WITH([m4_tolower($1)], [AS_HELP_STRING([--with-m4_tolower($1)=PATH],
[path to alternate $2 command])], [$1=$withval],dnl
[])dnl
])
dnl Configure a project contained in a subdirectory. Different from
dnl AC_CONFIG_SUBDIRS (on which this macro is based), you can pass parameters
dnl to the sub-configure script.
dnl
dnl Parameters:
dnl - The relative path to the directory that contains the configure script
dnl to be run
dnl - Parameters to pass to the configure script
dnl
dnl MP_CONFIG_SUBDIR([path-to-directory], [configure-parameters])
AC_DEFUN([MP_CONFIG_SUBDIR], [
ac_dir="$1"
mp_popdir=$(pwd)
AS_MKDIR_P(["$ac_dir"])
_AC_SRCDIRS(["$ac_dir"])
cd "$ac_dir"
if test "$no_recursion" != yes || test ! -f "$ac_srcdir/config.status"; then
AC_MSG_NOTICE([=== configuring in $ac_dir ($mp_popdir/$ac_dir)])
if test -f "$ac_srcdir/configure"; then
# Run 'make distclean' first, ignoring errors; unfortunately some
# of our projects are not reconfigure-safe and will not correctly
# pick up modified configure variables or recompile files affected
# by such variables. See
# https://github.com/macports/macports-base/pull/79 and
# https://github.com/macports/macports-base/pull/80
make distclean || true
mp_sub_configure_args=
mp_sub_configure_keys=
# Compile a list of keys that have been given to the MP_CONFIG_SUBDIR
# macro; we want to skip copying those parameters from the original
# configure invocation.
for mp_arg in $2; do
case $mp_arg in
--*=* | -*=*)
_MP_EXTRACT_KEY([mp_arg_key], ["$mp_arg"])
_MP_LIST_APPEND_QUOTED([mp_sub_configure_keys], [mp_arg_key])
;;
esac
_MP_LIST_APPEND_QUOTED([mp_sub_configure_args], [mp_arg])
done
# Walk the list of arguments given to the original configure script;
# filter out a few common ones we likely would not want to pass along,
# add --disable-option-checking and filter those already given as
# argument to MP_CONFIG_SUBDIR.
# Most of this code is adapted from _AC_OUTPUT_SUBDIRS in
# $prefix/share/autoconf/autoconf/status.m4.
mp_prev=
eval "set x $ac_configure_args"
shift
for mp_arg; do
if test -n "$mp_prev"; then
mp_prev=
continue
fi
case $mp_arg in
-cache-file \
| --cache-file \
| --cache-fil \
| --cache-fi \
| --cache-f \
| --cache- \
| --cache \
| --cach \
| --cac \
| --ca \
| --c)
mp_prev=cache_file
;;
-cache-file=* \
| --cache-file=* \
| --cache-fil=* \
| --cache-fi=* \
| --cache-f=* \
| --cache-=* \
| --cache=* \
| --cach=* \
| --cac=* \
| --ca=* \
| --c=*)
# ignore --cache-file
;;
--config-cache \
| -C)
# ignore -C
;;
-srcdir \
| --srcdir \
| -srcdi \
| -srcd \
| -src \
| -sr)
mp_prev=srcdir
;;
-srcdir=* \
| --srcdir=* \
| --srcdi=* \
| --srcd=* \
| --src=* \
| --sr=*)
# ignore --srcdir
;;
-prefix \
| --prefix \
| --prefi \
| --pref \
| --pre \
| --pr \
| --p)
mp_prev=prefix
;;
-prefix=* \
| --prefix=* \
| --prefi=* \
| --pref=* \
| --pre=* \
| --pr=* \
| --p=*)
# ignore --prefix
;;
--disable-option-checking)
# ignore --disable-option-checking
;;
--*=* | -*=*)
_MP_EXTRACT_KEY([mp_arg_key], ["$mp_arg"])
_MP_LIST_CONTAINS([mp_sub_configure_keys], [mp_arg_key], [], [
_MP_LIST_APPEND_QUOTED([mp_sub_configure_args], [mp_arg])
])
;;
*)
# always pass positional arguments
_MP_LIST_APPEND_QUOTED([mp_sub_configure_args], [mp_arg])
;;
esac
done
# Now prepend some arguments that should always be present unless
# overriden, such as --prefix, --silent, --disable-option-checking,
# --cache-file, --srcdir
# Pass --prefix unless already given
mp_arg_key=prefix
_MP_LIST_CONTAINS([mp_sub_configure_args], [mp_arg_key], [], [
mp_arg="--prefix=$prefix"
_MP_LIST_PREPEND_QUOTED([mp_sub_configure_args], [mp_arg])
])
# Pass --silent
if test "$silent" = yes; then
mp_arg="--silent"
_MP_LIST_PREPEND_QUOTED([mp_sub_configure_args], [mp_arg])
fi
# Always prepend --disable-option-checking to silence warnings, since
# different subdirs can have different --enable and --with options.
mp_arg="--disable-option-checking"
_MP_LIST_PREPEND_QUOTED([mp_sub_configure_args], [mp_arg])
# Make the cache file name correct relative to the subdirectory.
case $cache_file in
[[\\/]]* | ?:[[\\/]]* )
mp_sub_cache_file=$cache_file
;;
*) # Relative name.
mp_sub_cache_file=$ac_top_build_prefix$cache_file
;;
esac
mp_arg="--cache-file=$mp_sub_cache_file"
_MP_LIST_PREPEND_QUOTED([mp_sub_configure_args], [mp_arg])
mp_arg="CC=$CC"
_MP_LIST_APPEND_QUOTED([mp_sub_configure_args], [mp_arg])
AC_MSG_NOTICE([running $SHELL $ac_srcdir/configure $mp_sub_configure_args in $ac_dir])
eval "\$SHELL \$ac_srcdir/configure $mp_sub_configure_args" || AC_MSG_ERROR([configure failed for $ac_dir])
else
AC_MSG_ERROR([no configure script found in $ac_dir])
fi
AC_MSG_NOTICE([=== finished configuring in $ac_dir ($mp_popdir/$ac_dir)])
fi
cd "$mp_popdir"
])
#------------------------------------------------------------------------
# MP_CHECK_FRAMEWORK_COREFOUNDATION --
#
# Check if CoreFoundation framework is available, define HAVE_FRAMEWORK_COREFOUNDATION if so.
#
# Arguments:
# None.
#
# Requires:
# None.
#
# Depends:
# AC_LANG_PROGRAM
#
# Results:
# Result is cached.
#
# If CoreFoundation framework is available, defines the following variables:
# HAVE_FRAMEWORK_COREFOUNDATION
#
#------------------------------------------------------------------------
AC_DEFUN(MP_CHECK_FRAMEWORK_COREFOUNDATION, [
FRAMEWORK_LIBS="-framework CoreFoundation"
AC_MSG_CHECKING([for CoreFoundation framework])
AC_CACHE_VAL(mp_cv_have_framework_corefoundation, [
ac_save_LIBS="$LIBS"
LIBS="$FRAMEWORK_LIBS $LIBS"
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
#include <CoreFoundation/CoreFoundation.h>
], [
CFURLRef url = CFURLCreateWithFileSystemPath(NULL, CFSTR("/testing"), kCFURLPOSIXPathStyle, 1);
CFArrayRef bundles = CFBundleCreateBundlesFromDirectory(NULL, url, CFSTR("pkg"));
])
], [
mp_cv_have_framework_corefoundation="yes"
], [
mp_cv_have_framework_corefoundation="no"
]
)
LIBS="$ac_save_LIBS"
])
AC_MSG_RESULT(${mp_cv_have_framework_corefoundation})
if test x"${mp_cv_have_framework_corefoundation}" = "xyes"; then
AC_DEFINE([HAVE_FRAMEWORK_COREFOUNDATION], [], [Define if CoreFoundation framework is available])
fi
AC_SUBST(HAVE_FRAMEWORK_COREFOUNDATION, [$mp_cv_have_framework_corefoundation])
])
#------------------------------------------------------------------------
# MP_CHECK_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER --
#
# Check if if the routine CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER
# is available in CoreFoundation.
#
# Arguments:
# None.
#
# Requires:
# None.
#
# Depends:
# AC_LANG_PROGRAM
#
# Results:
# Result is cached.
#
# If function CFNotificationCenterGetDarwinNotifyCenter is in the CoreFoundation framework, defines the following variables:
# HAVE_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER
#
#------------------------------------------------------------------------
AC_DEFUN(MP_CHECK_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER, [
FRAMEWORK_LIBS="-framework CoreFoundation"
AC_MSG_CHECKING([for CFNotificationCenterGetDarwinNotifyCenter])
AC_CACHE_VAL(mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter, [
ac_save_LIBS="$LIBS"
LIBS="$FRAMEWORK_LIBS $LIBS"
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
#include <CoreFoundation/CoreFoundation.h>
], [
CFNotificationCenterRef ref = CFNotificationCenterGetDarwinNotifyCenter();
])
], [
mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter="yes"
], [
mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter="no"
]
)
LIBS="$ac_save_LIBS"
])
AC_MSG_RESULT(${mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter})
if test x"${mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter}" = "xyes"; then
AC_DEFINE([HAVE_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER], [], [Define if function CFNotificationCenterGetDarwinNotifyCenter in CoreFoundation framework])
fi
AC_SUBST(HAVE_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER)
])
#------------------------------------------------------------------------
# MP_CHECK_FRAMEWORK_SYSTEMCONFIGURATION --
#
# Check if SystemConfiguration framework is available, define HAVE_FRAMEWORK_SYSTEMCONFIGURATION if so.
#
# Arguments:
# None.
#
# Requires:
# None.
#
# Depends:
# AC_LANG_PROGRAM
#
# Results:
# Result is cached.
#
# If SystemConfiguration framework is available, defines the following variables:
# HAVE_FRAMEWORK_SYSTEMCONFIGURATION
#
#------------------------------------------------------------------------
AC_DEFUN(MP_CHECK_FRAMEWORK_SYSTEMCONFIGURATION, [
FRAMEWORK_LIBS="-framework SystemConfiguration"
AC_MSG_CHECKING([for SystemConfiguration framework])
AC_CACHE_VAL(mp_cv_have_framework_systemconfiguration, [
ac_save_LIBS="$LIBS"
LIBS="$FRAMEWORK_LIBS $LIBS"
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
#include <SystemConfiguration/SystemConfiguration.h>
], [
int err = SCError();
SCDynamicStoreRef dsRef = SCDynamicStoreCreate(NULL, NULL, NULL, NULL);
])
], [
mp_cv_have_framework_systemconfiguration="yes"
], [
mp_cv_have_framework_systemconfiguration="no"
]
)
LIBS="$ac_save_LIBS"
])
AC_MSG_RESULT(${mp_cv_have_framework_systemconfiguration})
if test x"${mp_cv_have_framework_systemconfiguration}" = "xyes"; then
AC_DEFINE([HAVE_FRAMEWORK_SYSTEMCONFIGURATION], [], [Define if SystemConfiguration framework is available])
fi
AC_SUBST(HAVE_FRAMEWORK_SYSTEMCONFIGURATION, [$mp_cv_have_framework_systemconfiguration])
])
#------------------------------------------------------------------------
# MP_CHECK_FRAMEWORK_IOKIT --
#
# Check if IOKit framework is available, define HAVE_FRAMEWORK_IOKIT if so.
#
# Arguments:
# None.
#
# Requires:
# None.
#
# Depends:
# AC_LANG_PROGRAM
#
# Results:
# Result is cached.
#
# If IOKit framework is available, defines the following variables:
# HAVE_FRAMEWORK_IOKIT
#
#------------------------------------------------------------------------
AC_DEFUN(MP_CHECK_FRAMEWORK_IOKIT, [
FRAMEWORK_LIBS="-framework IOKit"
AC_MSG_CHECKING([for IOKit framework])
AC_CACHE_VAL(mp_cv_have_framework_iokit, [
ac_save_LIBS="$LIBS"
LIBS="$FRAMEWORK_LIBS $LIBS"
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
#include <IOKit/IOKitLib.h>
#include <IOKit/pwr_mgt/IOPMLib.h>
], [
IOCreateReceivePort(0, NULL);
IORegisterForSystemPower(0, NULL, NULL, NULL);
])
], [
mp_cv_have_framework_iokit="yes"
], [
mp_cv_have_framework_iokit="no"
]
)
LIBS="$ac_save_LIBS"
])
AC_MSG_RESULT(${mp_cv_have_framework_iokit})
if test x"${mp_cv_have_framework_iokit}" = "xyes"; then
AC_DEFINE([HAVE_FRAMEWORK_IOKIT], [], [Define if IOKit framework is available])
fi
AC_SUBST(HAVE_FRAMEWORK_IOKIT, [$mp_cv_have_framework_iokit])
])
# MP_PATH_MPCONFIGDIR
#---------------------------------------
AC_DEFUN([MP_PATH_MPCONFIGDIR],[
dnl if the user actually specified --prefix, shift
dnl mpconfigdir to $prefix/etc/macports
AC_MSG_CHECKING([for MacPorts config directory])
mpconfigdir='${sysconfdir}/macports'
AC_MSG_RESULT([$mpconfigdir])
MPCONFIGDIR="$mpconfigdir"
AC_SUBST(MPCONFIGDIR)
])
# MP_CHECK_OLDLAYOUT
#---------------------------------------
AC_DEFUN([MP_CHECK_OLDLAYOUT],[
dnl Bail if there is an existing install of DP/MP older than 1.5
AC_MSG_CHECKING([that any existing MacPorts install can be upgraded])
eval dpversionfile="${sysconfdir}/ports/dp_version"
if test -f "$dpversionfile"; then
AC_MSG_ERROR([Existing MacPorts or DarwinPorts install is too old to be upgraded. Install MacPorts 1.7.1 first.])
else
AC_MSG_RESULT([yes])
fi
])
# MP_CHECK_NOROOTPRIVILEGES
#-------------------------------------------------
AC_DEFUN([MP_CHECK_NOROOTPRIVILEGES],[
dnl if the user specifies --with-no-root-privileges,
dnl use current user and group.
AC_REQUIRE([MP_PATH_MPCONFIGDIR])
AC_ARG_WITH(no-root-privileges, [AS_HELP_STRING([--with-no-root-privileges],[specify that MacPorts should be installed in your home directory])], [NO_ROOTPRIVS=$withval] )
if test "${NO_ROOTPRIVS+set}" = set; then
# Set install-user to current user
AC_MSG_CHECKING([for install user])
DSTUSR=`id -un`
AC_MSG_RESULT([$DSTUSR])
AC_SUBST(DSTUSR)
# Set install-group to current user
AC_MSG_CHECKING([for install group])
DSTGRP=`id -gn`
AC_MSG_RESULT([$DSTGRP])
AC_SUBST(DSTGRP)
# Set run-user to current user
AC_MSG_CHECKING([for macports user])
RUNUSR=`id -un`
AC_MSG_RESULT([$RUNUSR])
AC_SUBST(RUNUSR)
fi
])
# MP_CHECK_RUNUSER
#-------------------------------------------------
AC_DEFUN([MP_CHECK_RUNUSER],[
dnl if the user specifies --with-macports-user,
dnl use it, otherwise default to platform defaults
AC_REQUIRE([MP_PATH_MPCONFIGDIR])
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 ] )
AC_MSG_CHECKING([for macports user])
if test "x$RUNUSR" = "x" ; then
RUNUSR=macports
fi
AC_MSG_RESULT([$RUNUSR])
AC_SUBST(RUNUSR)
])
# MP_SHARED_DIRECTORY
#-------------------------------------------------
AC_DEFUN([MP_SHARED_DIRECTORY],[
dnl if the user specifies --with-shared-directory,
dnl use 0775 permissions for ${prefix} directories
AC_REQUIRE([MP_PATH_MPCONFIGDIR])
AC_ARG_WITH(shared-directory, [AS_HELP_STRING([--with-shared-directory],[use 0775 permissions for installed directories])], [ SHAREDIR=$withval ] )
if test "${SHAREDIR+set}" = set; then
AC_MSG_CHECKING([whether to share the install directory with all members of the install group])
DSTMODE=0775
AC_MSG_RESULT([$DSTMODE])
AC_SUBST(DSTMODE)
fi
])
# MP_CHECK_INSTALLUSER
#-------------------------------------------------
AC_DEFUN([MP_CHECK_INSTALLUSER],[
dnl if the user specifies --with-install-user,
dnl use it, otherwise default to platform defaults
AC_REQUIRE([MP_PATH_MPCONFIGDIR])
AC_ARG_WITH(install-user, [AS_HELP_STRING([--with-install-user=USER],[specify user ownership of installed files])], [ DSTUSR=$withval ] )
AC_MSG_CHECKING([for install user])
if test "x$DSTUSR" = "x" ; then
DSTUSR=root
fi
AC_MSG_RESULT([$DSTUSR])
AC_SUBST(DSTUSR)
])
# MP_CHECK_INSTALLGROUP
#-------------------------------------------------
AC_DEFUN([MP_CHECK_INSTALLGROUP],[
dnl if the user specifies --with-install-group,
dnl use it, otherwise default to platform defaults
AC_REQUIRE([MP_CHECK_INSTALLUSER])
AC_ARG_WITH(install-group, [AS_HELP_STRING([--with-install-group=GROUP],[specify group ownership of installed files])], [ DSTGRP=$withval ] )
AC_MSG_CHECKING([for install group])
if test "x$DSTGRP" = "x" ; then
case $host_os in
darwin*)
DSTGRP="admin"
;;
freebsd*)
DSTGRP="wheel"
;;
linux*)
DSTGRP="root"
;;
*)
DSTGRP="wheel"
;;
esac
fi
AC_MSG_RESULT([$DSTGRP])
AC_SUBST(DSTGRP)
])
# MP_DIRECTORY_MODE
#-------------------------------------------------
AC_DEFUN([MP_DIRECTORY_MODE],[
dnl if the user specifies --with-directory-mode,
dnl use the specified permissions for ${prefix} directories,
dnl otherwise use 0755
AC_REQUIRE([MP_PATH_MPCONFIGDIR])
AC_ARG_WITH(directory-mode, [AS_HELP_STRING([--with-directory-mode=MODE],[specify directory mode of installed directories])], [ DSTMODE=$withval ] )
AC_MSG_CHECKING([what permissions to use for installation directories])
if test "x$DSTMODE" = "x" ; then
DSTMODE=0755
fi
AC_MSG_RESULT([$DSTMODE])
AC_SUBST(DSTMODE)
])
# MP_PATH_APPLICATIONS
#---------------------------------------
AC_DEFUN([MP_PATH_APPLICATIONS],[
AC_REQUIRE([MP_CHECK_INSTALLUSER])
AC_ARG_WITH(applications-dir,[AS_HELP_STRING([--with-applications-dir],[applications installation directory])], MPAPPLICATIONSDIR=${withval})
oldprefix=$prefix
if test "x$prefix" = "xNONE" ; then
prefix=$ac_default_prefix
fi
AC_MSG_CHECKING([for Applications installation directory])
if test "x$MPAPPLICATIONSDIR" = "x" ; then
if test "$DSTUSR" = "root" ; then
MPAPPLICATIONSDIR="/Applications/MacPorts"
else
MPAPPLICATIONSDIR="$(eval echo ~$DSTUSR)/Applications/MacPorts"
fi
fi
AC_MSG_RESULT([$MPAPPLICATIONSDIR])
AC_SUBST(MPAPPLICATIONSDIR)
prefix=$oldprefix
])
# MP_PATH_FRAMEWORKS
#---------------------------------------
AC_DEFUN([MP_PATH_FRAMEWORKS],[
AC_REQUIRE([MP_CHECK_INSTALLUSER])
AC_ARG_WITH(frameworks-dir,[AS_HELP_STRING([--with-frameworks-dir],[frameworks installation directory])], MPFRAMEWORKSDIR=${withval})
oldprefix=$prefix
if test "x$prefix" = "xNONE" ; then
prefix=$ac_default_prefix
fi
AC_MSG_CHECKING([for Frameworks installation directory])
if test "x$MPFRAMEWORKSDIR" = "x" ; then
MPFRAMEWORKSDIR="${prefix}/Library/Frameworks"
fi
AC_MSG_RESULT([$MPFRAMEWORKSDIR])
AC_SUBST(MPFRAMEWORKSDIR)
prefix=$oldprefix
])
# MP_CHECK_STARTUPITEMS
#-------------------------------------------------
AC_DEFUN([MP_CHECK_STARTUPITEMS],[
dnl if the user specifies --without-startupitems,
dnl set "startupitem_install no" in macports.conf
AC_ARG_WITH(startupitems, [AS_HELP_STRING([--without-startupitems],[set "startupitem_install no" in macports.conf])], [with_startupitems=$withval], [with_startupitems=default] )
AC_MSG_CHECKING([for startupitem_install])
if test "x$with_startupitems" = "xno" ; then
startupitem_install="startupitem_install no"
elif test "x$with_startupitems" = "xdefault" -a "$DSTUSR" != "root" ; then
startupitem_install="startupitem_install no"
with_startupitems=no
else
startupitem_install="#startupitem_install yes"
with_startupitems=yes
fi
AC_MSG_RESULT([$with_startupitems])
AC_SUBST(startupitem_install)
])
# MP_UNIVERSAL_OPTIONS
#---------------------------------------
AC_DEFUN([MP_UNIVERSAL_OPTIONS],[
AC_ARG_WITH(universal-archs,[AS_HELP_STRING([--with-universal-archs="CPU"],[universal CPU architectures (space separated)])], UNIVERSAL_ARCHS=${withval})
if test "x$UNIVERSAL_ARCHS" = "x"; then
case "$MACOSX_VERSION" in
10.1[[0-3]]*)
UNIVERSAL_ARCHS="x86_64 i386"
;;
10.1[[4-9]]*)
UNIVERSAL_ARCHS="x86_64"
;;
10.[[0-5]]*)
UNIVERSAL_ARCHS="i386 ppc"
;;
10.[[6-9]]*)
UNIVERSAL_ARCHS="x86_64 i386"
;;
*)
UNIVERSAL_ARCHS="arm64 x86_64"
;;
esac
fi
UNIVERSAL_ARCHFLAGS=
for arch in $UNIVERSAL_ARCHS; do
UNIVERSAL_ARCHFLAGS="$UNIVERSAL_ARCHFLAGS -arch $arch"
done
AC_MSG_CHECKING([for Universal CPU architectures])
AC_MSG_RESULT([$UNIVERSAL_ARCHS])
AC_SUBST(UNIVERSAL_ARCHS)
AC_SUBST(UNIVERSAL_ARCHFLAGS)
])
# MP_LIB_MD5
#---------------------------------------
# Check for an md5 implementation
AC_DEFUN([MP_LIB_MD5],[
# Check for libmd from FreeBSD, which is preferred
AC_CHECK_LIB([md], [MD5File],[
AC_CHECK_HEADERS([md5.h sha.h], ,[
AC_MSG_ERROR([libmd was found, but md5.h or sha.h is missing.])
])
ac_save_LIBS="$LIBS"
LIBS="-lmd $LIBS"
AC_CHECK_DECLS([SHA1_File], [], [], [[#include <sha.h>]])
LIBS="$ac_save_LIBS"
AC_CHECK_HEADERS([ripemd.h sha256.h])
AC_DEFINE([HAVE_LIBMD], ,[Define if you have the `md' library (-lmd).])
MD5_LIBS="-lmd"]
)
if test "x$MD5_LIBS" = "x"; then
# If libmd is not found, check for libcrypto from OpenSSL
AC_CHECK_LIB([crypto], [MD5_Update],[
AC_CHECK_HEADERS([openssl/md5.h openssl/sha.h], ,[
AC_MSG_ERROR([libcrypto was found, but openssl/md5.h or openssl/sha.h is missing.])
])
AC_CHECK_HEADERS([openssl/ripemd.h])
ac_save_LIBS="$LIBS"
LIBS="-lcrypto $LIBS"
AC_CHECK_FUNCS([SHA256_Update])
LIBS="$ac_save_LIBS"
AC_DEFINE([HAVE_LIBCRYPTO], ,[Define if you have the `crypto' library (-lcrypto).])
MD5_LIBS="-lcrypto"]
)
fi
if test "x$MD5_LIBS" = "x"; then
AC_MSG_ERROR([Neither CommonCrypto, libmd nor libcrypto were found. A working md5 implementation is required.])
fi
AC_SUBST([MD5_LIBS])
])
# MP_PROG_DAEMONDO
#---------------------------------------
AC_DEFUN([MP_PROG_DAEMONDO],[
AC_REQUIRE([MP_CHECK_FRAMEWORK_COREFOUNDATION])
AC_REQUIRE([MP_CHECK_FRAMEWORK_SYSTEMCONFIGURATION])
AC_REQUIRE([MP_CHECK_FRAMEWORK_IOKIT])
AC_REQUIRE([MP_CHECK_FUNCTION_CFNOTIFICATIONCENTERGETDARWINNOTIFYCENTER])
AC_MSG_CHECKING(for whether we will build daemondo)
result=no
case $host_os in
darwin*)
if test "x$mp_cv_have_framework_corefoundation" = "xyes" &&
test "x$mp_cv_have_framework_systemconfiguration" = "xyes" &&
test "x$mp_cv_have_framework_iokit" = "xyes" &&
test "x$mp_cv_have_function_cfnotificationcentergetdarwinnotifycenter" = "xyes"; then
result=yes
EXTRA_PROGS="$EXTRA_PROGS daemondo"
AC_CONFIG_FILES([src/programs/daemondo/Makefile])
fi
;;
*)
esac
AC_MSG_RESULT(${result})
])
# MP_LIBCURL_FLAGS
# Sets the flags to compile with libcurl.
#
# Arguments:
# None.
#
# Requires:
# curl-config or user parameters to define the flags.
#
# Results:
# defines some help strings.
# sets CFLAGS_LIBCURL and LDFLAGS_LIBCURL
#---------------------------------------
AC_DEFUN([MP_LIBCURL_FLAGS],[
AC_ARG_WITH(curlprefix,
[ --with-curlprefix base directory for the curl install ('/usr', '/usr/local', ...)],
[ curlprefix=$withval ])
if test "x$curlprefix" = "x"; then
AC_PATH_PROG([CURL_CONFIG], [curl-config])
else
AC_PATH_PROG([CURL_CONFIG], [curl-config], , [$curlprefix/bin])
fi
if test "x$CURL_CONFIG" = "x"; then
AC_MSG_ERROR([cannot find curl-config. Is libcurl installed?])
fi
CFLAGS_LIBCURL=$($CURL_CONFIG --cflags)
if test "x$curlprefix" = "x"; then
# System curl-config emits absurd output for --libs
# See rdar://7244457
LDFLAGS_LIBCURL="-lcurl"
else
# Due to a bug in dist, --arch flags are improperly supplied by curl-config.
# Get rid of them.
LDFLAGS_LIBCURL=$($CURL_CONFIG --libs | [sed 's/-arch [A-Za-z0-9_]* //g'])
fi
AC_SUBST(CFLAGS_LIBCURL)
AC_SUBST(LDFLAGS_LIBCURL)
])
dnl This macro tests if the compiler supports GCC's
dnl __attribute__ syntax for unused variables/parameters
AC_DEFUN([MP_COMPILER_ATTRIBUTE_UNUSED], [
AC_MSG_CHECKING([how to mark unused variables])
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE([[int a __attribute__ ((unused));]])],
[AC_DEFINE(UNUSED, [__attribute__((unused))], [Attribute to mark unused variables])],
[AC_DEFINE(UNUSED, [])])
AC_MSG_RESULT([])
])
dnl This macro ensures MP installation prefix paths are NOT in CFLAGS,
dnl CPPFLAGS, OBJCFLAGS, LDFLAGS for configure to prevent potential problems
dnl when base/ code is updated and ports are installed that would match needed
dnl items.
AC_DEFUN([MP_FLAGS_SCAN],[
AC_ARG_ENABLE(
[flag-sanitization],
AS_HELP_STRING([--disable-flag-sanitization], [do not sanitize CPPFLAGS, CFLAGS, OBJCFLAGS and LDFLAGS]),
[disable_mp_flags_scan=yes],
[disable_mp_flags_scan=no])
if test x"$disable_mp_flags_scan" != "xyes"; then
# Get a value for $prefix
oldprefix=$prefix
if test "x$prefix" = "xNONE" ; then
prefix=$ac_default_prefix
fi
mp_flags_scan_found=
# Clean CFLAGS CPPFLAGS OBJCFLAGS and LDFLAGS
for mp_flags_flagname in CFLAGS CPPFLAGS OBJCFLAGS LDFLAGS; do
mp_flags_scan_flag_cleaned=
eval "set x \$$mp_flags_flagname"
shift
for mp_flags_scan_val; do
case "$mp_flags_scan_val" in
-I$prefix/* | -L$prefix/*)
AC_MSG_NOTICE([Removing `$mp_flags_scan_val' from \$$mp_flags_flagname because it might cause a self-dependency])
mp_flags_scan_found=1
;; #(
*)
if test -z "$mp_flags_scan_flag_cleaned"; then
mp_flags_scan_flag_cleaned=$mp_flags_scan_val
else
AS_VAR_APPEND([mp_flags_scan_flag_cleaned], [" $mp_flags_scan_val"])
fi
;;
esac
done
if test -z "$mp_flags_scan_flag_cleaned"; then
(unset $mp_flags_flagname) >/dev/null 2>&1 && unset $mp_flags_flagname
(export -n $mp_flags_flagname) >/dev/null 2>&1 && export -n $mp_flags_flagname
else
eval "$mp_flags_flagname=\"$mp_flags_scan_flag_cleaned\""
export $mp_flags_flagname
fi
eval "ac_env_${mp_flags_flagname}_set=\${${mp_flags_flagname}+set}"
eval "ac_env_${mp_flags_flagname}_value=\${${mp_flags_flagname}}"
eval "ac_cv_env_${mp_flags_flagname}_set=\${${mp_flags_flagname}+set}"
eval "ac_cv_env_${mp_flags_flagname}_value=\${${mp_flags_flagname}}"
done
# Since those are all precious variables they have been saved into config.cache and put into $ac_configure_args
# We need to remove them at least from $ac_configure_args, because that's being passed to sub-configures
eval "set x $ac_configure_args"
shift
ac_configure_args=
for mp_flags_configure_arg; do
case "$mp_flags_configure_arg" in
CFLAGS=* | CPPFLAGS=* | OBJCFLAGS=* | LDFLAGS=*)
mp_flags_configure_arg_key=$(AS_ECHO(["$mp_flags_configure_arg"]) | sed -E 's/^([[^=]]+)=.*$/\1/')
eval "mp_flags_configure_arg_newval=\$$mp_flags_configure_arg_key"
if test -n "$mp_flags_configure_arg_newval"; then
AS_VAR_APPEND([ac_configure_args], [" '$mp_flags_configure_arg_key=$mp_flags_configure_arg_newval'"])
fi
;;
*)
AS_VAR_APPEND([ac_configure_args], [" '$mp_flags_configure_arg'"])
;;
esac
done
if ! test -z "$mp_flags_scan_found"; then
AC_MSG_NOTICE([See https://trac.macports.org/ticket/42756 for rationale on why this script is removing these values])
AC_MSG_NOTICE([Pass --disable-flag-sanitization if you're aware of the potential problems and want to risk them anyway])
fi
# Restore $prefix
prefix=$oldprefix
fi
])
dnl This macro ensures MP installation prefix paths are NOT in PATH
dnl for configure to prevent potential problems when base/ code is updated
dnl and ports are installed that would match needed items.
AC_DEFUN([MP_PATH_SCAN],[
oldprefix=$prefix
if test "x$prefix" = "xNONE" ; then
prefix=$ac_default_prefix
fi
oldPATH=$PATH
newPATH=
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $oldPATH
do
IFS=$as_save_IFS
case "$as_dir" in
$prefix/*)
;;
*)
if test -z "$newPATH"; then
newPATH=$as_dir
else
newPATH=$newPATH$PATH_SEPARATOR$as_dir
fi
;;
esac
done
PATH=$newPATH; export PATH
AC_SUBST(PATH_CLEANED,$newPATH)
prefix=$oldprefix
])
dnl This macro tests for tar support of -q (BSD) or not (GNU)
AC_DEFUN([MP_TAR_FAST_READ],[
AC_PATH_PROG(TAR, [tar])
AC_MSG_CHECKING([whether tar supports -q])
if $TAR -t -q -f - </dev/null 2>/dev/null ; then
AC_MSG_RESULT([yes (bsdtar)])
TAR_Q='q'
else
AC_MSG_RESULT([no (gnutar)])
TAR_Q=
fi
AC_SUBST(TAR_Q)
])
dnl This macro tests for tar support of -k (keep existing files)
dnl without erroring when files exist.
AC_DEFUN([MP_TAR_KEEP_OLD],[
AC_MSG_CHECKING([whether tar -k works])
mkdir -p conftest_dir
touch conftest_dir/file
$TAR -cf conftest.tar conftest_dir
if $TAR -xkf conftest.tar >/dev/null 2>&1 ; then
AC_MSG_RESULT([yes])
TAR_K='k'
else
AC_MSG_RESULT([no])
TAR_K=
fi
AC_SUBST(TAR_K)
])
dnl This macro tests for tar support of --no-same-owner
AC_DEFUN([MP_TAR_NO_SAME_OWNER],[
AC_PATH_PROG(TAR, [tar])
AC_PATH_PROG(GNUTAR, [gnutar])
AC_MSG_CHECKING([for which tar variant to use])
AS_IF([test -n "$GNUTAR"], [TAR_CMD=$GNUTAR], [TAR_CMD=$TAR])
AC_MSG_RESULT([$TAR_CMD])
AC_SUBST(TAR_CMD)
AC_MSG_CHECKING([for $TAR_CMD --no-same-owner support])
[no_same_owner_support=`$TAR_CMD --help 2>&1 | grep no-same-owner`]
if test -z "$no_same_owner_support" ; then
AC_MSG_RESULT([no])
else
AC_MSG_RESULT([yes])
TAR_CMD="$TAR_CMD --no-same-owner"
fi
])
dnl This macro tests for GNU patch
AC_DEFUN([MP_PATCH_GNU_VERSION],[
AC_PATH_PROG(PATCH, [patch])
AC_PATH_PROG(GNUPATCH, [gpatch])
AC_MSG_CHECKING([for GNU (FSF) patch])
AS_IF([test -n "$GNUPATCH"], [PATCH_CMD=$GNUPATCH], [PATCH_CMD=$PATCH])
[fsf_version=`$PATCH_CMD --version 2>&1 | grep "Free Software Foundation"`]
if test -z "$fsf_version" ; then
AC_MSG_RESULT([none])
else
AC_MSG_RESULT([$PATCH_CMD])
GNUPATCH="$PATCH_CMD"
fi
])
#------------------------------------------------------------------------
# MP_WERROR --
#
# Enable -Werror
#
# Arguments:
# None.
#
# Requires:
# none
#
# Depends:
# none
#
# Results:
# Substitutes WERROR_CFLAGS variable
#------------------------------------------------------------------------
AC_DEFUN([MP_WERROR],[
AC_REQUIRE([AC_PROG_CC])
AC_ARG_ENABLE(werror, AS_HELP_STRING([--enable-werror],[add -Werror to CFLAGS (used for development)]), [enable_werror=${enableval}], [enable_werror=no])
if test x"$enable_werror" != "xno"; then
CFLAGS_WERROR="-Werror"
else
CFLAGS_WERROR=""
fi
AC_SUBST([CFLAGS_WERROR])
])
#------------------------------------------------------------------------
# MP_PLATFORM --
#
# Export target platform and major version
#
# Arguments:
# none.
#
# Requires:
# none.
#
# Depends:
# none.
#
# Results:
# Defines OS_PLATFORM and OS_MAJOR.
#
#------------------------------------------------------------------------
AC_DEFUN([MP_PLATFORM],[
AC_MSG_CHECKING([for target platform])
OS_PLATFORM=`uname -s | tr '[[:upper:]]' '[[:lower:]]'`
OS_MAJOR=`uname -r | cut -d '.' -f 1`
AC_MSG_RESULT($OS_PLATFORM $OS_MAJOR)
AC_SUBST(OS_PLATFORM)
AC_SUBST(OS_MAJOR)
])
#------------------------------------------------------------------------
# MP_TRACEMODE_SUPPORT --
#
# Check whether trace mode is supported on this platform
#
# Arguments:
# none.
#
# Requires:
# OS_PLATFORM and OS_MAJOR from MP_PLATFORM.
#
# Depends:
# none.
#
# Results:
# Defines the TRACEMODE_SUPPORT substitution and the
# HAVE_TRACEMODE_SUPPORT macro.
#
#------------------------------------------------------------------------
AC_DEFUN([MP_TRACEMODE_SUPPORT],[
AC_REQUIRE([MP_PLATFORM])
AC_CHECK_FUNCS([kqueue kevent])
AC_MSG_CHECKING([whether trace mode is supported on this platform])
if test x"${OS_PLATFORM}" != "xdarwin"; then
AC_MSG_RESULT([not darwin, no])
TRACEMODE_SUPPORT=0
elif test x"${ac_cv_func_kqueue}" != "xyes"; then
AC_MSG_RESULT([kqueue() not available, no])
TRACEMODE_SUPPORT=0
elif test x"${ac_cv_func_kevent}" != "xyes"; then
AC_MSG_RESULT([kevent() not available, no])
TRACEMODE_SUPPORT=0
else
AC_EGREP_CPP(yes_have_ev_receipt, [
#include <sys/types.h>
#include <sys/event.h>
#include <sys/time.h>
#ifdef EV_RECEIPT
yes_have_ev_receipt
#endif
],[
AC_MSG_RESULT([yes])
TRACEMODE_SUPPORT=1
AC_DEFINE([HAVE_TRACEMODE_SUPPORT], [1], [Platform supports tracemode.])
],[
AC_MSG_RESULT([EV_RECEIPT not available, no])
TRACEMODE_SUPPORT=0
])
fi
AC_SUBST(TRACEMODE_SUPPORT)
])