1/* d-system.h -- DMD frontend inclusion of gcc header files.
2 * Copyright (C) 2018-2020 Free Software Foundation, Inc.
3 *
4 * GCC is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 3, or (at your option)
7 * any later version.
8 *
9 * GCC is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with GCC; see the file COPYING3.  If not see
16 * <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef GCC_D_SYSTEM_H
20#define GCC_D_SYSTEM_H
21
22#include "config.h"
23#include "system.h"
24
25/* Used by the dmd front-end to determine if we have POSIX-style IO.  */
26#define POSIX (__linux__ || __GLIBC__ || __gnu_hurd__ || __APPLE__ \
27	       || __FreeBSD__ || __NetBSD__ || __OpenBSD__ || __DragonFly__ \
28	       || __sun || __unix__)
29
30/* Forward assert invariants to gcc_assert.  */
31#undef assert
32#define assert(EXPR) gcc_assert(EXPR)
33
34/* Use libiberty's lrealpath to avoid portability problems.  */
35#undef realpath
36#define realpath(a, b) lrealpath((a))
37
38/* Forward ctype.h macros used by the dmd front-end to safe-ctype.h.  */
39#undef isalpha
40#define isalpha(c) ISALPHA(c)
41#undef isalnum
42#define isalnum(c) ISALNUM(c)
43#undef isdigit
44#define isdigit(c) ISDIGIT(c)
45#undef islower
46#define islower(c) ISLOWER(c)
47#undef isprint
48#define isprint(c) ISPRINT(c)
49#undef isspace
50#define isspace(c) ISSPACE(c)
51#undef isupper
52#define isupper(c) ISUPPER(c)
53#undef isxdigit
54#define isxdigit(c) ISXDIGIT(c)
55#undef tolower
56#define tolower(c) TOLOWER(c)
57
58/* Forward _mkdir on MinGW to mkdir in system.h.  */
59#ifdef _WIN32
60#undef _mkdir
61#define _mkdir(p) mkdir(p, 0)
62#endif
63
64/* Define any missing _MAX and _MIN macros.  */
65#ifndef INT32_MAX
66# define INT32_MAX INTTYPE_MAXIMUM (int32_t)
67#endif
68#ifndef INT32_MIN
69# define INT32_MIN INTTYPE_MINIMUM (int32_t)
70#endif
71#ifndef INT64_MIN
72# define INT64_MIN INTTYPE_MINIMUM (int64_t)
73#endif
74#ifndef UINT32_MAX
75# define UINT32_MAX INTTYPE_MAXIMUM (uint32_t)
76#endif
77#ifndef UINT64_MAX
78# define UINT64_MAX INTTYPE_MAXIMUM (uint64_t)
79#endif
80
81#endif  /* GCC_D_SYSTEM_H  */
82