|
|
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(-Wdisabled-macro-expansion)
64: ADD_CC_WARN_IF(-Wextra-semi)
65: ADD_CC_WARN_IF(-Wlogical-op)
66: ADD_CC_WARN_IF(-Wmissing-prototypes)
67: ADD_CC_WARN_IF(-Wmissing-variable-declarations)
1.1.1.3 root 68: AC_LANG_POP([C])
69: AC_SUBST([WARNFLAGS_C])
70:
71: # C++ コンパイラのワーニングオプション
72: # (AC_LANG は C++ のまま継続する)
73: AC_LANG_CPLUSPLUS
1.1.1.4 root 74: AC_DEFUN([ADD_CXX_WARN_IF],[
1.1.1.3 root 75: AC_MSG_CHECKING([whether c++ accepts $1])
76: old_CXXFLAGS="${CXXFLAGS}"
77: CXXFLAGS="${CXXFLAGS} -Werror $1"
78: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
79: AC_MSG_RESULT([yes])
80: WARNFLAGS_CXX="${WARNFLAGS_CXX} $1",
81: AC_MSG_RESULT([no]))
82: CXXFLAGS="${old_CXXFLAGS}"
83: ])
1.1.1.4 root 84: ADD_CXX_WARN_IF(-Wcast-qual)
85: ADD_CXX_WARN_IF(-Wdisabled-macro-expansion)
86: ADD_CXX_WARN_IF(-Wextra-semi)
87: ADD_CXX_WARN_IF(-Winconsistent-missing-override)
88: ADD_CXX_WARN_IF(-Winconsistent-missing-destructor-override)
89: ADD_CXX_WARN_IF(-Wlogical-op)
90: ADD_CXX_WARN_IF(-Wmissing-prototypes)
91: ADD_CXX_WARN_IF(-Wmissing-variable-declarations)
92: ADD_CXX_WARN_IF(-Wvla-extension)
1.1.1.3 root 93: AC_SUBST([WARNFLAGS_CXX])
1.1 root 94:
95: # Checks for libraries.
96:
97: # Checks for header files.
98: AC_CHECK_HEADERS([bsd/bsd.h])
99: AC_CHECK_HEADERS([endian.h])
1.1.1.2 root 100: AC_CHECK_HEADERS([histedit.h])
1.1 root 101: AC_CHECK_HEADERS([kqueue/sys/event.h])
1.1.1.3 root 102: AC_CHECK_HEADERS([pthread_np.h])
1.1 root 103: AC_CHECK_HEADERS([sys/endian.h])
104: AC_CHECK_HEADERS([sys/event.h])
105: AC_CHECK_HEADERS([net/bpf.h])
106: AC_CHECK_HEADERS([net/if_tap.h])
107: AC_CHECK_HEADERS([linux/if_tun.h])
108:
109: # Linux で <kqueue/sys/event.h> がなければここで停止したほうがいい
1.1.1.6 ! root 110: case "${host_os}" in
! 111: linux*)
! 112: if test "$ac_cv_header_kqueue_sys_event_h" != "yes"; then
! 113: AC_MSG_ERROR([*** kqueue is not found.
! 114: On Ubuntu, sudo apt install libkqueue-dev])
! 115: fi
! 116: ;;
! 117: esac
1.1 root 118:
119: # Checks for typedefs, structures, and compiler characteristics.
120: AC_CHECK_HEADER_STDBOOL
121: #AC_C_INLINE
122: #AC_TYPE_INT16_T
123: #AC_TYPE_INT32_T
124: #AC_TYPE_INT64_T
125: #AC_TYPE_INT8_T
126: #AC_TYPE_SIZE_T
127: #AC_TYPE_UINT16_T
128: #AC_TYPE_UINT32_T
129: #AC_TYPE_UINT64_T
130: #AC_TYPE_UINT8_T
131:
132: # struct kevent のメンバ udata の型が互換性なく違う。
133: # NetBSD では intptr_t(整数) だが、OSX では void* (ポインタ) なので、
134: # 同一ソースコードでは回避できない。
135: # Linux(Ubuntu) はどっちもパスするので後ろの void * のほうが使われる。
136: # まあパスするんならどっちでもいいか。
137: AC_MSG_CHECKING(whether kevent.udata is intptr_t)
138: old_CXXFLAGS="${CXXFLAGS}"
139: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
140: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
141: [
142: #include "confdefs.h"
1.1.1.3 root 143: #if defined(HAVE_SYS_TYPES_H)
144: #include <sys/types.h>
145: #endif
1.1 root 146: #if defined(HAVE_SYS_EVENT_H)
147: #include <sys/event.h>
148: #endif
149: #if defined(HAVE_KQUEUE_SYS_EVENT_H)
150: #include <kqueue/sys/event.h>
151: #endif
152: ], [
153: struct kevent kev;
154: kev.udata = (intptr_t)0;
155: (void)kev;
156: ])],
157: AC_MSG_RESULT([yes])
158: AC_SUBST([KEVENT_UDATA_T], [intptr_t]),
159: AC_MSG_RESULT([no]))
160: CXXFLAGS="${old_CXXFLAGS}"
161:
162: AC_MSG_CHECKING(whether kevent.udata is void *)
163: old_CXXFLAGS="${CXXFLAGS}"
164: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
165: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
166: [
167: #include "confdefs.h"
1.1.1.3 root 168: #if defined(HAVE_SYS_TYPES_H)
169: #include <sys/types.h>
170: #endif
1.1 root 171: #if defined(HAVE_SYS_EVENT_H)
172: #include <sys/event.h>
173: #endif
174: #if defined(HAVE_KQUEUE_SYS_EVENT_H)
175: #include <kqueue/sys/event.h>
176: #endif
177: ], [
178: struct kevent kev;
179: kev.udata = (void *)0;
180: (void)kev;
181: ])],
182: AC_MSG_RESULT([yes])
183: AC_SUBST([KEVENT_UDATA_T], ['void *']),
184: AC_MSG_RESULT([no]))
185: CXXFLAGS="${old_CXXFLAGS}"
186:
187: if test -z "$KEVENT_UDATA_T" ; then
188: AC_MSG_ERROR([kevent.udata is unknown type])
189: fi
190:
191: AC_MSG_CHECKING(for __builtin_assume)
192: AC_TRY_COMPILE(,
193: [
194: __builtin_assume(1);
195: ],
196: AC_MSG_RESULT([yes])
197: AC_DEFINE([HAVE___BUILTIN_ASSUME]),
198: AC_MSG_RESULT([no]))
199:
200: AC_MSG_CHECKING(for __builtin_bswap16)
201: AC_TRY_COMPILE(,
202: [
203: return __builtin_bswap16(0);
204: ],
205: AC_MSG_RESULT([yes])
206: AC_DEFINE([HAVE___BUILTIN_BSWAP16]),
207: AC_MSG_RESULT([no]))
208:
209: AC_MSG_CHECKING(for __builtin_bswap32)
210: AC_TRY_COMPILE(,
211: [
212: return __builtin_bswap32(0);
213: ],
214: AC_MSG_RESULT([yes])
215: AC_DEFINE([HAVE___BUILTIN_BSWAP32]),
216: AC_MSG_RESULT([no]))
217:
1.1.1.2 root 218: AC_MSG_CHECKING(for __builtin_bswap64)
219: AC_TRY_COMPILE(,
220: [
221: return __builtin_bswap64(0);
222: ],
223: AC_MSG_RESULT([yes])
224: AC_DEFINE([HAVE___BUILTIN_BSWAP64]),
225: AC_MSG_RESULT([no]))
226:
1.1 root 227: AC_MSG_CHECKING(for __builtin_expect)
228: AC_TRY_COMPILE(,
229: [
230: if (__builtin_expect(1, 1)) return 0;
231: ],
232: AC_MSG_RESULT([yes])
233: AC_DEFINE([HAVE___BUILTIN_EXPECT]),
234: AC_MSG_RESULT([no]))
235:
236: AC_MSG_CHECKING(for __builtin_unreachable)
237: AC_TRY_COMPILE(,
238: [
239: __builtin_unreachable();
240: ],
241: AC_MSG_RESULT([yes])
242: AC_DEFINE([HAVE___BUILTIN_UNREACHABLE]),
243: AC_MSG_RESULT([no]))
244:
245: AC_MSG_CHECKING(for __attribute__((__fallthrough__)))
246: old_CXXFLAGS="${CXXFLAGS}"
247: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
248: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
249: [], [
250: extern int x;
251: switch (x) {
252: case 0:
253: __attribute__((__fallthrough__));
254: case 1:
255: break;
256: }
257: ])],
258: AC_MSG_RESULT([yes])
259: AC_DEFINE([HAVE___ATTRIBUTE_FALLTHROUGH]),
260: AC_MSG_RESULT([no]))
261: CXXFLAGS="${old_CXXFLAGS}"
262:
263: dnl とりあえず __format__ までしか調べてないので、
264: dnl その中の __printf__ とかまで調べる必要ができたら直すこと。
265: AC_MSG_CHECKING(for __attribute__((__format__)))
266: old_CXXFLAGS="${CXXFLAGS}"
267: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
268: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
269: [
270: extern int f(const char *f, ...)
271: __attribute__((__format__(__printf__, 1, 2)));
272: ], [
273: ])],
274: AC_MSG_RESULT([yes])
275: AC_DEFINE([HAVE___ATTRIBUTE_FORMAT]),
276: AC_MSG_RESULT([no]))
277: CXXFLAGS="${old_CXXFLAGS}"
278:
279: AC_MSG_CHECKING(for __attribute__((no_sanitize)))
280: old_CXXFLAGS="${CXXFLAGS}"
281: CXXFLAGS="${CXXFLAGS} -Werror"
282: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
283: [
284: __attribute__((no_sanitize("undefined")))
285: int func() { return 0; }
286: ], [
287: ])],
288: AC_MSG_RESULT([yes])
289: AC_DEFINE([HAVE___ATTRIBUTE_NO_SANITIZE]),
290: AC_MSG_RESULT([no]))
291: CXXFLAGS="${old_CXXFLAGS}"
292:
293:
294: AC_MSG_CHECKING(for __attribute__((__packed__)))
295: old_CXXFLAGS="${CXXFLAGS}"
296: CXXFLAGS="${CXXFLAGS} -Werror"
297: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
298: [], [
299: struct x { char a; int b; } __attribute__((__packed__));
300: ])],
301: AC_MSG_RESULT([yes])
302: AC_DEFINE([HAVE___ATTRIBUTE_PACKED]),
303: AC_MSG_RESULT([no]))
304: CXXFLAGS="${old_CXXFLAGS}"
305:
306: AC_MSG_CHECKING(for __attribute__((__unused__)))
307: old_CXXFLAGS="${CXXFLAGS}"
308: CXXFLAGS="${CXXFLAGS} -Wunused-variable -Werror"
309: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
310: [], [
311: int a __attribute__((__unused__));
312: ])],
313: AC_MSG_RESULT([yes])
314: AC_DEFINE([HAVE___ATTRIBUTE_UNUSED]),
315: AC_MSG_RESULT([no]))
316: CXXFLAGS="${old_CXXFLAGS}"
317:
318: # Checks for library functions.
319: #AC_FUNC_MALLOC
320: #AC_FUNC_MMAP
321:
322: AC_MSG_CHECKING(for pthread_setname_np(name))
1.1.1.3 root 323: AC_TRY_COMPILE(
1.1 root 324: [
1.1.1.3 root 325: #include <pthread.h>
326: #if defined(HAVE_PTHREAD_NP_H)
327: #include <pthread_np.h>
328: #endif
329: ], [
1.1 root 330: pthread_setname_np("");
331: ],
332: AC_MSG_RESULT([yes])
1.1.1.3 root 333: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_name]),
1.1 root 334: AC_MSG_RESULT([no]))
335:
336: AC_MSG_CHECKING(for pthread_setname_np(thread, name))
1.1.1.3 root 337: AC_TRY_COMPILE(
1.1 root 338: [
1.1.1.3 root 339: #include <pthread.h>
340: #if defined(HAVE_PTHREAD_NP_H)
341: #include <pthread_np.h>
342: #endif
343: ], [
1.1 root 344: pthread_setname_np(pthread_self(), "");
345: ],
346: AC_MSG_RESULT([yes])
1.1.1.3 root 347: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_th_name]),
1.1 root 348: AC_MSG_RESULT([no]))
349:
350: AC_MSG_CHECKING(for pthread_setname_np(thread, name, arg))
1.1.1.3 root 351: AC_TRY_COMPILE(
1.1 root 352: [
1.1.1.3 root 353: #include <pthread.h>
354: #if defined(HAVE_PTHREAD_NP_H)
355: #include <pthread_np.h>
356: #endif
357: ], [
1.1 root 358: pthread_setname_np(pthread_self(), "", (void*)0);
359: ],
360: AC_MSG_RESULT([yes])
1.1.1.3 root 361: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_th_name_arg]),
362: AC_MSG_RESULT([no]))
363:
364: AC_MSG_CHECKING(for pthread_set_name_np(thread, name))
365: AC_TRY_COMPILE(
366: [
367: #include <pthread.h>
368: #if defined(HAVE_PTHREAD_NP_H)
369: #include <pthread_np.h>
370: #endif
371: ], [
372: pthread_set_name_np(pthread_self(), "");
373: ],
374: AC_MSG_RESULT([yes])
375: AC_DEFINE([HAVE_PTHREAD_SET_NAME_NP_th_name]),
1.1 root 376: AC_MSG_RESULT([no]))
377:
1.1.1.6 ! root 378: AC_MSG_CHECKING(for iconv const)
! 379: AC_TRY_COMPILE(
! 380: [
! 381: #include <iconv.h>
! 382: ], [
! 383: const char **a;
! 384: iconv(0, a, 0, 0, 0);
! 385: ],
! 386: AC_MSG_RESULT([yes])
! 387: AC_DEFINE([HAVE_ICONV_CONST]),
! 388: AC_MSG_RESULT([no]))
! 389:
1.1 root 390: # Select host network driver.
391: AC_MSG_CHECKING(for suitable host network driver)
1.1.1.6 ! root 392: case "${host_os}" in
! 393: linux*)
! 394: if test x"$ac_cv_header_linux_if_tun_h" = xyes; then
! 395: netdriver=tap
! 396: fi
! 397: ;;
! 398: openbsd*)
! 399: # OpenBSD has no <net/if_tap.h> but supports tap(4).
1.1 root 400: netdriver=tap
1.1.1.6 ! root 401: ;;
! 402: esac
! 403: if test -z "$netdriver"; then
! 404: if test x"$ac_cv_header_net_if_tap_h" = xyes; then
! 405: netdriver=tap
! 406: elif test x"$ac_cv_header_net_bpf_h" = xyes; then
! 407: netdriver=bpf
! 408: else
! 409: netdriver=none
! 410: fi
1.1 root 411: fi
412: AC_MSG_RESULT([$netdriver])
413: AC_SUBST([NETDRIVER], [$netdriver])
414:
415: # libbsd on Linux
1.1.1.5 root 416: AC_CHECK_LIB(c, getprogname, ,)
1.1 root 417: AC_CHECK_LIB(bsd, getprogname,
1.1.1.6 ! root 418: LIBS="${LIBS} -lbsd"
! 419: )
1.1.1.5 root 420: # なければ停止する
421: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
422: [
423: #include <stdlib.h>
424: #include "confdefs.h"
425: #if defined(HAVE_BSD_BSD_H)
426: #include <bsd/bsd.h>
427: #endif
428: ], [
429: getprogname()
430: ])],
431: # nothing to do on success
432: , [AC_MSG_ERROR([*** getprogname is not found.
433: On Ubuntu, sudo apt install libbsd-dev])
434: ]
435: )
1.1 root 436:
1.1.1.2 root 437: # libedit (editline)
438: if test x"$ac_cv_header_histedit_h" = xyes; then
1.1.1.6 ! root 439: LIBS="${LIBS} -ledit -ltermcap"
1.1.1.2 root 440: fi
441:
1.1 root 442: # libkqueue on Linux
443: AC_CHECK_LIB(kqueue, kqueue,
1.1.1.6 ! root 444: LIBS="${LIBS} -lkqueue"
! 445: )
1.1 root 446:
1.1.1.5 root 447: AC_CHECK_LIB(z, gzclose,
1.1.1.6 ! root 448: LIBS="${LIBS} -lz",
1.1.1.5 root 449: [AC_MSG_ERROR([*** zlib is not found.
450: On Ubuntu, sudo apt install zlib1g-dev])]
451: )
452:
1.1 root 453: # wxWidgets
454: AC_MSG_CHECKING(for wx-config)
1.1.1.3 root 455: wxconfig_paths="${WX_CONFIG} wx-config-3.0 wx-config"
1.1 root 456: wxconfig=""
1.1.1.3 root 457: for c in ${wxconfig_paths}; do
1.1 root 458: ver=`$c --version 2>&1 | cut -f 1 -d .`
459: if test "$ver" = "3"; then
460: wxconfig=$c
461: break
462: fi
463: done
464: if test -z "$wxconfig"; then
1.1.1.3 root 465: AC_MSG_ERROR([*** wxWidgets-3.0 not found in ${wxconfig_paths}])
1.1 root 466: else
467: AC_MSG_RESULT([$wxconfig])
468:
469: AC_MSG_CHECKING(for wxWidgets version)
470: wxversion=`$wxconfig --version`
471: AC_MSG_RESULT([$wxversion])
472:
473: wxcppflags=`$wxconfig --cppflags`
474: wxlibs=`$wxconfig --libs`
475:
1.1.1.6 ! root 476: case "${host_os}" in
! 477: netbsd*)
! 478: # rpath。どうしたもんだかこれ
1.1 root 479: wxlibs=[`echo $wxlibs | sed -e 's/-L\([^ ]*\) /-L\1 -Wl,-R,\1 /'`]
1.1.1.6 ! root 480: ;;
1.1 root 481:
1.1.1.6 ! root 482: darwin*)
! 483: # XXX -framework AudioToolbox が指定されているとリンカがこけるorz
1.1 root 484: wxlibs=[`echo $wxlibs | sed -e 's/-framework AudioToolbox//'`]
1.1.1.6 ! root 485: ;;
! 486: esac
1.1 root 487:
488: AC_SUBST([WXWIDGETS_CPPFLAGS], [$wxcppflags])
489: AC_SUBST([WXWIDGETS_LIBS], [$wxlibs])
490: fi
491:
1.1.1.5 root 492: # gettext
493: AC_CHECK_TOOL([MSGFMT], [msgfmt], [:])
494: if test $MSGFMT = [:]; then
495: AC_MSG_ERROR([*** msgfmt not found.
496: On Ubuntu, sudo apt install gettext])
497: fi
498:
1.1 root 499: AC_CONFIG_FILES([Makefile.cfg
500: host/Makefile
501: wx/Makefile
502: util/mkcgrom/Makefile
503: util/viewcgrom/Makefile
504: ])
1.1.1.2 root 505: AC_CONFIG_HEADERS([config-nono.h])
1.1 root 506: AC_OUTPUT
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.