|
|
1.1 root 1: #
2: # nono
3: # Copyright (C) 2018 [email protected]
4: #
5:
6: AC_PREREQ([2.69])
7: AC_INIT([mm], [0.0], [])
8: AC_CONFIG_SRCDIR(wx/wxapp.cpp)
9:
10: # Checks for programs.
11: AC_PROG_CXX
12: AC_PROG_CC
13: AC_LANG_CPLUSPLUS
14: AC_C_BIGENDIAN
15:
16: # -Wlogical-op は clang にはない
17: AC_MSG_CHECKING(whether the compiler accepts -Wlogical-op)
18: old_CXXFLAGS="${CXXFLAGS}"
19: CXXFLAGS="${CXXFLAGS} -Werror -Wlogical-op"
20: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
21: AC_MSG_RESULT([yes])
22: CFLAGS_WLOGICAL_OP="-Wlogical-op",
23: AC_MSG_RESULT([no]))
24: AC_SUBST([CFLAGS_WLOGICAL_OP])
25: CXXFLAGS="${old_CXXFLAGS}"
26:
27: # Checks for libraries.
28:
29: # Checks for header files.
30: AC_CHECK_HEADERS([bsd/bsd.h])
31: AC_CHECK_HEADERS([endian.h])
32: AC_CHECK_HEADERS([kqueue/sys/event.h])
33: AC_CHECK_HEADERS([sys/endian.h])
34: AC_CHECK_HEADERS([sys/event.h])
35: AC_CHECK_HEADERS([net/bpf.h])
36: AC_CHECK_HEADERS([net/if_tap.h])
37: AC_CHECK_HEADERS([linux/if_tun.h])
38:
39: # Linux で <kqueue/sys/event.h> がなければここで停止したほうがいい
40: if test "$ac_cv_header_sys_event_h" != "yes" \
41: -a "$ac_cv_header_kqueue_sys_event_h" != "yes"; then
42: AC_MSG_ERROR([*** kqueue is not found.
43: On Ubuntu, sudo apt install libkqueue-dev])
44: fi
45:
46: # Checks for typedefs, structures, and compiler characteristics.
47: AC_CHECK_HEADER_STDBOOL
48: #AC_C_INLINE
49: #AC_TYPE_INT16_T
50: #AC_TYPE_INT32_T
51: #AC_TYPE_INT64_T
52: #AC_TYPE_INT8_T
53: #AC_TYPE_SIZE_T
54: #AC_TYPE_UINT16_T
55: #AC_TYPE_UINT32_T
56: #AC_TYPE_UINT64_T
57: #AC_TYPE_UINT8_T
58:
59: # struct kevent のメンバ udata の型が互換性なく違う。
60: # NetBSD では intptr_t(整数) だが、OSX では void* (ポインタ) なので、
61: # 同一ソースコードでは回避できない。
62: # Linux(Ubuntu) はどっちもパスするので後ろの void * のほうが使われる。
63: # まあパスするんならどっちでもいいか。
64: AC_MSG_CHECKING(whether kevent.udata is intptr_t)
65: old_CXXFLAGS="${CXXFLAGS}"
66: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
67: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
68: [
69: #include "confdefs.h"
70: #if defined(HAVE_SYS_EVENT_H)
71: #include <sys/event.h>
72: #endif
73: #if defined(HAVE_KQUEUE_SYS_EVENT_H)
74: #include <kqueue/sys/event.h>
75: #endif
76: ], [
77: struct kevent kev;
78: kev.udata = (intptr_t)0;
79: (void)kev;
80: ])],
81: AC_MSG_RESULT([yes])
82: AC_SUBST([KEVENT_UDATA_T], [intptr_t]),
83: AC_MSG_RESULT([no]))
84: CXXFLAGS="${old_CXXFLAGS}"
85:
86: AC_MSG_CHECKING(whether kevent.udata is void *)
87: old_CXXFLAGS="${CXXFLAGS}"
88: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
89: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
90: [
91: #include "confdefs.h"
92: #if defined(HAVE_SYS_EVENT_H)
93: #include <sys/event.h>
94: #endif
95: #if defined(HAVE_KQUEUE_SYS_EVENT_H)
96: #include <kqueue/sys/event.h>
97: #endif
98: ], [
99: struct kevent kev;
100: kev.udata = (void *)0;
101: (void)kev;
102: ])],
103: AC_MSG_RESULT([yes])
104: AC_SUBST([KEVENT_UDATA_T], ['void *']),
105: AC_MSG_RESULT([no]))
106: CXXFLAGS="${old_CXXFLAGS}"
107:
108: if test -z "$KEVENT_UDATA_T" ; then
109: AC_MSG_ERROR([kevent.udata is unknown type])
110: fi
111:
112: AC_MSG_CHECKING(for __builtin_assume)
113: AC_TRY_COMPILE(,
114: [
115: __builtin_assume(1);
116: ],
117: AC_MSG_RESULT([yes])
118: AC_DEFINE([HAVE___BUILTIN_ASSUME]),
119: AC_MSG_RESULT([no]))
120:
121: AC_MSG_CHECKING(for __builtin_bswap16)
122: AC_TRY_COMPILE(,
123: [
124: return __builtin_bswap16(0);
125: ],
126: AC_MSG_RESULT([yes])
127: AC_DEFINE([HAVE___BUILTIN_BSWAP16]),
128: AC_MSG_RESULT([no]))
129:
130: AC_MSG_CHECKING(for __builtin_bswap32)
131: AC_TRY_COMPILE(,
132: [
133: return __builtin_bswap32(0);
134: ],
135: AC_MSG_RESULT([yes])
136: AC_DEFINE([HAVE___BUILTIN_BSWAP32]),
137: AC_MSG_RESULT([no]))
138:
139: AC_MSG_CHECKING(for __builtin_expect)
140: AC_TRY_COMPILE(,
141: [
142: if (__builtin_expect(1, 1)) return 0;
143: ],
144: AC_MSG_RESULT([yes])
145: AC_DEFINE([HAVE___BUILTIN_EXPECT]),
146: AC_MSG_RESULT([no]))
147:
148: AC_MSG_CHECKING(for __builtin_unreachable)
149: AC_TRY_COMPILE(,
150: [
151: __builtin_unreachable();
152: ],
153: AC_MSG_RESULT([yes])
154: AC_DEFINE([HAVE___BUILTIN_UNREACHABLE]),
155: AC_MSG_RESULT([no]))
156:
157: AC_MSG_CHECKING(for __attribute__((__fallthrough__)))
158: old_CXXFLAGS="${CXXFLAGS}"
159: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
160: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
161: [], [
162: extern int x;
163: switch (x) {
164: case 0:
165: __attribute__((__fallthrough__));
166: case 1:
167: break;
168: }
169: ])],
170: AC_MSG_RESULT([yes])
171: AC_DEFINE([HAVE___ATTRIBUTE_FALLTHROUGH]),
172: AC_MSG_RESULT([no]))
173: CXXFLAGS="${old_CXXFLAGS}"
174:
175: dnl とりあえず __format__ までしか調べてないので、
176: dnl その中の __printf__ とかまで調べる必要ができたら直すこと。
177: AC_MSG_CHECKING(for __attribute__((__format__)))
178: old_CXXFLAGS="${CXXFLAGS}"
179: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
180: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
181: [
182: extern int f(const char *f, ...)
183: __attribute__((__format__(__printf__, 1, 2)));
184: ], [
185: ])],
186: AC_MSG_RESULT([yes])
187: AC_DEFINE([HAVE___ATTRIBUTE_FORMAT]),
188: AC_MSG_RESULT([no]))
189: CXXFLAGS="${old_CXXFLAGS}"
190:
191: AC_MSG_CHECKING(for __attribute__((no_sanitize)))
192: old_CXXFLAGS="${CXXFLAGS}"
193: CXXFLAGS="${CXXFLAGS} -Werror"
194: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
195: [
196: __attribute__((no_sanitize("undefined")))
197: int func() { return 0; }
198: ], [
199: ])],
200: AC_MSG_RESULT([yes])
201: AC_DEFINE([HAVE___ATTRIBUTE_NO_SANITIZE]),
202: AC_MSG_RESULT([no]))
203: CXXFLAGS="${old_CXXFLAGS}"
204:
205:
206: AC_MSG_CHECKING(for __attribute__((__packed__)))
207: old_CXXFLAGS="${CXXFLAGS}"
208: CXXFLAGS="${CXXFLAGS} -Werror"
209: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
210: [], [
211: struct x { char a; int b; } __attribute__((__packed__));
212: ])],
213: AC_MSG_RESULT([yes])
214: AC_DEFINE([HAVE___ATTRIBUTE_PACKED]),
215: AC_MSG_RESULT([no]))
216: CXXFLAGS="${old_CXXFLAGS}"
217:
218: AC_MSG_CHECKING(for __attribute__((__unused__)))
219: old_CXXFLAGS="${CXXFLAGS}"
220: CXXFLAGS="${CXXFLAGS} -Wunused-variable -Werror"
221: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
222: [], [
223: int a __attribute__((__unused__));
224: ])],
225: AC_MSG_RESULT([yes])
226: AC_DEFINE([HAVE___ATTRIBUTE_UNUSED]),
227: AC_MSG_RESULT([no]))
228: CXXFLAGS="${old_CXXFLAGS}"
229:
230: # Checks for library functions.
231: #AC_FUNC_MALLOC
232: #AC_FUNC_MMAP
233:
234: AC_MSG_CHECKING(for pthread_setname_np(name))
235: AC_TRY_COMPILE([#include <pthread.h>],
236: [
237: pthread_setname_np("");
238: ],
239: AC_MSG_RESULT([yes])
240: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], 1),
241: AC_MSG_RESULT([no]))
242:
243: AC_MSG_CHECKING(for pthread_setname_np(thread, name))
244: AC_TRY_COMPILE([#include <pthread.h>],
245: [
246: pthread_setname_np(pthread_self(), "");
247: ],
248: AC_MSG_RESULT([yes])
249: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], 2),
250: AC_MSG_RESULT([no]))
251:
252: AC_MSG_CHECKING(for pthread_setname_np(thread, name, arg))
253: AC_TRY_COMPILE([#include <pthread.h>],
254: [
255: pthread_setname_np(pthread_self(), "", (void*)0);
256: ],
257: AC_MSG_RESULT([yes])
258: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], 3),
259: AC_MSG_RESULT([no]))
260:
261: # Select host network driver.
262: AC_MSG_CHECKING(for suitable host network driver)
263: if test x"$ac_cv_header_net_if_tap_h" = xyes; then
264: netdriver=tap
265: elif test x"$ac_cv_header_linux_if_tun_h" = xyes; then
266: netdriver=tap
267: elif test x"$ac_cv_header_net_bpf_h" = xyes; then
268: netdriver=bpf
269: else
270: netdriver=none
271: fi
272: AC_MSG_RESULT([$netdriver])
273: AC_SUBST([NETDRIVER], [$netdriver])
274:
275: # libbsd on Linux
276: AC_CHECK_LIB(bsd, getprogname,
277: AC_SUBST([LIBBSD_LIBS], [-lbsd]),
278: )
279:
280: # libkqueue on Linux
281: AC_CHECK_LIB(kqueue, kqueue,
282: AC_SUBST([LIBKQUEUE_LIBS], [-lkqueue]),
283: )
284:
285: # wxWidgets
286: AC_MSG_CHECKING(for wx-config)
287: wxconfig=""
288: for c in wx-config-3.0 wx-config; do
289: ver=`$c --version 2>&1 | cut -f 1 -d .`
290: if test "$ver" = "3"; then
291: wxconfig=$c
292: break
293: fi
294: done
295: if test -z "$wxconfig"; then
296: AC_MSG_RESULT([no])
297: else
298: AC_MSG_RESULT([$wxconfig])
299:
300: AC_MSG_CHECKING(for wxWidgets version)
301: wxversion=`$wxconfig --version`
302: AC_MSG_RESULT([$wxversion])
303:
304: wxcppflags=`$wxconfig --cppflags`
305: wxlibs=`$wxconfig --libs`
306:
307: # XXX NetBSD の rpath。どうしたもんだかこれ
308: if test "`uname -s`" = "NetBSD"; then
309: wxlibs=[`echo $wxlibs | sed -e 's/-L\([^ ]*\) /-L\1 -Wl,-R,\1 /'`]
310: fi
311:
312: # XXX OSX の -framework AudioToolbox が指定されているとリンカがこけるorz
313: if test "`uname -s`" = "Darwin"; then
314: wxlibs=[`echo $wxlibs | sed -e 's/-framework AudioToolbox//'`]
315: fi
316:
317: AC_SUBST([WXWIDGETS_CPPFLAGS], [$wxcppflags])
318: AC_SUBST([WXWIDGETS_LIBS], [$wxlibs])
319: fi
320:
321: AC_CONFIG_FILES([Makefile.cfg
322: host/Makefile
323: lib/Makefile
324: wx/Makefile
325: util/mkcgrom/Makefile
326: util/viewcgrom/Makefile
327: ])
328: AC_CONFIG_HEADERS([config.h])
329: AC_OUTPUT
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.