|
|
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:
1.1.1.10 root 7: AC_PREREQ([2.71])
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:
1.1.1.6 root 17: # OS
18: AC_CANONICAL_HOST
19: AC_SUBST([host_cpu])
20:
1.1.1.4 root 21: # コンパイラをチェック。今のところ clang/gcc のみ。
22: # (autoconf がやってる gcc かどうかのチェックは clang を検出できず使えない)
23: AC_MSG_CHECKING(for compiler)
24: if test -n "`${CC} -v 2>&1 | grep clang`" ; then
25: AC_MSG_RESULT([clang])
26: COMPILER=CLANG
27: elif test -n "`${CC} -v 2>&1 | grep GCC`"; then
28: AC_MSG_RESULT([gcc])
29: COMPILER=GCC
30: else
31: AC_MSG_RESULT([unknown])
32: COMPILER=
33: fi
34: AC_SUBST([COMPILER])
35:
1.1.1.3 root 36: # C++ のバージョンをチェック
37: CXX_STD=-std=c++14
38: AC_LANG_PUSH([C++])
39: AC_MSG_CHECKING(for ${CXX_STD})
1.1 root 40: old_CXXFLAGS="${CXXFLAGS}"
1.1.1.3 root 41: CXXFLAGS="${CXX_STD} ${CXXFLAGS}"
1.1 root 42: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
1.1.1.3 root 43: AC_MSG_RESULT([yes]),
44: AC_MSG_ERROR("*** C++ compiler '${CXX}' doesn't support ${CXX_STD}."))
1.1 root 45: CXXFLAGS="${old_CXXFLAGS}"
1.1.1.3 root 46: CXX="${CXX} ${CXX_STD}"
47: AC_LANG_POP([C++])
48:
49: # C コンパイラのワーニングオプション
50: AC_LANG_PUSH([C])
1.1.1.4 root 51: AC_DEFUN([ADD_CC_WARN_IF],[
1.1.1.3 root 52: AC_MSG_CHECKING([whether cc accepts $1])
53: old_CFLAGS="${CFLAGS}"
54: CFLAGS="${CFLAGS} -Werror $1"
1.1.1.17 root 55: AC_COMPILE_IFELSE([
56: AC_LANG_PROGRAM([], [])
57: ], [
1.1.1.3 root 58: AC_MSG_RESULT([yes])
1.1.1.11 root 59: eval `echo cc_has$1=yes | sed -e 's/-/_/g'`
1.1.1.17 root 60: WARNFLAGS_C="${WARNFLAGS_C} $1"
61: ], [
62: AC_MSG_RESULT([no])
63: ])
1.1.1.3 root 64: CFLAGS="${old_CFLAGS}"
65: ])
1.1.1.4 root 66: ADD_CC_WARN_IF(-Wcast-qual)
67: ADD_CC_WARN_IF(-Wextra-semi)
68: ADD_CC_WARN_IF(-Wlogical-op)
69: ADD_CC_WARN_IF(-Wmissing-prototypes)
70: ADD_CC_WARN_IF(-Wmissing-variable-declarations)
1.1.1.11 root 71: # -Wshadow-local があればそっちを使う(gcc>=7)、なければ -Wshadow (clang)
72: ADD_CC_WARN_IF(-Wshadow-local)
73: if test x"${cc_has_Wshadow_local}" != xyes; then
74: ADD_CC_WARN_IF(-Wshadow)
75: fi
1.1.1.15 root 76: ADD_CC_WARN_IF(-Wstring-conversion)
77: ADD_CC_WARN_IF(-Wtype-limits)
1.1.1.3 root 78: AC_LANG_POP([C])
79: AC_SUBST([WARNFLAGS_C])
80:
81: # C++ コンパイラのワーニングオプション
82: # (AC_LANG は C++ のまま継続する)
1.1.1.10 root 83: AC_LANG([C++])
1.1.1.4 root 84: AC_DEFUN([ADD_CXX_WARN_IF],[
1.1.1.3 root 85: AC_MSG_CHECKING([whether c++ accepts $1])
86: old_CXXFLAGS="${CXXFLAGS}"
87: CXXFLAGS="${CXXFLAGS} -Werror $1"
1.1.1.17 root 88: AC_COMPILE_IFELSE([
89: AC_LANG_PROGRAM([], [])
90: ], [
1.1.1.3 root 91: AC_MSG_RESULT([yes])
1.1.1.11 root 92: eval `echo cxx_has$1=yes | sed -e 's/-/_/g'`
1.1.1.17 root 93: WARNFLAGS_CXX="${WARNFLAGS_CXX} $1"
94: ], [
95: AC_MSG_RESULT([no])
96: ])
1.1.1.3 root 97: CXXFLAGS="${old_CXXFLAGS}"
98: ])
1.1.1.4 root 99: ADD_CXX_WARN_IF(-Wcast-qual)
100: ADD_CXX_WARN_IF(-Wextra-semi)
1.1.1.20! root 101: ADD_CXX_WARN_IF(-Wimplicit-fallthrough)
1.1.1.4 root 102: ADD_CXX_WARN_IF(-Winconsistent-missing-destructor-override)
1.1.1.15 root 103: ADD_CXX_WARN_IF(-Winconsistent-missing-override)
1.1.1.4 root 104: ADD_CXX_WARN_IF(-Wlogical-op)
105: ADD_CXX_WARN_IF(-Wmissing-prototypes)
106: ADD_CXX_WARN_IF(-Wmissing-variable-declarations)
1.1.1.11 root 107: # -Wshadow-local があればそっちを使う(gcc>=7)、なければ -Wshadow (clang)
108: ADD_CXX_WARN_IF(-Wshadow-local)
109: if test x"${cxx_has_Wshadow_local}" != xyes; then
110: ADD_CXX_WARN_IF(-Wshadow)
111: fi
1.1.1.15 root 112: ADD_CXX_WARN_IF(-Wstring-conversion)
113: ADD_CXX_WARN_IF(-Wsuggest-destructor-override)
1.1.1.12 root 114: ADD_CXX_WARN_IF(-Wsuggest-override)
1.1.1.19 root 115: # gcc14 が C++14 に対しても C++20 のエラーを出そうとする。は??
116: ADD_CXX_WARN_IF(-Wno-template-id-cdtor)
1.1.1.15 root 117: ADD_CXX_WARN_IF(-Wtype-limits)
1.1.1.4 root 118: ADD_CXX_WARN_IF(-Wvla-extension)
1.1.1.3 root 119: AC_SUBST([WARNFLAGS_CXX])
1.1 root 120:
1.1.1.15 root 121: # コンパイラが AVX2 をサポートしているか。
1.1.1.14 root 122: AC_ARG_ENABLE([avx2],
123: [AS_HELP_STRING([--disable-avx2], [disable avx2 support])],
124: [],
125: [enable_avx2=yes])
126:
127: AS_IF([test x"${enable_avx2}" != x"no"], [
1.1.1.15 root 128: AC_MSG_CHECKING(whether the compiler supports AVX2)
1.1.1.14 root 129: if test x"${host_cpu}" = x"x86_64"; then
130: if test x"${host_cpu}" = x"${build_cpu}"; then
131: old_CXXFLAGS="${CXXFLAGS}"
132: CXXFLAGS="${CXXFLAGS} -mavx2"
133: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
134: #include <x86intrin.h>
135: ], [
136: #if !defined(__AVX2__)
137: #error __AVX2__ is not defined by the compiler.
138: #endif
139: __m256i v;
140: ])], [
141: have_avx2=yes
142: ])
143: CXXFLAGS="${old_CXXFLAGS}"
144: fi
145: fi
146: if test x"${have_avx2}" = x"yes"; then
147: AC_MSG_RESULT([yes])
148: AC_DEFINE([HAVE_AVX2])
149: AC_SUBST(HOST_HAS_AVX2, yes)
150: else
151: AC_MSG_RESULT([no])
152: fi
153: ], [
154: ])
155:
1.1.1.15 root 156: # コンパイラが NEON をサポートしているか。
157: AC_ARG_ENABLE([neon],
158: [AS_HELP_STRING([--disable-neon], [disable NEON support])],
159: [],
160: [enable_neon=yes])
161:
162: AS_IF([test x"${enable_neon}" != x"no"], [
163: AC_MSG_CHECKING(whether the compiler supports NEON)
164: if test x"${host_cpu}" = x"aarch64"; then
165: if test x"${host_cpu}" = x"${build_cpu}"; then
166: old_CXXFLAGS="${CXXFLAGS}"
167: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
168: #include <arm_neon.h>
169: ], [
170: uint8x16_t v;
171: ])], [
172: have_neon=yes
173: ])
174: CXXFLAGS="${old_CXXFLAGS}"
175: fi
176: fi
177: if test x"${have_neon}" = x"yes"; then
178: AC_MSG_RESULT([yes])
179: AC_DEFINE([HAVE_NEON])
180: AC_SUBST(HOST_HAS_NEON, yes)
181: else
182: AC_MSG_RESULT([no])
183: fi
184: ], [
185: ])
186:
1.1 root 187: # Checks for libraries.
188:
189: # Checks for header files.
1.1.1.19 root 190: AC_CHECK_HEADERS([alsa/asoundlib.h])
1.1 root 191: AC_CHECK_HEADERS([bsd/bsd.h])
1.1.1.10 root 192: AC_CHECK_HEADERS([bsd/stdio.h])
193: AC_CHECK_HEADERS([byteswap.h])
1.1 root 194: AC_CHECK_HEADERS([endian.h])
195: AC_CHECK_HEADERS([kqueue/sys/event.h])
1.1.1.3 root 196: AC_CHECK_HEADERS([pthread_np.h])
1.1.1.15 root 197: AC_CHECK_HEADERS([sched.h])
1.1.1.19 root 198: AC_CHECK_HEADERS([sndio.h])
199: AC_CHECK_HEADERS([sys/audioio.h])
1.1.1.15 root 200: AC_CHECK_HEADERS([sys/cpuset.h])
1.1 root 201: AC_CHECK_HEADERS([sys/endian.h])
202: AC_CHECK_HEADERS([sys/event.h])
203: AC_CHECK_HEADERS([net/bpf.h])
204: AC_CHECK_HEADERS([net/if_tap.h])
205: AC_CHECK_HEADERS([linux/if_tun.h])
1.1.1.10 root 206: AC_CHECK_HEADERS([libkern/OSByteOrder.h])
207: AC_CHECK_HEADERS([machine/endian.h])
1.1 root 208:
209: # Linux で <kqueue/sys/event.h> がなければここで停止したほうがいい
1.1.1.6 root 210: case "${host_os}" in
211: linux*)
212: if test "$ac_cv_header_kqueue_sys_event_h" != "yes"; then
213: AC_MSG_ERROR([*** kqueue is not found.
1.1.1.7 root 214: *** If you use Ubuntu, sudo apt install libkqueue-dev])
1.1.1.6 root 215: fi
216: ;;
217: esac
1.1 root 218:
219: # Checks for typedefs, structures, and compiler characteristics.
220: AC_CHECK_HEADER_STDBOOL
221: #AC_C_INLINE
222: #AC_TYPE_INT16_T
223: #AC_TYPE_INT32_T
224: #AC_TYPE_INT64_T
225: #AC_TYPE_INT8_T
226: #AC_TYPE_SIZE_T
227: #AC_TYPE_UINT16_T
228: #AC_TYPE_UINT32_T
229: #AC_TYPE_UINT64_T
230: #AC_TYPE_UINT8_T
231:
1.1.1.15 root 232: AC_MSG_CHECKING(for cpuset_t)
233: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
234: #if defined(HAVE_SCHED_H)
235: #include <sched.h>
236: #endif
237: #if defined(HAVE_SYS_CPUSET_H)
238: #include <sys/cpuset.h>
239: #endif
240: ]], [[
241: cpuset_t set;
242: ]])], [
243: AC_MSG_RESULT(yes)
244: AC_DEFINE(HAVE_CPUSET_T)
245: ], [
246: AC_MSG_RESULT(no)
247: ])
248:
249: AC_MSG_CHECKING(for cpuset_t *)
250: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
251: #if defined(HAVE_SCHED_H)
252: #include <sched.h>
253: #endif
254: #if defined(HAVE_SYS_CPUSET_H)
255: #include <sys/cpuset.h>
256: #endif
257: ]], [[
258: cpuset_t *set;
259: ]])], [
260: AC_MSG_RESULT(yes)
261: AC_DEFINE(HAVE_CPUSET_T_P)
262: ], [
263: AC_MSG_RESULT(no)
264: ])
265:
266: AC_MSG_CHECKING(for cpu_set_t)
267: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
268: #include <sched.h>
269: ]], [[
270: cpu_set_t set;
271: ]])], [
272: AC_MSG_RESULT(yes)
273: AC_DEFINE(HAVE_CPU_SET_T)
274: ], [
275: AC_MSG_RESULT(no)
276: ])
277:
278:
279: # __builtin
280:
1.1 root 281: AC_MSG_CHECKING(for __builtin_assume)
1.1.1.10 root 282: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
283: [[
1.1 root 284: __builtin_assume(1);
1.1.1.10 root 285: ]])], [
286: AC_MSG_RESULT(yes)
287: AC_DEFINE(HAVE___BUILTIN_ASSUME)
288: ], [
289: AC_MSG_RESULT(no)
290: ])
1.1 root 291:
1.1.1.15 root 292: AC_MSG_CHECKING(for __builtin_bitreverse8)
293: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
294: [[
295: return __builtin_bitreverse8(1);
296: ]])], [
297: AC_MSG_RESULT(yes)
298: AC_DEFINE(HAVE___BUILTIN_BITREVERSE8)
299: ], [
300: AC_MSG_RESULT(no)
301: ])
302:
1.1.1.16 root 303: AC_MSG_CHECKING(for __builtin_bitreverse16)
304: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
305: [[
306: return __builtin_bitreverse16(1);
307: ]])], [
308: AC_MSG_RESULT(yes)
309: AC_DEFINE(HAVE___BUILTIN_BITREVERSE16)
310: ], [
311: AC_MSG_RESULT(no)
312: ])
313:
314: AC_MSG_CHECKING(for __builtin_bitreverse32)
315: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
316: [[
317: return __builtin_bitreverse32(1);
318: ]])], [
319: AC_MSG_RESULT(yes)
320: AC_DEFINE(HAVE___BUILTIN_BITREVERSE32)
321: ], [
322: AC_MSG_RESULT(no)
323: ])
324:
1.1 root 325: AC_MSG_CHECKING(for __builtin_bswap16)
1.1.1.10 root 326: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
327: [[
1.1 root 328: return __builtin_bswap16(0);
1.1.1.10 root 329: ]])], [
330: AC_MSG_RESULT(yes)
331: AC_DEFINE(HAVE___BUILTIN_BSWAP16)
332: ], [
333: AC_MSG_RESULT(no)
334: ])
1.1 root 335:
336: AC_MSG_CHECKING(for __builtin_bswap32)
1.1.1.10 root 337: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
338: [[
1.1 root 339: return __builtin_bswap32(0);
1.1.1.10 root 340: ]])], [
341: AC_MSG_RESULT(yes)
342: AC_DEFINE(HAVE___BUILTIN_BSWAP32)
343: ], [
344: AC_MSG_RESULT(no)
345: ])
1.1 root 346:
1.1.1.2 root 347: AC_MSG_CHECKING(for __builtin_bswap64)
1.1.1.10 root 348: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
349: [[
1.1.1.2 root 350: return __builtin_bswap64(0);
1.1.1.10 root 351: ]])], [
352: AC_MSG_RESULT(yes)
353: AC_DEFINE(HAVE___BUILTIN_BSWAP64)
354: ], [
355: AC_MSG_RESULT(no)
356: ])
1.1.1.2 root 357:
1.1 root 358: AC_MSG_CHECKING(for __builtin_expect)
1.1.1.10 root 359: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
1.1 root 360: if (__builtin_expect(1, 1)) return 0;
1.1.1.10 root 361: ]])], [
362: AC_MSG_RESULT(yes)
363: AC_DEFINE(HAVE___BUILTIN_EXPECT)
364: ], [
365: AC_MSG_RESULT(no)
366: ])
1.1 root 367:
1.1.1.15 root 368: AC_MSG_CHECKING(for __builtin_rotateleft32)
369: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
370: [[
371: return __builtin_rotateleft32(1, 1);
372: ]])], [
373: AC_MSG_RESULT(yes)
374: AC_DEFINE(HAVE___BUILTIN_ROTATELEFT32)
375: ], [
376: AC_MSG_RESULT(no)
377: ])
378:
379: AC_MSG_CHECKING(for __builtin_rotateright32)
380: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
381: [[
382: return __builtin_rotateright32(1, 1);
383: ]])], [
384: AC_MSG_RESULT(yes)
385: AC_DEFINE(HAVE___BUILTIN_ROTATERIGHT32)
386: ], [
387: AC_MSG_RESULT(no)
388: ])
389:
1.1 root 390: AC_MSG_CHECKING(for __builtin_unreachable)
1.1.1.10 root 391: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
1.1 root 392: __builtin_unreachable();
1.1.1.10 root 393: ]])], [
394: AC_MSG_RESULT(yes)
395: AC_DEFINE(HAVE___BUILTIN_UNREACHABLE)
396: ], [
397: AC_MSG_RESULT(no)
398: ])
1.1 root 399:
400: AC_MSG_CHECKING(for __attribute__((__fallthrough__)))
401: old_CXXFLAGS="${CXXFLAGS}"
402: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
1.1.1.10 root 403: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
404: [
1.1 root 405: extern int x;
406: switch (x) {
407: case 0:
408: __attribute__((__fallthrough__));
409: case 1:
410: break;
411: }
1.1.1.10 root 412: ])], [
413: AC_MSG_RESULT([yes])
414: AC_DEFINE([HAVE___ATTRIBUTE_FALLTHROUGH])
415: ], [
416: AC_MSG_RESULT([no])
417: ])
1.1 root 418: CXXFLAGS="${old_CXXFLAGS}"
419:
420: dnl とりあえず __format__ までしか調べてないので、
421: dnl その中の __printf__ とかまで調べる必要ができたら直すこと。
422: AC_MSG_CHECKING(for __attribute__((__format__)))
423: old_CXXFLAGS="${CXXFLAGS}"
424: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
425: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
426: [
427: extern int f(const char *f, ...)
428: __attribute__((__format__(__printf__, 1, 2)));
1.1.1.10 root 429: ], [])], [
430: AC_MSG_RESULT([yes])
431: AC_DEFINE([HAVE___ATTRIBUTE_FORMAT])
1.1 root 432: ], [
1.1.1.10 root 433: AC_MSG_RESULT([no])
434: ])
1.1 root 435: CXXFLAGS="${old_CXXFLAGS}"
436:
437: AC_MSG_CHECKING(for __attribute__((no_sanitize)))
438: old_CXXFLAGS="${CXXFLAGS}"
439: CXXFLAGS="${CXXFLAGS} -Werror"
440: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
441: [
442: __attribute__((no_sanitize("undefined")))
443: int func() { return 0; }
1.1.1.10 root 444: ], [])], [
445: AC_MSG_RESULT([yes])
446: AC_DEFINE([HAVE___ATTRIBUTE_NO_SANITIZE])
1.1 root 447: ], [
1.1.1.10 root 448: AC_MSG_RESULT([no])
449: ])
1.1 root 450: CXXFLAGS="${old_CXXFLAGS}"
451:
452:
453: AC_MSG_CHECKING(for __attribute__((__packed__)))
454: old_CXXFLAGS="${CXXFLAGS}"
455: CXXFLAGS="${CXXFLAGS} -Werror"
1.1.1.10 root 456: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
457: [
1.1 root 458: struct x { char a; int b; } __attribute__((__packed__));
1.1.1.10 root 459: ])], [
460: AC_MSG_RESULT([yes])
461: AC_DEFINE([HAVE___ATTRIBUTE_PACKED])
462: ], [
463: AC_MSG_RESULT([no])
464: ])
1.1 root 465: CXXFLAGS="${old_CXXFLAGS}"
466:
467: AC_MSG_CHECKING(for __attribute__((__unused__)))
468: old_CXXFLAGS="${CXXFLAGS}"
469: CXXFLAGS="${CXXFLAGS} -Wunused-variable -Werror"
1.1.1.10 root 470: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
471: [
1.1 root 472: int a __attribute__((__unused__));
1.1.1.10 root 473: ])], [
474: AC_MSG_RESULT([yes])
475: AC_DEFINE([HAVE___ATTRIBUTE_UNUSED])
476: ], [
477: AC_MSG_RESULT([no])
478: ])
1.1 root 479: CXXFLAGS="${old_CXXFLAGS}"
480:
481: # Checks for library functions.
482: #AC_FUNC_MALLOC
483: #AC_FUNC_MMAP
484:
1.1.1.10 root 485: AC_MSG_CHECKING(for bswap16)
486: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
487: #if defined(HAVE_SYS_ENDIAN_H)
488: #include <sys/endian.h>
489: #endif
490: ], [
491: bswap16(0);
492: ])], [
493: AC_MSG_RESULT([yes])
494: AC_DEFINE([HAVE_BSWAP16])
495: ], [
496: AC_MSG_RESULT([no])
497: ])
498:
499: AC_MSG_CHECKING(for bswap32)
500: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
501: #if defined(HAVE_SYS_ENDIAN_H)
502: #include <sys/endian.h>
503: #endif
504: ], [
505: bswap32(0);
506: ])], [
507: AC_MSG_RESULT([yes])
508: AC_DEFINE([HAVE_BSWAP32])
509: ], [
510: AC_MSG_RESULT([no])
511: ])
512:
513: AC_MSG_CHECKING(for bswap64)
514: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
515: #if defined(HAVE_SYS_ENDIAN_H)
516: #include <sys/endian.h>
517: #endif
518: ], [
519: bswap64(0);
520: ])], [
521: AC_MSG_RESULT([yes])
522: AC_DEFINE([HAVE_BSWAP64])
523: ], [
524: AC_MSG_RESULT([no])
525: ])
526:
527: AC_MSG_CHECKING(for bswap_16)
528: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
529: #if defined(HAVE_BYTESWAP_H)
530: #include <byteswap.h>
531: #endif
532: ], [
533: bswap_16(0);
534: ])], [
535: AC_MSG_RESULT([yes])
536: AC_DEFINE([HAVE_BSWAP_16])
537: ], [
538: AC_MSG_RESULT([no])
539: ])
540:
541: AC_MSG_CHECKING(for bswap_32)
542: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
543: #if defined(HAVE_BYTESWAP_H)
544: #include <byteswap.h>
545: #endif
546: ], [
547: bswap_32(0);
548: ])], [
549: AC_MSG_RESULT([yes])
550: AC_DEFINE([HAVE_BSWAP_32])
551: ], [
552: AC_MSG_RESULT([no])
553: ])
554:
555: AC_MSG_CHECKING(for bswap_64)
556: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
557: #if defined(HAVE_BYTESWAP_H)
558: #include <byteswap.h>
559: #endif
560: ], [
561: bswap_64(0);
562: ])], [
563: AC_MSG_RESULT([yes])
564: AC_DEFINE([HAVE_BSWAP_64])
565: ], [
566: AC_MSG_RESULT([no])
567: ])
568:
569: AC_MSG_CHECKING(for swap16)
570: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
571: #if defined(HAVE_SYS_ENDIAN_H)
572: #include <sys/endian.h>
573: #endif
574: ], [
575: swap16(0);
576: ])], [
577: AC_MSG_RESULT([yes])
578: AC_DEFINE([HAVE_SWAP16])
579: ], [
580: AC_MSG_RESULT([no])
581: ])
582:
583: AC_MSG_CHECKING(for swap32)
584: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
585: #if defined(HAVE_SYS_ENDIAN_H)
586: #include <sys/endian.h>
587: #endif
588: ], [
589: swap32(0);
590: ])], [
591: AC_MSG_RESULT([yes])
592: AC_DEFINE([HAVE_SWAP32])
593: ], [
594: AC_MSG_RESULT([no])
595: ])
596:
597: AC_MSG_CHECKING(for swap64)
598: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
599: #if defined(HAVE_SYS_ENDIAN_H)
600: #include <sys/endian.h>
601: #endif
602: ], [
603: swap64(0);
604: ])], [
605: AC_MSG_RESULT([yes])
606: AC_DEFINE([HAVE_SWAP64])
607: ], [
608: AC_MSG_RESULT([no])
609: ])
610:
611: AC_MSG_CHECKING(for htobe16)
612: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
613: #if defined(HAVE_ENDIAN_H)
614: #include <endian.h>
615: #endif
616: #if defined(HAVE_SYS_ENDIAN_H)
617: #include <sys/endian.h>
618: #endif
619: #if defined(HAVE_MACHINE_ENDIAN_H)
620: #include <machine/endian.h>
621: #endif
622: ], [
623: htobe16(0);
624: ])], [
625: AC_MSG_RESULT([yes])
626: AC_DEFINE([HAVE_HTOBE16])
627: ], [
628: AC_MSG_RESULT([no])
629: ])
630:
1.1.1.20! root 631: dnl HTOBE16(x) は x = htobe16(x) するもので、htobe16() とは別物。
! 632: dnl ところが autoconf は小文字を大文字にした変数名を作る文化なので
! 633: dnl こっちは INPLACE_HTOBE16 とかにしておく。
! 634: AC_MSG_CHECKING(for HTOBE16)
! 635: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
! 636: #if defined(HAVE_ENDIAN_H)
! 637: #include <endian.h>
! 638: #endif
! 639: #if defined(HAVE_SYS_ENDIAN_H)
! 640: #include <sys/endian.h>
! 641: #endif
! 642: #if defined(HAVE_MACHINE_ENDIAN_H)
! 643: #include <machine/endian.h>
! 644: #endif
! 645: ], [
! 646: uint16_t x = 0;
! 647: HTOBE16(x);
! 648: ])], [
! 649: AC_MSG_RESULT([yes])
! 650: AC_DEFINE([HAVE_INPLACE_HTOBE16])
! 651: ], [
! 652: AC_MSG_RESULT([no])
! 653: ])
! 654:
1.1.1.15 root 655: AC_MSG_CHECKING(for CPU_COUNT)
656: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
657: #if defined(HAVE_SCHED_H)
658: #include <sched.h>
659: #endif
660: #if defined(HAVE_SYS_CPUSET_H)
661: #include <sys/cpuset.h>
662: #endif
663: ], [
664: #if defined(HAVE_CPUSET_T)
665: cpuset_t set;
666: #elif defined(HAVE_CPU_SET_T)
667: cpu_set_t set;
668: #endif
669: CPU_COUNT(&set);
670: ])], [
671: AC_MSG_RESULT([yes])
672: AC_DEFINE([HAVE_CPU_COUNT])
673: ], [
674: AC_MSG_RESULT([no])
675: ])
676:
677: AC_MSG_CHECKING(for CPU_ISSET)
678: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
679: #if defined(HAVE_SCHED_H)
680: #include <sched.h>
681: #endif
682: #if defined(HAVE_SYS_CPUSET_H)
683: #include <sys/cpuset.h>
684: #endif
685: ], [
686: #if defined(HAVE_CPUSET_T)
687: cpuset_t set;
688: #elif defined(HAVE_CPU_SET_T)
689: cpu_set_t set;
690: #endif
691: CPU_ISSET(0, &set);
692: ])], [
693: AC_MSG_RESULT([yes])
694: AC_DEFINE([HAVE_CPU_ISSET])
695: ], [
696: AC_MSG_RESULT([no])
697: ])
698:
699: AC_MSG_CHECKING(for CPU_SET)
700: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
701: #if defined(HAVE_SCHED_H)
702: #include <sched.h>
703: #endif
704: #if defined(HAVE_SYS_CPUSET_H)
705: #include <sys/cpuset.h>
706: #endif
707: ], [
708: #if defined(HAVE_CPUSET_T)
709: cpuset_t set;
710: #elif defined(HAVE_CPU_SET_T)
711: cpu_set_t set;
712: #endif
713: CPU_SET(0, &set);
714: ])], [
715: AC_MSG_RESULT([yes])
716: AC_DEFINE([HAVE_CPU_SET])
717: ], [
718: AC_MSG_RESULT([no])
719: ])
720:
721: AC_MSG_CHECKING(for CPU_ZERO)
722: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
723: #if defined(HAVE_SCHED_H)
724: #include <sched.h>
725: #endif
726: #if defined(HAVE_SYS_CPUSET_H)
727: #include <sys/cpuset.h>
728: #endif
729: ], [
730: #if defined(HAVE_CPUSET_T)
731: cpuset_t set;
732: #elif defined(HAVE_CPU_SET_T)
733: cpu_set_t set;
734: #endif
735: CPU_ZERO(&set);
736: ])], [
737: AC_MSG_RESULT([yes])
738: AC_DEFINE([HAVE_CPU_ZERO])
739: ], [
740: AC_MSG_RESULT([no])
741: ])
742:
743: AC_MSG_CHECKING(for cpuset_create)
744: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
745: #include <sched.h>
746: ], [
747: cpuset_create();
748: ])], [
749: AC_MSG_RESULT([yes])
750: AC_DEFINE([HAVE_CPUSET_CREATE])
751: ], [
752: AC_MSG_RESULT([no])
753: ])
754:
755: AC_MSG_CHECKING(for cpuset_isset)
756: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
757: #include <sched.h>
758: ], [
759: cpuset_isset(0, NULL);
760: ])], [
761: AC_MSG_RESULT([yes])
762: AC_DEFINE([HAVE_CPUSET_ISSET])
763: ], [
764: AC_MSG_RESULT([no])
765: ])
766:
767: AC_MSG_CHECKING(for cpuset_set)
768: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
769: #include <sched.h>
770: ], [
771: cpuset_set(0, NULL);
772: ])], [
773: AC_MSG_RESULT([yes])
774: AC_DEFINE([HAVE_CPUSET_SET])
775: ], [
776: AC_MSG_RESULT([no])
777: ])
778:
779: AC_MSG_CHECKING(for cpuset_size)
780: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
781: #include <sched.h>
782: ], [
783: cpuset_size(NULL);
784: ])], [
785: AC_MSG_RESULT([yes])
786: AC_DEFINE([HAVE_CPUSET_SIZE])
787: ], [
788: AC_MSG_RESULT([no])
789: ])
790:
1.1.1.14 root 791: AC_MSG_CHECKING(for statfs)
792: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
793: #include <sys/statfs.h>
794: ], [
795: struct statfs buf;
796: statfs("", &buf);
797: ])], [
798: AC_MSG_RESULT([yes])
799: AC_DEFINE([HAVE_STATFS])
800: have_statxxfs=statfs
801: ], [
802: AC_MSG_RESULT([no])
803: ])
804:
805: AC_MSG_CHECKING(for statvfs)
806: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
807: #include <sys/statvfs.h>
808: ], [
809: struct statvfs buf;
810: statvfs("", &buf);
811: ])], [
812: AC_MSG_RESULT([yes])
813: AC_DEFINE([HAVE_STATVFS])
814: have_statxxfs=statvfs
815: ], [
816: AC_MSG_RESULT([no])
817: ])
818:
819: if test -z "${have_statxxfs}"; then
820: AC_MSG_FAILURE([*** No statfs() nor statvfs() found])
821: fi
822:
823: AC_CHECK_MEMBER([struct stat.st_mtimespec], [
824: AC_DEFINE([HAVE_STAT_ST_TIMESPEC])
825: ], [], [
826: #include <sys/stat.h>
827: ])
828:
829: AC_MSG_CHECKING(for timegm)
830: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
831: #include <time.h>
832: ], [
833: timegm(NULL);
834: ])], [
835: AC_MSG_RESULT([yes])
836: ], [
837: AC_MSG_RESULT([no])
838: AC_MSG_FAILURE([*** No timegm() found])
839: ])
840:
1.1.1.10 root 841: AC_MSG_CHECKING(for pthread_getname_np)
842: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1.1.1.3 root 843: #include <pthread.h>
844: #if defined(HAVE_PTHREAD_NP_H)
845: #include <pthread_np.h>
846: #endif
1.1.1.10 root 847: ]], [[
848: char name[32];
849: pthread_getname_np(pthread_self(), name, sizeof(name));
850: ]])], [
851: AC_MSG_RESULT(yes)
852: AC_DEFINE(HAVE_PTHREAD_GETNAME_NP)
1.1.1.3 root 853: ], [
1.1.1.10 root 854: AC_MSG_RESULT(no)
855: ])
856:
857: AC_MSG_CHECKING(for pthread_get_name_np)
858: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
859: #include <pthread.h>
860: #if defined(HAVE_PTHREAD_NP_H)
861: #include <pthread_np.h>
862: #endif
863: ]], [[
864: char name[32];
865: pthread_get_name_np(pthread_self(), name, sizeof(name));
866: ]])], [
867: AC_MSG_RESULT(yes)
868: AC_DEFINE(HAVE_PTHREAD_GET_NAME_NP)
869: ], [
870: AC_MSG_RESULT(no)
871: ])
872:
873: AC_MSG_CHECKING(for pthread_setname_np(name))
874: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
875: #include <pthread.h>
876: #if defined(HAVE_PTHREAD_NP_H)
877: #include <pthread_np.h>
878: #endif
879: ]], [[
1.1 root 880: pthread_setname_np("");
1.1.1.10 root 881: ]])], [
882: AC_MSG_RESULT(yes)
883: AC_DEFINE(HAVE_PTHREAD_SETNAME_NP_name)
884: ], [
885: AC_MSG_RESULT(no)
886: ])
1.1 root 887:
888: AC_MSG_CHECKING(for pthread_setname_np(thread, name))
1.1.1.10 root 889: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1.1.1.3 root 890: #include <pthread.h>
891: #if defined(HAVE_PTHREAD_NP_H)
892: #include <pthread_np.h>
893: #endif
1.1.1.10 root 894: ]], [[
1.1 root 895: pthread_setname_np(pthread_self(), "");
1.1.1.10 root 896: ]])], [
897: AC_MSG_RESULT(yes)
898: AC_DEFINE(HAVE_PTHREAD_SETNAME_NP_th_name)
899: ], [
900: AC_MSG_RESULT(no)
901: ])
1.1 root 902:
903: AC_MSG_CHECKING(for pthread_setname_np(thread, name, arg))
1.1.1.10 root 904: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1.1.1.3 root 905: #include <pthread.h>
906: #if defined(HAVE_PTHREAD_NP_H)
907: #include <pthread_np.h>
908: #endif
1.1.1.10 root 909: ]], [[
1.1 root 910: pthread_setname_np(pthread_self(), "", (void*)0);
1.1.1.10 root 911: ]])], [
912: AC_MSG_RESULT(yes)
913: AC_DEFINE(HAVE_PTHREAD_SETNAME_NP_th_name_arg)
914: ], [
915: AC_MSG_RESULT(no)
916: ])
1.1.1.3 root 917:
918: AC_MSG_CHECKING(for pthread_set_name_np(thread, name))
1.1.1.10 root 919: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1.1.1.3 root 920: #include <pthread.h>
921: #if defined(HAVE_PTHREAD_NP_H)
922: #include <pthread_np.h>
923: #endif
1.1.1.10 root 924: ]], [[
1.1.1.3 root 925: pthread_set_name_np(pthread_self(), "");
1.1.1.10 root 926: ]])],[
927: AC_MSG_RESULT(yes)
928: AC_DEFINE(HAVE_PTHREAD_SET_NAME_NP_th_name)
929: ], [
930: AC_MSG_RESULT(no)
931: ])
1.1 root 932:
1.1.1.15 root 933: AC_MSG_CHECKING(for pthread_setaffinity_np)
934: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
935: #include <pthread.h>
936: #if defined(HAVE_PTHREAD_NP_H)
937: #include <pthread_np.h>
938: #endif
939: ]], [[
940: pthread_setaffinity_np(pthread_self(), 0, NULL);
941: ]])], [
942: AC_MSG_RESULT(yes)
943: AC_DEFINE(HAVE_PTHREAD_SETAFFINITY_NP)
944: ], [
945: AC_MSG_RESULT(no)
946: ])
947:
948:
1.1.1.8 root 949: #
950: # Network
951: #
952: AC_MSG_CHECKING(for AF_PACKET)
1.1.1.10 root 953: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1.1.1.8 root 954: #include <sys/socket.h>
1.1.1.10 root 955: ]], [[
1.1.1.8 root 956: AF_PACKET;
1.1.1.10 root 957: ]])], [
958: AC_MSG_RESULT(yes)
959: AC_DEFINE(HAVE_HOSTNET_AFPACKET)
960: AC_SUBST(HOSTNET_AFPACKET, yes)
1.1.1.19 root 961: netdriver_afpacket=yes
1.1.1.10 root 962: ], [
963: AC_MSG_RESULT(no)
1.1.1.19 root 964: netdriver_afpacket=no
1.1.1.10 root 965: ])
1.1.1.8 root 966:
967: AC_MSG_CHECKING(for tap(4))
1.1.1.6 root 968: case "${host_os}" in
969: linux*)
970: if test x"$ac_cv_header_linux_if_tun_h" = xyes; then
1.1.1.8 root 971: netdriver_tap=yes
1.1.1.6 root 972: fi
973: ;;
974: openbsd*)
975: # OpenBSD has no <net/if_tap.h> but supports tap(4).
1.1.1.8 root 976: netdriver_tap=yes
1.1.1.6 root 977: ;;
1.1.1.8 root 978: *)
1.1.1.6 root 979: if test x"$ac_cv_header_net_if_tap_h" = xyes; then
1.1.1.8 root 980: netdriver_tap=yes
1.1.1.6 root 981: fi
1.1.1.8 root 982: ;;
983: esac
984: if test x"$netdriver_tap" = xyes; then
985: AC_MSG_RESULT([yes])
986: AC_DEFINE([HAVE_HOSTNET_TAP])
987: AC_SUBST([HOSTNET_TAP], [yes])
988: else
989: AC_MSG_RESULT([no])
990: fi
991:
992: AC_MSG_CHECKING(for bpf(4))
993: if test x"$ac_cv_header_net_bpf_h" = xyes; then
994: AC_MSG_RESULT([yes])
995: AC_DEFINE([HAVE_HOSTNET_BPF])
996: AC_SUBST([HOSTNET_BPF], [yes])
1.1.1.19 root 997: netdriver_bpf=yes
1.1.1.8 root 998: else
999: AC_MSG_RESULT([no])
1.1.1.19 root 1000: netdriver_bpf=no
1.1 root 1001: fi
1002:
1.1.1.14 root 1003: #
1004: # Other libraries
1005: #
1006:
1.1.1.17 root 1007: dnl # MY_CHECK_LIB($1=name, $2=libs, $3=include, $4=src)
1008: dnl # name は変数名に付けるライブラリ名 ("libslirp" とか "libiconv" とか)
1009: dnl # libs はライブラリ引数 ("-lslirp" とか)
1010: dnl # include, src は検出用のヘッダとソース片。
1011: dnl # ただし src は実行可能で害のないものを指定すること。
1012: dnl # PATHS からライブラリを探してそのパスとかをセットする。
1013: dnl # has_${name}=<yes|no>
1014: dnl # $CPPFLAGS_${name}=...
1015: dnl # $LIBS_${name}=...
1016: AC_DEFUN([MY_CHECK_LIB], [
1.1.1.14 root 1017: AC_MSG_CHECKING([for $1])
1.1.1.17 root 1018: old_CPPFLAGS=${CPPFLAGS}
1019: old_LIBS=${LIBS}
1.1.1.14 root 1020: for path in ${PATHS}; do
1021: case ${path} in
1022: none)
1.1.1.17 root 1023: LIBS="$2"
1.1.1.14 root 1024: ;;
1025: *)
1.1.1.17 root 1026: CPPFLAGS="-I${path}/include"
1027: LIBS="-L${path}/lib $2"
1.1.1.14 root 1028: ;;
1029: esac
1030: AC_LINK_IFELSE([AC_LANG_PROGRAM([$3], [$4])], [
1031: has_$1=yes
1.1.1.17 root 1032:
1033: dnl リンクできれば -Wl,-R が必要か調べる。
1034: AC_RUN_IFELSE([AC_LANG_SOURCE([[
1035: $3
1036: int main() {
1037: $4;
1038: return 0;
1039: }
1040: ]])], [
1041: dnl 実行できれば追加しなくていい。
1042: ], [
1043: LIBS="-L${path}/lib -Wl,-R,${path}/lib $2"
1044: ])
1045:
1.1.1.14 root 1046: break
1047: ], [
1048: has_$1=no
1049: ])
1050: done
1051: if test x"${has_$1}" = x"yes"; then
1052: AC_MSG_RESULT([yes])
1.1.1.17 root 1053: CPPFLAGS_$1=${CPPFLAGS}
1054: LIBS_$1=${LIBS}
1.1.1.14 root 1055: else
1056: AC_MSG_RESULT([no])
1057: fi
1.1.1.17 root 1058: CPPFLAGS=${old_CPPFLAGS}
1059: LIBS=${old_LIBS}
1.1.1.14 root 1060: ])
1061:
1062: PATHS="none /usr/pkg /usr/local"
1063:
1.1 root 1064: # libbsd on Linux
1.1.1.5 root 1065: AC_CHECK_LIB(c, getprogname, ,)
1.1 root 1066: AC_CHECK_LIB(bsd, getprogname,
1.1.1.6 root 1067: LIBS="${LIBS} -lbsd"
1068: )
1.1.1.5 root 1069: # なければ停止する
1070: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1071: [
1072: #include <stdlib.h>
1073: #include "confdefs.h"
1074: #if defined(HAVE_BSD_BSD_H)
1075: #include <bsd/bsd.h>
1076: #endif
1077: ], [
1078: getprogname()
1.1.1.10 root 1079: ])], [
1.1.1.5 root 1080: # nothing to do on success
1.1.1.10 root 1081: ], [
1082: AC_MSG_ERROR([*** getprogname is not found.
1.1.1.7 root 1083: *** If you use Ubuntu, sudo apt install libbsd-dev])
1.1.1.5 root 1084: ]
1085: )
1.1 root 1086:
1087: # libkqueue on Linux
1088: AC_CHECK_LIB(kqueue, kqueue,
1.1.1.6 root 1089: LIBS="${LIBS} -lkqueue"
1090: )
1.1 root 1091:
1.1.1.5 root 1092: AC_CHECK_LIB(z, gzclose,
1.1.1.6 root 1093: LIBS="${LIBS} -lz",
1.1.1.5 root 1094: [AC_MSG_ERROR([*** zlib is not found.
1.1.1.7 root 1095: *** If use use Ubuntu, sudo apt install zlib1g-dev])]
1.1.1.5 root 1096: )
1097:
1.1.1.16 root 1098: # libslirp
1099: AC_ARG_WITH([libslirp],
1100: [AS_HELP_STRING([--without-libslirp],
1101: [disable usermode network (using SLIRP)])],
1102: [],
1103: [with_libslirp=yes])
1104:
1105: AS_IF([test "x$with_libslirp" != "xno"], [
1.1.1.17 root 1106: MY_CHECK_LIB([libslirp], [-lslirp], [
1.1.1.16 root 1107: #include <slirp/libslirp.h>
1108: ], [
1109: slirp_version_string();
1110: ])
1111: if test x"${has_libslirp}" = x"yes"; then
1112: AC_DEFINE([HAVE_HOSTNET_SLIRP])
1113: AC_SUBST([HOSTNET_SLIRP], [yes])
1.1.1.17 root 1114: AC_SUBST([CPPFLAGS_SLIRP], [${CPPFLAGS_libslirp}])
1115: AC_SUBST([LIBS_SLIRP], [${LIBS_libslirp}])
1.1.1.16 root 1116: else
1117: AC_MSG_ERROR([*** libslirp is not found.
1118: *** If use use pkgsrc, install net/libslirp.
1119: *** If you use Ubuntu, sudo apt install libslirp-dev.
1120: *** Or specify --without-libslirp (it disables hostnet-driver=usermode).])
1121: fi
1122: ], [
1123: AC_SUBST([HOSTNET_SLIRP], [no])
1124: ])
1125:
1.1.1.19 root 1126: # ALSA
1127: case "${host_os}" in
1128: linux*)
1129: default_alsa=yes
1130: ;;
1131: *)
1132: default_alsa=no
1133: ;;
1134: esac
1135: AC_ARG_WITH([alsa],
1136: [AS_HELP_STRING([--with-alsa],
1137: [enable ALSA support (default:yes on Linux, otherwise no)])],
1138: [with_alsa=${withval}],
1139: [with_alsa=${default_alsa}])
1140: sounddriver_alsa=no
1141: if test x"${with_alsa}" = xyes; then
1142: AC_CHECK_LIB(asound, snd_pcm_open,
1143: [has_asound=yes],
1144: [has_asound=no])
1145: if test x"${ac_cv_header_alsa_asoundlib_h}" = xyes -a \
1146: x"${ac_cv_lib_asound_snd_pcm_open}" = xyes; then
1147: AC_DEFINE([HAVE_HOSTSOUND_ALSA])
1148: AC_SUBST([HOSTSOUND_ALSA], [yes])
1149: LIBS_SOUND="${LIBS_SOUND} -lasound"
1150: sounddriver_alsa=yes
1151: else
1152: AC_MSG_ERROR([*** <alsa/asoundlib.h> or libasound not found.
1153: *** If you use Ubuntu, sudo apt install libasound2-dev.
1154: *** Or specify --without-alsa (it disables hostsound-driver=alsa).])
1155: fi
1156: fi
1157:
1158: # NetBSD audio
1159: if test x"${ac_cv_header_sys_audioio_h}" = xyes; then
1160: AC_MSG_CHECKING(for AUDIO_GETINFO)
1161: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1162: #include <sys/ioctl.h>
1163: #include <sys/audioio.h>
1164: #include <unistd.h>
1165: ], [
1166: struct audio_info info;
1167: AUDIO_INITINFO(&info);
1168: ioctl(0, AUDIO_GETINFO, &info);
1169: ])], [
1170: AC_MSG_RESULT([yes])
1171: AC_DEFINE([HAVE_HOSTSOUND_NETBSD])
1172: AC_SUBST([HOSTSOUND_NETBSD], [yes])
1173: sounddriver_netbsd=yes
1174: ], [
1175: AC_MSG_RESULT([no])
1176: sounddriver_netbsd=no
1177: ])
1178: fi
1179:
1180: # OpenBSD sndio
1181: if test x"${ac_cv_header_sndio_h}" = xyes; then
1182: AC_DEFINE([HAVE_HOSTSOUND_SNDIO])
1183: AC_SUBST([HOSTSOUND_SNDIO], [yes])
1184: LIBS_SOUND="${LIBS_SOUND} -lsndio"
1185: sounddriver_sndio=yes
1186: else
1187: sounddriver_sndio=no
1188: fi
1189:
1190: AC_SUBST([LIBS_SOUND], [${LIBS_SOUND}])
1191:
1.1 root 1192: # wxWidgets
1.1.1.10 root 1193: AC_ARG_WITH([gui],
1194: [AS_HELP_STRING([--without-gui], [disable GUI support])],
1195: [],
1196: [with_gui=yes])
1197:
1198: AS_IF([test "x$with_gui" != xno], [
1199: AC_MSG_CHECKING(for wx-config)
1.1.1.14 root 1200: wxconfig_paths="${WX_CONFIG} wx-config-3.2 wx-config-3.0 wx-config"
1.1.1.10 root 1201: wxconfig=""
1202: for c in ${wxconfig_paths}; do
1203: ver=`$c --version 2>&1 | cut -f 1 -d .`
1204: if test "$ver" = "3"; then
1205: wxconfig=$c
1206: break
1207: fi
1208: done
1209: if test -z "$wxconfig"; then
1.1.1.14 root 1210: AC_MSG_ERROR([*** wxWidgets-3.2 nor -3.0 not found in ${wxconfig_paths}
1211: *** If you use pkgsrc, install x11/wxGTK32.
1.1.1.7 root 1212: *** If you use Ubuntu, sudo apt install libwxgtk3.0-gtk3-dev])
1.1.1.10 root 1213: else
1214: AC_MSG_RESULT([$wxconfig])
1.1 root 1215:
1.1.1.10 root 1216: AC_MSG_CHECKING(for wxWidgets version)
1217: wxversion=`$wxconfig --version`
1218: AC_MSG_RESULT([$wxversion])
1.1.1.14 root 1219: wxmajorminor=`echo $wxversion | awk -F . '{print $1 $2}'`
1220: AC_SUBST([WX_MAJORMINOR], [${wxmajorminor}])
1.1.1.10 root 1221:
1222: wxcppflags=`$wxconfig --cppflags`
1223: wxlibs=`$wxconfig --libs`
1224:
1225: case "${host_os}" in
1226: darwin*)
1227: # XXX -framework AudioToolbox が指定されているとリンカがこけるorz
1228: wxlibs=[`echo $wxlibs | sed -e 's/-framework AudioToolbox//'`]
1229: ;;
1230: esac
1231:
1.1.1.17 root 1232: dnl -Wl,-R が必要か調べる。
1.1.1.18 root 1233: AC_MSG_CHECKING([whether wx-config requires -Wl,-R])
1234: old_CPPFLAGS="${CPPFLAGS}"
1235: old_LIBS="${LIBS}"
1236: CPPFLAGS="${CPPFLAGS} ${wxcppflags}"
1237: LIBS="${LIBS} ${wxlibs}"
1.1.1.17 root 1238: AC_RUN_IFELSE([AC_LANG_SOURCE([[
1239: #include <wx/wx.h>
1.1.1.18 root 1240: int main() {
1241: wxInitializer init;
1242: return !init;
1243: }
1.1.1.17 root 1244: ]])], [
1245: dnl 実行できれば追加しなくていい。
1.1.1.18 root 1246: AC_MSG_RESULT([no])
1.1.1.17 root 1247: ], [
1.1.1.18 root 1248: AC_MSG_RESULT([yes])
1.1.1.17 root 1249: wxlibs=[`echo $wxlibs | sed -e 's/-L\([^ ]*\) /-L\1 -Wl,-R,\1 /'`]
1250: ])
1.1.1.18 root 1251: CPPFLAGS="${old_CPPFLAGS}"
1252: LIBS="${old_LIBS}"
1.1.1.17 root 1253:
1.1.1.10 root 1254: AC_SUBST([WITH_GUI], [yes])
1.1.1.17 root 1255: AC_SUBST([CPPFLAGS_WXWIDGETS], [$wxcppflags])
1256: AC_SUBST([LIBS_WXWIDGETS], [$wxlibs])
1.1.1.10 root 1257: fi
1.1 root 1258:
1.1.1.10 root 1259: # gettext
1260: AC_CHECK_TOOL([MSGFMT], [msgfmt], [:])
1261: if test $MSGFMT = [:]; then
1262: AC_MSG_ERROR([*** msgfmt not found.
1.1.1.7 root 1263: *** If you use pkgsrc, install devel/gettext-tools.
1264: *** If you use Ubuntu, sudo apt install gettext])
1.1.1.10 root 1265: fi
1266: ], [
1267: AC_SUBST([WITH_GUI], [no])
1268: ])
1.1.1.5 root 1269:
1.1.1.14 root 1270: # iconv は util/ でのみ必要。
1.1.1.17 root 1271: MY_CHECK_LIB([libiconv], [-liconv], [
1.1.1.14 root 1272: #include <iconv.h>
1273: ], [
1274: iconv_open("", "");
1275: ])
1.1.1.17 root 1276: AC_SUBST([CPPFLAGS_ICONV], [${CPPFLAGS_libiconv}])
1277: AC_SUBST([LIBS_ICONV], [${LIBS_libiconv}])
1.1.1.14 root 1278:
1.1.1.15 root 1279: if test x"${has_libiconv}" = x"yes"; then
1.1.1.14 root 1280: AC_MSG_CHECKING(whether iconv needs const)
1281: old_CPPFLAGS="${CPPFLAGS}"
1.1.1.17 root 1282: CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_libiconv} -Werror"
1.1.1.14 root 1283: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1284: #include <iconv.h>
1285: ]], [[
1286: const char **a;
1287: iconv(0, a, 0, 0, 0);
1288: ]])], [
1289: AC_MSG_RESULT(yes)
1290: AC_DEFINE(HAVE_ICONV_CONST)
1291: ], [
1292: AC_MSG_RESULT(no)
1293: ])
1294: CPPFLAGS="${old_CPPFLAGS}"
1295: fi
1296:
1.1.1.17 root 1297: AC_CONFIG_FILES([Makefile.cfg])
1.1.1.2 root 1298: AC_CONFIG_HEADERS([config-nono.h])
1.1 root 1299: AC_OUTPUT
1.1.1.19 root 1300:
1301: # サマリを表示
1302: echo ""
1303: echo "Configuration summary:"
1304: echo -n "HostNet supports: "
1305: if test x"$netdriver_afpacket" = xyes; then
1306: echo -n " afpacket"
1307: fi
1308: if test x"$netdriver_bpf" = xyes; then
1309: echo -n " bpf"
1310: fi
1311: if test x"$has_libslirp" = xyes; then
1312: echo -n " slirp"
1313: fi
1314: if test x"$netdriver_tap" = xyes; then
1315: echo -n " tap"
1316: fi
1317: echo ""
1318: echo -n "HostSound supports: "
1319: if test x"$sounddriver_alsa" = xyes; then
1320: echo -n " alsa"
1321: fi
1322: if test x"$sounddriver_netbsd" = xyes; then
1323: echo -n " netbsd"
1324: fi
1325: if test x"$sounddriver_sndio" = xyes; then
1326: echo -n " sndio"
1327: fi
1328: echo ""
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.