X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=configure.ac;h=8fbf49a6e222e253c17a686fa07ed013b7e4ce42;hb=5842e3e7f2aa17fe16cb806b4ba955ce1f25ce53;hp=d2ded0686b9cd8a072c4fa544c1910ce0a661704;hpb=d081def1d95f8ca0156e5d8c7cbcc92e895f19e1;p=paraslash.git diff --git a/configure.ac b/configure.ac index d2ded068..8fbf49a6 100644 --- a/configure.ac +++ b/configure.ac @@ -156,6 +156,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" @@ -218,9 +298,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, @@ -295,7 +372,6 @@ 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 gui" executables="$executables gui" @@ -380,9 +456,6 @@ if test "$have_ogg" = "yes"; then 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" @@ -391,7 +464,6 @@ if test "$have_ogg" = "yes"; then 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]) fi @@ -432,7 +504,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 @@ -475,7 +546,6 @@ 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 @@ -582,53 +652,14 @@ 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 $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] @@ -644,28 +675,19 @@ 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 -)]) - -# $1: prefix, $2: items -AC_DEFUN([make_enum_array], [$( - for i in $2; do - printf "\"$i\", " - done -)]) - -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] -) +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]) + +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_SUBST(executables, add_para($executables))