|
|
1.1 ! root 1: # ! 2: # nono ! 3: # Copyright (C) 2018 [email protected] ! 4: # ! 5: ! 6: AC_PREREQ([2.69]) ! 7: AC_INIT([mm], [0.0], []) ! 8: AC_CONFIG_SRCDIR(wx/wxapp.cpp) ! 9: ! 10: # Checks for programs. ! 11: AC_PROG_CXX ! 12: AC_PROG_CC ! 13: AC_LANG_CPLUSPLUS ! 14: AC_C_BIGENDIAN ! 15: ! 16: # -Wlogical-op は clang にはない ! 17: AC_MSG_CHECKING(whether the compiler accepts -Wlogical-op) ! 18: old_CXXFLAGS="${CXXFLAGS}" ! 19: CXXFLAGS="${CXXFLAGS} -Werror -Wlogical-op" ! 20: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], ! 21: AC_MSG_RESULT([yes]) ! 22: CFLAGS_WLOGICAL_OP="-Wlogical-op", ! 23: AC_MSG_RESULT([no])) ! 24: AC_SUBST([CFLAGS_WLOGICAL_OP]) ! 25: CXXFLAGS="${old_CXXFLAGS}" ! 26: ! 27: # Checks for libraries. ! 28: ! 29: # Checks for header files. ! 30: AC_CHECK_HEADERS([bsd/bsd.h]) ! 31: AC_CHECK_HEADERS([endian.h]) ! 32: AC_CHECK_HEADERS([kqueue/sys/event.h]) ! 33: AC_CHECK_HEADERS([sys/endian.h]) ! 34: AC_CHECK_HEADERS([sys/event.h]) ! 35: AC_CHECK_HEADERS([net/bpf.h]) ! 36: AC_CHECK_HEADERS([net/if_tap.h]) ! 37: AC_CHECK_HEADERS([linux/if_tun.h]) ! 38: ! 39: # Linux で <kqueue/sys/event.h> がなければここで停止したほうがいい ! 40: if test "$ac_cv_header_sys_event_h" != "yes" \ ! 41: -a "$ac_cv_header_kqueue_sys_event_h" != "yes"; then ! 42: AC_MSG_ERROR([*** kqueue is not found. ! 43: On Ubuntu, sudo apt install libkqueue-dev]) ! 44: fi ! 45: ! 46: # Checks for typedefs, structures, and compiler characteristics. ! 47: AC_CHECK_HEADER_STDBOOL ! 48: #AC_C_INLINE ! 49: #AC_TYPE_INT16_T ! 50: #AC_TYPE_INT32_T ! 51: #AC_TYPE_INT64_T ! 52: #AC_TYPE_INT8_T ! 53: #AC_TYPE_SIZE_T ! 54: #AC_TYPE_UINT16_T ! 55: #AC_TYPE_UINT32_T ! 56: #AC_TYPE_UINT64_T ! 57: #AC_TYPE_UINT8_T ! 58: ! 59: # struct kevent のメンバ udata の型が互換性なく違う。 ! 60: # NetBSD では intptr_t(整数) だが、OSX では void* (ポインタ) なので、 ! 61: # 同一ソースコードでは回避できない。 ! 62: # Linux(Ubuntu) はどっちもパスするので後ろの void * のほうが使われる。 ! 63: # まあパスするんならどっちでもいいか。 ! 64: AC_MSG_CHECKING(whether kevent.udata is intptr_t) ! 65: old_CXXFLAGS="${CXXFLAGS}" ! 66: CXXFLAGS="${CXXFLAGS} -Wall -Werror" ! 67: AC_COMPILE_IFELSE([AC_LANG_PROGRAM( ! 68: [ ! 69: #include "confdefs.h" ! 70: #if defined(HAVE_SYS_EVENT_H) ! 71: #include <sys/event.h> ! 72: #endif ! 73: #if defined(HAVE_KQUEUE_SYS_EVENT_H) ! 74: #include <kqueue/sys/event.h> ! 75: #endif ! 76: ], [ ! 77: struct kevent kev; ! 78: kev.udata = (intptr_t)0; ! 79: (void)kev; ! 80: ])], ! 81: AC_MSG_RESULT([yes]) ! 82: AC_SUBST([KEVENT_UDATA_T], [intptr_t]), ! 83: AC_MSG_RESULT([no])) ! 84: CXXFLAGS="${old_CXXFLAGS}" ! 85: ! 86: AC_MSG_CHECKING(whether kevent.udata is void *) ! 87: old_CXXFLAGS="${CXXFLAGS}" ! 88: CXXFLAGS="${CXXFLAGS} -Wall -Werror" ! 89: AC_COMPILE_IFELSE([AC_LANG_PROGRAM( ! 90: [ ! 91: #include "confdefs.h" ! 92: #if defined(HAVE_SYS_EVENT_H) ! 93: #include <sys/event.h> ! 94: #endif ! 95: #if defined(HAVE_KQUEUE_SYS_EVENT_H) ! 96: #include <kqueue/sys/event.h> ! 97: #endif ! 98: ], [ ! 99: struct kevent kev; ! 100: kev.udata = (void *)0; ! 101: (void)kev; ! 102: ])], ! 103: AC_MSG_RESULT([yes]) ! 104: AC_SUBST([KEVENT_UDATA_T], ['void *']), ! 105: AC_MSG_RESULT([no])) ! 106: CXXFLAGS="${old_CXXFLAGS}" ! 107: ! 108: if test -z "$KEVENT_UDATA_T" ; then ! 109: AC_MSG_ERROR([kevent.udata is unknown type]) ! 110: fi ! 111: ! 112: AC_MSG_CHECKING(for __builtin_assume) ! 113: AC_TRY_COMPILE(, ! 114: [ ! 115: __builtin_assume(1); ! 116: ], ! 117: AC_MSG_RESULT([yes]) ! 118: AC_DEFINE([HAVE___BUILTIN_ASSUME]), ! 119: AC_MSG_RESULT([no])) ! 120: ! 121: AC_MSG_CHECKING(for __builtin_bswap16) ! 122: AC_TRY_COMPILE(, ! 123: [ ! 124: return __builtin_bswap16(0); ! 125: ], ! 126: AC_MSG_RESULT([yes]) ! 127: AC_DEFINE([HAVE___BUILTIN_BSWAP16]), ! 128: AC_MSG_RESULT([no])) ! 129: ! 130: AC_MSG_CHECKING(for __builtin_bswap32) ! 131: AC_TRY_COMPILE(, ! 132: [ ! 133: return __builtin_bswap32(0); ! 134: ], ! 135: AC_MSG_RESULT([yes]) ! 136: AC_DEFINE([HAVE___BUILTIN_BSWAP32]), ! 137: AC_MSG_RESULT([no])) ! 138: ! 139: AC_MSG_CHECKING(for __builtin_expect) ! 140: AC_TRY_COMPILE(, ! 141: [ ! 142: if (__builtin_expect(1, 1)) return 0; ! 143: ], ! 144: AC_MSG_RESULT([yes]) ! 145: AC_DEFINE([HAVE___BUILTIN_EXPECT]), ! 146: AC_MSG_RESULT([no])) ! 147: ! 148: AC_MSG_CHECKING(for __builtin_unreachable) ! 149: AC_TRY_COMPILE(, ! 150: [ ! 151: __builtin_unreachable(); ! 152: ], ! 153: AC_MSG_RESULT([yes]) ! 154: AC_DEFINE([HAVE___BUILTIN_UNREACHABLE]), ! 155: AC_MSG_RESULT([no])) ! 156: ! 157: AC_MSG_CHECKING(for __attribute__((__fallthrough__))) ! 158: old_CXXFLAGS="${CXXFLAGS}" ! 159: CXXFLAGS="${CXXFLAGS} -Wall -Werror" ! 160: AC_COMPILE_IFELSE([AC_LANG_PROGRAM( ! 161: [], [ ! 162: extern int x; ! 163: switch (x) { ! 164: case 0: ! 165: __attribute__((__fallthrough__)); ! 166: case 1: ! 167: break; ! 168: } ! 169: ])], ! 170: AC_MSG_RESULT([yes]) ! 171: AC_DEFINE([HAVE___ATTRIBUTE_FALLTHROUGH]), ! 172: AC_MSG_RESULT([no])) ! 173: CXXFLAGS="${old_CXXFLAGS}" ! 174: ! 175: dnl とりあえず __format__ までしか調べてないので、 ! 176: dnl その中の __printf__ とかまで調べる必要ができたら直すこと。 ! 177: AC_MSG_CHECKING(for __attribute__((__format__))) ! 178: old_CXXFLAGS="${CXXFLAGS}" ! 179: CXXFLAGS="${CXXFLAGS} -Wall -Werror" ! 180: AC_COMPILE_IFELSE([AC_LANG_PROGRAM( ! 181: [ ! 182: extern int f(const char *f, ...) ! 183: __attribute__((__format__(__printf__, 1, 2))); ! 184: ], [ ! 185: ])], ! 186: AC_MSG_RESULT([yes]) ! 187: AC_DEFINE([HAVE___ATTRIBUTE_FORMAT]), ! 188: AC_MSG_RESULT([no])) ! 189: CXXFLAGS="${old_CXXFLAGS}" ! 190: ! 191: AC_MSG_CHECKING(for __attribute__((no_sanitize))) ! 192: old_CXXFLAGS="${CXXFLAGS}" ! 193: CXXFLAGS="${CXXFLAGS} -Werror" ! 194: AC_COMPILE_IFELSE([AC_LANG_PROGRAM( ! 195: [ ! 196: __attribute__((no_sanitize("undefined"))) ! 197: int func() { return 0; } ! 198: ], [ ! 199: ])], ! 200: AC_MSG_RESULT([yes]) ! 201: AC_DEFINE([HAVE___ATTRIBUTE_NO_SANITIZE]), ! 202: AC_MSG_RESULT([no])) ! 203: CXXFLAGS="${old_CXXFLAGS}" ! 204: ! 205: ! 206: AC_MSG_CHECKING(for __attribute__((__packed__))) ! 207: old_CXXFLAGS="${CXXFLAGS}" ! 208: CXXFLAGS="${CXXFLAGS} -Werror" ! 209: AC_COMPILE_IFELSE([AC_LANG_PROGRAM( ! 210: [], [ ! 211: struct x { char a; int b; } __attribute__((__packed__)); ! 212: ])], ! 213: AC_MSG_RESULT([yes]) ! 214: AC_DEFINE([HAVE___ATTRIBUTE_PACKED]), ! 215: AC_MSG_RESULT([no])) ! 216: CXXFLAGS="${old_CXXFLAGS}" ! 217: ! 218: AC_MSG_CHECKING(for __attribute__((__unused__))) ! 219: old_CXXFLAGS="${CXXFLAGS}" ! 220: CXXFLAGS="${CXXFLAGS} -Wunused-variable -Werror" ! 221: AC_COMPILE_IFELSE([AC_LANG_PROGRAM( ! 222: [], [ ! 223: int a __attribute__((__unused__)); ! 224: ])], ! 225: AC_MSG_RESULT([yes]) ! 226: AC_DEFINE([HAVE___ATTRIBUTE_UNUSED]), ! 227: AC_MSG_RESULT([no])) ! 228: CXXFLAGS="${old_CXXFLAGS}" ! 229: ! 230: # Checks for library functions. ! 231: #AC_FUNC_MALLOC ! 232: #AC_FUNC_MMAP ! 233: ! 234: AC_MSG_CHECKING(for pthread_setname_np(name)) ! 235: AC_TRY_COMPILE([#include <pthread.h>], ! 236: [ ! 237: pthread_setname_np(""); ! 238: ], ! 239: AC_MSG_RESULT([yes]) ! 240: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], 1), ! 241: AC_MSG_RESULT([no])) ! 242: ! 243: AC_MSG_CHECKING(for pthread_setname_np(thread, name)) ! 244: AC_TRY_COMPILE([#include <pthread.h>], ! 245: [ ! 246: pthread_setname_np(pthread_self(), ""); ! 247: ], ! 248: AC_MSG_RESULT([yes]) ! 249: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], 2), ! 250: AC_MSG_RESULT([no])) ! 251: ! 252: AC_MSG_CHECKING(for pthread_setname_np(thread, name, arg)) ! 253: AC_TRY_COMPILE([#include <pthread.h>], ! 254: [ ! 255: pthread_setname_np(pthread_self(), "", (void*)0); ! 256: ], ! 257: AC_MSG_RESULT([yes]) ! 258: AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], 3), ! 259: AC_MSG_RESULT([no])) ! 260: ! 261: # Select host network driver. ! 262: AC_MSG_CHECKING(for suitable host network driver) ! 263: if test x"$ac_cv_header_net_if_tap_h" = xyes; then ! 264: netdriver=tap ! 265: elif test x"$ac_cv_header_linux_if_tun_h" = xyes; then ! 266: netdriver=tap ! 267: elif test x"$ac_cv_header_net_bpf_h" = xyes; then ! 268: netdriver=bpf ! 269: else ! 270: netdriver=none ! 271: fi ! 272: AC_MSG_RESULT([$netdriver]) ! 273: AC_SUBST([NETDRIVER], [$netdriver]) ! 274: ! 275: # libbsd on Linux ! 276: AC_CHECK_LIB(bsd, getprogname, ! 277: AC_SUBST([LIBBSD_LIBS], [-lbsd]), ! 278: ) ! 279: ! 280: # libkqueue on Linux ! 281: AC_CHECK_LIB(kqueue, kqueue, ! 282: AC_SUBST([LIBKQUEUE_LIBS], [-lkqueue]), ! 283: ) ! 284: ! 285: # wxWidgets ! 286: AC_MSG_CHECKING(for wx-config) ! 287: wxconfig="" ! 288: for c in wx-config-3.0 wx-config; do ! 289: ver=`$c --version 2>&1 | cut -f 1 -d .` ! 290: if test "$ver" = "3"; then ! 291: wxconfig=$c ! 292: break ! 293: fi ! 294: done ! 295: if test -z "$wxconfig"; then ! 296: AC_MSG_RESULT([no]) ! 297: else ! 298: AC_MSG_RESULT([$wxconfig]) ! 299: ! 300: AC_MSG_CHECKING(for wxWidgets version) ! 301: wxversion=`$wxconfig --version` ! 302: AC_MSG_RESULT([$wxversion]) ! 303: ! 304: wxcppflags=`$wxconfig --cppflags` ! 305: wxlibs=`$wxconfig --libs` ! 306: ! 307: # XXX NetBSD の rpath。どうしたもんだかこれ ! 308: if test "`uname -s`" = "NetBSD"; then ! 309: wxlibs=[`echo $wxlibs | sed -e 's/-L\([^ ]*\) /-L\1 -Wl,-R,\1 /'`] ! 310: fi ! 311: ! 312: # XXX OSX の -framework AudioToolbox が指定されているとリンカがこけるorz ! 313: if test "`uname -s`" = "Darwin"; then ! 314: wxlibs=[`echo $wxlibs | sed -e 's/-framework AudioToolbox//'`] ! 315: fi ! 316: ! 317: AC_SUBST([WXWIDGETS_CPPFLAGS], [$wxcppflags]) ! 318: AC_SUBST([WXWIDGETS_LIBS], [$wxlibs]) ! 319: fi ! 320: ! 321: AC_CONFIG_FILES([Makefile.cfg ! 322: host/Makefile ! 323: lib/Makefile ! 324: wx/Makefile ! 325: util/mkcgrom/Makefile ! 326: util/viewcgrom/Makefile ! 327: ]) ! 328: AC_CONFIG_HEADERS([config.h]) ! 329: AC_OUTPUT
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.