Annotation of nono/configure.ac, revision 1.1.1.19

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.