Only declare error codes that are safe to use.
[paraslash.git] / configure.ac
index bc08e74032c9063e78e44357ec0124cf8a082e66..0ad2106bec7dd19a4f25e2961c8542c0a7322da7 100644 (file)
@@ -71,6 +71,15 @@ AC_CHECK_FUNCS([atexit dup2 memchr memmove memset \
        strncasecmp strrchr strspn alarm], [],
        [AC_MSG_ERROR([function not found, cannot live without it])])
 
+all_errlist_objs="server mp3_afh vss command net string signal random_selector time
+daemon stat crypt http_send afs_common close_on_fork playlist_selector ipc dccp
+dccp_send fd user_list chunk_queue afs osl aft mood score attribute blob ringbuffer
+playlist sha1 rbtree sched audiod grab_client filter_chain wav compress
+http_recv dccp_recv recv_common write_common file_write audiod_command
+client_common recv stdout filter stdin audioc write client fsck exec"
+all_executables="server audiod recv filter audioc write client fsck"
+
+
 recv_cmdline_objs="recv.cmdline http_recv.cmdline dccp_recv.cmdline"
 recv_errlist_objs="http_recv recv_common recv time string net dccp_recv
        dccp fd sched stdout"
@@ -121,6 +130,10 @@ client_ldflags=""
 fsck_cmdline_objs="fsck.cmdline"
 fsck_errlist_objs="osl rbtree fsck string sha1 fd"
 
+gui_cmdline_objs="gui.cmdline"
+gui_errlist_objs="exec close_on_fork signal string stat ringbuffer fd"
+gui_other_objs="gui gui_common gui_theme"
+gui_objs="$gui_cmdline_objs $gui_errlist_objs $gui_other_objs"
 
 ########################################################################### ssl
 dnl @synopsis CHECK_SSL
@@ -225,6 +238,7 @@ if test "$have_ncurses" = "yes"; then
        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"
 else
        AC_MSG_WARN([cannot build para_gui])
 fi
@@ -246,6 +260,8 @@ if test ${have_core_audio} = yes; then
        f3="-framework AudioUnit"
        f4="-framework CoreServices"
        f="$f1 $f2 $f3 $f4"
+
+       all_errlist_objs="$all_errlist_objs osx_write"
        audiod_errlist_objs="$audiod_errlist_objs osx_write"
        audiod_cmdline_objs="$audiod_cmdline_objs osx_write.cmdline"
        audiod_ldflags="$audiod_ldflags $f"
@@ -313,6 +329,7 @@ if test "$have_mysql" = "yes"; then
        selectors="$selectors mysql"
        server_ldflags="$server_ldflags $mysql_libs -lmysqlclient"
        server_errlist_objs="$server_errlist_objs mysql_selector"
+       all_errlist_objs="$all_errlist_objs mysql_selector"
        server_cmdline_objs="$server_cmdline_objs mysql_selector_command_list"
        AC_SUBST(mysql_cppflags)
        AC_SUBST(mysql_libs)
@@ -345,6 +362,7 @@ 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 ogg_afh"
        AC_DEFINE(HAVE_OGGVORBIS, 1, define to 1 to turn on ogg vorbis support)
        filters="$filters oggdec"
        if test "$OSTYPE" = "Darwin"; then
@@ -393,6 +411,7 @@ AC_CHECK_HEADER(neaacdec.h, [], have_faad=no)
 AC_CHECK_LIB([faad], [NeAACDecOpen], [], have_faad=no)
 if test "$have_faad" = "yes"; then
        AC_DEFINE(HAVE_FAAD, 1, define to 1 if you want to build the aacdec filter)
+       all_errlist_objs="$all_errlist_objs aac_common aacdec aac_afh"
        filter_errlist_objs="$filter_errlist_objs aacdec aac_common"
        filter_filters="$filter_filters aacdec"
        audiod_errlist_objs="$audiod_errlist_objs aacdec aac_common"
@@ -437,6 +456,7 @@ AC_CHECK_LIB([mad], [mad_stream_init], [], [
 ])
 if test "$have_mad" = "yes"; then
        AC_DEFINE(HAVE_MAD, 1, define to 1 if you want to build the mp3dec filter)
