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