// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef _LIBCPP___CXX03_CSIGNAL
#define _LIBCPP___CXX03_CSIGNAL

/*
    csignal synopsis

Macros:

    SIG_DFL
    SIG_ERR
    SIG_IGN
    SIGABRT
    SIGFPE
    SIGILL
    SIGINT
    SIGSEGV
    SIGTERM

namespace std
{

Types:

    sig_atomic_t

void (*signal(int sig, void (*func)(int)))(int);
int raise(int sig);

}  // std

*/

#include <__cxx03/__config>

// <signal.h> is not provided by libc++
#if __has_include(<signal.h>)
#  include <signal.h>
#  ifdef _LIBCPP___CXX03_SIGNAL_H
#    error "If libc++ starts defining <signal.h>, the __has_include check should move to libc++'s <signal.h>"
#  endif
#endif

#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#  pragma GCC system_header
#endif

_LIBCPP_BEGIN_NAMESPACE_STD

using ::sig_atomic_t _LIBCPP_USING_IF_EXISTS;
using ::signal _LIBCPP_USING_IF_EXISTS;
using ::raise _LIBCPP_USING_IF_EXISTS;

_LIBCPP_END_NAMESPACE_STD

#endif // _LIBCPP___CXX03_CSIGNAL
