1# 2# sayaka 3# Copyright (C) 2021 isaki@NetBSD.org 4# 5 6AC_PREREQ([2.69]) 7AC_INIT([sayaka], [3.5], []) 8AC_CONFIG_SRCDIR([src/sayaka.cpp]) 9AC_CONFIG_AUX_DIR([scripts]) 10 11# Checks for programs. 12AC_PROG_CXX 13 14# OS 15AC_CANONICAL_HOST 16AC_SUBST([host_cpu]) 17 18# C++ のバージョンをチェック 19CXX_STD=-std=c++17 20AC_LANG_PUSH([C++]) 21AC_MSG_CHECKING(for ${CXX_STD}) 22old_CXXFLAGS="${CXXFLAGS}" 23CXXFLAGS="${CXX_STD} ${CXXFLAGS}" 24AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], 25 AC_MSG_RESULT([yes]), 26 AC_MSG_ERROR("*** C++ compiler '${CXX}' doesn't support ${CXX_STD}.")) 27CXXFLAGS="${old_CXXFLAGS}" 28CXX="${CXX} ${CXX_STD}" 29AC_LANG_POP([C++]) 30 31# Checks for header files. 32AC_CHECK_HEADERS([bsd/bsd.h]) 33AC_CHECK_HEADERS([endian.h]) 34AC_CHECK_HEADERS([sys/endian.h]) 35AC_CHECK_HEADERS([sys/ttycom.h]) 36 37# Ubuntu 20.04 の <sys/sysctl.h> は AC_CHECK_HEADERS() では yes になるけど 38# #warning が入ってて実際には使えない 39AC_MSG_CHECKING([for sys/sysctl.h]) 40old_CPPFLAGS="${CPPFLAGS}" 41CPPFLAGS="${CPPFLAGS} -Wcpp -Werror" 42AC_TRY_COMPILE( 43 [ 44 #include <sys/sysctl.h> 45 ],[], 46 AC_MSG_RESULT([yes]) 47 AC_DEFINE([HAVE_SYS_SYSCTL_H]), 48 AC_MSG_RESULT([no])) 49CPPFLAGS="${old_CPPFLAGS}" 50 51 52# Checks for typedefs, structures, and compiler characteristics. 53 54AC_MSG_CHECKING(for __builtin_bswap16) 55AC_TRY_COMPILE(, 56 [ 57 return __builtin_bswap16(0); 58 ], 59 AC_MSG_RESULT([yes]) 60 AC_DEFINE([HAVE___BUILTIN_BSWAP16]), 61 AC_MSG_RESULT([no])) 62 63AC_MSG_CHECKING(for __builtin_bswap32) 64AC_TRY_COMPILE(, 65 [ 66 return __builtin_bswap32(0); 67 ], 68 AC_MSG_RESULT([yes]) 69 AC_DEFINE([HAVE___BUILTIN_BSWAP32]), 70 AC_MSG_RESULT([no])) 71 72AC_MSG_CHECKING(for __builtin_bswap64) 73AC_TRY_COMPILE(, 74 [ 75 return __builtin_bswap64(0); 76 ], 77 AC_MSG_RESULT([yes]) 78 AC_DEFINE([HAVE___BUILTIN_BSWAP64]), 79 AC_MSG_RESULT([no])) 80 81AC_MSG_CHECKING(for __builtin_expect) 82AC_TRY_COMPILE(, 83 [ 84 if (__builtin_expect(1, 1)) return 0; 85 ], 86 AC_MSG_RESULT([yes]) 87 AC_DEFINE([HAVE___BUILTIN_EXPECT]), 88 AC_MSG_RESULT([no])) 89 90AC_MSG_CHECKING(for __attribute__((__format__))) 91old_CPPFLAGS="${CPPFLAGS}" 92CPPFLAGS="${CPPFLAGS} -Wall -Werror" 93AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 94 [ 95 extern int f(const char *f, ...) 96 __attribute__((__format__(__printf__, 1, 2))); 97 ], [ 98 ])], 99 AC_MSG_RESULT([yes]) 100 AC_DEFINE([HAVE___ATTRIBUTE_FORMAT]), 101 AC_MSG_RESULT([no])) 102CPPFLAGS="${old_CPPFLAGS}" 103 104 105 106# Checks for library functions. 107 108AC_SEARCH_LIBS(iconv, iconv, 109 AC_DEFINE([HAVE_ICONV]), 110) 111 112AC_MSG_CHECKING(whether iconv needs const) 113old_CPPFLAGS="${CPPFLAGS}" 114CPPFLAGS="${CPPFLAGS} -Werror" 115AC_TRY_COMPILE( 116 [ 117 #include <iconv.h> 118 ], [ 119 const char **a; 120 iconv(0, a, 0, 0, 0); 121 ], 122 AC_MSG_RESULT([yes]) 123 AC_DEFINE([HAVE_ICONV_CONST]), 124 AC_MSG_RESULT([no])) 125CPPFLAGS="${old_CPPFLAGS}" 126 127# libbsd on Linux 128AC_SEARCH_LIBS(getprogname, bsd, has_getprogname=yes, has_getprogname=no) 129if test "x${has_getprogname}" = "xno"; then 130 AC_MSG_ERROR([*** getprogname is not found. 131 On Ubuntu, sudo apt install libbsd-dev]) 132fi 133#AC_CHECK_LIB(c, getprogname, ,) 134#AC_CHECK_LIB(bsd, getprogname, 135# LIBS="${LIBS} -lbsd" 136#) 137# なければ停止する 138#AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 139# [ 140# #include <stdlib.h> 141# #include "confdefs.h" 142# #if defined(HAVE_BSD_BSD_H) 143# #include <bsd/bsd.h> 144# #endif 145# ], [ 146# getprogname() 147# ])], 148# # nothing to do on success 149# , [AC_MSG_ERROR([*** getprogname is not found. 150# On Ubuntu, sudo apt install libbsd-dev]) 151# ] 152#) 153 154if test -z "${PKG_CONFIG}"; then 155 PKG_CONFIG=pkg-config 156fi 157${PKG_CONFIG} --version 2>&1 > /dev/null 158if test $? \!= 0 ; then 159 AC_MSG_ERROR([*** pkg-config (or \$PKG_CONFIG) not found]) 160fi 161 162PKGS="libjpeg libpng" 163for p in ${PKGS}; do 164 AC_MSG_CHECKING([for ${p}]) 165 166 if ${PKG_CONFIG} --exists ${p}; then 167 AC_MSG_RESULT([yes]) 168 H=`${PKG_CONFIG} --cflags ${p}` 169 L=`${PKG_CONFIG} --libs ${p}` 170 171 CPPFLAGS="${CPPFLAGS} ${H}" 172 LIBS="${LIBS} ${L}" 173 else 174 AC_MSG_RESULT([no]) 175 AC_MSG_ERROR([*** pkg-config cannot find ${p}]) 176 fi 177done 178 179# Find mbedtls 180PATHS="/usr/pkg /usr/local" 181 182# libmbedtls と libmbedcrypto を同時に探す 183AC_MSG_CHECKING([for mbedtls]) 184old_LIBS=${LIBS} 185LIBS="${LIBS} -lmbedtls -lmbedcrypto" 186AC_LINK_IFELSE([AC_LANG_PROGRAM( 187 [ 188 #include <mbedtls/net_sockets.h> 189 #include <mbedtls/entropy.h> 190 ], [ 191 mbedtls_net_context net; 192 mbedtls_entropy_context e; 193 mbedtls_net_init(&net); 194 mbedtls_entropy_init(&e); 195 ])], has_mbedtls=yes, has_mbedtls=no 196) 197if test "x${has_mbedtls}" = "xyes"; then 198 AC_MSG_RESULT([yes]) 199else 200 LIBS=${old_LIBS} 201 202 # Try PATHS 203 old_CPPFLAGS=${CPPFLAGS} 204 for p in ${PATHS}; do 205 CPPFLAGS="${CPPFLAGS} -I${p}/include" 206 case "${host_os}" in 207 netbsd*) 208 LIBS="${LIBS} -Wl,-R,${p}/lib" 209 ;; 210 esac 211 LIBS="${LIBS} -L${p}/lib -lmbedtls -lmbedcrypto" 212 213 AC_LINK_IFELSE([AC_LANG_PROGRAM( 214 [ 215 #include <mbedtls/net_sockets.h> 216 #include <mbedtls/entropy.h> 217 ], [ 218 mbedtls_net_context net; 219 mbedtls_entropy_context e; 220 mbedtls_net_init(&net); 221 mbedtls_entropy_init(&e); 222 ])], has_mbedtls=yes, has_mbedtls=no 223 ) 224 if test "x${has_mbedtls}" = "xyes"; then 225 AC_MSG_RESULT([${p}]) 226 break 227 else 228 CPPFLAGS=${old_CPPFLAGS} 229 LIBS=${old_LIBS} 230 fi 231 done 232fi 233if test "x${has_mbedtls}" = "xno"; then 234 AC_MSG_RESULT([no]) 235 AC_MSG_ERROR([*** mbedtls not found. 236 On Ubuntu, sudo apt install libmbedtls-dev]) 237fi 238 239# Check mbedtls version. need >= 2.9.0(?) 240AC_CHECK_LIB(mbedtls, mbedtls_net_poll, 241 has_mbedtls_net_poll=yes, 242 has_mbedtls_net_poll=no) 243if test "x${has_mbedtls_net_poll}" = "xno"; then 244 AC_MSG_ERROR([*** mbedtls doesn't have mbedtls_net_poll(). 245 Please update your mbedtls to >= 2.9.0(?).]) 246fi 247 248AC_CONFIG_HEADERS([config.h]) 249AC_CONFIG_FILES([Makefile.cfg]) 250AC_OUTPUT 251