--- nono/configure.ac 2026/04/29 17:05:11 1.1.1.11 +++ nono/configure.ac 2026/04/29 17:05:22 1.1.1.14 @@ -98,9 +98,46 @@ ADD_CXX_WARN_IF(-Wshadow-local) if test x"${cxx_has_Wshadow_local}" != xyes; then ADD_CXX_WARN_IF(-Wshadow) fi +ADD_CXX_WARN_IF(-Wsuggest-override) ADD_CXX_WARN_IF(-Wvla-extension) AC_SUBST([WARNFLAGS_CXX]) +# CPU が AVX2 をサポートしているか。 +# (OS がレジスタの退避などをサポートしているかとかはたぶん知る方法がない) +AC_ARG_ENABLE([avx2], + [AS_HELP_STRING([--disable-avx2], [disable avx2 support])], + [], + [enable_avx2=yes]) + +AS_IF([test x"${enable_avx2}" != x"no"], [ + AC_MSG_CHECKING(for AVX2) + if test x"${host_cpu}" = x"x86_64"; then + if test x"${host_cpu}" = x"${build_cpu}"; then + old_CXXFLAGS="${CXXFLAGS}" + CXXFLAGS="${CXXFLAGS} -mavx2" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + ], [ + #if !defined(__AVX2__) + #error __AVX2__ is not defined by the compiler. + #endif + __m256i v; + ])], [ + have_avx2=yes + ]) + CXXFLAGS="${old_CXXFLAGS}" + fi + fi + if test x"${have_avx2}" = x"yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX2]) + AC_SUBST(HOST_HAS_AVX2, yes) + else + AC_MSG_RESULT([no]) + fi +], [ +]) + # Checks for libraries. # Checks for header files. @@ -108,7 +145,6 @@ AC_CHECK_HEADERS([bsd/bsd.h]) AC_CHECK_HEADERS([bsd/stdio.h]) AC_CHECK_HEADERS([byteswap.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]) @@ -437,6 +473,56 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ AC_MSG_RESULT([no]) ]) +AC_MSG_CHECKING(for statfs) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + ], [ + struct statfs buf; + statfs("", &buf); + ])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_STATFS]) + have_statxxfs=statfs + ], [ + AC_MSG_RESULT([no]) + ]) + +AC_MSG_CHECKING(for statvfs) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + ], [ + struct statvfs buf; + statvfs("", &buf); + ])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_STATVFS]) + have_statxxfs=statvfs + ], [ + AC_MSG_RESULT([no]) + ]) + +if test -z "${have_statxxfs}"; then + AC_MSG_FAILURE([*** No statfs() nor statvfs() found]) +fi + +AC_CHECK_MEMBER([struct stat.st_mtimespec], [ + AC_DEFINE([HAVE_STAT_ST_TIMESPEC]) + ], [], [ + #include + ]) + +AC_MSG_CHECKING(for timegm) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + ], [ + timegm(NULL); + ])], [ + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([*** No timegm() found]) + ]) + AC_MSG_CHECKING(for pthread_getname_np) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include @@ -529,19 +615,6 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ AC_MSG_RESULT(no) ]) -AC_MSG_CHECKING(for iconv const) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #include - ]], [[ - const char **a; - iconv(0, a, 0, 0, 0); - ]])], [ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_ICONV_CONST) - ], [ - AC_MSG_RESULT(no) - ]) - # # Network # @@ -592,6 +665,43 @@ else AC_MSG_RESULT([no]) fi +# +# Other libraries +# + +# CHECK_LIB($1=name, $2=libs, $3=include, $4=src) +AC_DEFUN([CHECK_LIB], [ + AC_MSG_CHECKING([for $1]) + for path in ${PATHS}; do + old_CPPFLAGS=${CPPFLAGS} + old_LIBS=${LIBS} + case ${path} in + none) + LIBS="${LIBS} $2" + ;; + *) + CPPFLAGS="${CPPFLAGS} -I${path}/include" + LIBS="${LIBS} -L${path}/lib $2" + ;; + esac + AC_LINK_IFELSE([AC_LANG_PROGRAM([$3], [$4])], [ + has_$1=yes + break + ], [ + has_$1=no + ]) + CPPFLAGS=${old_CPPFLAGS} + LIBS=${old_LIBS} + done + if test x"${has_$1}" = x"yes"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi +]) + +PATHS="none /usr/pkg /usr/local" + # libbsd on Linux AC_CHECK_LIB(c, getprogname, ,) AC_CHECK_LIB(bsd, getprogname, @@ -615,11 +725,6 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM( ] ) -# libedit (editline) -if test x"$ac_cv_header_histedit_h" = xyes; then - LIBS="${LIBS} -ledit -ltermcap" -fi - # libkqueue on Linux AC_CHECK_LIB(kqueue, kqueue, LIBS="${LIBS} -lkqueue" @@ -639,7 +744,7 @@ AC_ARG_WITH([gui], AS_IF([test "x$with_gui" != xno], [ AC_MSG_CHECKING(for wx-config) - wxconfig_paths="${WX_CONFIG} wx-config-3.0 wx-config" + wxconfig_paths="${WX_CONFIG} wx-config-3.2 wx-config-3.0 wx-config" wxconfig="" for c in ${wxconfig_paths}; do ver=`$c --version 2>&1 | cut -f 1 -d .` @@ -649,8 +754,8 @@ AS_IF([test "x$with_gui" != xno], [ fi done if test -z "$wxconfig"; then - AC_MSG_ERROR([*** wxWidgets-3.0 not found in ${wxconfig_paths} -*** If you use pkgsrc, install x11/wxGTK30. + AC_MSG_ERROR([*** wxWidgets-3.2 nor -3.0 not found in ${wxconfig_paths} +*** If you use pkgsrc, install x11/wxGTK32. *** If you use Ubuntu, sudo apt install libwxgtk3.0-gtk3-dev]) else AC_MSG_RESULT([$wxconfig]) @@ -658,6 +763,8 @@ AS_IF([test "x$with_gui" != xno], [ AC_MSG_CHECKING(for wxWidgets version) wxversion=`$wxconfig --version` AC_MSG_RESULT([$wxversion]) + wxmajorminor=`echo $wxversion | awk -F . '{print $1 $2}'` + AC_SUBST([WX_MAJORMINOR], [${wxmajorminor}]) wxcppflags=`$wxconfig --cppflags` wxlibs=`$wxconfig --libs` @@ -690,6 +797,44 @@ 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([iconv], [-liconv], [ + #include +], [ + iconv_open("", ""); +]) + +if test x"${has_iconv}" = x"yes"; then + AC_MSG_CHECKING(whether iconv needs const) + old_CPPFLAGS="${CPPFLAGS}" + CPPFLAGS="${CPPFLAGS} -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + ]], [[ + const char **a; + iconv(0, a, 0, 0, 0); + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_ICONV_CONST) + ], [ + AC_MSG_RESULT(no) + ]) + 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