Index: Makefile
===================================================================
--- Makefile	(revision 26980)
+++ Makefile	(working copy)
@@ -924,9 +924,14 @@
 
 TOOLS/vfw2menc$(EXESUF): TOOLS/vfw2menc.c -lwinmm -lole32
 
-#FIXME: Linking is broken, help welcome.
-TOOLS/vivodump$(EXESUF): TOOLS/vivodump.c $(TEST_OBJS)
+mplayer-nomain.o: mplayer.c
+	$(CC) $(CFLAGS) -DDISABLE_MAIN -c -o $@ $<
 
+TOOLS/netstream$(EXESUF): TOOLS/netstream.c $(subst mplayer.o,mplayer-nomain.o,$(OBJS_MPLAYER)) $(filter-out %mencoder.o,$(OBJS_MENCODER)) $(OBJS_COMMON) $(COMMON_LIBS)
+TOOLS/vivodump$(EXESUF): TOOLS/vivodump.c $(subst mplayer.o,mplayer-nomain.o,$(OBJS_MPLAYER)) $(filter-out %mencoder.o,$(OBJS_MENCODER)) $(OBJS_COMMON) $(COMMON_LIBS)
+TOOLS/netstream$(EXESUF) TOOLS/vivodump$(EXESUF):
+	$(CC) $(CFLAGS) -o $@ $^ $(EXTRALIBS_MPLAYER) $(EXTRALIBS_MENCODER) $(COMMON_LDFLAGS)
+
 fastmemcpybench: TOOLS/fastmemcpybench.c
 	$(CC) $(CFLAGS) $< -o TOOLS/fastmem-mmx$(EXESUF)  -DNAME=\"mmx\"      -DHAVE_MMX
 	$(CC) $(CFLAGS) $< -o TOOLS/fastmem-k6$(EXESUF)   -DNAME=\"k6\ \"     -DHAVE_MMX -DHAVE_3DNOW
@@ -947,18 +952,8 @@
 %.so.6.0: %.o
 	ld -shared -o $@ $< -ldl -lc
 
-# FIXME: netstream linking is a mess that should be fixed properly some day.
-# It does not work with either GUI, LIVE555, libavformat, cdparanoia enabled.
-NETSTREAM_DEPS = libavutil/libavutil.a \
-                 m_option.o \
-                 m_struct.o \
-                 $(TEST_OBJS)
 
-TOOLS/netstream$(EXESUF): TOOLS/netstream.o $(NETSTREAM_DEPS)
-	$(CC) $(CFLAGS) -o $@ $^
 
-
-
 ###### drivers #######
 
 KERNEL_INC = /lib/modules/`uname -r`/build/include
Index: mplayer.c
===================================================================
--- mplayer.c	(revision 26980)
+++ mplayer.c	(working copy)
@@ -2537,6 +2535,7 @@
     return 0;
 }
 
+#ifndef DISABLE_MAIN
 int main(int argc,char* argv[]){
 
 
@@ -4038,3 +4037,4 @@
 
 return 1;
 }
+#endif /* DISABLE_MAIN */
Index: TOOLS/netstream.c
===================================================================
--- TOOLS/netstream.c	(revision 26980)
+++ TOOLS/netstream.c	(working copy)
@@ -46,16 +46,18 @@
 /// Netstream packets def and some helpers
 #include "stream/netstream.h"
 
+// linking hacks
+char *info_name;
+char *info_artist;
+char *info_genre;
+char *info_subject;
+char *info_copyright;
+char *info_sourceform;
+char *info_comment;
 
-//Set some standard variables
-char* dvdsub_lang=NULL;
-char* audio_lang=NULL;
-int sub_justify=0;
-int identify=0;
-int dvdsub_id=0;
-int audio_id=0;
-int video_id=0;
-void af_fmt2str() {};
+char* out_filename = NULL;
+char* force_fourcc=NULL;
+char* passtmpfile="divx2pass.log";
 
 #ifdef __MINGW32__
 #define usleep sleep
@@ -367,46 +369,3 @@
   }
   return main_loop(listen_fd);
 }
-
-
-
-//---- For libmpdemux
-
-float stream_cache_seek_min_percent=50.0;
-float stream_cache_min_percent=20.0;
-
-#include <libmpdemux/demuxer.h>
-#include <libmpdemux/stheader.h>
-
-// audio stream skip/resync functions requires only for seeking.
-// (they should be implemented in the audio codec layer)
-void skip_audio_frame(sh_audio_t *sh_audio){
-  sh_audio=NULL;
-}
-void resync_audio_stream(sh_audio_t *sh_audio){
-  sh_audio=NULL;
-}
-
-int mp_input_check_interrupt(int time){
-    if(time) usleep(time);
-    return 0;
-}
-
-// for libdvdread:
-#include "get_path.c"
-
-// linking hacks
-int stream_cache_size=0;
-int index_mode=0;
-
-// for demux_ogg:
-void* vo_sub=NULL;
-int vo_osd_changed(int new_value){ new_value++; return 0;}
-int   subcc_enabled=0;
-
-float sub_fps=0;
-int sub_utf8=0;
-int   suboverlap_enabled = 1;
-float sub_delay=0;
-
-//---------------
Index: TOOLS/vivodump.c
===================================================================
--- TOOLS/vivodump.c	(revision 26980)
+++ TOOLS/vivodump.c	(working copy)
@@ -10,6 +10,7 @@
 #include "libmpdemux/muxer.h"
 #include "libmpdemux/demuxer.h"
 
+/* linking hacks */
 char *info_name;
 char *info_artist;
 char *info_genre;
@@ -18,6 +19,10 @@
 char *info_sourceform;
 char *info_comment;
 
+char* out_filename = NULL;
+char* force_fourcc=NULL;
+char* passtmpfile="divx2pass.log";
+
 static const short h263_format[8][2] = {
     { 0, 0 },
     { 128, 96 },
