--- nono/configure.ac 2026/04/29 17:04:28 1.1 +++ nono/configure.ac 2026/04/29 17:04:43 1.1.1.5 @@ -1,35 +1,106 @@ # # nono -# Copyright (C) 2018 isaki@NetBSD.org +# Copyright (C) 2020 nono project +# Licensed under nono-license.txt # AC_PREREQ([2.69]) -AC_INIT([mm], [0.0], []) +AC_INIT([nono], [0.0], []) AC_CONFIG_SRCDIR(wx/wxapp.cpp) # Checks for programs. AC_PROG_CXX AC_PROG_CC -AC_LANG_CPLUSPLUS +AC_PROG_INSTALL AC_C_BIGENDIAN -# -Wlogical-op は clang にはない -AC_MSG_CHECKING(whether the compiler accepts -Wlogical-op) +# コンパイラをチェック。今のところ clang/gcc のみ。 +# (autoconf がやってる gcc かどうかのチェックは clang を検出できず使えない) +AC_MSG_CHECKING(for compiler) +if test -n "`${CC} -v 2>&1 | grep clang`" ; then + AC_MSG_RESULT([clang]) + COMPILER=CLANG +elif test -n "`${CC} -v 2>&1 | grep GCC`"; then + AC_MSG_RESULT([gcc]) + COMPILER=GCC +else + AC_MSG_RESULT([unknown]) + COMPILER= +fi +AC_SUBST([COMPILER]) + +# アーキテクチャのチェック。 +AC_MSG_CHECKING(for architecture) +ARCH=`${CC} -v 2>&1 | awk '/Target:/ {print \$2}' | sed -e 's/-.*//'` +AC_MSG_RESULT([${ARCH}]) +AC_SUBST([ARCH]) + +# C++ のバージョンをチェック +CXX_STD=-std=c++14 +AC_LANG_PUSH([C++]) +AC_MSG_CHECKING(for ${CXX_STD}) old_CXXFLAGS="${CXXFLAGS}" -CXXFLAGS="${CXXFLAGS} -Werror -Wlogical-op" +CXXFLAGS="${CXX_STD} ${CXXFLAGS}" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], - AC_MSG_RESULT([yes]) - CFLAGS_WLOGICAL_OP="-Wlogical-op", - AC_MSG_RESULT([no])) -AC_SUBST([CFLAGS_WLOGICAL_OP]) + AC_MSG_RESULT([yes]), + AC_MSG_ERROR("*** C++ compiler '${CXX}' doesn't support ${CXX_STD}.")) CXXFLAGS="${old_CXXFLAGS}" +CXX="${CXX} ${CXX_STD}" +AC_LANG_POP([C++]) + +# C コンパイラのワーニングオプション +AC_LANG_PUSH([C]) +AC_DEFUN([ADD_CC_WARN_IF],[ + AC_MSG_CHECKING([whether cc accepts $1]) + old_CFLAGS="${CFLAGS}" + CFLAGS="${CFLAGS} -Werror $1" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], + AC_MSG_RESULT([yes]) + WARNFLAGS_C="${WARNFLAGS_C} $1", + AC_MSG_RESULT([no])) + CFLAGS="${old_CFLAGS}" +]) +ADD_CC_WARN_IF(-Wcast-qual) +ADD_CC_WARN_IF(-Wdisabled-macro-expansion) +ADD_CC_WARN_IF(-Wextra-semi) +ADD_CC_WARN_IF(-Wlogical-op) +ADD_CC_WARN_IF(-Wmissing-prototypes) +ADD_CC_WARN_IF(-Wmissing-variable-declarations) +AC_LANG_POP([C]) +AC_SUBST([WARNFLAGS_C]) + +# C++ コンパイラのワーニングオプション +# (AC_LANG は C++ のまま継続する) +AC_LANG_CPLUSPLUS +AC_DEFUN([ADD_CXX_WARN_IF],[ + AC_MSG_CHECKING([whether c++ accepts $1]) + old_CXXFLAGS="${CXXFLAGS}" + CXXFLAGS="${CXXFLAGS} -Werror $1" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], + AC_MSG_RESULT([yes]) + WARNFLAGS_CXX="${WARNFLAGS_CXX} $1", + AC_MSG_RESULT([no])) + CXXFLAGS="${old_CXXFLAGS}" +]) +ADD_CXX_WARN_IF(-Wcast-qual) +ADD_CXX_WARN_IF(-Wdisabled-macro-expansion) +ADD_CXX_WARN_IF(-Wextra-semi) +ADD_CXX_WARN_IF(-Winconsistent-missing-override) +ADD_CXX_WARN_IF(-Winconsistent-missing-destructor-override) +ADD_CXX_WARN_IF(-Wlogical-op) +ADD_CXX_WARN_IF(-Wmissing-prototypes) +ADD_CXX_WARN_IF(-Wmissing-variable-declarations) +ADD_CXX_WARN_IF(-Wvla-extension) +AC_SUBST([WARNFLAGS_CXX]) # Checks for libraries. # Checks for header files. AC_CHECK_HEADERS([bsd/bsd.h]) AC_CHECK_HEADERS([endian.h]) +AC_CHECK_HEADERS([histedit.h]) AC_CHECK_HEADERS([kqueue/sys/event.h]) +AC_CHECK_HEADERS([pthread_np.h]) AC_CHECK_HEADERS([sys/endian.h]) AC_CHECK_HEADERS([sys/event.h]) AC_CHECK_HEADERS([net/bpf.h]) @@ -67,6 +138,9 @@ CXXFLAGS="${CXXFLAGS} -Wall -Werror" AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [ #include "confdefs.h" + #if defined(HAVE_SYS_TYPES_H) + #include + #endif #if defined(HAVE_SYS_EVENT_H) #include #endif @@ -89,6 +163,9 @@ CXXFLAGS="${CXXFLAGS} -Wall -Werror" AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [ #include "confdefs.h" + #if defined(HAVE_SYS_TYPES_H) + #include + #endif #if defined(HAVE_SYS_EVENT_H) #include #endif @@ -136,6 +213,15 @@ AC_TRY_COMPILE(, AC_DEFINE([HAVE___BUILTIN_BSWAP32]), AC_MSG_RESULT([no])) +AC_MSG_CHECKING(for __builtin_bswap64) +AC_TRY_COMPILE(, + [ + return __builtin_bswap64(0); + ], + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE___BUILTIN_BSWAP64]), + AC_MSG_RESULT([no])) + AC_MSG_CHECKING(for __builtin_expect) AC_TRY_COMPILE(, [ @@ -232,30 +318,59 @@ CXXFLAGS="${old_CXXFLAGS}" #AC_FUNC_MMAP AC_MSG_CHECKING(for pthread_setname_np(name)) -AC_TRY_COMPILE([#include ], +AC_TRY_COMPILE( [ + #include + #if defined(HAVE_PTHREAD_NP_H) + #include + #endif + ], [ pthread_setname_np(""); ], AC_MSG_RESULT([yes]) - AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], 1), + AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_name]), AC_MSG_RESULT([no])) AC_MSG_CHECKING(for pthread_setname_np(thread, name)) -AC_TRY_COMPILE([#include ], +AC_TRY_COMPILE( [ + #include + #if defined(HAVE_PTHREAD_NP_H) + #include + #endif + ], [ pthread_setname_np(pthread_self(), ""); ], AC_MSG_RESULT([yes]) - AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], 2), + AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_th_name]), AC_MSG_RESULT([no])) AC_MSG_CHECKING(for pthread_setname_np(thread, name, arg)) -AC_TRY_COMPILE([#include ], +AC_TRY_COMPILE( [ + #include + #if defined(HAVE_PTHREAD_NP_H) + #include + #endif + ], [ pthread_setname_np(pthread_self(), "", (void*)0); ], AC_MSG_RESULT([yes]) - AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], 3), + AC_DEFINE([HAVE_PTHREAD_SETNAME_NP_th_name_arg]), + AC_MSG_RESULT([no])) + +AC_MSG_CHECKING(for pthread_set_name_np(thread, name)) +AC_TRY_COMPILE( + [ + #include + #if defined(HAVE_PTHREAD_NP_H) + #include + #endif + ], [ + pthread_set_name_np(pthread_self(), ""); + ], + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_PTHREAD_SET_NAME_NP_th_name]), AC_MSG_RESULT([no])) # Select host network driver. @@ -273,19 +388,48 @@ AC_MSG_RESULT([$netdriver]) AC_SUBST([NETDRIVER], [$netdriver]) # libbsd on Linux +AC_CHECK_LIB(c, getprogname, ,) AC_CHECK_LIB(bsd, getprogname, AC_SUBST([LIBBSD_LIBS], [-lbsd]), ) +# なければ停止する +AC_COMPILE_IFELSE([AC_LANG_PROGRAM( + [ + #include + #include "confdefs.h" + #if defined(HAVE_BSD_BSD_H) + #include + #endif + ], [ + getprogname() + ])], + # nothing to do on success + , [AC_MSG_ERROR([*** getprogname is not found. + On Ubuntu, sudo apt install libbsd-dev]) + ] +) + +# libedit (editline) +if test x"$ac_cv_header_histedit_h" = xyes; then + AC_SUBST([LIBEDIT_LIBS], ["-ledit -ltermcap"]) +fi # libkqueue on Linux AC_CHECK_LIB(kqueue, kqueue, AC_SUBST([LIBKQUEUE_LIBS], [-lkqueue]), ) +AC_CHECK_LIB(z, gzclose, + AC_SUBST([LIBZ_LIBS], [-lz]), + [AC_MSG_ERROR([*** zlib is not found. + On Ubuntu, sudo apt install zlib1g-dev])] +) + # wxWidgets AC_MSG_CHECKING(for wx-config) +wxconfig_paths="${WX_CONFIG} wx-config-3.0 wx-config" wxconfig="" -for c in wx-config-3.0 wx-config; do +for c in ${wxconfig_paths}; do ver=`$c --version 2>&1 | cut -f 1 -d .` if test "$ver" = "3"; then wxconfig=$c @@ -293,7 +437,7 @@ for c in wx-config-3.0 wx-config; do fi done if test -z "$wxconfig"; then - AC_MSG_RESULT([no]) + AC_MSG_ERROR([*** wxWidgets-3.0 not found in ${wxconfig_paths}]) else AC_MSG_RESULT([$wxconfig]) @@ -318,12 +462,18 @@ else AC_SUBST([WXWIDGETS_LIBS], [$wxlibs]) fi +# gettext +AC_CHECK_TOOL([MSGFMT], [msgfmt], [:]) +if test $MSGFMT = [:]; then + AC_MSG_ERROR([*** msgfmt not found. + On Ubuntu, sudo apt install gettext]) +fi + AC_CONFIG_FILES([Makefile.cfg host/Makefile - lib/Makefile wx/Makefile util/mkcgrom/Makefile util/viewcgrom/Makefile ]) -AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_HEADERS([config-nono.h]) AC_OUTPUT