forked from wenjiegit/feng
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfigure.ac
268 lines (200 loc) · 8.86 KB
/
configure.ac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
AC_INIT([feng],
[m4_esyscmd([./git-version-gen .tarball-version])],
AC_CONFIG_AUX_DIR(config)
AM_INIT_AUTOMAKE([dist-bzip2 no-dist-gzip foreign subdir-objects])
LSC_INIT
AC_CONFIG_HEADER([config.h])
AC_ARG_WITH(rtsp-port,
AS_HELP_STRING([--with-rtsp-port], [default RTSP listening port (default=554, alternative=8554)]),,
with_rtsp_port=554)
AC_ARG_WITH(config-file,
AS_HELP_STRING([--with-config-file], [name for the configuration file in sysconfdir (default=feng.conf)]),,
with_config_file="feng.conf")
AC_ARG_WITH(log-file,
AS_HELP_STRING([--with-log-file], [name for the log file (default=feng.log)]),,
with_log_file="feng.log")
AC_ARG_WITH(max-session,
AS_HELP_STRING([--with-max-session], [max number of incoming sessions (default=100)]),,
with_max_session=100)
AC_ARG_ENABLE(libav,
AS_HELP_STRING([--enable-libav], [enable libav support (default=yes)]),,
enable_libav="yes")
AC_ARG_ENABLE(live-streaming,
AS_HELP_STRING([--enable-live-streaming], [enable support for live streaming (default=yes)]),,
live_streaming="yes")
AX_CHECK_LIBRARY([LIBEV], [ev.h], [ev], [],
[AC_MSG_ERROR([libev not found, feng requires libev])])
AC_ARG_ENABLE(trace,
AS_HELP_STRING([--enable-trace], [enable additional informations in log [[default=no]]]),,
enable_trace="no")
AC_ARG_ENABLE([tables],
AS_HELP_STRING([--disable-tables], [disable big build-time tables (for embedded)]))
AS_IF([test "x$enable_tables" = "xno"], [
AC_DEFINE([AVOID_TABLES], [1], [Define to 1 if tables should be avoided])
])
dnl Checks used by feng itself
AC_CHECK_HEADERS_ONCE([syslog.h])
AC_CHECK_FUNCS_ONCE([inet_ntop])
AC_FUNC_STRERROR_R
AC_SEARCH_LIBS([clock_gettime], [rt],
[AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Define this if you have clock_gettime])],
[AC_MSG_WARN([POSIX realtime features not available])])
CC_ATTRIBUTE_PACKED([AC_DEFINE([ATTR_PACKED], [__attribute__((__packed__))], [Declares a structure packed])],
[AC_MSG_ERROR([unable to find how the compiler declares packed structures])])
CC_ATTRIBUTE_DESTRUCTOR
AX_TLS([], [
AC_CHECK_FUNCS([pthread_key_create pthread_setspecific pthread_getspecific], [],
[AC_MSG_ERROR([Unable to find either Thread-Local Storage support or POSIX thread-specific data management functions])])
])
AH_BOTTOM([#if !defined(NDEBUG) && defined(SUPPORT_ATTRIBUTE_DESTRUCTOR)
# define CLEANUP_DESTRUCTOR __attribute__((__destructor__))
#endif
])
dnl check if we have the generic struct for net addresses the has max
dnl possible size
AC_CHECK_TYPES(struct sockaddr_storage,,, [#include <sys/socket.h>])
AX_PROG_FLEX([],
[AC_MSG_ERROR([unable to find flex, feng needs flex to build])
])
AX_PROG_BISON([],
[AC_MSG_ERROR([unable to find GNU bison, feng needs GNU bison to build])
])
CHECK_RAGEL_AM([src/network/ragel_range.c], [6.6])
feng_state_dir=$(eval echo ${localstatedir}/feng)
AC_SUBST(feng_state_dir)
LSC_CHECK_IPV6
LSC_CHECK_SCTP
LIBS="$LIBS $SCTP_LIBS"
dnl Set the comment marker when sctp is not enabled, this allows for
dnl the -uninstalled variant of feng.conf to use sctp if enabled.
AS_IF([test "x$have_sctp" = "xyes"],
[AC_SUBST([ENABLE_SCTP], [""])],
[AC_SUBST([ENABLE_SCTP], ["#"])])
AS_IF([test "x$have_sctp" = "xyes"], [
AC_CHECK_HEADERS([linux/sockios.h])
])
dnl Check for prerequisites to enable live streaming with flux.
AS_IF([test "x$live_streaming" = "xyes"],
[AC_SEARCH_LIBS([mq_open], [rt],
[AC_DEFINE(LIVE_STREAMING, [1],
[Define this if live streaming is supported])],
[live_streaming=no])])
AM_CONDITIONAL([LIVE_STREAMING], [test "x$live_streaming" = "xyes"])
PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16 gthread-2.0])
CFLAGS="$CFLAGS $GLIB_CFLAGS"
LIBS="$LIBS $GLIB_LIBS"
avformat_msg="no"
avutil_msg="no"
if test "x$enable_libav" = "xyes"; then
PKG_CHECK_MODULES(LIBAVFORMAT,[libavformat >= 53.3.0 libavcodec],
[AC_DEFINE(HAVE_AVFORMAT,,[Define if libavformat support is available])
avformat_msg="yes"
])
CFLAGS="$CFLAGS $LIBAVFORMAT_CFLAGS"
LIBS="$LIBS $LIBAVFORMAT_LIBS"
PKG_CHECK_MODULES(LIBAVUTIL,[libavutil >= 49.6.0],
[AC_DEFINE(HAVE_AVUTIL,,[Define if libavutil support is available])
avutil_msg="yes"],
[avutil_msg="no, using internal"])
CFLAGS="$CFLAGS $LIBAVUTIL_CFLAGS"
LIBS="$LIBS $LIBAVUTIL_LIBS"
fi
AM_CONDITIONAL(FENG_LIBAV, [test "$enable_libav" = "yes"])
CC_ATTRIBUTE_UNUSED(
[AC_DEFINE([ATTR_UNUSED], [__attribute__((__unused__))], [Define this if ATTR_UNUSED is supported])],
[AC_DEFINE([ATTR_UNUSED], [], [Define this if ATTR_UNUSED is not supported])])
if test "$enable_trace" = "yes"; then
AC_DEFINE(TRACE, 1,[Trace enabled])
fi
AC_ARG_VAR([XSLTPROC], [A libxslt-compatible XSLT processor command])
AS_IF([test "x$XSLTPROC" = "x"], [
AC_CHECK_PROGS([XSLTPROC], [xsltproc])
AS_IF([test "x$XSLTPROC" = "x"], [
AC_MSG_ERROR([unable to find xsltproc, you need this to build feng])
])
])
PKG_HAVE_DEFINE_WITH_MODULES(JSON,[json])
CFLAGS="$CFLAGS $JSON_CFLAGS"
LIBS="$LIBS $JSON_LIBS"
feng_avroot_dir=$(eval echo $localstatedir/$PACKAGE_NAME/avroot|sed -e "s:/\+:/:g; s:NONE::g")
AC_SUBST(feng_avroot_dir)
feng_max_session=$(eval echo $with_max_session)
AC_SUBST(feng_max_session)
feng_rtsp_port=$(eval echo $with_rtsp_port)
AC_SUBST(feng_rtsp_port)
feng_conf_file=$(eval echo $with_config_file|sed -e "s:/\+:/:g")
AC_SUBST(feng_conf_file)
feng_basedir=$(eval echo $localstatedir|sed -e "s:/\+:/:g; s:NONE::g")
feng_logdir="${feng_basedir}/log/$PACKAGE_NAME"
AC_SUBST(feng_logdir)
feng_log_file="${feng_basedir}/log/$with_log_file"
AC_SUBST(feng_log_file)
feng_statedir="${feng_basedir}/lib/$PACKAGE_NAME"
AC_SUBST(feng_statedir)
feng_basedir="${feng_basedir}/$PACKAGE_NAME"
AC_SUBST(feng_basedir)
feng_conf_dir=$(eval echo $sysconfdir|sed -e "s:/\+:/:g; s:NONE::g")
AC_SUBST(feng_conf_dir)
feng_docs_dir=$(eval echo $datadir/doc/$PACKAGE_NAME|sed -e "s:/\+:/:g")
AC_SUBST(feng_docs_dir)
AC_DEFINE_UNQUOTED(FENG_MAX_SESSION_DEFAULT,
$feng_max_session,
[Define max number of RTSP incoming sessions for Feng])
AC_DEFINE_UNQUOTED(FENG_RTSP_PORT_DEFAULT,
$feng_rtsp_port,
[Define default RTSP listening port])
AC_DEFINE_UNQUOTED(FENG_AVROOT_DIR_DEFAULT,
$feng_avroot_dir,
[Define default directory for Feng A/V resources])
AC_DEFINE_UNQUOTED(FENG_AVROOT_DIR_DEFAULT_STR,
"$feng_avroot_dir",
[Define default directory string for Feng A/V resources])
AC_DEFINE_UNQUOTED(FENG_DEFAULT_PORT, "$feng_rtsp_port", [Define default listening port])
AC_DEFINE_UNQUOTED(FENG_CONF_FILE_DEFAULT,
$feng_conf_file,
[Define default file for Feng configuration])
AC_DEFINE_UNQUOTED(FENG_LOG_FILE_DEFAULT,
$feng_log_file,
[Define default file for Feng logger])
AC_DEFINE_UNQUOTED(FENG_LOG_FILE_DEFAULT_STR,
"$feng_log_file",
[Define default string for Feng log file])
AC_DEFINE_UNQUOTED(FENG_CONF_DIR_DEFAULT,
$feng_conf_dir,
[Define default directory for Feng configuration])
AC_DEFINE_UNQUOTED(FENG_CONF_PATH_DEFAULT_STR,
"$(eval echo ${feng_conf_dir}/${feng_conf_file}|sed -e s:/\+:/:g)",
[Define absolute path string for Feng configuration file])
AC_DEFINE_UNQUOTED(FENG_STATE_DIR,
$feng_state_dir,
[Define default dir for Certificate (pem format)])
AC_DEFINE_UNQUOTED(FENIC_STATE_DIR_STR,
"$feng_state_dir",
[Define default string dir for Certificate (pem format)])
CC_CHECK_CFLAGS_APPEND([-Werror=declaration-after-statement -Wdeclaration-after-statement],
[break;])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([etc/feng.conf])
AC_CONFIG_FILES([etc/feng-uninstalled.conf])
AC_CONFIG_FILES([Doxyfile])
AC_OUTPUT
LSC_DEBUG_STATUS
AC_MSG_NOTICE([config files successfully generated!
Feng Install prefix .......... : $prefix
Feng Binary path ............. : $(eval echo $exec_prefix/bin/feng)
Feng Configuration path ...... : $feng_conf_dir
Feng Log File ................ : $feng_log_file
Feng Multimedia Files root ... : $feng_avroot_dir
Feng RTSP listening port ..... : $feng_rtsp_port
live streaming supported...... : $live_streaming
sctp support enabled ......... : $enable_sctp
avformat support enabled ..... : $avformat_msg
avutil support enabled ....... : $avutil_msg
json support enabled ......... : $with_json
'make' will now compile Feng and 'su -c make install' will install it.
Note: On non-Linux systems you might need to use 'gmake' instead of 'make'.
])