@@ -30,6 +30,8 @@ AC_INIT([libmodbus],
30
30
AC_CONFIG_SRCDIR ( [ src/modbus.c] )
31
31
AC_CONFIG_AUX_DIR ( [ build-aux] )
32
32
AM_INIT_AUTOMAKE ( [ check-news foreign 1.11 silent-rules tar-pax subdir-objects] )
33
+ AM_PROG_CC_C_O
34
+ AC_PROG_CPP
33
35
AC_PROG_CC
34
36
AC_USE_SYSTEM_EXTENSIONS
35
37
AC_SYS_LARGEFILE
@@ -89,7 +91,6 @@ AC_CHECK_HEADERS([ \
89
91
linux/serial.h \
90
92
netdb.h \
91
93
netinet/in.h \
92
- netinet/ip.h \
93
94
netinet/tcp.h \
94
95
sys/ioctl.h \
95
96
sys/params.h \
@@ -101,6 +102,17 @@ AC_CHECK_HEADERS([ \
101
102
unistd.h \
102
103
] )
103
104
105
+ dnl On some platforms like FreeBSD and OpenIndiana (illumos) the
106
+ dnl netinet/ip.h requires netinet/in.h explicitly included first:
107
+ AC_CHECK_HEADERS ( [ \
108
+ netinet/ip.h \
109
+ ] , [ ] , [ ] , [
110
+ AC_INCLUDES_DEFAULT
111
+ #if HAVE_NETINET_IN_H
112
+ # include <netinet/in.h>
113
+ #endif
114
+ ] )
115
+
104
116
# Cygwin defines IPTOS_LOWDELAY but can't handle that flag so it's necessary to
105
117
# workaround that problem and Cygwin doesn't define MSG_DONTWAIT.
106
118
AC_CHECK_DECLS ( [ __CYGWIN__] )
@@ -109,7 +121,7 @@ AC_CHECK_DECLS([__CYGWIN__])
109
121
AC_SEARCH_LIBS ( accept , network socket )
110
122
111
123
# Checks for library functions.
112
- AC_CHECK_FUNCS ( [ accept4 gai_strerror getaddrinfo gettimeofday inet_pton inet_ntop select socket strerror strlcpy] )
124
+ AC_CHECK_FUNCS ( [ accept4 gai_strerror getaddrinfo gettimeofday select socket strerror strlcpy] )
113
125
114
126
# Required for MinGW with GCC v4.8.1 on Win7
115
127
AC_DEFINE ( WINVER , 0x0501 , _ )
@@ -129,12 +141,19 @@ AC_TYPE_UINT32_T
129
141
AC_TYPE_UINT8_T
130
142
131
143
if test "$os_cygwin" = "false"; then
144
+ AC_CHECK_HEADERS ( [ windows.h] , HAVE_WINDOWS_H=yes )
145
+
132
146
# Required for getaddrinfo (TCP IP - IPv6)
133
147
AC_CHECK_HEADERS ( [ winsock2.h] , HAVE_WINSOCK2_H=yes )
134
148
if test "x$HAVE_WINSOCK2_H" = "xyes"; then
135
149
LIBS="$LIBS -lws2_32"
136
- AC_SUBST ( LIBS )
150
+ AC_SUBST ( LIBS )
137
151
fi
152
+
153
+ dnl Can bring inet_ntop()/inet_pton()... or not, depending on distro
154
+ dnl (e.g. mingw "native" with MSYS2 or cross-built from Linux); that
155
+ dnl is further checked below:
156
+ AC_CHECK_HEADERS ( [ ws2tcpip.h] , HAVE_WS2TCPIP_H=yes )
138
157
fi
139
158
140
159
if test "$os_sunos" = "true"; then
@@ -153,7 +172,99 @@ WARNING_CFLAGS="-Wall \
153
172
-Wsign-compare -Wchar-subscripts \
154
173
-Wstrict-prototypes -Wshadow \
155
174
-Wformat-security"
156
- AC_SUBST ( [ WARNING_CFLAGS] )
175
+
176
+ dnl FIXME: define more thoroughly if C++ code ever appears here
177
+ WARNING_CXXFLAGS="$WARNING_CFLAGS"
178
+
179
+ dnl Adapted from NUT v2.8.2 configure.ac :
180
+ myCFLAGS="$CFLAGS"
181
+ AS_IF ( [ test "${GCC}" = "yes"] ,
182
+ [ CFLAGS="$myCFLAGS -Werror -Werror=implicit-function-declaration"] ,
183
+ [ dnl # Don't know what to complain about for unknown compilers
184
+ dnl # FIXME: We presume here they have at least a "-Werror" option
185
+ CFLAGS="$myCFLAGS -Werror"
186
+ ] )
187
+
188
+ AC_CACHE_CHECK ( [ for inet_ntop() with IPv4 and IPv6 support] ,
189
+ [ ac_cv_func_inet_ntop] ,
190
+ [ AC_LANG_PUSH ( [ C] )
191
+ AC_LINK_IFELSE (
192
+ [ AC_LANG_PROGRAM ( [ [
193
+ #if HAVE_WINDOWS_H
194
+ # undef inline
195
+ # ifndef WIN32_LEAN_AND_MEAN
196
+ # define WIN32_LEAN_AND_MEAN
197
+ # endif
198
+ # include <windows.h>
199
+ # if HAVE_WINSOCK2_H
200
+ # include <winsock2.h>
201
+ # endif
202
+ # if HAVE_WS2TCPIP_H
203
+ # include <ws2tcpip.h>
204
+ # endif
205
+ #else
206
+ # include <arpa/inet.h>
207
+ #endif
208
+ #include <stdio.h>
209
+ ] ] ,
210
+ [ [ /* const char* inet_ntop(int af, const void* src, char* dst, size_t cnt); */
211
+ char buf[ 128] ;
212
+ printf("%s", inet_ntop(AF_INET, "1.2.3.4", buf, 10));
213
+ printf("%s", inet_ntop(AF_INET6, "::1", buf, 10))
214
+ /* autoconf adds ";return 0;" */
215
+ ] ] ) ] ,
216
+ [ ac_cv_func_inet_ntop=yes] , [ ac_cv_func_inet_ntop=no]
217
+ )
218
+ AC_LANG_POP ( [ C] )
219
+ ] )
220
+ AS_IF ( [ test x"${ac_cv_func_inet_ntop}" = xyes] ,
221
+ [ AC_DEFINE ( [ HAVE_INET_NTOP] , 1 , [ defined if system has the inet_ntop() method] ) ] ,
222
+ [ AC_MSG_WARN ( [ Required C library routine inet_ntop() not found] )
223
+ AS_IF ( [ test "${os_win32}" = "true"] , [ AC_MSG_WARN ( [ Windows antivirus might block this test] ) ] )
224
+ ]
225
+ )
226
+
227
+ AC_CACHE_CHECK ( [ for inet_pton() with IPv4 and IPv6 support] ,
228
+ [ ac_cv_func_inet_pton] ,
229
+ [ AC_LANG_PUSH ( [ C] )
230
+ AC_LINK_IFELSE (
231
+ [ AC_LANG_PROGRAM ( [ [
232
+ #if HAVE_WINDOWS_H
233
+ # undef inline
234
+ # ifndef WIN32_LEAN_AND_MEAN
235
+ # define WIN32_LEAN_AND_MEAN
236
+ # endif
237
+ # include <windows.h>
238
+ # if HAVE_WINSOCK2_H
239
+ # include <winsock2.h>
240
+ # endif
241
+ # if HAVE_WS2TCPIP_H
242
+ # include <ws2tcpip.h>
243
+ # endif
244
+ #else
245
+ # include <arpa/inet.h>
246
+ #endif
247
+ #include <stdio.h>
248
+ ] ] ,
249
+ [ [ /* int inet_pton(int af, const char *src, char *dst); */
250
+ struct in_addr ipv4;
251
+ struct in6_addr ipv6;
252
+ printf("%i ", inet_pton(AF_INET, "1.2.3.4", &ipv4));
253
+ printf("%i ", inet_pton(AF_INET6, "::1", &ipv6))
254
+ /* autoconf adds ";return 0;" */
255
+ ] ] ) ] ,
256
+ [ ac_cv_func_inet_pton=yes] , [ ac_cv_func_inet_pton=no]
257
+ )
258
+ AC_LANG_POP ( [ C] )
259
+ ] )
260
+ AS_IF ( [ test x"${ac_cv_func_inet_pton}" = xyes] ,
261
+ [ AC_DEFINE ( [ HAVE_INET_PTON] , 1 , [ defined if system has the inet_pton() method] ) ] ,
262
+ [ AC_MSG_WARN ( [ Required C library routine inet_pton() not found] )
263
+ AS_IF ( [ test "${os_win32}" = "true"] , [ AC_MSG_WARN ( [ Windows antivirus might block this test] ) ] )
264
+ ]
265
+ )
266
+ CFLAGS="$myCFLAGS"
267
+
157
268
158
269
# Check for libusb-1.0
159
270
AC_ARG_WITH ( [ libusb] ,
@@ -221,6 +332,22 @@ AS_IF([test "x$enable_debug" = "xyes"], [
221
332
CXXFLAGS="-O2"
222
333
] )
223
334
335
+ dnl NOTE: Do not pass these among C(XX)FLAGS to the configure script itself,
336
+ dnl they can break common tests unexpectedly. Variants below should work for
337
+ dnl GCC and CLANG, and other compilers that emulate them in terms of CLI API.
338
+ AC_ARG_ENABLE ( [ Werror] ,
339
+ [ AS_HELP_STRING ( [ --enable-Werror] ,
340
+ [ Enable compilation failure on warnings (default is no)] ) ] ,
341
+ [ enable_Werror=$enableval] ,
342
+ [ enable_Werror=no] )
343
+ AS_IF ( [ test "x$enable_Werror" = "xyes"] , [
344
+ WARNING_CFLAGS="$WARNING_CFLAGS -Werror"
345
+ WARNING_CXXFLAGS="$WARNING_CXXFLAGS -Werror"
346
+ ] )
347
+
348
+ AC_SUBST ( [ WARNING_CFLAGS] )
349
+ AC_SUBST ( [ WARNING_CXXFLAGS] )
350
+
224
351
AC_OUTPUT
225
352
AC_MSG_RESULT ( [
226
353
$PACKAGE $VERSION
0 commit comments