Annotation of nono/configure.ac, revision 1.1.1.4

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

unix.superglobalmegacorp.com

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