ecl/src/h/ecl.h
Daniel Kochmański 65da16bc7d process: abstract away create thread, exit thread and sigmask
Previously we've opencoded calls to these functions, although they may be nicely
abstracted with static inline functions. This change improves code readibility
and portability.
2026-04-19 19:54:36 +02:00

90 lines
2.2 KiB
C

/* -*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*- */
/* vim: set filetype=c tabstop=8 shiftwidth=4 expandtab: */
/*
* Copyright (c) 1984, Taiichi Yuasa and Masami Hagiya.
* Copyright (c) 1990, Giuseppe Attardi.
*
* See file 'LICENSE' for the copyright details.
*
*/
/* ecl.h -- Main headers for development of ECL */
#ifndef ECL_ECL_H
#define ECL_ECL_H
#include <sys/types.h> /* size_t, pthread_t, pthread_mutex_t */
#ifdef __OpenBSD__ /* same, but for OpenBSD (bug in OpenBSD!) */
# include <pthread.h>
#endif
#include <stddef.h> /* NULL, ptrdiff_t */
#include <stdarg.h> /* va_list */
#include <setjmp.h> /* setjmp and buffers */
#include <stdio.h> /* FILE */
#include <stdbool.h>
/* Microsoft VC++ does not have va_copy() */
#if ( defined(_MSC_VER) && (_MSC_VER < 1800) ) || !defined(va_copy)
#define va_copy(dst, src) \
((void) memcpy(&(dst), &(src), sizeof(va_list)))
#endif
#ifndef ECL_FIXNUM_BITS
#include <ecl/config.h>
#endif
#ifdef ECL_BUILD
#include <ecl/config-internal.h>
#endif
/*
* The Boehm-Demers-Weiser garbage collector contains wrappers for
* dlopen and similar functions. These wrappers explicitely deactivate
* garbage collection. Since we have explicitely deactivated scanning
* shared libraries (alloc_2.d), we can get rid of this performance
* penalty.
*/
#if defined(GBC_BOEHM_GENGC)
#ifdef dlopen
# undef dlopen
#endif
#ifdef dlclose
# undef dlclose
#endif
#endif
#if defined(ECL_MS_WINDOWS_HOST)
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN 1 /* Do not include winsock.h */
# include <windows.h>
# undef WIN32_LEAN_AND_MEAN
# else
# include <windows.h>
# endif
# ifdef ECL_THREADS
# undef ERROR
# ifdef GBC_BOEHM
# define CreateThread GC_CreateThread
# endif
# else
# error "The Windows ports cannot be built without threads."
# endif /* ECL_THREADS */
#endif /* ECL_MS_WINDOWS_HOST */
#ifdef ECL_SSE2
#include <xmmintrin.h>
#include <emmintrin.h>
#endif
#include <ecl/object.h>
#include <ecl/nucleus.h>
#include <ecl/external.h>
#include <ecl/cons.h>
#include <ecl/stacks.h>
#include <ecl/number.h>
#include <ecl/legacy.h>
#include <ecl/impl/math_fenv.h>
typedef void (*ecl_init_function_t)(cl_object block);
#endif /* ECL_H */