Annotation of nono/configure.ac, revision 1.1.1.3

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

unix.superglobalmegacorp.com

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