aboutsummaryrefslogtreecommitdiff
path: root/REORG.TODO/sysdeps/mach/configure.ac
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2017-06-08 15:39:03 -0400
committerZack Weinberg <zackw@panix.com>2017-06-08 15:39:03 -0400
commit5046dbb4a7eba5eccfd258f92f4735c9ffc8d069 (patch)
tree4470480d904b65cf14ca524f96f79eca818c3eaf /REORG.TODO/sysdeps/mach/configure.ac
parent199fc19d3aaaf57944ef036e15904febe877fc93 (diff)
downloadglibc-5046dbb4a7eba5eccfd258f92f4735c9ffc8d069.tar
glibc-5046dbb4a7eba5eccfd258f92f4735c9ffc8d069.tar.gz
glibc-5046dbb4a7eba5eccfd258f92f4735c9ffc8d069.tar.bz2
glibc-5046dbb4a7eba5eccfd258f92f4735c9ffc8d069.zip
Prepare for radical source tree reorganization.zack/build-layout-experiment
All top-level files and directories are moved into a temporary storage directory, REORG.TODO, except for files that will certainly still exist in their current form at top level when we're done (COPYING, COPYING.LIB, LICENSES, NEWS, README), all old ChangeLog files (which are moved to the new directory OldChangeLogs, instead), and the generated file INSTALL (which is just deleted; in the new order, there will be no generated files checked into version control).
Diffstat (limited to 'REORG.TODO/sysdeps/mach/configure.ac')
-rw-r--r--REORG.TODO/sysdeps/mach/configure.ac135
1 files changed, 135 insertions, 0 deletions
diff --git a/REORG.TODO/sysdeps/mach/configure.ac b/REORG.TODO/sysdeps/mach/configure.ac
new file mode 100644
index 0000000000..3033fec946
--- /dev/null
+++ b/REORG.TODO/sysdeps/mach/configure.ac
@@ -0,0 +1,135 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+
+AC_CHECK_TOOL(MIG, mig, MISSING)
+if test "x$MIG" = xMISSING; then
+ AC_MSG_ERROR([cannot find required build tool mig])
+fi
+LIBC_CONFIG_VAR([MIG], [$MIG])
+
+if test -n "$sysheaders"; then
+ OLD_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $SYSINCLUDES"
+fi
+
+### Sanity checks for Mach header installation
+AC_CHECK_HEADER(mach/mach_types.h,,
+ [AC_MSG_ERROR([cannot find Mach headers])], -)
+AC_CHECK_HEADER(mach/mach_types.defs,, [dnl
+AC_MSG_ERROR([cannot find Mach .defs files])], -)
+
+dnl
+dnl mach_TYPE_CHECK(foo_t, bar_t)
+dnl
+dnl Check if foo_t is defined by <mach/mach_types.h>.
+dnl If not, compile with -Dfoo_t=bar_t.
+dnl
+AC_DEFUN([mach_TYPE_CHECK], [dnl
+AC_CACHE_CHECK(for $1 in mach/mach_types.h, libc_cv_mach_$1,
+AC_TRY_COMPILE([#include <mach/mach_types.h>], [extern $1 foo;],
+libc_cv_mach_$1=$1, libc_cv_mach_$1=$2))
+if test [$]libc_cv_mach_$1 != $1; then
+ DEFINES="$DEFINES -D$1=$2"
+fi])
+
+dnl
+dnl OSF Mach has renamed these typedefs for some reason.
+dnl
+mach_TYPE_CHECK(task_t, task_port_t)
+mach_TYPE_CHECK(thread_t, thread_port_t)
+
+dnl
+dnl The creation_time field is a GNU Mach addition the other variants lack.
+dnl
+AC_CACHE_CHECK(for creation_time in task_basic_info,
+ libc_cv_mach_task_creation_time, [dnl
+AC_TRY_COMPILE([#include <mach/task_info.h>], [
+extern struct task_basic_info *i;
+long s = i->creation_time.seconds;
+], libc_cv_mach_task_creation_time=yes, libc_cv_mach_task_creation_time=no)])
+if test $libc_cv_mach_task_creation_time = no; then
+ AC_MSG_ERROR([you need Mach headers supporting task_info.creation_time])
+fi
+
+dnl
+dnl The Darwin variant no longer has <mach/mach.defs>
+dnl but instead has several constituent .defs files.
+dnl In this scenario we will presume there is a <mach/mach_interface.h>
+dnl that contains an #include for each constituent header file,
+dnl but we don't do a check for that here because in a bare
+dnl environment the compile against those headers will fail.
+dnl
+mach_interface_list=
+for ifc in mach mach4 \
+ clock clock_priv host_priv host_security ledger lock_set \
+ processor processor_set task task_notify thread_act vm_map \
+ memory_object memory_object_default default_pager \
+ i386/mach_i386 \
+ ; do
+ AC_CHECK_HEADER(mach/${ifc}.defs, [dnl
+ mach_interface_list="$mach_interface_list $ifc"],, -)
+done
+if test "x$mach_interface_list" = x; then
+ AC_MSG_ERROR([what manner of Mach is this?])
+fi
+
+AC_CACHE_CHECK(for host_page_size in mach_host.defs,
+ libc_cv_mach_host_page_size, [dnl
+AC_EGREP_HEADER(host_page_size, mach/mach_host.defs,
+ libc_cv_mach_host_page_size=yes,
+ libc_cv_mach_host_page_size=no)])
+if test $libc_cv_mach_host_page_size = yes; then
+ AC_DEFINE([HAVE_HOST_PAGE_SIZE])
+fi
+
+AC_CHECK_HEADER(mach/machine/ndr_def.h, [dnl
+ DEFINES="$DEFINES -DNDR_DEF_HEADER='<mach/machine/ndr_def.h>'"], [dnl
+AC_CHECK_HEADER(machine/ndr_def.h, [dnl
+ DEFINES="$DEFINES -DNDR_DEF_HEADER='<machine/ndr_def.h>'"],, -)], -)
+
+AC_CACHE_CHECK(for i386_io_perm_modify in mach_i386.defs,
+ libc_cv_mach_i386_ioports, [dnl
+AC_EGREP_HEADER(i386_io_perm_modify, mach/i386/mach_i386.defs,
+ libc_cv_mach_i386_ioports=yes,
+ libc_cv_mach_i386_ioports=no)])
+if test $libc_cv_mach_i386_ioports = yes; then
+ AC_DEFINE([HAVE_I386_IO_PERM_MODIFY])
+fi
+
+AC_CACHE_CHECK(for i386_set_gdt in mach_i386.defs,
+ libc_cv_mach_i386_gdt, [dnl
+AC_EGREP_HEADER(i386_set_gdt, mach/i386/mach_i386.defs,
+ libc_cv_mach_i386_gdt=yes,
+ libc_cv_mach_i386_gdt=no)])
+if test $libc_cv_mach_i386_gdt = yes; then
+ AC_DEFINE([HAVE_I386_SET_GDT])
+fi
+
+dnl Swiped from hurd/aclocal.m4
+AC_DEFUN([hurd_MIG_RETCODE], [dnl
+# See if mig groks `retcode'.
+AC_CACHE_CHECK(whether $MIG supports the retcode keyword, hurd_cv_mig_retcode,
+[cat > conftest.defs <<\EOF
+#include <mach/std_types.defs>
+#include <mach/mach_types.defs>
+subsystem foobar 1000;
+type reply_port_t = polymorphic | MACH_MSG_TYPE_PORT_SEND_ONCE
+ ctype: mach_port_t;
+simpleroutine foobar_reply (
+ reply_port: reply_port_t;
+ err: kern_return_t, RetCode);
+EOF
+if AC_TRY_COMMAND([CC="${CC}" ${MIG-false} -n conftest.defs 1>&AS_MESSAGE_LOG_FD]); then
+ hurd_cv_mig_retcode=yes
+else
+ hurd_cv_mig_retcode=no
+fi
+rm -f conftest*])
+if test $hurd_cv_mig_retcode = yes; then
+ AC_DEFINE(HAVE_MIG_RETCODE)
+fi])
+
+hurd_MIG_RETCODE
+
+if test -n "$sysheaders"; then
+ CPPFLAGS=$OLD_CPPFLAGS
+fi