--- nono/configure.ac 2026/04/29 17:05:26 1.1.1.15 +++ nono/configure.ac 2026/04/29 17:05:47 1.1.1.18 @@ -52,11 +52,15 @@ 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_COMPILE_IFELSE([ + AC_LANG_PROGRAM([], []) + ], [ AC_MSG_RESULT([yes]) eval `echo cc_has$1=yes | sed -e 's/-/_/g'` - WARNFLAGS_C="${WARNFLAGS_C} $1", - AC_MSG_RESULT([no])) + WARNFLAGS_C="${WARNFLAGS_C} $1" + ], [ + AC_MSG_RESULT([no]) + ]) CFLAGS="${old_CFLAGS}" ]) ADD_CC_WARN_IF(-Wcast-qual) @@ -81,11 +85,15 @@ 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_COMPILE_IFELSE([ + AC_LANG_PROGRAM([], []) + ], [ AC_MSG_RESULT([yes]) eval `echo cxx_has$1=yes | sed -e 's/-/_/g'` - WARNFLAGS_CXX="${WARNFLAGS_CXX} $1", - AC_MSG_RESULT([no])) + WARNFLAGS_CXX="${WARNFLAGS_CXX} $1" + ], [ + AC_MSG_RESULT([no]) + ]) CXXFLAGS="${old_CXXFLAGS}" ]) ADD_CXX_WARN_IF(-Wcast-qual) @@ -286,6 +294,28 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], AC_MSG_RESULT(no) ]) +AC_MSG_CHECKING(for __builtin_bitreverse16) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], + [[ + return __builtin_bitreverse16(1); + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE___BUILTIN_BITREVERSE16) + ], [ + AC_MSG_RESULT(no) + ]) + +AC_MSG_CHECKING(for __builtin_bitreverse32) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], + [[ + return __builtin_bitreverse32(1); + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE___BUILTIN_BITREVERSE32) + ], [ + AC_MSG_RESULT(no) + ]) + AC_MSG_CHECKING(for __builtin_bswap16) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ @@ -940,35 +970,59 @@ fi # Other libraries # -# CHECK_LIB($1=name, $2=libs, $3=include, $4=src) -AC_DEFUN([CHECK_LIB], [ +dnl # MY_CHECK_LIB($1=name, $2=libs, $3=include, $4=src) +dnl # name は変数名に付けるライブラリ名 ("libslirp" とか "libiconv" とか) +dnl # libs はライブラリ引数 ("-lslirp" とか) +dnl # include, src は検出用のヘッダとソース片。 +dnl # ただし src は実行可能で害のないものを指定すること。 +dnl # PATHS からライブラリを探してそのパスとかをセットする。 +dnl # has_${name}= +dnl # $CPPFLAGS_${name}=... +dnl # $LIBS_${name}=... +AC_DEFUN([MY_CHECK_LIB], [ AC_MSG_CHECKING([for $1]) + old_CPPFLAGS=${CPPFLAGS} + old_LIBS=${LIBS} for path in ${PATHS}; do - old_CPPFLAGS=${CPPFLAGS} - old_LIBS=${LIBS} case ${path} in none) - LIBS="${LIBS} $2" + LIBS="$2" ;; *) - CPPFLAGS="${CPPFLAGS} -I${path}/include" - LIBS="${LIBS} -L${path}/lib $2" + CPPFLAGS="-I${path}/include" + LIBS="-L${path}/lib $2" ;; esac AC_LINK_IFELSE([AC_LANG_PROGRAM([$3], [$4])], [ has_$1=yes + + dnl リンクできれば -Wl,-R が必要か調べる。 + AC_RUN_IFELSE([AC_LANG_SOURCE([[ + $3 + int main() { + $4; + return 0; + } + ]])], [ + dnl 実行できれば追加しなくていい。 + ], [ + LIBS="-L${path}/lib -Wl,-R,${path}/lib $2" + ]) + break ], [ has_$1=no ]) - CPPFLAGS=${old_CPPFLAGS} - LIBS=${old_LIBS} done if test x"${has_$1}" = x"yes"; then AC_MSG_RESULT([yes]) + CPPFLAGS_$1=${CPPFLAGS} + LIBS_$1=${LIBS} else AC_MSG_RESULT([no]) fi + CPPFLAGS=${old_CPPFLAGS} + LIBS=${old_LIBS} ]) PATHS="none /usr/pkg /usr/local" @@ -1007,6 +1061,34 @@ AC_CHECK_LIB(z, gzclose, *** If use use Ubuntu, sudo apt install zlib1g-dev])] ) +# libslirp +AC_ARG_WITH([libslirp], + [AS_HELP_STRING([--without-libslirp], + [disable usermode network (using SLIRP)])], + [], + [with_libslirp=yes]) + +AS_IF([test "x$with_libslirp" != "xno"], [ + MY_CHECK_LIB([libslirp], [-lslirp], [ + #include + ], [ + slirp_version_string(); + ]) + if test x"${has_libslirp}" = x"yes"; then + AC_DEFINE([HAVE_HOSTNET_SLIRP]) + AC_SUBST([HOSTNET_SLIRP], [yes]) + AC_SUBST([CPPFLAGS_SLIRP], [${CPPFLAGS_libslirp}]) + AC_SUBST([LIBS_SLIRP], [${LIBS_libslirp}]) + else + AC_MSG_ERROR([*** libslirp is not found. +*** If use use pkgsrc, install net/libslirp. +*** If you use Ubuntu, sudo apt install libslirp-dev. +*** Or specify --without-libslirp (it disables hostnet-driver=usermode).]) + fi +], [ + AC_SUBST([HOSTNET_SLIRP], [no]) +]) + # wxWidgets AC_ARG_WITH([gui], [AS_HELP_STRING([--without-gui], [disable GUI support])], @@ -1041,20 +1123,37 @@ AS_IF([test "x$with_gui" != xno], [ wxlibs=`$wxconfig --libs` case "${host_os}" in - netbsd*) - # rpath。どうしたもんだかこれ - wxlibs=[`echo $wxlibs | sed -e 's/-L\([^ ]*\) /-L\1 -Wl,-R,\1 /'`] - ;; - darwin*) # XXX -framework AudioToolbox が指定されているとリンカがこけるorz wxlibs=[`echo $wxlibs | sed -e 's/-framework AudioToolbox//'`] ;; esac + dnl -Wl,-R が必要か調べる。 + AC_MSG_CHECKING([whether wx-config requires -Wl,-R]) + old_CPPFLAGS="${CPPFLAGS}" + old_LIBS="${LIBS}" + CPPFLAGS="${CPPFLAGS} ${wxcppflags}" + LIBS="${LIBS} ${wxlibs}" + AC_RUN_IFELSE([AC_LANG_SOURCE([[ + #include + int main() { + wxInitializer init; + return !init; + } + ]])], [ + dnl 実行できれば追加しなくていい。 + AC_MSG_RESULT([no]) + ], [ + AC_MSG_RESULT([yes]) + wxlibs=[`echo $wxlibs | sed -e 's/-L\([^ ]*\) /-L\1 -Wl,-R,\1 /'`] + ]) + CPPFLAGS="${old_CPPFLAGS}" + LIBS="${old_LIBS}" + AC_SUBST([WITH_GUI], [yes]) - AC_SUBST([WXWIDGETS_CPPFLAGS], [$wxcppflags]) - AC_SUBST([WXWIDGETS_LIBS], [$wxlibs]) + AC_SUBST([CPPFLAGS_WXWIDGETS], [$wxcppflags]) + AC_SUBST([LIBS_WXWIDGETS], [$wxlibs]) fi # gettext @@ -1068,25 +1167,19 @@ AS_IF([test "x$with_gui" != xno], [ AC_SUBST([WITH_GUI], [no]) ]) -# nono 本体のチェックはここまで。 -nono_CPPFLAGS=${CPPFLAGS} -nono_LIBS=${LIBS} -AC_SUBST([NONO_CPPFLAGS], [${nono_CPPFLAGS}]) -AC_SUBST([NONO_LIBS], [${nono_LIBS}]) - # iconv は util/ でのみ必要。 -CPPFLAGS= -LIBS= -CHECK_LIB([libiconv], [-liconv], [ +MY_CHECK_LIB([libiconv], [-liconv], [ #include ], [ iconv_open("", ""); ]) +AC_SUBST([CPPFLAGS_ICONV], [${CPPFLAGS_libiconv}]) +AC_SUBST([LIBS_ICONV], [${LIBS_libiconv}]) if test x"${has_libiconv}" = x"yes"; then AC_MSG_CHECKING(whether iconv needs const) old_CPPFLAGS="${CPPFLAGS}" - CPPFLAGS="${CPPFLAGS} -Werror" + CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_libiconv} -Werror" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ @@ -1101,17 +1194,6 @@ if test x"${has_libiconv}" = x"yes"; the CPPFLAGS="${old_CPPFLAGS}" fi -iconv_CPPFLAGS=${CPPFLAGS} -iconv_LIBS=${LIBS} -AC_SUBST([ICONV_CPPFLAGS], [${iconv_CPPFLAGS}]) -AC_SUBST([ICONV_LIBS], [${iconv_LIBS}]) - -AC_CONFIG_FILES([Makefile.cfg - host/Makefile - wx/Makefile - util/mkcgrom/Makefile - util/ttfext/Makefile - util/viewcgrom/Makefile -]) +AC_CONFIG_FILES([Makefile.cfg]) AC_CONFIG_HEADERS([config-nono.h]) AC_OUTPUT