X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=configure.ac;h=e8b2118cdede3d2a1ebabbe751cbaf2b2b741cec;hp=f7e3f8d3f1a0f8c2af7dc0cdf73dd2de4684ca77;hb=38c80b2b03dc357fbc28f8ba04764f1e1741078a;hpb=3e7bb8dae2b0eee8968db9157bfee3d812b95cf2 diff --git a/configure.ac b/configure.ac index f7e3f8d3..e8b2118c 100644 --- a/configure.ac +++ b/configure.ac @@ -31,12 +31,12 @@ AC_REPLACE_FNMATCH AC_HEADER_DIRENT AC_HEADER_STDC AC_HEADER_SYS_WAIT +AC_HEADER_STDBOOL AC_CHECK_HEADERS([arpa/inet.h ctype.h fcntl.h limits.h netdb.h netinet/in.h \ stdlib.h string.h sys/socket.h sys/time.h sys/timeb.h sys/un.h \ sys/ipc.h unistd.h utime.h stddef.h], [], [AC_MSG_ERROR([$ac_header not found])]) - # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE @@ -45,6 +45,7 @@ AC_TYPE_PID_T AC_TYPE_SIZE_T AC_HEADER_TIME AC_STRUCT_TM +AC_TYPE_INT8_T AC_TYPE_INT16_T AC_TYPE_INT32_T AC_TYPE_INT64_T @@ -75,7 +76,7 @@ AC_FUNC_LSTAT AC_CHECK_FUNCS([atexit dup2 memchr memmove memset \ regcomp select strchr strdup strerror strstr strtol uname \ fchdir gettimeofday localtime_r munmap strcasecmp strcspn \ - strncasecmp strrchr strspn alarm mkdir rmdir], [], + strncasecmp strrchr strspn alarm mkdir inet_ntoa socket], [], [AC_MSG_ERROR([function not found, cannot live without it])]) cmdline_dir="cmdline" @@ -94,7 +95,7 @@ server_command_list afs_command_list audiod_command_list bitstream imdct wma_afh wma_common wmadec_filter buffer_tree " -all_executables="server recv filter audioc write client afh" +executables="recv filter audioc write client afh audiod" recv_cmdline_objs="add_cmdline(recv http_recv dccp_recv udp_recv)" @@ -102,13 +103,10 @@ recv_errlist_objs="http_recv recv_common recv time string net dccp_recv fd sched stdout ggo udp_recv fec buffer_tree" recv_ldflags="" -receivers=" http dccp udp" -senders=" http dccp udp" - filter_cmdline_objs="add_cmdline(filter compress_filter amp_filter prebuffer_filter)" filter_errlist_objs="filter_common wav_filter compress_filter filter string stdin stdout sched fd amp_filter ggo fecdec_filter fec - prebuffer_filter time bitstream imdct wma_common wmadec_filter" + prebuffer_filter time bitstream imdct wma_common wmadec_filter buffer_tree" filter_ldflags="-lm" filters=" compress wav amp fecdec wmadec prebuffer" @@ -135,8 +133,8 @@ server_errlist_objs="server afh_common mp3_afh vss command net string signal ipc dccp_send fd user_list chunk_queue afs aft mood score attribute blob playlist sha1 sched acl send_common udp_send color fec server_command_list afs_command_list wma_afh wma_common" -server_ldflags="-losl" -server_audio_formats=" mp3" +server_ldflags="" +server_audio_formats="mp3 wma" write_cmdline_objs="add_cmdline(write file_write)" write_errlist_objs="write write_common file_write time fd string sched stdin @@ -146,8 +144,8 @@ writers=" file" default_writer="FILE_WRITE" client_cmdline_objs="add_cmdline(client)" -client_errlist_objs="client net string crypt fd sched stdin stdout - client_common sha1" +client_errlist_objs="client net string crypt fd sched stdin stdout time + client_common sha1 buffer_tree" client_ldflags="" gui_cmdline_objs="add_cmdline(gui)" @@ -159,6 +157,86 @@ fade_cmdline_objs="add_cmdline(fade)" fade_errlist_objs="fade exec string fd" +########################################################################### snprintf +# =========================================================================== +# http://www.nongnu.org/autoconf-archive/ax_func_snprintf.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_FUNC_SNPRINTF +# +# DESCRIPTION +# +# Checks for a fully C99 compliant snprintf, in particular checks whether +# it does bounds checking and returns the correct string length; does the +# same check for vsnprintf. If no working snprintf or vsnprintf is found, +# it prints an error message and aborts. +# +# LICENSE +# +# Copyright (c) 2008 Ruediger Kuhlmann +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AU_ALIAS([AC_FUNC_SNPRINTF], [AX_FUNC_SNPRINTF]) +AC_DEFUN([AX_FUNC_SNPRINTF], +[AC_CHECK_FUNCS(snprintf vsnprintf) +AC_MSG_CHECKING(for working snprintf) +AC_CACHE_VAL(ac_cv_have_working_snprintf, +[AC_TRY_RUN( +[#include + +int main(void) +{ + char bufs[5] = { 'x', 'x', 'x', '\0', '\0' }; + char bufd[5] = { 'x', 'x', 'x', '\0', '\0' }; + int i; + i = snprintf (bufs, 2, "%s", "111"); + if (strcmp (bufs, "1")) exit (1); + if (i != 3) exit (1); + i = snprintf (bufd, 2, "%d", 111); + if (strcmp (bufd, "1")) exit (1); + if (i != 3) exit (1); + exit(0); +}], ac_cv_have_working_snprintf=yes, ac_cv_have_working_snprintf=no, ac_cv_have_working_snprintf=cross)]) +AC_MSG_RESULT([$ac_cv_have_working_snprintf]) +AC_MSG_CHECKING(for working vsnprintf) +AC_CACHE_VAL(ac_cv_have_working_vsnprintf, +[AC_TRY_RUN( +[#include +#include + +int my_vsnprintf (char *buf, const char *tmpl, ...) +{ + int i; + va_list args; + va_start (args, tmpl); + i = vsnprintf (buf, 2, tmpl, args); + va_end (args); + return i; +} + +int main(void) +{ + char bufs[5] = { 'x', 'x', 'x', '\0', '\0' }; + char bufd[5] = { 'x', 'x', 'x', '\0', '\0' }; + int i; + i = my_vsnprintf (bufs, "%s", "111"); + if (strcmp (bufs, "1")) exit (1); + if (i != 3) exit (1); + i = my_vsnprintf (bufd, "%d", 111); + if (strcmp (bufd, "1")) exit (1); + if (i != 3) exit (1); + exit(0); +}], ac_cv_have_working_vsnprintf=yes, ac_cv_have_working_vsnprintf=no, ac_cv_have_working_vsnprintf=cross)]) +AC_MSG_RESULT([$ac_cv_have_working_vsnprintf]) +if test x$ac_cv_have_working_snprintf$ac_cv_have_working_vsnprintf != "xyesyes"; then +AC_MSG_ERROR([fatal: buggy snprintf() detected]) +fi]) +AX_FUNC_SNPRINTF() ########################################################################### osl have_osl=yes OLD_CPPFLAGS="$CPPFLAGS" @@ -180,14 +258,18 @@ fi AC_CHECK_HEADER(osl.h, [], have_osl=no) AC_CHECK_LIB([osl], [osl_open_table], [], have_osl=no) if test "$have_osl" = "no"; then - AC_MSG_ERROR([libosl not found, download it at + AC_MSG_WARN([libosl not found, can not build para_server. +Download libosl at http://systemlinux.org/~maan/osl or execute git clone git://git.tuebingen.mpg.de/osl ]) +else + extras="$extras server" + executables="$executables server" + AC_SUBST(osl_cppflags) + server_ldflags="$server_ldflags $osl_libs -losl" fi -AC_SUBST(osl_cppflags) -server_ldflags="$server_ldflags -L$with_osl_libs" CPPFLAGS="$OLD_CPPFLAGS" LDFLAGS="$OLD_LDFLAGS" LIBS="$OLD_LIBS" @@ -221,9 +303,6 @@ AC_DEFUN([CHECK_SSL], SSL_LDFLAGS="-L$ssldir/lib"; fi AC_SUBST(SSL_CPPFLAGS) - AC_SUBST(SSL_CFLAGS) - AC_SUBST(SSL_LIBS) - AC_SUBST(SSL_LDFLAGS) ])dnl AC_ARG_ENABLE(ssldir, [AS_HELP_STRING(--enable-ssldir=path, @@ -298,10 +377,9 @@ AC_CHECK_LIB([ncurses], [initscr], [], [ ]) if test "$have_ncurses" = "yes"; then AC_SUBST(ncurses_cppflags) - AC_SUBST(ncurses_libs) AC_DEFINE(HAVE_NCURSES, 1, [define to 1 to turn on ncurses support]) - extras="$extras para_gui" - all_executables="$all_executables gui" + extras="$extras gui" + executables="$executables gui" else AC_MSG_WARN([cannot build para_gui]) fi @@ -350,53 +428,88 @@ if test ${have_core_audio} = yes; then default_writer="OSX_WRITE" AC_DEFINE(HAVE_CORE_AUDIO, 1, define to 1 on Mac Os X) fi -########################################################################### ogg +########################################################### ogg/vorbis/speex have_ogg="yes" +have_vorbis="yes" +have_speex="yes" OLD_CPPFLAGS="$CPPFLAGS" OLD_LD_FLAGS="$LDFLAGS" OLD_LIBS="$LIBS" AC_ARG_WITH(oggvorbis_headers, [AC_HELP_STRING(--with-oggvorbis-headers=dir, - [look for vorbis/codec.h also in dir])]) + [look for ogg/vorbis/speex headers also in dir])]) if test -n "$with_oggvorbis_headers"; then - oggvorbis_cppflags="-I$with_oggvorbis_headers" - CPPFLAGS="$CPPFLAGS $oggvorbis_cppflags" + ogg_cppflags="-I$with_oggvorbis_headers" + CPPFLAGS="$CPPFLAGS $ogg_cppflags" fi AC_ARG_WITH(oggvorbis_libs, [AC_HELP_STRING(--with-oggvorbis-libs=dir, - [look for oggvorbis libs also in dir])]) + [look for ogg/vorbis/speex libs also in dir])]) if test -n "$with_oggvorbis_libs"; then - oggvorbis_libs="-L$with_oggvorbis_libs" - LDFLAGS="$LDFLAGS $oggvorbis_libs" + ogg_libs="-L$with_oggvorbis_libs" + LDFLAGS="$LDFLAGS $ogg_libs" fi AC_CHECK_LIB([ogg], [ogg_stream_init], [], [ have_ogg="no" ]) -AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [ have_ogg="no" ]) -AC_CHECK_HEADERS([ogg/ogg.h vorbis/codec.h], [], [ have_ogg="no" ]) -if test "$have_ogg" = "yes"; then - all_errlist_objs="$all_errlist_objs oggdec_filter ogg_afh" - AC_DEFINE(HAVE_OGGVORBIS, 1, define to 1 to turn on ogg vorbis support) - filters="$filters oggdec" +AC_CHECK_LIB([vorbis], [vorbis_info_init], [], [ have_vorbis="no" ]) +AC_CHECK_LIB([speex], [speex_decoder_init], [], [ have_speex="no" ]) +AC_CHECK_HEADERS([ogg/ogg.h], [], [ have_ogg="no"; ]) +AC_CHECK_HEADERS([vorbis/codec.h], [], [ have_vorbis="no" ]) +AC_CHECK_HEADERS([speex/speex.h], [], [ have_speex="no" ]) +msg="support in para_server/para_filter/para_afh" +if test "$have_ogg" = "yes" && { test "$have_vorbis" = "yes" || test "$have_speex" = "yes"; }; then + AC_SUBST(ogg_cppflags) + ogg_libs="$ogg_libs -logg" if test "$OSTYPE" = "Darwin"; then - oggvorbis_libs="-Wl,-bind_at_load $oggvorbis_libs" + ogg_libs="-Wl,-bind_at_load $ogg_libs $ogg_libs" + fi + server_ldflags="$server_ldflags $ogg_libs" + filter_ldflags="$filter_ldflags $ogg_libs" + audiod_ldflags="$audiod_ldflags $ogg_libs" + all_errlist_objs="$all_errlist_objs ogg_afh_common" + afh_ldflags="$afh_ldflags $ogg_libs" + afh_errlist_objs="$afh_errlist_objs ogg_afh_common" + server_errlist_objs="$server_errlist_objs ogg_afh_common" + if test "$have_vorbis" = "yes"; then + all_errlist_objs="$all_errlist_objs oggdec_filter ogg_afh" + AC_DEFINE(HAVE_OGGVORBIS, 1, define to 1 to turn on ogg/vorbis support) + filters="$filters oggdec" + vorbis_libs="-lvorbis -lvorbisfile" + server_ldflags="$server_ldflags $vorbis_libs" + filter_ldflags="$filter_ldflags $vorbis_libs" + audiod_ldflags="$audiod_ldflags $vorbis_libs" + afh_ldflags="$afh_ldflags $vorbis_libs" + + server_errlist_objs="$server_errlist_objs ogg_afh" + filter_errlist_objs="$filter_errlist_objs oggdec_filter" + audiod_errlist_objs="$audiod_errlist_objs oggdec_filter" + afh_errlist_objs="$afh_errlist_objs ogg_afh" + + audiod_audio_formats="$audiod_audio_formats ogg" + server_audio_formats="$server_audio_formats ogg" + else + AC_MSG_WARN([no ogg/vorbis $msg]) + fi + if test "$have_speex" = "yes"; then + all_errlist_objs="$all_errlist_objs spxdec_filter spx_afh spx_common" + AC_DEFINE(HAVE_SPEEX, 1, define to 1 to turn on ogg/speex support) + filters="$filters spxdec" + speex_libs="-lspeex" + server_ldflags="$server_ldflags $speex_libs" + filter_ldflags="$filter_ldflags $speex_libs" + audiod_ldflags="$audiod_ldflags $speex_libs" + afh_ldflags="$afh_ldflags $speex_libs" + + server_errlist_objs="$server_errlist_objs spx_afh spx_common" + filter_errlist_objs="$filter_errlist_objs spxdec_filter spx_common" + audiod_errlist_objs="$audiod_errlist_objs spxdec_filter spx_common" + afh_errlist_objs="$afh_errlist_objs spx_afh spx_common" + + audiod_audio_formats="$audiod_audio_formats spx" + server_audio_formats="$server_audio_formats spx" + else + AC_MSG_WARN([no ogg/speex $msg]) fi - server_ldflags="$server_ldflags $oggvorbis_libs -logg -lvorbis -lvorbisfile" - filter_ldflags="$filter_ldflags $oggvorbis_libs -lvorbis -lvorbisfile" - audiod_ldflags="$audiod_ldflags $oggvorbis_libs -lvorbis -lvorbisfile" - afh_ldflags="$afh_ldflags $oggvorbis_libs -logg -lvorbis -lvorbisfile" - - filter_cmdline_objs="$filter_cmdline_objs add_cmdline(oggdec_filter)" - audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(oggdec_filter)" - - server_errlist_objs="$server_errlist_objs ogg_afh" - filter_errlist_objs="$filter_errlist_objs oggdec_filter" - audiod_errlist_objs="$audiod_errlist_objs oggdec_filter" - afh_errlist_objs="$afh_errlist_objs ogg_afh" - - audiod_audio_formats="$audiod_audio_formats ogg" - server_audio_formats="$server_audio_formats ogg" - AC_SUBST(oggvorbis_cppflags) - AC_SUBST(oggvorbis_libs) else - AC_MSG_WARN([no ogg vorbis support in para_server/para_filter]) + AC_MSG_WARN([no ogg/vorbis ogg/speex $msg]) fi CPPFLAGS="$OLD_CPPFLAGS" LDFLAGS="$OLD_LDFLAGS" @@ -435,7 +548,6 @@ if test "$have_faad" = "yes"; then server_audio_formats="$server_audio_formats aac" filters="$filters aacdec" AC_SUBST(faad_cppflags) - AC_SUBST(faad_libs) else AC_MSG_WARN([no aac support in para_audiod/para_filter]) fi @@ -478,16 +590,9 @@ if test "$have_mad" = "yes"; then audiod_audio_formats="$audiod_audio_formats mp3" filters="$filters mp3dec" AC_SUBST(mad_cppflags) - AC_SUBST(mad_libs) else AC_MSG_WARN([no mp3dec support in para_audiod/para_filter]) fi -if test -n "$audiod_audio_formats"; then - extras="$extras para_audiod" - all_executables="$all_executables audiod" -else - AC_MSG_WARN([can not build para_audiod (no supported audio formats)]) -fi CPPFLAGS="$OLD_CPPFLAGS" LDFLAGS="$OLD_LDFLAGS" LIBS="$OLD_LIBS" @@ -515,8 +620,8 @@ have_oss="yes" msg="=> will not build para_fade/oss writer" AC_CHECK_HEADER(sys/soundcard.h, [ - extras="$extras para_fade" - all_executables="$all_executables fade" + extras="$extras fade" + executables="$executables fade" all_errlist_objs="$all_errlist_objs oss_write" audiod_errlist_objs="$audiod_errlist_objs oss_write" audiod_cmdline_objs="$audiod_cmdline_objs add_cmdline(oss_write)" @@ -583,64 +688,22 @@ CPPFLAGS="$OLD_CPPFLAGS" LDFLAGS="$OLD_LDFLAGS" LIBS="$OLD_LIBS" -AC_SUBST(extra_binaries, [$extras]) -AC_SUBST(extra_filter_objs, [$extra_filter_objs]) -AC_SUBST(extra_filter_libs, [$extra_filter_libs]) AC_SUBST(install_sh, [$INSTALL]) AC_CONFIG_FILES([Makefile]) AC_DEFUN([add_dot_o],[$(for i in $@; do printf "$i.o "; done)]) +AC_DEFUN([add_para],[$(for i in $@; do printf "para_$i "; done)]) AC_DEFUN([objlist_to_errlist],[$(for i in $@; do printf "DEFINE_ERRLIST($(echo $i| tr 'a-z' 'A-Z'));"; done) [const char **para_errlist[[]]] = {$(for i in $@; do printf "PARA_ERRLIST($(echo $i | tr 'a-z' 'A-Z')), "; done) }]) - ############################################################# error2.h -AC_DEFUN([define_safe_error_enums], -[ - exe="" - for i in $all_executables; do -# eval echo checking if $1 is linked into $i - for j in $(eval echo \$${i}_errlist_objs); do - if test $j = $1; then - exe="$exe $i" - break; - fi - done - done - #echo "$1 gets linked into $exe" - safe_errlists="" - for i in $all_errlist_objs; do - for j in $exe; do - found=0 - for k in $(eval echo \$${j}_errlist_objs); do - if test $k = $i; then - found=1 - break; - fi - done - if test $found -eq 0; then - break; - fi - done - if test $found -eq 1; then - safe_errlists="$safe_errlists $i" - fi - done - #echo "safe errlists for $1: $safe_errlists" - ss_defs="" - for i in $safe_errlists; do - echo "SS_ENUM($(echo $i | tr 'a-z' 'A-Z'));" - done -] -) - - AC_MSG_NOTICE(creating error2.h) +for i in $executables; do + echo "$i: " + eval echo \$${i}_errlist_objs +done | ./error2.pl > error2.h for obj in $all_errlist_objs; do SS="$SS SS_$(echo $obj | tr 'a-z' 'A-Z')," - echo "#ifdef MAIN_INPUT_FILE_IS_$obj" - define_safe_error_enums($obj) - echo "#endif" -done > error2.h +done AC_DEFINE_UNQUOTED(DEFINE_ERRLIST_OBJECT_ENUM, [enum {$SS NUM_SS}], [list of all objects that use paraslash's error facility] @@ -656,29 +719,24 @@ lyrics_id duration directory lyrics_name image_name path hash channels last_played num_chunks chunk_time amplification artist title year album comment" -# $1: prefix, $2: items -AC_DEFUN([make_enum_items], [$( - for i in $2; do - printf "$1_$(echo $i | tr 'a-z' 'A-Z'), " - done -)]) +result= +for i in $status_items; do + result="$result SI_$(echo $i | tr 'a-z' 'A-Z'), " +done +AC_DEFINE_UNQUOTED(STATUS_ITEM_ENUM, [$result], + [enum of all status items]) -# $1: prefix, $2: items -AC_DEFUN([make_enum_array], [$( - for i in $2; do - printf "\"$i\", " - done -)]) +result= +for i in $status_items; do + result="$result \"$i\", " +done +AC_DEFINE_UNQUOTED(STATUS_ITEM_ARRAY, [$result], + [char * array of all status items]) -AC_DEFINE_UNQUOTED(STATUS_ITEM_ENUM, - make_enum_items(SI, $status_items), - [enum of all status items] -) -AC_DEFINE_UNQUOTED(STATUS_ITEM_ARRAY, - make_enum_array(SI, $status_items), - [char * array of all status items] -) +AC_DEFINE_UNQUOTED(SERVER_AUDIO_FORMATS, "$server_audio_formats", + [formats supported by para_server and para_afh]) +AC_SUBST(executables, add_para($executables)) recv_objs="$recv_cmdline_objs $recv_errlist_objs" filter_objs="$filter_cmdline_objs $filter_errlist_objs" @@ -772,8 +830,6 @@ paraslash configuration: unix socket credentials: $have_ucred audio formats supported by para_server/para_afh: $server_audio_formats id3 version2 support: $have_libid3tag -senders supported by para_server: $senders -receivers supported by para_audiod/para_recv: $receivers filters supported by para_audiod/para_filter: $filters writers supported by para_audiod/para_write: $writers optional executables: $extras