+       all_errlist_objs="$all_errlist_objs mp3dec"
        filter_errlist_objs="$filter_errlist_objs mp3dec"
        audiod_errlist_objs="$audiod_errlist_objs mp3dec"
        filter_ldflags="$filter_ldflags $mad_libs -lmad"
@@ -471,6 +491,7 @@ AC_CHECK_LIB([asound], [snd_pcm_open], [], [
        have_alsa="no"
 ])
 if test "$have_alsa" = "yes"; then
+       all_errlist_objs="$all_errlist_objs alsa_write"
        audiod_errlist_objs="$audiod_errlist_objs alsa_write"
        audiod_cmdline_objs="$audiod_cmdline_objs alsa_write.cmdline"
        audiod_ldflags="$audiod_ldflags -lasound"
@@ -504,6 +525,8 @@ fi
 AC_CHECK_HEADERS([ortp/ortp.h], [], [have_ortp="no"])
 AC_CHECK_LIB([ortp], [ortp_init], [], [have_ortp="no"])
 if test "$have_ortp" = "yes"; then
+       all_errlist_objs="$all_errlist_objs ortp_recv ortp_send"
+
        recv_cmdline_objs="$recv_cmdline_objs ortp_recv.cmdline"
        recv_errlist_objs="$recv_errlist_objs ortp_recv"
 
@@ -562,6 +585,58 @@ AC_CONFIG_FILES([Makefile])
 AC_DEFUN([add_dot_o],[$(for i in $@; do printf "$i.o "; 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) }])
 
+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 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
+AC_DEFINE_UNQUOTED(DEFINE_ERRLIST_OBJECT_ENUM,
+       [enum {$SS NUM_SS}],
+       [list of all objects that use paraslash's error facility]
+)
+
+
 recv_objs="$recv_cmdline_objs $recv_errlist_objs"
 filter_objs="$filter_cmdline_objs $filter_errlist_objs"
 audiod_objs="$audiod_cmdline_objs $audiod_errlist_objs"
@@ -611,6 +686,10 @@ AC_SUBST(audioc_ldflags, $audioc_ldflags)
 AC_DEFINE_UNQUOTED(INIT_AUDIOC_ERRLISTS,
        objlist_to_errlist($audioc_errlist_objs), errors used by para_audioc)
 
+AC_SUBST(gui_objs, add_dot_o($gui_objs))
+AC_DEFINE_UNQUOTED(INIT_GUI_ERRLISTS,
+       objlist_to_errlist($gui_errlist_objs), errors used by para_gui)
+
 enum="$(for i in $writers; do printf "${i}_WRITE, " | tr '[a-z]' '[A-Z]'; done)"
 AC_DEFINE_UNQUOTED(WRITER_ENUM, $enum NUM_SUPPORTED_WRITERS,
        enum of supported writers)
@@ -627,14 +706,6 @@ AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMATS_ENUM, $enum NUM_AUDIO_FORMATS,
 names="$(for i in $audiod_audio_formats; do printf \"$i\",' ' ; done)"
 AC_DEFINE_UNQUOTED(AUDIOD_AUDIO_FORMAT_ARRAY, $names, array of audio formats supported by audiod)
 
-gui_cmdline_objs="gui.cmdline"
-gui_errlist_objs="exec close_on_fork signal string stat ringbuffer fd"
-gui_other_objs="gui gui_common gui_theme"
-gui_objs="$gui_cmdline_objs $gui_errlist_objs $gui_other_objs"
-AC_DEFINE_UNQUOTED(INIT_GUI_ERRLISTS,
-       objlist_to_errlist($gui_errlist_objs), errors used by para_gui)
-AC_SUBST(gui_objs, add_dot_o($gui_objs))
-
 AC_OUTPUT
 AC_MSG_NOTICE([creating Makefile.deps])
 gcc -MM -MG $mysql_cppflags $faad_cppflags $mad_cppflags $ortp_cppflags $oggvorbis_cppflags *.c > Makefile.deps