|
|
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"
55: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
56: AC_MSG_RESULT([yes])
1.1.1.11 root 57: eval `echo cc_has$1=yes | sed -e 's/-/_/g'`
1.1.1.3 root 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.11 root 67: # -Wshadow-local があればそっちを使う(gcc>=7)、なければ -Wshadow (clang)
68: ADD_CC_WARN_IF(-Wshadow-local)
69: if test x"${cc_has_Wshadow_local}" != xyes; then
70: ADD_CC_WARN_IF(-Wshadow)
71: fi
1.1.1.15! root 72: ADD_CC_WARN_IF(-Wstring-conversion)
! 73: ADD_CC_WARN_IF(-Wtype-limits)
1.1.1.3 root 74: AC_LANG_POP([C])
75: AC_SUBST([WARNFLAGS_C])
76:
77: # C++ コンパイラのワーニングオプション
78: # (AC_LANG は C++ のまま継続する)
1.1.1.10 root 79: AC_LANG([C++])
1.1.1.4 root 80: AC_DEFUN([ADD_CXX_WARN_IF],[
1.1.1.3 root 81: AC_MSG_CHECKING([whether c++ accepts $1])
82: old_CXXFLAGS="${CXXFLAGS}"
83: CXXFLAGS="${CXXFLAGS} -Werror $1"
84: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
85: AC_MSG_RESULT([yes])
1.1.1.11 root 86: eval `echo cxx_has$1=yes | sed -e 's/-/_/g'`
1.1.1.3 root 87: WARNFLAGS_CXX="${WARNFLAGS_CXX} $1",
88: AC_MSG_RESULT([no]))
89: CXXFLAGS="${old_CXXFLAGS}"
90: ])
1.1.1.4 root 91: ADD_CXX_WARN_IF(-Wcast-qual)
92: ADD_CXX_WARN_IF(-Wextra-semi)
93: ADD_CXX_WARN_IF(-Winconsistent-missing-destructor-override)
1.1.1.15! root 94: ADD_CXX_WARN_IF(-Winconsistent-missing-override)
1.1.1.4 root 95: ADD_CXX_WARN_IF(-Wlogical-op)
96: ADD_CXX_WARN_IF(-Wmissing-prototypes)
97: ADD_CXX_WARN_IF(-Wmissing-variable-declarations)
1.1.1.11 root 98: # -Wshadow-local があればそっちを使う(gcc>=7)、なければ -Wshadow (clang)
99: ADD_CXX_WARN_IF(-Wshadow-local)
100: if test x"${cxx_has_Wshadow_local}" != xyes; then
101: ADD_CXX_WARN_IF(-Wshadow)
102: fi
1.1.1.15! root 103: ADD_CXX_WARN_IF(-Wstring-conversion)
! 104: ADD_CXX_WARN_IF(-Wsuggest-destructor-override)
1.1.1.12 root 105: ADD_CXX_WARN_IF(-Wsuggest-override)
1.1.1.15! root 106: ADD_CXX_WARN_IF(-Wtype-limits)
1.1.1.4 root 107: ADD_CXX_WARN_IF(-Wvla-extension)
1.1.1.3 root 108: AC_SUBST([WARNFLAGS_CXX])
1.1 root 109:
1.1.1.15! root 110: # コンパイラが AVX2 をサポートしているか。
1.1.1.14 root 111: AC_ARG_ENABLE([avx2],
112: [AS_HELP_STRING([--disable-avx2], [disable avx2 support])],
113: [],
114: [enable_avx2=yes])
115:
116: AS_IF([test x"${enable_avx2}" != x"no"], [
1.1.1.15! root 117: AC_MSG_CHECKING(whether the compiler supports AVX2)
1.1.1.14 root 118: if test x"${host_cpu}" = x"x86_64"; then
119: if test x"${host_cpu}" = x"${build_cpu}"; then
120: old_CXXFLAGS="${CXXFLAGS}"
121: CXXFLAGS="${CXXFLAGS} -mavx2"
122: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
123: #include <x86intrin.h>
124: ], [
125: #if !defined(__AVX2__)
126: #error __AVX2__ is not defined by the compiler.
127: #endif
128: __m256i v;
129: ])], [
130: have_avx2=yes
131: ])
132: CXXFLAGS="${old_CXXFLAGS}"
133: fi
134: fi
135: if test x"${have_avx2}" = x"yes"; then
136: AC_MSG_RESULT([yes])
137: AC_DEFINE([HAVE_AVX2])
138: AC_SUBST(HOST_HAS_AVX2, yes)
139: else
140: AC_MSG_RESULT([no])
141: fi
142: ], [
143: ])
144:
1.1.1.15! root 145: # コンパイラが NEON をサポートしているか。
! 146: AC_ARG_ENABLE([neon],
! 147: [AS_HELP_STRING([--disable-neon], [disable NEON support])],
! 148: [],
! 149: [enable_neon=yes])
! 150:
! 151: AS_IF([test x"${enable_neon}" != x"no"], [
! 152: AC_MSG_CHECKING(whether the compiler supports NEON)
! 153: if test x"${host_cpu}" = x"aarch64"; then
! 154: if test x"${host_cpu}" = x"${build_cpu}"; then
! 155: old_CXXFLAGS="${CXXFLAGS}"
! 156: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
! 157: #include <arm_neon.h>
! 158: ], [
! 159: uint8x16_t v;
! 160: ])], [
! 161: have_neon=yes
! 162: ])
! 163: CXXFLAGS="${old_CXXFLAGS}"
! 164: fi
! 165: fi
! 166: if test x"${have_neon}" = x"yes"; then
! 167: AC_MSG_RESULT([yes])
! 168: AC_DEFINE([HAVE_NEON])
! 169: AC_SUBST(HOST_HAS_NEON, yes)
! 170: else
! 171: AC_MSG_RESULT([no])
! 172: fi
! 173: ], [
! 174: ])
! 175:
1.1 root 176: # Checks for libraries.
177:
178: # Checks for header files.
179: AC_CHECK_HEADERS([bsd/bsd.h])
1.1.1.10 root 180: AC_CHECK_HEADERS([bsd/stdio.h])
181: AC_CHECK_HEADERS([byteswap.h])
1.1 root 182: AC_CHECK_HEADERS([endian.h])
183: AC_CHECK_HEADERS([kqueue/sys/event.h])
1.1.1.3 root 184: AC_CHECK_HEADERS([pthread_np.h])
1.1.1.15! root 185: AC_CHECK_HEADERS([sched.h])
! 186: AC_CHECK_HEADERS([sys/cpuset.h])
1.1 root 187: AC_CHECK_HEADERS([sys/endian.h])
188: AC_CHECK_HEADERS([sys/event.h])
189: AC_CHECK_HEADERS([net/bpf.h])
190: AC_CHECK_HEADERS([net/if_tap.h])
191: AC_CHECK_HEADERS([linux/if_tun.h])
1.1.1.10 root 192: AC_CHECK_HEADERS([libkern/OSByteOrder.h])
193: AC_CHECK_HEADERS([machine/endian.h])
1.1 root 194:
195: # Linux で <kqueue/sys/event.h> がなければここで停止したほうがいい
1.1.1.6 root 196: case "${host_os}" in
197: linux*)
198: if test "$ac_cv_header_kqueue_sys_event_h" != "yes"; then
199: AC_MSG_ERROR([*** kqueue is not found.
1.1.1.7 root 200: *** If you use Ubuntu, sudo apt install libkqueue-dev])
1.1.1.6 root 201: fi
202: ;;
203: esac
1.1 root 204:
205: # Checks for typedefs, structures, and compiler characteristics.
206: AC_CHECK_HEADER_STDBOOL
207: #AC_C_INLINE
208: #AC_TYPE_INT16_T
209: #AC_TYPE_INT32_T
210: #AC_TYPE_INT64_T
211: #AC_TYPE_INT8_T
212: #AC_TYPE_SIZE_T
213: #AC_TYPE_UINT16_T
214: #AC_TYPE_UINT32_T
215: #AC_TYPE_UINT64_T
216: #AC_TYPE_UINT8_T
217:
1.1.1.15! root 218: AC_MSG_CHECKING(for cpuset_t)
! 219: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
! 220: #if defined(HAVE_SCHED_H)
! 221: #include <sched.h>
! 222: #endif
! 223: #if defined(HAVE_SYS_CPUSET_H)
! 224: #include <sys/cpuset.h>
! 225: #endif
! 226: ]], [[
! 227: cpuset_t set;
! 228: ]])], [
! 229: AC_MSG_RESULT(yes)
! 230: AC_DEFINE(HAVE_CPUSET_T)
! 231: ], [
! 232: AC_MSG_RESULT(no)
! 233: ])
! 234:
! 235: AC_MSG_CHECKING(for cpuset_t *)
! 236: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
! 237: #if defined(HAVE_SCHED_H)
! 238: #include <sched.h>
! 239: #endif
! 240: #if defined(HAVE_SYS_CPUSET_H)
! 241: #include <sys/cpuset.h>
! 242: #endif
! 243: ]], [[
! 244: cpuset_t *set;
! 245: ]])], [
! 246: AC_MSG_RESULT(yes)
! 247: AC_DEFINE(HAVE_CPUSET_T_P)
! 248: ], [
! 249: AC_MSG_RESULT(no)
! 250: ])
! 251:
! 252: AC_MSG_CHECKING(for cpu_set_t)
! 253: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
! 254: #include <sched.h>
! 255: ]], [[
! 256: cpu_set_t set;
! 257: ]])], [
! 258: AC_MSG_RESULT(yes)
! 259: AC_DEFINE(HAVE_CPU_SET_T)
! 260: ], [
! 261: AC_MSG_RESULT(no)
! 262: ])
! 263:
! 264:
! 265: # __builtin
! 266:
1.1 root 267: AC_MSG_CHECKING(for __builtin_assume)
1.1.1.10 root 268: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
269: [[
1.1 root 270: __builtin_assume(1);
1.1.1.10 root 271: ]])], [
272: AC_MSG_RESULT(yes)
273: AC_DEFINE(HAVE___BUILTIN_ASSUME)
274: ], [
275: AC_MSG_RESULT(no)
276: ])
1.1 root 277:
1.1.1.15! root 278: AC_MSG_CHECKING(for __builtin_bitreverse8)
! 279: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
! 280: [[
! 281: return __builtin_bitreverse8(1);
! 282: ]])], [
! 283: AC_MSG_RESULT(yes)
! 284: AC_DEFINE(HAVE___BUILTIN_BITREVERSE8)
! 285: ], [
! 286: AC_MSG_RESULT(no)
! 287: ])
! 288:
1.1 root 289: AC_MSG_CHECKING(for __builtin_bswap16)
1.1.1.10 root 290: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
291: [[
1.1 root 292: return __builtin_bswap16(0);
1.1.1.10 root 293: ]])], [
294: AC_MSG_RESULT(yes)
295: AC_DEFINE(HAVE___BUILTIN_BSWAP16)
296: ], [
297: AC_MSG_RESULT(no)
298: ])
1.1 root 299:
300: AC_MSG_CHECKING(for __builtin_bswap32)
1.1.1.10 root 301: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
302: [[
1.1 root 303: return __builtin_bswap32(0);
1.1.1.10 root 304: ]])], [
305: AC_MSG_RESULT(yes)
306: AC_DEFINE(HAVE___BUILTIN_BSWAP32)
307: ], [
308: AC_MSG_RESULT(no)
309: ])
1.1 root 310:
1.1.1.2 root 311: AC_MSG_CHECKING(for __builtin_bswap64)
1.1.1.10 root 312: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
313: [[
1.1.1.2 root 314: return __builtin_bswap64(0);
1.1.1.10 root 315: ]])], [
316: AC_MSG_RESULT(yes)
317: AC_DEFINE(HAVE___BUILTIN_BSWAP64)
318: ], [
319: AC_MSG_RESULT(no)
320: ])
1.1.1.2 root 321:
1.1 root 322: AC_MSG_CHECKING(for __builtin_expect)
1.1.1.10 root 323: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
1.1 root 324: if (__builtin_expect(1, 1)) return 0;
1.1.1.10 root 325: ]])], [
326: AC_MSG_RESULT(yes)
327: AC_DEFINE(HAVE___BUILTIN_EXPECT)
328: ], [
329: AC_MSG_RESULT(no)
330: ])
1.1 root 331:
1.1.1.15! root 332: AC_MSG_CHECKING(for __builtin_rotateleft32)
! 333: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
! 334: [[
! 335: return __builtin_rotateleft32(1, 1);
! 336: ]])], [
! 337: AC_MSG_RESULT(yes)
! 338: AC_DEFINE(HAVE___BUILTIN_ROTATELEFT32)
! 339: ], [
! 340: AC_MSG_RESULT(no)
! 341: ])
! 342:
! 343: AC_MSG_CHECKING(for __builtin_rotateright32)
! 344: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
! 345: [[
! 346: return __builtin_rotateright32(1, 1);
! 347: ]])], [
! 348: AC_MSG_RESULT(yes)
! 349: AC_DEFINE(HAVE___BUILTIN_ROTATERIGHT32)
! 350: ], [
! 351: AC_MSG_RESULT(no)
! 352: ])
! 353:
1.1 root 354: AC_MSG_CHECKING(for __builtin_unreachable)
1.1.1.10 root 355: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
1.1 root 356: __builtin_unreachable();
1.1.1.10 root 357: ]])], [
358: AC_MSG_RESULT(yes)
359: AC_DEFINE(HAVE___BUILTIN_UNREACHABLE)
360: ], [
361: AC_MSG_RESULT(no)
362: ])
1.1 root 363:
364: AC_MSG_CHECKING(for __attribute__((__fallthrough__)))
365: old_CXXFLAGS="${CXXFLAGS}"
366: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
1.1.1.10 root 367: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
368: [
1.1 root 369: extern int x;
370: switch (x) {
371: case 0:
372: __attribute__((__fallthrough__));
373: case 1:
374: break;
375: }
1.1.1.10 root 376: ])], [
377: AC_MSG_RESULT([yes])
378: AC_DEFINE([HAVE___ATTRIBUTE_FALLTHROUGH])
379: ], [
380: AC_MSG_RESULT([no])
381: ])
1.1 root 382: CXXFLAGS="${old_CXXFLAGS}"
383:
384: dnl とりあえず __format__ までしか調べてないので、
385: dnl その中の __printf__ とかまで調べる必要ができたら直すこと。
386: AC_MSG_CHECKING(for __attribute__((__format__)))
387: old_CXXFLAGS="${CXXFLAGS}"
388: CXXFLAGS="${CXXFLAGS} -Wall -Werror"
389: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
390: [
391: extern int f(const char *f, ...)
392: __attribute__((__format__(__printf__, 1, 2)));
1.1.1.10 root 393: ], [])], [
394: AC_MSG_RESULT([yes])
395: AC_DEFINE([HAVE___ATTRIBUTE_FORMAT])
1.1 root 396: ], [
1.1.1.10 root 397: AC_MSG_RESULT([no])
398: ])
1.1 root 399: CXXFLAGS="${old_CXXFLAGS}"
400:
401: AC_MSG_CHECKING(for __attribute__((no_sanitize)))
402: old_CXXFLAGS="${CXXFLAGS}"
403: CXXFLAGS="${CXXFLAGS} -Werror"
404: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
405: [
406: __attribute__((no_sanitize("undefined")))
407: int func() { return 0; }
1.1.1.10 root 408: ], [])], [
409: AC_MSG_RESULT([yes])
410: AC_DEFINE([HAVE___ATTRIBUTE_NO_SANITIZE])
1.1 root 411: ], [
1.1.1.10 root 412: AC_MSG_RESULT([no])
413: ])
1.1 root 414: CXXFLAGS="${old_CXXFLAGS}"
415:
416:
417: AC_MSG_CHECKING(for __attribute__((__packed__)))
418: old_CXXFLAGS="${CXXFLAGS}"
419: CXXFLAGS="${CXXFLAGS} -Werror"
1.1.1.10 root 420: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
421: [
1.1 root 422: struct x { char a; int b; } __attribute__((__packed__));
1.1.1.10 root 423: ])], [
424: AC_MSG_RESULT([yes])
425: AC_DEFINE([HAVE___ATTRIBUTE_PACKED])
426: ], [
427: AC_MSG_RESULT([no])
428: ])
1.1 root 429: CXXFLAGS="${old_CXXFLAGS}"
430:
431: AC_MSG_CHECKING(for __attribute__((__unused__)))
432: old_CXXFLAGS="${CXXFLAGS}"
433: CXXFLAGS="${CXXFLAGS} -Wunused-variable -Werror"
1.1.1.10 root 434: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
435: [
1.1 root 436: int a __attribute__((__unused__));
1.1.1.10 root 437: ])], [
438: AC_MSG_RESULT([yes])
439: AC_DEFINE([HAVE___ATTRIBUTE_UNUSED])
440: ], [
441: AC_MSG_RESULT([no])
442: ])
1.1 root 443: CXXFLAGS="${old_CXXFLAGS}"
444:
445: # Checks for library functions.
446: #AC_FUNC_MALLOC
447: #AC_FUNC_MMAP
448:
1.1.1.10 root 449: AC_MSG_CHECKING(for bswap16)
450: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
451: #if defined(HAVE_SYS_ENDIAN_H)
452: #include <sys/endian.h>
453: #endif
454: ], [
455: bswap16(0);
456: ])], [
457: AC_MSG_RESULT([yes])
458: AC_DEFINE([HAVE_BSWAP16])
459: ], [
460: AC_MSG_RESULT([no])
461: ])
462:
463: AC_MSG_CHECKING(for bswap32)
464: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
465: #if defined(HAVE_SYS_ENDIAN_H)
466: #include <sys/endian.h>
467: #endif
468: ], [
469: bswap32(0);
470: ])], [
471: AC_MSG_RESULT([yes])
472: AC_DEFINE([HAVE_BSWAP32])
473: ], [
474: AC_MSG_RESULT([no])
475: ])
476:
477: AC_MSG_CHECKING(for bswap64)
478: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
479: #if defined(HAVE_SYS_ENDIAN_H)
480: #include <sys/endian.h>
481: #endif
482: ], [
483: bswap64(0);
484: ])], [
485: AC_MSG_RESULT([yes])
486: AC_DEFINE([HAVE_BSWAP64])
487: ], [
488: AC_MSG_RESULT([no])
489: ])
490:
491: AC_MSG_CHECKING(for bswap_16)
492: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
493: #if defined(HAVE_BYTESWAP_H)
494: #include <byteswap.h>
495: #endif
496: ], [
497: bswap_16(0);
498: ])], [
499: AC_MSG_RESULT([yes])
500: AC_DEFINE([HAVE_BSWAP_16])
501: ], [
502: AC_MSG_RESULT([no])
503: ])
504:
505: AC_MSG_CHECKING(for bswap_32)
506: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
507: #if defined(HAVE_BYTESWAP_H)
508: #include <byteswap.h>
509: #endif
510: ], [
511: bswap_32(0);
512: ])], [
513: AC_MSG_RESULT([yes])
514: AC_DEFINE([HAVE_BSWAP_32])
515: ], [
516: AC_MSG_RESULT([no])
517: ])
518:
519: AC_MSG_CHECKING(for bswap_64)
520: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
521: #if defined(HAVE_BYTESWAP_H)
522: #include <byteswap.h>
523: #endif
524: ], [
525: bswap_64(0);
526: ])], [
527: AC_MSG_RESULT([yes])
528: AC_DEFINE([HAVE_BSWAP_64])
529: ], [
530: AC_MSG_RESULT([no])
531: ])
532:
533: AC_MSG_CHECKING(for swap16)
534: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
535: #if defined(HAVE_SYS_ENDIAN_H)
536: #include <sys/endian.h>
537: #endif
538: ], [
539: swap16(0);
540: ])], [
541: AC_MSG_RESULT([yes])
542: AC_DEFINE([HAVE_SWAP16])
543: ], [
544: AC_MSG_RESULT([no])
545: ])
546:
547: AC_MSG_CHECKING(for swap32)
548: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
549: #if defined(HAVE_SYS_ENDIAN_H)
550: #include <sys/endian.h>
551: #endif
552: ], [
553: swap32(0);
554: ])], [
555: AC_MSG_RESULT([yes])
556: AC_DEFINE([HAVE_SWAP32])
557: ], [
558: AC_MSG_RESULT([no])
559: ])
560:
561: AC_MSG_CHECKING(for swap64)
562: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
563: #if defined(HAVE_SYS_ENDIAN_H)
564: #include <sys/endian.h>
565: #endif
566: ], [
567: swap64(0);
568: ])], [
569: AC_MSG_RESULT([yes])
570: AC_DEFINE([HAVE_SWAP64])
571: ], [
572: AC_MSG_RESULT([no])
573: ])
574:
575: AC_MSG_CHECKING(for htobe16)
576: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
577: #if defined(HAVE_ENDIAN_H)
578: #include <endian.h>
579: #endif
580: #if defined(HAVE_SYS_ENDIAN_H)
581: #include <sys/endian.h>
582: #endif
583: #if defined(HAVE_MACHINE_ENDIAN_H)
584: #include <machine/endian.h>
585: #endif
586: ], [
587: htobe16(0);
588: ])], [
589: AC_MSG_RESULT([yes])
590: AC_DEFINE([HAVE_HTOBE16])
591: ], [
592: AC_MSG_RESULT([no])
593: ])
594:
1.1.1.15! root 595: AC_MSG_CHECKING(for CPU_COUNT)
! 596: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
! 597: #if defined(HAVE_SCHED_H)
! 598: #include <sched.h>
! 599: #endif
! 600: #if defined(HAVE_SYS_CPUSET_H)
! 601: #include <sys/cpuset.h>
! 602: #endif
! 603: ], [
! 604: #if defined(HAVE_CPUSET_T)
! 605: cpuset_t set;
! 606: #elif defined(HAVE_CPU_SET_T)
! 607: cpu_set_t set;
! 608: #endif
! 609: CPU_COUNT(&set);
! 610: ])], [
! 611: AC_MSG_RESULT([yes])
! 612: AC_DEFINE([HAVE_CPU_COUNT])
! 613: ], [
! 614: AC_MSG_RESULT([no])
! 615: ])
! 616:
! 617: AC_MSG_CHECKING(for CPU_ISSET)
! 618: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
! 619: #if defined(HAVE_SCHED_H)
! 620: #include <sched.h>
! 621: #endif
! 622: #if defined(HAVE_SYS_CPUSET_H)
! 623: #include <sys/cpuset.h>
! 624: #endif
! 625: ], [
! 626: #if defined(HAVE_CPUSET_T)
! 627: cpuset_t set;
! 628: #elif defined(HAVE_CPU_SET_T)
! 629: cpu_set_t set;
! 630: #endif
! 631: CPU_ISSET(0, &set);
! 632: ])], [
! 633: AC_MSG_RESULT([yes])
! 634: AC_DEFINE([HAVE_CPU_ISSET])
! 635: ], [
! 636: AC_MSG_RESULT([no])
! 637: ])
! 638:
! 639: AC_MSG_CHECKING(for CPU_SET)
! 640: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
! 641: #if defined(HAVE_SCHED_H)
! 642: #include <sched.h>
! 643: #endif
! 644: #if defined(HAVE_SYS_CPUSET_H)
! 645: #include <sys/cpuset.h>
! 646: #endif
! 647: ], [
! 648: #if defined(HAVE_CPUSET_T)
! 649: cpuset_t set;
! 650: #elif defined(HAVE_CPU_SET_T)
! 651: cpu_set_t set;
! 652: #endif
! 653: CPU_SET(0, &set);
! 654: ])], [
! 655: AC_MSG_RESULT([yes])
! 656: AC_DEFINE([HAVE_CPU_SET])
! 657: ], [
! 658: AC_MSG_RESULT([no])
! 659: ])
! 660:
! 661: AC_MSG_CHECKING(for CPU_ZERO)
! 662: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
! 663: #if defined(HAVE_SCHED_H)
! 664: #include <sched.h>
! 665: #endif
! 666: #if defined(HAVE_SYS_CPUSET_H)
! 667: #include <sys/cpuset.h>
! 668: #endif
! 669: ], [
! 670: #if defined(HAVE_CPUSET_T)
! 671: cpuset_t set;
! 672: #elif defined(HAVE_CPU_SET_T)
! 673: cpu_set_t set;
! 674: #endif
! 675: CPU_ZERO(&set);
! 676: ])], [
! 677: AC_MSG_RESULT([yes])
! 678: AC_DEFINE([HAVE_CPU_ZERO])
! 679: ], [
! 680: AC_MSG_RESULT([no])
! 681: ])
! 682:
! 683: AC_MSG_CHECKING(for cpuset_create)
! 684: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
! 685: #include <sched.h>
! 686: ], [
! 687: cpuset_create();
! 688: ])], [
! 689: AC_MSG_RESULT([yes])
! 690: AC_DEFINE([HAVE_CPUSET_CREATE])
! 691: ], [
! 692: AC_MSG_RESULT([no])
! 693: ])
! 694:
! 695: AC_MSG_CHECKING(for cpuset_isset)
! 696: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
! 697: #include <sched.h>
! 698: ], [
! 699: cpuset_isset(0, NULL);
! 700: ])], [
! 701: AC_MSG_RESULT([yes])
! 702: AC_DEFINE([HAVE_CPUSET_ISSET])
! 703: ], [
! 704: AC_MSG_RESULT([no])
! 705: ])
! 706:
! 707: AC_MSG_CHECKING(for cpuset_set)
! 708: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
! 709: #include <sched.h>
! 710: ], [
! 711: cpuset_set(0, NULL);
! 712: ])], [
! 713: AC_MSG_RESULT([yes])
! 714: AC_DEFINE([HAVE_CPUSET_SET])
! 715: ], [
! 716: AC_MSG_RESULT([no])
! 717: ])
! 718:
! 719: AC_MSG_CHECKING(for cpuset_size)
! 720: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
! 721: #include <sched.h>
! 722: ], [
! 723: cpuset_size(NULL);
! 724: ])], [
! 725: AC_MSG_RESULT([yes])
! 726: AC_DEFINE([HAVE_CPUSET_SIZE])
! 727: ], [
! 728: AC_MSG_RESULT([no])
! 729: ])
! 730:
1.1.1.14 root 731: AC_MSG_CHECKING(for statfs)
732: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
733: #include <sys/statfs.h>
734: ], [
735: struct statfs buf;
736: statfs("", &buf);
737: ])], [
738: AC_MSG_RESULT([yes])
739: AC_DEFINE([HAVE_STATFS])
740: have_statxxfs=statfs
741: ], [
742: AC_MSG_RESULT([no])
743: ])
744:
745: AC_MSG_CHECKING(for statvfs)
746: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
747: #include <sys/statvfs.h>
748: ], [
749: struct statvfs buf;
750: statvfs("", &buf);
751: ])], [
752: AC_MSG_RESULT([yes])
753: AC_DEFINE([HAVE_STATVFS])
754: have_statxxfs=statvfs
755: ], [
756: AC_MSG_RESULT([no])
757: ])
758:
759: if test -z "${have_statxxfs}"; then
760: AC_MSG_FAILURE([*** No statfs() nor statvfs() found])
761: fi
762:
763: AC_CHECK_MEMBER([struct stat.st_mtimespec], [
764: AC_DEFINE([HAVE_STAT_ST_TIMESPEC])
765: ], [], [
766: #include <sys/stat.h>
767: ])
768:
769: AC_MSG_CHECKING(for timegm)
770: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
771: #include <time.h>
772: ], [
773: timegm(NULL);
774: ])], [
775: AC_MSG_RESULT([yes])
776: ], [
777: AC_MSG_RESULT([no])
778: AC_MSG_FAILURE([*** No timegm() found])
779: ])
780:
1.1.1.10 root 781: AC_MSG_CHECKING(for pthread_getname_np)
782: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1.1.1.3 root 783: #include <pthread.h>
784: #if defined(HAVE_PTHREAD_NP_H)
785: #include <pthread_np.h>
786: #endif
1.1.1.10 root 787: ]], [[
788: char name[32];
789: pthread_getname_np(pthread_self(), name, sizeof(name));
790: ]])], [
791: AC_MSG_RESULT(yes)
792: AC_DEFINE(HAVE_PTHREAD_GETNAME_NP)
1.1.1.3 root 793: ], [
1.1.1.10 root 794: AC_MSG_RESULT(no)
795: ])
796:
797: AC_MSG_CHECKING(for pthread_get_name_np)
798: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
799: #include <pthread.h>
800: #if defined(HAVE_PTHREAD_NP_H)
801: #include <pthread_np.h>
802: #endif
803: ]], [[
804: char name[32];
805: pthread_get_name_np(pthread_self(), name, sizeof(name));
806: ]])], [
807: AC_MSG_RESULT(yes)
808: AC_DEFINE(HAVE_PTHREAD_GET_NAME_NP)
809: ], [
810: AC_MSG_RESULT(no)
811: ])
812:
813: AC_MSG_CHECKING(for pthread_setname_np(name))
814: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
815: #include <pthread.h>
816: #if defined(HAVE_PTHREAD_NP_H)
817: #include <pthread_np.h>
818: #endif
819: ]], [[
1.1 root 820: pthread_setname_np("");
1.1.1.10 root 821: ]])], [
822: AC_MSG_RESULT(yes)
823: AC_DEFINE(HAVE_PTHREAD_SETNAME_NP_name)
824: ], [
825: AC_MSG_RESULT(no)
826: ])
1.1 root 827:
828: AC_MSG_CHECKING(for pthread_setname_np(thread, name))
1.1.1.10 root 829: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1.1.1.3 root 830: #include <pthread.h>
831: #if defined(HAVE_PTHREAD_NP_H)
832: #include <pthread_np.h>
833: #endif
1.1.1.10 root 834: ]], [[
1.1 root 835: pthread_setname_np(pthread_self(), "");
1.1.1.10 root 836: ]])], [
837: AC_MSG_RESULT(yes)
838: AC_DEFINE(HAVE_PTHREAD_SETNAME_NP_th_name)
839: ], [
840: AC_MSG_RESULT(no)
841: ])
1.1 root 842:
843: AC_MSG_CHECKING(for pthread_setname_np(thread, name, arg))
1.1.1.10 root 844: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1.1.1.3 root 845: #include <pthread.h>
846: #if defined(HAVE_PTHREAD_NP_H)
847: #include <pthread_np.h>
848: #endif
1.1.1.10 root 849: ]], [[
1.1 root 850: pthread_setname_np(pthread_self(), "", (void*)0);
1.1.1.10 root 851: ]])], [
852: AC_MSG_RESULT(yes)
853: AC_DEFINE(HAVE_PTHREAD_SETNAME_NP_th_name_arg)
854: ], [
855: AC_MSG_RESULT(no)
856: ])
1.1.1.3 root 857:
858: AC_MSG_CHECKING(for pthread_set_name_np(thread, name))
1.1.1.10 root 859: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1.1.1.3 root 860: #include <pthread.h>
861: #if defined(HAVE_PTHREAD_NP_H)
862: #include <pthread_np.h>
863: #endif
1.1.1.10 root 864: ]], [[
1.1.1.3 root 865: pthread_set_name_np(pthread_self(), "");
1.1.1.10 root 866: ]])],[
867: AC_MSG_RESULT(yes)
868: AC_DEFINE(HAVE_PTHREAD_SET_NAME_NP_th_name)
869: ], [
870: AC_MSG_RESULT(no)
871: ])
1.1 root 872:
1.1.1.15! root 873: AC_MSG_CHECKING(for pthread_setaffinity_np)
! 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: ]], [[
! 880: pthread_setaffinity_np(pthread_self(), 0, NULL);
! 881: ]])], [
! 882: AC_MSG_RESULT(yes)
! 883: AC_DEFINE(HAVE_PTHREAD_SETAFFINITY_NP)
! 884: ], [
! 885: AC_MSG_RESULT(no)
! 886: ])
! 887:
! 888:
1.1.1.8 root 889: #
890: # Network
891: #
892: AC_MSG_CHECKING(for AF_PACKET)
1.1.1.10 root 893: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1.1.1.8 root 894: #include <sys/socket.h>
1.1.1.10 root 895: ]], [[
1.1.1.8 root 896: AF_PACKET;
1.1.1.10 root 897: ]])], [
898: AC_MSG_RESULT(yes)
899: AC_DEFINE(HAVE_HOSTNET_AFPACKET)
900: AC_SUBST(HOSTNET_AFPACKET, yes)
901: ], [
902: AC_MSG_RESULT(no)
903: ])
1.1.1.8 root 904:
905: AC_MSG_CHECKING(for tap(4))
1.1.1.6 root 906: case "${host_os}" in
907: linux*)
908: if test x"$ac_cv_header_linux_if_tun_h" = xyes; then
1.1.1.8 root 909: netdriver_tap=yes
1.1.1.6 root 910: fi
911: ;;
912: openbsd*)
913: # OpenBSD has no <net/if_tap.h> but supports tap(4).
1.1.1.8 root 914: netdriver_tap=yes
1.1.1.6 root 915: ;;
1.1.1.8 root 916: *)
1.1.1.6 root 917: if test x"$ac_cv_header_net_if_tap_h" = xyes; then
1.1.1.8 root 918: netdriver_tap=yes
1.1.1.6 root 919: fi
1.1.1.8 root 920: ;;
921: esac
922: if test x"$netdriver_tap" = xyes; then
923: AC_MSG_RESULT([yes])
924: AC_DEFINE([HAVE_HOSTNET_TAP])
925: AC_SUBST([HOSTNET_TAP], [yes])
926: else
927: AC_MSG_RESULT([no])
928: fi
929:
930: AC_MSG_CHECKING(for bpf(4))
931: if test x"$ac_cv_header_net_bpf_h" = xyes; then
932: AC_MSG_RESULT([yes])
933: AC_DEFINE([HAVE_HOSTNET_BPF])
934: AC_SUBST([HOSTNET_BPF], [yes])
935: else
936: AC_MSG_RESULT([no])
1.1 root 937: fi
938:
1.1.1.14 root 939: #
940: # Other libraries
941: #
942:
943: # CHECK_LIB($1=name, $2=libs, $3=include, $4=src)
944: AC_DEFUN([CHECK_LIB], [
945: AC_MSG_CHECKING([for $1])
946: for path in ${PATHS}; do
947: old_CPPFLAGS=${CPPFLAGS}
948: old_LIBS=${LIBS}
949: case ${path} in
950: none)
951: LIBS="${LIBS} $2"
952: ;;
953: *)
954: CPPFLAGS="${CPPFLAGS} -I${path}/include"
955: LIBS="${LIBS} -L${path}/lib $2"
956: ;;
957: esac
958: AC_LINK_IFELSE([AC_LANG_PROGRAM([$3], [$4])], [
959: has_$1=yes
960: break
961: ], [
962: has_$1=no
963: ])
964: CPPFLAGS=${old_CPPFLAGS}
965: LIBS=${old_LIBS}
966: done
967: if test x"${has_$1}" = x"yes"; then
968: AC_MSG_RESULT([yes])
969: else
970: AC_MSG_RESULT([no])
971: fi
972: ])
973:
974: PATHS="none /usr/pkg /usr/local"
975:
1.1 root 976: # libbsd on Linux
1.1.1.5 root 977: AC_CHECK_LIB(c, getprogname, ,)
1.1 root 978: AC_CHECK_LIB(bsd, getprogname,
1.1.1.6 root 979: LIBS="${LIBS} -lbsd"
980: )
1.1.1.5 root 981: # なければ停止する
982: AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
983: [
984: #include <stdlib.h>
985: #include "confdefs.h"
986: #if defined(HAVE_BSD_BSD_H)
987: #include <bsd/bsd.h>
988: #endif
989: ], [
990: getprogname()
1.1.1.10 root 991: ])], [
1.1.1.5 root 992: # nothing to do on success
1.1.1.10 root 993: ], [
994: AC_MSG_ERROR([*** getprogname is not found.
1.1.1.7 root 995: *** If you use Ubuntu, sudo apt install libbsd-dev])
1.1.1.5 root 996: ]
997: )
1.1 root 998:
999: # libkqueue on Linux
1000: AC_CHECK_LIB(kqueue, kqueue,
1.1.1.6 root 1001: LIBS="${LIBS} -lkqueue"
1002: )
1.1 root 1003:
1.1.1.5 root 1004: AC_CHECK_LIB(z, gzclose,
1.1.1.6 root 1005: LIBS="${LIBS} -lz",
1.1.1.5 root 1006: [AC_MSG_ERROR([*** zlib is not found.
1.1.1.7 root 1007: *** If use use Ubuntu, sudo apt install zlib1g-dev])]
1.1.1.5 root 1008: )
1009:
1.1 root 1010: # wxWidgets
1.1.1.10 root 1011: AC_ARG_WITH([gui],
1012: [AS_HELP_STRING([--without-gui], [disable GUI support])],
1013: [],
1014: [with_gui=yes])
1015:
1016: AS_IF([test "x$with_gui" != xno], [
1017: AC_MSG_CHECKING(for wx-config)
1.1.1.14 root 1018: wxconfig_paths="${WX_CONFIG} wx-config-3.2 wx-config-3.0 wx-config"
1.1.1.10 root 1019: wxconfig=""
1020: for c in ${wxconfig_paths}; do
1021: ver=`$c --version 2>&1 | cut -f 1 -d .`
1022: if test "$ver" = "3"; then
1023: wxconfig=$c
1024: break
1025: fi
1026: done
1027: if test -z "$wxconfig"; then
1.1.1.14 root 1028: AC_MSG_ERROR([*** wxWidgets-3.2 nor -3.0 not found in ${wxconfig_paths}
1029: *** If you use pkgsrc, install x11/wxGTK32.
1.1.1.7 root 1030: *** If you use Ubuntu, sudo apt install libwxgtk3.0-gtk3-dev])
1.1.1.10 root 1031: else
1032: AC_MSG_RESULT([$wxconfig])
1.1 root 1033:
1.1.1.10 root 1034: AC_MSG_CHECKING(for wxWidgets version)
1035: wxversion=`$wxconfig --version`
1036: AC_MSG_RESULT([$wxversion])
1.1.1.14 root 1037: wxmajorminor=`echo $wxversion | awk -F . '{print $1 $2}'`
1038: AC_SUBST([WX_MAJORMINOR], [${wxmajorminor}])
1.1.1.10 root 1039:
1040: wxcppflags=`$wxconfig --cppflags`
1041: wxlibs=`$wxconfig --libs`
1042:
1043: case "${host_os}" in
1044: netbsd*)
1045: # rpath。どうしたもんだかこれ
1046: wxlibs=[`echo $wxlibs | sed -e 's/-L\([^ ]*\) /-L\1 -Wl,-R,\1 /'`]
1047: ;;
1048:
1049: darwin*)
1050: # XXX -framework AudioToolbox が指定されているとリンカがこけるorz
1051: wxlibs=[`echo $wxlibs | sed -e 's/-framework AudioToolbox//'`]
1052: ;;
1053: esac
1054:
1055: AC_SUBST([WITH_GUI], [yes])
1056: AC_SUBST([WXWIDGETS_CPPFLAGS], [$wxcppflags])
1057: AC_SUBST([WXWIDGETS_LIBS], [$wxlibs])
1058: fi
1.1 root 1059:
1.1.1.10 root 1060: # gettext
1061: AC_CHECK_TOOL([MSGFMT], [msgfmt], [:])
1062: if test $MSGFMT = [:]; then
1063: AC_MSG_ERROR([*** msgfmt not found.
1.1.1.7 root 1064: *** If you use pkgsrc, install devel/gettext-tools.
1065: *** If you use Ubuntu, sudo apt install gettext])
1.1.1.10 root 1066: fi
1067: ], [
1068: AC_SUBST([WITH_GUI], [no])
1069: ])
1.1.1.5 root 1070:
1.1.1.14 root 1071: # nono 本体のチェックはここまで。
1072: nono_CPPFLAGS=${CPPFLAGS}
1073: nono_LIBS=${LIBS}
1074: AC_SUBST([NONO_CPPFLAGS], [${nono_CPPFLAGS}])
1075: AC_SUBST([NONO_LIBS], [${nono_LIBS}])
1076:
1077: # iconv は util/ でのみ必要。
1078: CPPFLAGS=
1079: LIBS=
1.1.1.15! root 1080: CHECK_LIB([libiconv], [-liconv], [
1.1.1.14 root 1081: #include <iconv.h>
1082: ], [
1083: iconv_open("", "");
1084: ])
1085:
1.1.1.15! root 1086: if test x"${has_libiconv}" = x"yes"; then
1.1.1.14 root 1087: AC_MSG_CHECKING(whether iconv needs const)
1088: old_CPPFLAGS="${CPPFLAGS}"
1089: CPPFLAGS="${CPPFLAGS} -Werror"
1090: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1091: #include <iconv.h>
1092: ]], [[
1093: const char **a;
1094: iconv(0, a, 0, 0, 0);
1095: ]])], [
1096: AC_MSG_RESULT(yes)
1097: AC_DEFINE(HAVE_ICONV_CONST)
1098: ], [
1099: AC_MSG_RESULT(no)
1100: ])
1101: CPPFLAGS="${old_CPPFLAGS}"
1102: fi
1103:
1104: iconv_CPPFLAGS=${CPPFLAGS}
1105: iconv_LIBS=${LIBS}
1106: AC_SUBST([ICONV_CPPFLAGS], [${iconv_CPPFLAGS}])
1107: AC_SUBST([ICONV_LIBS], [${iconv_LIBS}])
1108:
1.1 root 1109: AC_CONFIG_FILES([Makefile.cfg
1110: host/Makefile
1111: wx/Makefile
1.1.1.14 root 1112: util/mkcgrom/Makefile
1.1.1.15! root 1113: util/ttfext/Makefile
1.1 root 1114: util/viewcgrom/Makefile
1115: ])
1.1.1.2 root 1116: AC_CONFIG_HEADERS([config-nono.h])
1.1 root 1117: AC_OUTPUT
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.