Added another id for vendor Harman/Kardon (0x001950)
[deb_libcec.git] / configure.ac
1 AC_PREREQ(2.59)
2 AC_INIT([libcec], [2:1:0], [http://libcec.pulse-eight.com/])
3 AC_CONFIG_HEADERS([config.h])
4 AH_TOP([#pragma once])
5
6 AM_INIT_AUTOMAKE([foreign])
7 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
8
9 AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
10
11 AC_CANONICAL_HOST
12
13 cflags_reset="$CFLAGS"
14 AC_LANG(C++)
15 AC_PROG_CXX
16 AC_PROG_LIBTOOL
17 AC_PROG_INSTALL
18 AC_LIBTOOL_DLOPEN
19 CFLAGS="$cflags_reset"
20
21 msg_pkg_config_missing="'pkg-config' is missing - adapter detection will not be available"
22 msg_pthread_missing="required library 'pthread' is missing"
23 msg_dl_missing="required library 'dl' is missing"
24 msg_udev_missing="library 'udev' is missing - adapter detection will not be available"
25 msg_dirent_missing="dirent.h header is missing - adapter detection will not be available"
26 msg_lockdev_missing="library 'liblockdev' is missing"
27 msg_rpi_api_missing="Raspberry Pi API not found or incompatible with libCEC"
28 msg_rpi_will_check="will check for RPi support"
29 msg_rpi_unsupported_target="will not check for RPi support (unsupported cpu: ${host_cpu})"
30 msg_required_header_missing="required header is missing"
31
32 ## debugging symbols
33 AC_ARG_ENABLE([debug],
34 [AS_HELP_STRING([--enable-debug],
35 [include debug symbols (default is no)])],
36 [use_debug=$enableval],
37 [use_debug=no])
38
39 ## optimisation
40 AC_ARG_ENABLE([optimisation],
41 [AS_HELP_STRING([--enable-optimisation],
42 [optimisation flag (default is yes)])],
43 [use_optimisation=$enableval],
44 [use_optimisation=yes])
45
46 ## TDA995x support
47 AC_ARG_ENABLE([cubox],
48 [AS_HELP_STRING([--enable-tda995x],
49 [enable support for the TDA995x (default is no)])],
50 [use_tda995x=$enableval],
51 [use_tda995x=no])
52
53 ## Optional path to the tda995x dev toolkit
54 AC_ARG_WITH([tda995x-toolkit-path],
55 [AS_HELP_STRING([--with-tda995x-toolkit-path],
56 [location of the TDA995x driver toolkit (default is ./nxp_hdmi)])],
57 [TDA995X_CFLAGS="-I$withval/inc"],
58 [TDA995X_CFLAGS="-I\$(abs_top_srcdir)/nxp_hdmi/inc"])
59
60 ## Raspberry Pi support
61 AC_ARG_ENABLE([rpi],
62 [AS_HELP_STRING([--enable-rpi],
63 [enable support for the Raspberry Pi (default is auto)])],
64 [use_rpi=$enableval],
65 [use_rpi=auto])
66
67 ## Optional path to the RPi's dev headers
68 AC_ARG_WITH([rpi-include-path],
69 [AS_HELP_STRING([--with-rpi-include-path],
70 [location of the Raspberry Pi headers (location of /opt/vc/include, default is auto)])],
71 [RPI_CFLAGS="-I$withval -I$withval/interface/vcos/pthreads -I$withval/interface/vmcs_host/linux"])
72
73 ## Optional path to libbcm_host.so
74 AC_ARG_WITH([rpi-lib-path],
75 [AS_HELP_STRING([--with-rpi-lib-path],
76 [location of the Raspberry Pi libraries (location of libbcm_host.so, default is auto)])],
77 [RPI_LIBS="-L$withval"])
78
79 ## only check for the RPi API on ARM targets
80 if test "x$use_rpi" != "xno"; then
81 case "${host_cpu}" in
82 arm*)
83 AC_MSG_NOTICE($msg_rpi_will_check)
84 ;;
85 *)
86 if test "x$use_rpi" = "xyes"; then
87 AC_MSG_ERROR($msg_rpi_unsupported_target)
88 else
89 AC_MSG_NOTICE($msg_rpi_unsupported_target)
90 fi
91 use_rpi="no"
92 ;;
93 esac
94 fi
95
96 ## add the top dir and include to the include path, so we can include config.h and cec.h
97 CPPFLAGS="$CPPFLAGS -I\$(abs_top_srcdir)/src -I\$(abs_top_srcdir)/include"
98
99 ## search for pkg-config
100 AC_CHECK_PROG(HAVE_PKG_CONFIG, pkg-config, yes)
101 if test "x$HAVE_PKG_CONFIG" != "xyes" ; then
102 AC_MSG_WARN($msg_pkg_config_missing)
103 fi
104
105 ## search for pthread, required by all targets
106 AC_SEARCH_LIBS([pthread_create],[pthread],,AC_MSG_ERROR($msg_pthread_missing))
107 AC_CHECK_FUNCS([pthread_mutexattr_init pthread_cond_init pthread_cond_destroy pthread_cond_signal pthread_cond_broadcast pthread_cond_wait pthread_cond_timedwait])
108
109 ## search for dlopen, required by all targets
110 AC_SEARCH_LIBS([dlopen], [dl],
111 [test "$ac_cv_search_dlopen" = "none required" || LIBS_DL=$ac_cv_search_dlopen],
112 AC_MSG_ERROR($msg_dl_missing))
113 AC_CHECK_FUNCS([dlopen dlclose dlsym])
114
115 ## platform specific libs, required by all targets
116 case "${host}" in
117 *-*-linux*)
118 # for timeutils
119 AC_SEARCH_LIBS([clock_gettime], [rt])
120 ;;
121 *-apple-darwin*)
122 LIBS="$LIBS -framework CoreVideo -framework IOKit"
123 ;;
124 esac
125
126 ## we found all the libs and headers that we need for the client applications
127 libs_client="$LIBS"
128
129 ## search for udev, lockdev and the RPi API, only required by libCEC
130 use_udev="no"
131 use_adapter_detection="yes"
132 use_lockdev="no"
133 SUPPRESS_MANGLING_WARNINGS=" -Wno-psabi"
134 case "${host}" in
135 *-*-linux*)
136 ## search for udev if pkg-config was found
137 if test "x$HAVE_PKG_CONFIG" = "xyes" ; then
138 PKG_CHECK_MODULES([UDEV],[libudev],use_udev="yes",AC_MSG_WARN($msg_udev_missing))
139 fi
140
141 ## we need dirent.h on linux too
142 if test "$use_udev" = "yes"; then
143 AC_CHECK_HEADER(dirent.h,,[use_udev="no";AC_MSG_WARN($msg_dirent_missing)])
144 fi
145
146 if test "$use_udev" != "yes"; then
147 use_adapter_detection="no"
148 fi
149
150 ## search for lockdev
151 use_lockdev="yes"
152 AC_CHECK_HEADER(lockdev.h,,[use_lockdev="no";AC_MSG_WARN($msg_lockdev_missing)])
153 AC_CHECK_LIB(lockdev,dev_unlock,,[use_lockdev="no";AC_MSG_WARN($msg_lockdev_missing)])
154
155 AC_CHECK_HEADER(time.h,,AC_MSG_ERROR($msg_required_header_missing))
156 AC_CHECK_HEADER(sys/prctl.h,,AC_MSG_ERROR($msg_required_header_missing))
157
158 ## search for the RPi API. we need to check a couple of things to see if
159 ## it's recent enough and contains the calls needed for libCEC to operate
160 ## correctly.
161 if test "x$use_rpi" != "xno"; then
162 CPPFLAGS="$CPPFLAGS $RPI_CFLAGS"
163 libs_pre_rpi="$LIBS"
164 LIBS="$LIBS $RPI_LIBS -lvcos -lvchiq_arm"
165
166 check_rpi_cec_service="yes"
167
168 ## check for headers we need
169 AC_CHECK_HEADER(interface/vmcs_host/vc_cec.h,,check_rpi_cec_service="no")
170 AC_CHECK_HEADER(interface/vmcs_host/vc_cecservice.h,,check_rpi_cec_service="no")
171 AC_CHECK_HEADER(interface/vchiq_arm/vchiq_if.h,,check_rpi_cec_service="no")
172 AC_CHECK_HEADER(bcm_host.h,,check_rpi_cec_service="no")
173
174 ## check if the headers contain support for libCEC.
175 ## VC_CECSERVICE_VER needs to be defined
176 AC_MSG_CHECKING([interface/vmcs_host/vc_cec.h compatibility])
177
178 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <interface/vmcs_host/vc_cecservice.h>
179 #include <interface/vchiq_arm/vchiq_if.h>
180 #if !defined(VC_CECSERVICE_VER)
181 #error RPi headers does not contain libCEC support
182 #endif]], [[]])],[AC_MSG_RESULT([yes])],[check_rpi_cec_service="no"; AC_MSG_RESULT([no])])
183
184 ## check if the methods we're using can be found in libbcm_host.so, so we don't use an incompatible version
185 AC_CHECK_LIB(bcm_host,vchi_initialise,,check_rpi_cec_service="no")
186 libs_tmp="$LIBS"
187 AC_CHECK_LIB(bcm_host,vc_vchi_cec_init,,check_rpi_cec_service="no")
188 AC_CHECK_LIB(bcm_host,vc_cec_get_logical_address,,check_rpi_cec_service="no")
189 AC_CHECK_LIB(bcm_host,vc_cec_get_physical_address,,check_rpi_cec_service="no")
190 AC_CHECK_LIB(bcm_host,vc_cec_param2message,,check_rpi_cec_service="no")
191 AC_CHECK_LIB(bcm_host,vc_cec_poll_address,,check_rpi_cec_service="no")
192 AC_CHECK_LIB(bcm_host,vc_cec_register_callback,,check_rpi_cec_service="no")
193 AC_CHECK_LIB(bcm_host,vc_cec_release_logical_address,,check_rpi_cec_service="no")
194 AC_CHECK_LIB(bcm_host,vc_cec_set_passive,,check_rpi_cec_service="no")
195 AC_CHECK_LIB(bcm_host,vcos_init,,check_rpi_cec_service="no")
196 AC_CHECK_LIB(bcm_host,vchiq_initialise,,check_rpi_cec_service="no")
197 AC_CHECK_LIB(bcm_host,vchi_initialise,,check_rpi_cec_service="no")
198 AC_CHECK_LIB(bcm_host,vchi_create_connection,,check_rpi_cec_service="no")
199 AC_CHECK_LIB(bcm_host,bcm_host_init,,check_rpi_cec_service="no")
200 LIBS="$libs_tmp"
201
202 if test "x$check_rpi_cec_service" != "xyes" && test "x$use_rpi" = "xyes"; then
203 AC_MSG_ERROR($msg_rpi_api_missing)
204 elif test "x$check_rpi_cec_service" != "xyes"; then
205 use_rpi="no"
206 LIBS="$libs_pre_rpi"
207 fi
208 fi
209 ;;
210 *-apple-darwin*)
211 AC_CHECK_HEADER(mach/mach_time.h,,AC_MSG_ERROR($msg_required_header_missing))
212 AC_CHECK_HEADER(CoreVideo/CVHostTime.h,,AC_MSG_ERROR($msg_required_header_missing))
213 AC_DEFINE([TARGET_DARWIN], [1], [Darwin target])
214 SUPPRESS_MANGLING_WARNINGS=""
215 ;;
216 esac
217
218 ## define the build info
219 LIB_INFO="host: ${host}, features:"
220
221 features="Configured features:\n Pulse-Eight CEC Adapter :\t\tyes"
222 LIB_INFO="$LIB_INFO 'P8 USB'"
223 AC_DEFINE([HAVE_P8_USB],[1],[Define to 1 to include support for the Pulse-Eight USB-CEC Adapter])
224 AM_CONDITIONAL(USE_P8_USB, true)
225
226 if test "x$use_lockdev" = "xyes"; then
227 AC_DEFINE([HAVE_LOCKDEV],[1],[Define to 1 if liblockdev is installed])
228 fi
229
230 ## mark adapter detection as available if the required deps were found
231 if test "x$use_adapter_detection" = "xyes"; then
232 ## mark udev as available if it was found
233 if test "x$use_udev" = "xyes"; then
234 INCLUDES="$INCLUDES $UDEV_CFLAGS"
235 LIBS="$LIBS $UDEV_LIBS"
236 AC_DEFINE([HAVE_LIBUDEV],[1],[Define to 1 if libudev is installed])
237 REQUIRES="$REQUIRES udev"
238 fi
239
240 AC_DEFINE([HAVE_P8_USB_DETECT],[1],[Define to 1 to include autodetection support for the Pulse-Eight USB-CEC Adapter])
241 AM_CONDITIONAL(USE_P8_USB_DETECT, true)
242
243 features="$features\n Pulse-Eight CEC Adapter detection :\tyes"
244 LIB_INFO="$LIB_INFO 'P8 USB detect'"
245 else
246 AM_CONDITIONAL(USE_P8_USB_DETECT, false)
247 features="$features\n Pulse-Eight CEC Adapter detection :\tno"
248 fi
249
250 ## mark RPi support as available if the required headers and libs were found
251 if test "x$use_rpi" != "xno"; then
252 AC_DEFINE([HAVE_RPI_API],[1],[Define to 1 to include RPi support])
253 AM_CONDITIONAL(USE_RPI_API, true)
254 features="$features\n Raspberry Pi support :\t\tyes"
255 LIB_INFO="$LIB_INFO 'RPi'"
256 else
257 AM_CONDITIONAL(USE_RPI_API, false)
258 features="$features\n Raspberry Pi support :\t\tno"
259 fi
260
261 ## mark TDA995x support as available
262 if test "x$use_tda995x" != "xno"; then
263 AC_DEFINE([HAVE_TDA995X_API],[1],[Define to 1 to include CuBox support])
264 AM_CONDITIONAL(USE_TDA995X_API, true)
265 features="$features\n TDA995x support :\t\t\tyes"
266 LIB_INFO="$LIB_INFO 'TDA995x'"
267 CPPFLAGS="$CPPFLAGS $TDA995X_CFLAGS"
268 else
269 AM_CONDITIONAL(USE_TDA995X_API, false)
270 features="$features\n TDA995x support :\t\t\tno"
271 fi
272
273 ## check if our build system is complete
274 AC_CHECK_HEADER(algorithm,,AC_MSG_ERROR($msg_required_header_missing))
275 AC_CHECK_HEADER(ctype.h,,AC_MSG_ERROR($msg_required_header_missing))
276 AC_CHECK_HEADER(dlfcn.h,,AC_MSG_ERROR($msg_required_header_missing))
277 AC_CHECK_HEADER(errno.h,,AC_MSG_ERROR($msg_required_header_missing))
278 AC_CHECK_HEADER(fcntl.h,,AC_MSG_ERROR($msg_required_header_missing))
279 AC_CHECK_HEADER(functional,,AC_MSG_ERROR($msg_required_header_missing))
280 AC_CHECK_HEADER(locale,,AC_DEFINE([SS_NO_LOCALE],[1],[Define to 1 to exclude locale support]))
281 AC_CHECK_HEADER(map,,AC_MSG_ERROR($msg_required_header_missing))
282 AC_CHECK_HEADER(netdb.h,,AC_MSG_ERROR($msg_required_header_missing))
283 AC_CHECK_HEADER(poll.h,,AC_MSG_ERROR($msg_required_header_missing))
284 AC_CHECK_HEADER(pthread.h,,AC_MSG_ERROR($msg_required_header_missing))
285 AC_CHECK_HEADER(queue,,AC_MSG_ERROR($msg_required_header_missing))
286 AC_CHECK_HEADER(semaphore.h,,AC_MSG_ERROR($msg_required_header_missing))
287 AC_CHECK_HEADER(set,,AC_MSG_ERROR($msg_required_header_missing))
288 AC_CHECK_HEADER(stdarg.h,,AC_MSG_ERROR($msg_required_header_missing))
289 AC_CHECK_HEADER(stdint.h,,AC_MSG_ERROR($msg_required_header_missing))
290 AC_CHECK_HEADER(stdio.h,,AC_MSG_ERROR($msg_required_header_missing))
291 AC_CHECK_HEADER(stdlib.h,,AC_MSG_ERROR($msg_required_header_missing))
292 AC_CHECK_HEADER(string,,AC_MSG_ERROR($msg_required_header_missing))
293 AC_CHECK_HEADER(string.h,,AC_MSG_ERROR($msg_required_header_missing))
294 AC_CHECK_HEADER(termios.h,,AC_MSG_ERROR($msg_required_header_missing))
295 AC_CHECK_HEADER(unistd.h,,AC_MSG_ERROR($msg_required_header_missing))
296 AC_CHECK_HEADER(vector,,AC_MSG_ERROR($msg_required_header_missing))
297 AC_CHECK_HEADER(wchar.h,,AC_MSG_ERROR($msg_required_header_missing))
298 AC_CHECK_HEADER(wctype.h,,AC_MSG_ERROR($msg_required_header_missing))
299 AC_CHECK_HEADER(arpa/inet.h,,AC_MSG_ERROR($msg_required_header_missing))
300 AC_CHECK_HEADER(netinet/in.h,,AC_MSG_ERROR($msg_required_header_missing))
301 AC_CHECK_HEADER(netinet/tcp.h,,AC_MSG_ERROR($msg_required_header_missing))
302 AC_CHECK_HEADER(sys/socket.h,,AC_MSG_ERROR($msg_required_header_missing))
303 AC_CHECK_HEADER(sys/time.h,,AC_MSG_ERROR($msg_required_header_missing))
304 AC_CHECK_HEADER(sys/types.h,,AC_MSG_ERROR($msg_required_header_missing))
305 AC_CHECK_FUNCS([close fcntl select write read shutdown send recv memset sprintf getaddrinfo getsockopt setsockopt connect poll sched_yield open strerror tcsetattr tcgetattr cfsetispeed cfsetospeed bind freeaddrinfo listen accept socket])
306
307 ## add the build date to LIB_INFO
308 AC_CHECK_PROG(HAVE_GIT, git, yes)
309 if test "x$HAVE_GIT" = "xyes"; then
310 revision=$(git --no-pager log --abbrev=7 -n 1 --pretty=format:"%h" HEAD)
311 fi
312 if test "x$revision" != "x"; then
313 LIB_INFO="$LIB_INFO, git revision: ${revision}"
314 fi
315
316 AC_CHECK_PROG(HAVE_DATE, date, yes)
317 if test "x$HAVE_DATE" = "xyes"; then
318 LIB_INFO="$LIB_INFO, compiled on: `date -u`"
319 else
320 LIB_INFO="$LIB_INFO, compiled on: (unknown date)"
321 fi
322
323 ## add the name of the user who built libCEC to LIB_INFO
324 AC_CHECK_PROG(HAVE_WHOAMI, whoami, yes)
325 if test "x$HAVE_WHOAMI" = "xyes" ; then
326 LIB_INFO="$LIB_INFO by `whoami`"
327 else
328 LIB_INFO="$LIB_INFO by (unknown user)"
329 fi
330
331 ## add the hostname of the build host of libCEC to LIB_INFO
332 AC_CHECK_PROG(HAVE_HOSTNAME, hostname, yes)
333 if test "x$HAVE_HOSTNAME" = "xyes"; then
334 LIB_INFO="$LIB_INFO@`hostname -f`"
335 fi
336
337 ## add the system info of the build host of libCEC to LIB_INFO
338 AC_CHECK_PROG(HAVE_UNAME, uname, yes)
339 if test "x$HAVE_UNAME" = "xyes"; then
340 LIB_INFO="$LIB_INFO on `uname -s` `uname -r` (`uname -m`)"
341 fi
342
343 ## redefine the LIBS, so cec-client isn't linked against things they don't need
344 LIBS_LIBCEC="$LIBS"
345 LIBS="$libs_client"
346
347 CXXFLAGS="$CXXFLAGS -fPIC -Wall -Wextra -Wno-missing-field-initializers $SUPPRESS_MANGLING_WARNINGS"
348
349 if test "x$use_debug" = "xyes"; then
350 CXXFLAGS="$CXXFLAGS -g"
351 AC_DEFINE(CEC_DEBUGGING,"1", "generate libCEC debug output")
352 fi
353
354 if test "x$optimisation" = "xyes"; then
355 CXXFLAGS="$CXXFLAGS -O2"
356 fi
357
358 AC_DEFINE_UNQUOTED(LIB_INFO,"$LIB_INFO", "information about how libCEC was compiled")
359
360 AC_SUBST([REQUIRES])
361 AC_SUBST([LIBS])
362 AC_SUBST([LIBS_LIBCEC])
363 AC_SUBST([LIB_INFO])
364 AC_SUBST([USE_P8_USB])
365 AC_SUBST([USE_P8_USB_DETECT])
366 AC_SUBST([USE_RPI_API])
367 AC_CONFIG_FILES([src/lib/libcec.pc])
368 AC_OUTPUT([Makefile src/lib/Makefile src/testclient/Makefile])
369
370 cat <<EOB
371
372 ##############################################################################
373
374 libCEC version $VERSION configured
375
376 Compilation flags:
377 CXXFLAGS : $CXXFLAGS
378 libCEC LDFLAGS : $LIBS_LIBCEC
379 client LDFLAGS : $LIBS
380
381 EOB
382
383 echo -e "$features"
384
385 cat <<EOB
386
387 You can now build libCEC by running:
388 make
389
390 ##############################################################################
391
392 EOB