9a4d574b8d
* Makefile.in (DLL_OFILES): Add sigfe.o. Remove reliance on cygwin.def from cygwin0.dll dependency since dependence on sigfe.o implies that. Generate def file on the fly using 'gendef'. * configure.in: Don't auto-generate cygwin.def. * configure: Regenerate. * cygwin.din: Add SIGFE stuff where appropriate. * dcrt0.cc (dll_crt0_1): Initialize cygwin tls early in process startup. Set _main_tls to address of the main thread's cygwin tls. * debug.h: Remove now unneeded WFSO and WFMO declarations. * exceptions.cc (_last_thread): Define. (set_thread_state_for_signals): New function. (reset_thread_exception_for_signals): Ditto. (init_thread_for_signals): Ditto. (delete_thread_for_signals): Ditto. (capture_thread_for_signals): Ditto. (handle_exceptions): Set return address explicitly for exceptions prior to calling sig_send. (interrupt_on_return): Eliminate. (setup_handler): Add preliminary implementation for dealing with thread-specific signals by querying _main_tls. (signal_exit): Use cygthread::main_thread_id instead of mainthread.id. (call_signal_handler_now): For now, just handle the main thread. * fork.cc (vfork): Save and restore main _my_tls. * gendef: New file. Generates def file and sigfe.s file. * gentls_offsets: New file. Generates offsets for perl to use in sigfe.s. * how-signals-work.txt: Mention that info is obsolete. * init.cc (dll_entry): Initialize cygwin tls storage here. * miscfuncs.cc (low_priority_sleep): Make a C function for easier calling from asm. * perthread.h (vfork_save::tls): New element. * signal.cc (nanosleep): Replace previous use of sigframe.call_signal_handler_now with straight call to call_signal_handler_now. (abort): Ditto. * syscalls.cc (readv): Ditto. * termios.cc (tcsetattr): Ditto. * wait.cc (wait4): Ditto. * sigproc.cc (sig_dispatch_pending): Ditto. (sig_send): Ditto. * sigproc.h: Declare call_signal_handler_now. * thread.cc (pthread::thread_init_wrapper): Initialize cygwin tls. Remove obsolete and unworking signal stuff. * thread.h (verifyable_object::sigs): Eliminate. (verifyable_object::sigmask): Eliminate. (verifyable_object::sigtodo): Eliminate. (verifyable_object::exit): Make attribute noreturn. (verifyable_object::thread_init_wrapper): Ditto. (pthread_null::exit): Ditto. * winbase.h (__stackbase): Always define. * winsup.h (low_priority_sleep): Declare as a "C" function. * include/cygwin/version.h: Bump API version to reflect sigwait export. * include/sys/queue.h: Protect SLIST_ENTRY from previous declaration. * signal.cc (sigwait): Implement. * select.cc (fhandler_base::ready_for_read): Add debugging output. * devices.h: Define more device pointers via their storage. * devices.in: Don't parse things like /dev/inet/tcp, as they really have no meaning. * devices.cc: Regenerate. * gendevices: Set proper protection for output file. * cygtls.h: New file. * gendef: New file. * gentls_offsets: New file. * tlsoffsets.h: New file. Autogenerated. * config/i386/longjmp.c: Remove. File subsumed by gendef output. * config/i386/makefrag: Remove obsolete file. * fhandler.cc: Remove spurious access_worker declaration. * spawn.cc (spawnve): Make debugging output more accurate. * cygwin-gperf: Remove. * devices.cc: Remove.
201 lines
4.8 KiB
Plaintext
201 lines
4.8 KiB
Plaintext
dnl Autoconf configure script for Cygwin.
|
|
dnl Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003 Red Hat, Inc.
|
|
dnl
|
|
dnl This file is part of Cygwin.
|
|
dnl
|
|
dnl This software is a copyrighted work licensed under the terms of the
|
|
dnl Cygwin license. Please consult the file "CYGWIN_LICENSE" for
|
|
dnl details.
|
|
dnl
|
|
dnl Process this file with autoconf to produce a configure script.
|
|
|
|
AC_PREREQ(2.12)dnl
|
|
AC_INIT(init.cc)
|
|
AC_CONFIG_HEADER(config.h)
|
|
|
|
INSTALL="/bin/sh "`cd $srcdir/../..; echo $(pwd)/install-sh -c`
|
|
|
|
AC_PROG_INSTALL
|
|
|
|
dnl FIXME: We temporarily define our own version of AC_PROG_CC. This is
|
|
dnl copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
|
|
dnl are probably using a cross compiler, which will not be able to fully
|
|
dnl link an executable. This should really be fixed in autoconf
|
|
dnl itself.
|
|
|
|
AC_DEFUN(LIB_AC_PROG_CC,
|
|
[AC_BEFORE([$0], [AC_PROG_CPP])dnl
|
|
AC_CHECK_TOOL(CC, gcc, gcc)
|
|
if test -z "$CC"; then
|
|
AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
|
|
test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
|
|
fi
|
|
|
|
AC_PROG_CC_GNU
|
|
|
|
if test $ac_cv_prog_gcc = yes; then
|
|
GCC=yes
|
|
dnl Check whether -g works, even if CFLAGS is set, in case the package
|
|
dnl plays around with CFLAGS (such as to build both debugging and
|
|
dnl normal versions of a library), tasteless as that idea is.
|
|
ac_test_CFLAGS="${CFLAGS+set}"
|
|
ac_save_CFLAGS="$CFLAGS"
|
|
CFLAGS=
|
|
AC_PROG_CC_G
|
|
if test "$ac_test_CFLAGS" = set; then
|
|
CFLAGS="$ac_save_CFLAGS"
|
|
elif test $ac_cv_prog_cc_g = yes; then
|
|
CFLAGS="-gstabs+ -O2"
|
|
else
|
|
CFLAGS="-O2"
|
|
fi
|
|
else
|
|
GCC=
|
|
test "${CFLAGS+set}" = set || CFLAGS="-g"
|
|
fi
|
|
])
|
|
|
|
AC_DEFUN(LIB_AC_PROG_CXX,
|
|
[AC_BEFORE([$0], [AC_PROG_CPP])dnl
|
|
AC_CHECK_TOOL(CXX, g++, g++)
|
|
if test -z "$CXX"; then
|
|
AC_CHECK_PROG(CXX, c++, c++, , , )
|
|
test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
|
|
fi
|
|
|
|
CXXFLAGS='$(CFLAGS)'
|
|
])
|
|
|
|
AC_CANONICAL_SYSTEM
|
|
|
|
LIB_AC_PROG_CC
|
|
LIB_AC_PROG_CXX
|
|
|
|
case "$with_cross_host" in
|
|
""|*cygwin*)
|
|
all_host="all_host"
|
|
install_host="install_host"
|
|
LIBSERVER='$(bupdir)/cygserver/libcygserver.a'
|
|
;;
|
|
*)
|
|
all_host=
|
|
install_host=
|
|
LIBSERVER=
|
|
;;
|
|
esac
|
|
|
|
test -n "$LIBSERVER" && AC_DEFINE(USE_SERVER)
|
|
|
|
AC_SUBST(all_host)
|
|
AC_SUBST(install_host)
|
|
|
|
AC_CHECK_TOOL(AR, ar, ar)
|
|
AC_CHECK_TOOL(AS, as, as)
|
|
AC_CHECK_TOOL(RANLIB, ranlib, ranlib)
|
|
AC_CHECK_TOOL(LD, ld, ld)
|
|
AC_CHECK_TOOL(NM, nm, nm)
|
|
AC_CHECK_TOOL(DLLTOOL, dlltool, dlltool)
|
|
AC_CHECK_TOOL(WINDRES, windres, windres)
|
|
|
|
AC_ALLOCA
|
|
AC_PROG_MAKE_SET
|
|
|
|
dnl check whether gcc supports __builtin_memset.
|
|
# Test for builtin mem* functions.
|
|
AC_LANG_SAVE
|
|
AC_LANG_CPLUSPLUS
|
|
AC_TRY_COMPILE([
|
|
#include <string.h>
|
|
void foo(char *s, int c, size_t n)
|
|
{
|
|
__builtin_memset(s, c, n);
|
|
}
|
|
], [ ],
|
|
use_builtin_memset=yes, use_builtin_memset=no)
|
|
if test $use_builtin_memset = "yes"; then
|
|
AC_DEFINE(HAVE_BUILTIN_MEMSET)
|
|
fi
|
|
AC_LANG_RESTORE
|
|
|
|
AC_ARG_ENABLE(extra-threadsafe-checking,
|
|
[ --enable-extra-threadsafe-checking Build a cygwin DLL which is thread safe with extra consistency checking],
|
|
[case "${enableval}" in
|
|
yes)
|
|
mt_safe_val=1
|
|
MT_SAFE=yes
|
|
AC_DEFINE(_CYG_THREAD_FAILSAFE)
|
|
;;
|
|
no)
|
|
dnl Don't do anything here to avoid overriding --enable-threadsafe.
|
|
;;
|
|
esac
|
|
])
|
|
|
|
AC_ARG_ENABLE(debugging,
|
|
[ --enable-debugging Build a cygwin DLL which has more consistency checking for debugging],
|
|
[case "${enableval}" in
|
|
yes) AC_DEFINE(DEBUGGING) ;;
|
|
no) ;;
|
|
esac
|
|
])
|
|
|
|
AC_ARG_ENABLE(server,
|
|
[ --enable-server Build a cygwin DLL which can communicate with cygserver],
|
|
[case "${enableval}" in
|
|
yes) ;;
|
|
no) LIBSERVER=;;
|
|
esac
|
|
])
|
|
|
|
MALLOC_OFILES=malloc.o
|
|
AC_ARG_ENABLE(malloc-debugging,
|
|
[ --enable-malloc-debugging Build a cygwin DLL with heap sanity checking (this is very slow, use only if you have heap corruption problems)],
|
|
[case "${enableval}" in
|
|
yes) AC_DEFINE(MALLOC_DEBUG)
|
|
MALLOC_OFILES=dlmalloc.o
|
|
;;
|
|
no) ;;
|
|
esac
|
|
])
|
|
|
|
AC_ARG_ENABLE(vfork,
|
|
[ --enable-vfork Build a cygwin DLL which uses experimental vfork code],
|
|
vfork="${enableval}"
|
|
])
|
|
|
|
case "$vfork" in
|
|
no) ;;
|
|
yes|*) AC_DEFINE_UNQUOTED(NEWVFORK) ;;
|
|
esac
|
|
|
|
dnl The only time we might want to transform the install names
|
|
dnl is for unix x cygwin. Otherwise we don't. For now we don't
|
|
dnl transform names.
|
|
|
|
dnl if test "x$cross_compiling" = "xno" -a ; then
|
|
dnl if test "x$program_transform_name" = "xs,x,x,"; then
|
|
dnl program_transform_name=""
|
|
dnl fi
|
|
dnl if test "x$program_transform_name" = "x"; then
|
|
dnl program_transform_name="s,^,$target_alias-,"
|
|
dnl else
|
|
dnl program_transform_name="$program_transform_name -e s,^,$target_alias-,"
|
|
dnl fi
|
|
dnl fi
|
|
|
|
case "$target_cpu" in
|
|
i?86) DLL_ENTRY="_dll_entry@12"
|
|
DEF_DLL_ENTRY="dll_entry@12"
|
|
ALLOCA="_alloca"
|
|
CONFIG_DIR="i386" ;;
|
|
*) AC_MSG_ERROR(Invalid target processor \"$target_cpu\") ;;
|
|
esac
|
|
|
|
AC_SUBST(MALLOC_OFILES)
|
|
AC_SUBST(LIBSERVER)
|
|
AC_SUBST(DLL_ENTRY)
|
|
AC_SUBST(DEF_DLL_ENTRY)
|
|
AC_SUBST(ALLOCA)
|
|
AC_SUBST(CONFIG_DIR)
|
|
AC_OUTPUT(Makefile)
|