|
|
1.1 root 1: #
2: # nono
1.1.1.3 root 3: # Copyright (C) 2020 nono project
4: # Licensed under nono-license.txt
1.1 root 5: #
6:
7: AC_PREREQ([2.69])
1.1.1.3 root 8: AC_INIT([nono], [0.0], [])
1.1 root 9: AC_CONFIG_SRCDIR(wx/wxapp.cpp)
1.1.1.6 root 10: AC_CONFIG_AUX_DIR([scripts])
1.1 root 11:
12: # Checks for programs.
13: AC_PROG_CXX
14: AC_PROG_CC
1.1.1.3 root 15: AC_PROG_INSTALL
1.1 root 16: AC_C_BIGENDIAN
17:
1.1.1.6 root 18: # OS
19: AC_CANONICAL_HOST
20: AC_SUBST([host_cpu])
21:
1.1.1.4 root 22: # コンパイラをチェック。今のところ clang/gcc のみ。
23: # (autoconf がやってる gcc かどうかのチェックは clang を検出できず使えない)
24: AC_MSG_CHECKING(for compiler)
25: if test -n "`${CC} -v 2>&1 | grep clang`" ; then
26: AC_MSG_RESULT([clang])
27: COMPILER=CLANG
28: elif test -n "`${CC} -v 2>&1 | grep GCC`"; then
29: AC_MSG_RESULT([gcc])
30: COMPILER=GCC
31: else
32: AC_MSG_RESULT([unknown])
33: COMPILER=
34: fi
35: AC_SUBST([COMPILER])
36:
1.1.1.3 root 37: # C++ のバージョンをチェック
38: CXX_STD=-std=c++14
39: AC_LANG_PUSH([C++])
40: AC_MSG_CHECKING(for ${CXX_STD})
1.1 root 41: old_CXXFLAGS="${CXXFLAGS}"
1.1.1.3 root 42: CXXFLAGS="${CXX_STD} ${CXXFLAGS}"
1.1 root 43: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
1.1.1.3 root 44: AC_MSG_RESULT([yes]),
45: AC_MSG_ERROR("*** C++ compiler '${CXX}' doesn't support ${CXX_STD}."))
1.1 root 46: CXXFLAGS="${old_CXXFLAGS}"
1.1.1.3 root 47: CXX="${CXX} ${CXX_STD}"
48: AC_LANG_POP([C++])
49:
50: # C コンパイラのワーニングオプション
51: AC_LANG_PUSH([C])
1.1.1.4 root 52: AC_DEFUN([ADD_CC_WARN_IF],[
1.1.1.3 root 53: AC_MSG_CHECKING([whether cc accepts $1])
54: old_CFLAGS="${CFLAGS}"
55: CFLAGS="${CFLAGS} -Werror $1"
56: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
57: AC_MSG_RESULT([yes])
58: WARNFLAGS_C="${WARNFLAGS_C} $1",
59: AC_MSG_RESULT([no]))
60: CFLAGS="${old_CFLAGS}"
61: ])
1.1.1.4 root 62: ADD_CC_WARN_IF(-Wcast-qual)
63: ADD_CC_WARN_IF(-Wextra-semi)
64: ADD_CC_WARN_IF(-Wlogical-op)
65: ADD_CC_WARN_IF(-Wmissing-prototypes)
66: ADD_CC_WARN_IF(-Wmissing-variable-declarations)
1.1.1.3 root 67: AC_LANG_POP([C])
68: AC_SUBST([WARNFLAGS_C])
69:
70: # C++ コンパイラのワーニングオプション
71: # (AC_LANG は C++ のまま継続する)
72: AC_LANG_CPLUSPLUS
1.1.1.4 root 73: AC_DEFUN([ADD_CXX_WARN_IF],[
1.1.1.3 root 74: AC_MSG_CHECKING([whether c++ accepts $1])
75: old_CXXFLAGS="${CXXFLAGS}"
76: CXXFLAGS="${CXXFLAGS} -Werror $1"
77: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
78: AC_MSG_RESULT([yes])
79: WARNFLAGS_CXX="${WARNFLAGS_CXX} $1",
80: AC_MSG_RESULT([no]))
81: CXXFLAGS="${old_CXXFLAGS}"
82: ])
1.1.1.4 root 83: ADD_CXX_WARN_IF(-Wcast-qual)
84: ADD_CXX_WARN_IF(-Wextra-semi)
85: ADD_CXX_WARN_IF(-Winconsistent-missing-override)
86: ADD_CXX_WARN_IF(-Winconsistent-missing-destructor-override)
87: ADD_CXX_WARN_IF(-Wlogical-op)
88: ADD_CXX_WARN_IF(-Wmissing-prototypes)
89: ADD_CXX_WARN_IF(-Wmissing-variable-declarations)
90: ADD_CXX_WARN_IF(-Wvla-extension)
1.1.1.3 root 91: AC_SUBST([WARNFLAGS_CXX])
1.1 root 92:
93: # Checks for libraries.
94:
95: # Checks for header files.
96: AC_CHECK_HEADERS([bsd/bsd.h])
97: AC_CHECK_HEADERS([endian.h])
1.1.1.2 root 98: AC_CHECK_HEADERS([histedit.h])
1.1 root 99: AC_CHECK_HEADERS([kqueue/sys/event.h])
1.1.1.3 root 100: AC_CHECK_HEADERS([pthread_np.h])
1.1 root 101: AC_CHECK_HEADERS([sys/endian.h])
102: AC_CHECK_HEADERS([sys/event.h])
103: AC_CHECK_HEADERS([net/bpf.h])
104: AC_CHECK_HEADERS([net/if_tap.h])
105: AC_CHECK_HEADERS([linux/if_tun.h])
106:
107: # Linux で <kqueue/sys/event.h> がなければここで停止したほうがいい
1.1.1.6 root 108: case "${host_os}" in
109: linux*)
110: if test "$ac_cv_header_kqueue_sys_event_h" != "yes"; then
111: AC_MSG_ERROR([*** kqueue is not found.
1.1.1.7 root 112: *** If you use Ubuntu, sudo apt install libkqueue-dev])
1.1.1.6 root 113: fi
114: ;;
115: esac
1.1 root 116:
117: # Checks for typedefs, structures, and compiler characteristics.
118: AC_CHECK_HEADER_STDBOOL
119: #AC_C_INLINE
120: #AC_TYPE_INT16_T
121: #AC_TYPE_INT32_T
122: #AC_TYPE_INT64_T
123: #AC_TYPE_INT8_T
124: #AC_TYPE_SIZE_T
125: #AC_TYPE_UINT16_T
126: #AC_TYPE_UINT32_T
127: #AC_TYPE_UINT64_T
128: #AC_TYPE_UINT8_T
129:
130: AC_MSG_CHECKING(for __builtin_assume)
131: AC_TRY_COMPILE(,
132: [
133: __builtin_assume(1);
134: ],
135: AC_MSG_RESULT([yes])
136: AC_DEFINE([HAVE___BUILTIN_ASSUME]),
137: AC_MSG_RESULT([no]))
138:
139: AC_MSG_CHECKING(for __builtin_bswap16)
140: AC_TRY_COMPILE(,
141: [
142: return __builtin_bswap16(0);
143: ],
144: AC_MSG_RESULT([yes])
145: AC_DEFINE([HAVE___BUILTIN_BSWAP16]),
146: AC_MSG_RESULT([no]))
147:
148: AC_MSG_CHECKING(for __builtin_bswap32)
149: AC_TRY_COMPILE(,
150: [
151: return __builtin_bswap32(0);
152: ],
153: AC_MSG_RESULT([yes])
154: AC_DEFINE([HAVE___BUILTIN_BSWAP32]),
155: AC_MSG_RESULT([no]))
156:
1.1.1.2 root 157: AC_MSG_CHECKING(for __builtin_bswap64)
158: AC_TRY_COMPILE(,
159: [
160: return __builtin_bswap64(0);
161: ],
162: AC_MSG_RESULT([yes])
163: AC_DEFINE([HAVE___BUILTIN_BSWAP64]),
164: AC_MSG_RESULT([no]))
165:
1.1 root 166: AC_MSG_CHECKING(for __builtin_expect)
167: AC_TRY_COMPILE(,
168: [
169: if (__builtin_expect(1, 1)) return 0;
170: ],
171: AC_MSG_RESULT([yes])
172: AC_DEFINE([HAVE___BUILTIN_EXPECT]),
173: AC_MSG_RESULT([no]))
174:
175: AC_MSG_CHECKING(for __builtin_unreachable)
176: AC_TRY_COMPILE(,
177: [
178: __builtin_unreachable();
179: ],
180: AC_MSG_RESULT([yes])
181: AC_DEFINE([HAVE___BUILTIN_UNREACHABLE]),
182: AC_MSG_RESULT([no]))
183:
184: AC_MSG_CHECKING(for __attribute__((__fallthrough__)))
185: old_CXXFLAGS="${CXXFLAGS}"
186: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
187: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
188: [], [
189: extern int x;
190: switch (x) {
191: case 0:
192: __attribute__((__fallthrough__));
193: case 1:
194: break;
195: }
196: ])],
197: AC_MSG_RESULT([yes])
198: AC_DEFINE([HAVE___ATTRIBUTE_FALLTHROUGH]),
199: AC_MSG_RESULT([no]))
200: CXXFLAGS="${old_CXXFLAGS}"
201:
202: dnl とりあえず __format__ までしか調べてないので、
203: dnl その中の __printf__ とかまで調べる必要ができたら直すこと。
204: AC_MSG_CHECKING(for __attribute__((__format__)))
205: old_CXXFLAGS="${CXXFLAGS}"
206: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
207: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
208: [
209: extern int f(const char *f, ...)
210: __attribute__((__format__(__printf__, 1, 2)));
211: ], [
212: ])],
213: AC_MSG_RESULT([yes])
214: AC_DEFINE([HAVE___ATTRIBUTE_FORMAT]),
215: AC_MSG_RESULT([no]))
216: CXXFLAGS="${old_CXXFLAGS}"
217:
218: AC_MSG_CHECKING(for __attribute__((no_sanitize)))
219: old_CXXFLAGS="${CXXFLAGS}"
220: CXXFLAGS="${CXXFLAGS} -Werror"
221: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
222: [
223: __attribute__((no_sanitize("undefined")))
224: int func() { return 0; }
225: ], [
226: ])],
227: AC_MSG_RESULT([yes])
228: AC_DEFINE([HAVE___ATTRIBUTE_NO_SANITIZE]),
229: AC_MSG_RESULT([no]))
230: CXXFLAGS="${old_CXXFLAGS}"
231:
232:
233: AC_MSG_CHECKING(for __attribute__((__packed__)))
234: old_CXXFLAGS="${CXXFLAGS}"
235: CXXFLAGS="${CXXFLAGS} -Werror"
236: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
237: [], [
238: struct x { char a; int b; } __attribute__((__packed__));
239: ])],
240: AC_MSG_RESULT([yes])
241: AC_DEFINE([HAVE___ATTRIBUTE_PACKED]),
242: AC_MSG_RESULT([no]))
243: CXXFLAGS="${old_CXXFLAGS}"
244:
245: AC_MSG_CHECKING(for __attribute__((__unused__)))
246: old_CXXFLAGS="${CXXFLAGS}"
247: CXXFLAGS="${CXXFLAGS} -Wunused-variable -Werror"
248: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
249: [], [
250: int a __attribute__((__unused__));
251: ])],
252: AC_MSG_RESULT([yes])
253: AC_DEFINE([HAVE___ATTRIBUTE_UNUSED]),
254: AC_MSG_RESULT([no]))
255: CXXFLAGS="${old_CXXFLAGS}"
256:
257: # Checks for library functions.
258: #AC_FUNC_MALLOC
259: #AC_FUNC_MMAP
260:
261: AC_MSG_CHECKING(for pthread_setname_np(name))
1.1.1.3 root 262: AC_TRY_COMPILE(
1.1 root 263: [
1.1.1.3 root 264: #include <pthread.h>
265: #if defined(HAVE_PTHREAD_NP_H)
266: #include <pthread_np.h>
267: #endif
268: ], [
1.1 root 269: pthread_setname_np("");
270: ],
271: AC_MSG_RESULT([yes])
1.1.1.3 root 272: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_name]),
1.1 root 273: AC_MSG_RESULT([no]))
274:
275: AC_MSG_CHECKING(for pthread_setname_np(thread, name))
1.1.1.3 root 276: AC_TRY_COMPILE(
1.1 root 277: [
1.1.1.3 root 278: #include <pthread.h>
279: #if defined(HAVE_PTHREAD_NP_H)
280: #include <pthread_np.h>
281: #endif
282: ], [
1.1 root 283: pthread_setname_np(pthread_self(), "");
284: ],
285: AC_MSG_RESULT([yes])
1.1.1.3 root 286: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_th_name]),
1.1 root 287: AC_MSG_RESULT([no]))
288:
289: AC_MSG_CHECKING(for pthread_setname_np(thread, name, arg))
1.1.1.3 root 290: AC_TRY_COMPILE(
1.1 root 291: [
1.1.1.3 root 292: #include <pthread.h>
293: #if defined(HAVE_PTHREAD_NP_H)
294: #include <pthread_np.h>
295: #endif
296: ], [
1.1 root 297: pthread_setname_np(pthread_self(), "", (void*)0);
298: ],
299: AC_MSG_RESULT([yes])
1.1.1.3 root 300: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_th_name_arg]),
301: AC_MSG_RESULT([no]))
302:
303: AC_MSG_CHECKING(for pthread_set_name_np(thread, name))
304: AC_TRY_COMPILE(
305: [
306: #include <pthread.h>
307: #if defined(HAVE_PTHREAD_NP_H)
308: #include <pthread_np.h>
309: #endif
310: ], [
311: pthread_set_name_np(pthread_self(), "");
312: ],
313: AC_MSG_RESULT([yes])
314: AC_DEFINE([HAVE_PTHREAD_SET_NAME_NP_th_name]),
1.1 root 315: AC_MSG_RESULT([no]))
316:
1.1.1.6 root 317: AC_MSG_CHECKING(for iconv const)
318: AC_TRY_COMPILE(
319: [
320: #include <iconv.h>
321: ], [
322: const char **a;
323: iconv(0, a, 0, 0, 0);
324: ],
325: AC_MSG_RESULT([yes])
326: AC_DEFINE([HAVE_ICONV_CONST]),
327: AC_MSG_RESULT([no]))
328:
1.1.1.8 root 329: #
330: # Network
331: #
332: AC_MSG_CHECKING(for AF_PACKET)
333: AC_TRY_COMPILE(
334: [
335: #include <sys/socket.h>
336: ], [
337: AF_PACKET;
338: ],
339: AC_MSG_RESULT([yes])
340: AC_DEFINE([HAVE_HOSTNET_AFPACKET])
341: AC_SUBST([HOSTNET_AFPACKET], [yes]),
342: AC_MSG_RESULT([no]))
343:
344: AC_MSG_CHECKING(for tap(4))
1.1.1.6 root 345: case "${host_os}" in
346: linux*)
347: if test x"$ac_cv_header_linux_if_tun_h" = xyes; then
1.1.1.8 root 348: netdriver_tap=yes
1.1.1.6 root 349: fi
350: ;;
351: openbsd*)
352: # OpenBSD has no <net/if_tap.h> but supports tap(4).
1.1.1.8 root 353: netdriver_tap=yes
1.1.1.6 root 354: ;;
1.1.1.8 root 355: *)
1.1.1.6 root 356: if test x"$ac_cv_header_net_if_tap_h" = xyes; then
1.1.1.8 root 357: netdriver_tap=yes
1.1.1.6 root 358: fi
1.1.1.8 root 359: ;;
360: esac
361: if test x"$netdriver_tap" = xyes; then
362: AC_MSG_RESULT([yes])
363: AC_DEFINE([HAVE_HOSTNET_TAP])
364: AC_SUBST([HOSTNET_TAP], [yes])
365: else
366: AC_MSG_RESULT([no])
367: fi
368:
369: AC_MSG_CHECKING(for bpf(4))
370: if test x"$ac_cv_header_net_bpf_h" = xyes; then
371: AC_MSG_RESULT([yes])
372: AC_DEFINE([HAVE_HOSTNET_BPF])
373: AC_SUBST([HOSTNET_BPF], [yes])
374: else
375: AC_MSG_RESULT([no])
1.1 root 376: fi
377:
378: # libbsd on Linux
1.1.1.5 root 379: AC_CHECK_LIB(c, getprogname, ,)
1.1 root 380: AC_CHECK_LIB(bsd, getprogname,
1.1.1.6 root 381: LIBS="${LIBS} -lbsd"
382: )
1.1.1.5 root 383: # なければ停止する
384: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
385: [
386: #include <stdlib.h>
387: #include "confdefs.h"
388: #if defined(HAVE_BSD_BSD_H)
389: #include <bsd/bsd.h>
390: #endif
391: ], [
392: getprogname()
393: ])],
394: # nothing to do on success
395: , [AC_MSG_ERROR([*** getprogname is not found.
1.1.1.7 root 396: *** If you use Ubuntu, sudo apt install libbsd-dev])
1.1.1.5 root 397: ]
398: )
1.1 root 399:
1.1.1.2 root 400: # libedit (editline)
401: if test x"$ac_cv_header_histedit_h" = xyes; then
1.1.1.6 root 402: LIBS="${LIBS} -ledit -ltermcap"
1.1.1.2 root 403: fi
404:
1.1 root 405: # libkqueue on Linux
406: AC_CHECK_LIB(kqueue, kqueue,
1.1.1.6 root 407: LIBS="${LIBS} -lkqueue"
408: )
1.1 root 409:
1.1.1.5 root 410: AC_CHECK_LIB(z, gzclose,
1.1.1.6 root 411: LIBS="${LIBS} -lz",
1.1.1.5 root 412: [AC_MSG_ERROR([*** zlib is not found.
1.1.1.7 root 413: *** If use use Ubuntu, sudo apt install zlib1g-dev])]
1.1.1.5 root 414: )
415:
1.1 root 416: # wxWidgets
417: AC_MSG_CHECKING(for wx-config)
1.1.1.3 root 418: wxconfig_paths="${WX_CONFIG} wx-config-3.0 wx-config"
1.1 root 419: wxconfig=""
1.1.1.3 root 420: for c in ${wxconfig_paths}; do
1.1 root 421: ver=`$c --version 2>&1 | cut -f 1 -d .`
422: if test "$ver" = "3"; then
423: wxconfig=$c
424: break
425: fi
426: done
427: if test -z "$wxconfig"; then
1.1.1.7 root 428: AC_MSG_ERROR([*** wxWidgets-3.0 not found in ${wxconfig_paths}
429: *** If you use pkgsrc, install x11/wxGTK30.
430: *** If you use Ubuntu, sudo apt install libwxgtk3.0-gtk3-dev])
1.1 root 431: else
432: AC_MSG_RESULT([$wxconfig])
433:
434: AC_MSG_CHECKING(for wxWidgets version)
435: wxversion=`$wxconfig --version`
436: AC_MSG_RESULT([$wxversion])
437:
438: wxcppflags=`$wxconfig --cppflags`
439: wxlibs=`$wxconfig --libs`
440:
1.1.1.6 root 441: case "${host_os}" in
442: netbsd*)
443: # rpath。どうしたもんだかこれ
1.1 root 444: wxlibs=[`echo $wxlibs | sed -e 's/-L\([^ ]*\) /-L\1 -Wl,-R,\1 /'`]
1.1.1.6 root 445: ;;
1.1 root 446:
1.1.1.6 root 447: darwin*)
448: # XXX -framework AudioToolbox が指定されているとリンカがこけるorz
1.1 root 449: wxlibs=[`echo $wxlibs | sed -e 's/-framework AudioToolbox//'`]
1.1.1.6 root 450: ;;
451: esac
1.1 root 452:
453: AC_SUBST([WXWIDGETS_CPPFLAGS], [$wxcppflags])
454: AC_SUBST([WXWIDGETS_LIBS], [$wxlibs])
455: fi
456:
1.1.1.5 root 457: # gettext
458: AC_CHECK_TOOL([MSGFMT], [msgfmt], [:])
459: if test $MSGFMT = [:]; then
460: AC_MSG_ERROR([*** msgfmt not found.
1.1.1.7 root 461: *** If you use pkgsrc, install devel/gettext-tools.
462: *** If you use Ubuntu, sudo apt install gettext])
1.1.1.5 root 463: fi
464:
1.1 root 465: AC_CONFIG_FILES([Makefile.cfg
466: host/Makefile
467: wx/Makefile
468: util/mkcgrom/Makefile
469: util/viewcgrom/Makefile
470: ])
1.1.1.2 root 471: AC_CONFIG_HEADERS([config-nono.h])
1.1 root 472: AC_OUTPUT
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.