Added make_progs tool to generate the programs makefile.
Create symlinks for all the Winelib apps.

diff --git a/programs/Makefile.in b/programs/Makefile.in
index 904755c..ce6ec71 100644
--- a/programs/Makefile.in
+++ b/programs/Makefile.in
@@ -1,3 +1,5 @@
+# Automatically generated by make_progs; DO NOT EDIT!!
+
 TOPSRCDIR = @top_srcdir@
 TOPOBJDIR = ..
 SRCDIR    = @srcdir@
@@ -59,7 +61,6 @@
 	winver
 
 # Programs to install in bin directory
-# We don't install everything to avoid polluting /usr/bin too much
 INSTALLPROGS = \
 	notepad \
 	progman \
@@ -78,13 +79,34 @@
 
 # Symlinks to apps that we want to run from inside the source tree
 SYMLINKS = \
+	aviinfo.exe \
+	aviplay.exe \
+	clock.exe \
+	cmdlgtst.exe \
+	control.exe \
+	expand.exe \
+	icinfo.exe \
+	notepad.exe \
+	progman.exe \
+	regedit.exe \
+	regsvr32.exe \
 	rpcss.exe \
+	rundll32.exe \
+	start.exe \
+	uninstaller.exe \
+	view.exe \
 	wcmd.exe \
+	wineboot.exe \
+	winecfg.exe \
 	wineconsole.exe \
 	winedbg.exe \
+	winefile.exe \
 	winemenubuilder.exe \
+	winemine.exe \
+	winepath.exe \
 	winevdm.exe \
-	winhelp.exe
+	winhelp.exe \
+	winver.exe
 
 @MAKE_RULES@
 
@@ -129,32 +151,117 @@
 
 # Rules for symlinks
 
+aviinfo.exe$(DLLEXT): avitools/aviinfo.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) avitools/aviinfo.exe$(DLLEXT) $@
+
+aviplay.exe$(DLLEXT): avitools/aviplay.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) avitools/aviplay.exe$(DLLEXT) $@
+
+clock.exe$(DLLEXT): clock/clock.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) clock/clock.exe$(DLLEXT) $@
+
+cmdlgtst.exe$(DLLEXT): cmdlgtst/cmdlgtst.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) cmdlgtst/cmdlgtst.exe$(DLLEXT) $@
+
+control.exe$(DLLEXT): control/control.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) control/control.exe$(DLLEXT) $@
+
+expand.exe$(DLLEXT): expand/expand.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) expand/expand.exe$(DLLEXT) $@
+
+icinfo.exe$(DLLEXT): avitools/icinfo.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) avitools/icinfo.exe$(DLLEXT) $@
+
+notepad.exe$(DLLEXT): notepad/notepad.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) notepad/notepad.exe$(DLLEXT) $@
+
+progman.exe$(DLLEXT): progman/progman.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) progman/progman.exe$(DLLEXT) $@
+
+regedit.exe$(DLLEXT): regedit/regedit.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) regedit/regedit.exe$(DLLEXT) $@
+
+regsvr32.exe$(DLLEXT): regsvr32/regsvr32.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) regsvr32/regsvr32.exe$(DLLEXT) $@
+
 rpcss.exe$(DLLEXT): rpcss/rpcss.exe$(DLLEXT)
 	$(RM) $@ && $(LN_S) rpcss/rpcss.exe$(DLLEXT) $@
 
+rundll32.exe$(DLLEXT): rundll32/rundll32.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) rundll32/rundll32.exe$(DLLEXT) $@
+
+start.exe$(DLLEXT): start/start.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) start/start.exe$(DLLEXT) $@
+
+uninstaller.exe$(DLLEXT): uninstaller/uninstaller.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) uninstaller/uninstaller.exe$(DLLEXT) $@
+
+view.exe$(DLLEXT): view/view.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) view/view.exe$(DLLEXT) $@
+
 wcmd.exe$(DLLEXT): wcmd/wcmd.exe$(DLLEXT)
 	$(RM) $@ && $(LN_S) wcmd/wcmd.exe$(DLLEXT) $@
 
+wineboot.exe$(DLLEXT): wineboot/wineboot.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) wineboot/wineboot.exe$(DLLEXT) $@
+
+winecfg.exe$(DLLEXT): winecfg/winecfg.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) winecfg/winecfg.exe$(DLLEXT) $@
+
 wineconsole.exe$(DLLEXT): wineconsole/wineconsole.exe$(DLLEXT)
 	$(RM) $@ && $(LN_S) wineconsole/wineconsole.exe$(DLLEXT) $@
 
 winedbg.exe$(DLLEXT): winedbg/winedbg.exe$(DLLEXT)
 	$(RM) $@ && $(LN_S) winedbg/winedbg.exe$(DLLEXT) $@
 
+winefile.exe$(DLLEXT): winefile/winefile.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) winefile/winefile.exe$(DLLEXT) $@
+
 winemenubuilder.exe$(DLLEXT): winemenubuilder/winemenubuilder.exe$(DLLEXT)
 	$(RM) $@ && $(LN_S) winemenubuilder/winemenubuilder.exe$(DLLEXT) $@
 
+winemine.exe$(DLLEXT): winemine/winemine.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) winemine/winemine.exe$(DLLEXT) $@
+
+winepath.exe$(DLLEXT): winepath/winepath.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) winepath/winepath.exe$(DLLEXT) $@
+
 winevdm.exe$(DLLEXT): winevdm/winevdm.exe$(DLLEXT)
 	$(RM) $@ && $(LN_S) winevdm/winevdm.exe$(DLLEXT) $@
 
 winhelp.exe$(DLLEXT): winhelp/winhelp.exe$(DLLEXT)
 	$(RM) $@ && $(LN_S) winhelp/winhelp.exe$(DLLEXT) $@
 
+winver.exe$(DLLEXT): winver/winver.exe$(DLLEXT)
+	$(RM) $@ && $(LN_S) winver/winver.exe$(DLLEXT) $@
+
+avitools/aviinfo.exe$(DLLEXT): avitools
+avitools/aviplay.exe$(DLLEXT): avitools
+clock/clock.exe$(DLLEXT): clock
+cmdlgtst/cmdlgtst.exe$(DLLEXT): cmdlgtst
+control/control.exe$(DLLEXT): control
+expand/expand.exe$(DLLEXT): expand
+avitools/icinfo.exe$(DLLEXT): avitools
+notepad/notepad.exe$(DLLEXT): notepad
+progman/progman.exe$(DLLEXT): progman
+regedit/regedit.exe$(DLLEXT): regedit
+regsvr32/regsvr32.exe$(DLLEXT): regsvr32
+rpcss/rpcss.exe$(DLLEXT): rpcss
+rundll32/rundll32.exe$(DLLEXT): rundll32
+start/start.exe$(DLLEXT): start
+uninstaller/uninstaller.exe$(DLLEXT): uninstaller
+view/view.exe$(DLLEXT): view
 wcmd/wcmd.exe$(DLLEXT): wcmd
+wineboot/wineboot.exe$(DLLEXT): wineboot
+winecfg/winecfg.exe$(DLLEXT): winecfg
 wineconsole/wineconsole.exe$(DLLEXT): wineconsole
 winedbg/winedbg.exe$(DLLEXT): winedbg
+winefile/winefile.exe$(DLLEXT): winefile
 winemenubuilder/winemenubuilder.exe$(DLLEXT): winemenubuilder
+winemine/winemine.exe$(DLLEXT): winemine
+winepath/winepath.exe$(DLLEXT): winepath
 winevdm/winevdm.exe$(DLLEXT): winevdm
 winhelp/winhelp.exe$(DLLEXT): winhelp
+winver/winver.exe$(DLLEXT): winver
 
 ### Dependencies:
diff --git a/programs/make_progs b/programs/make_progs
new file mode 100755
index 0000000..1c786c6
--- /dev/null
+++ b/programs/make_progs
@@ -0,0 +1,212 @@
+#!/usr/bin/perl -w
+#
+# Update the dependencies in the programs main Makefile.in.
+# Must be run in the programs/ directory of the Wine tree.
+#
+# Copyright 2003 Alexandre Julliard
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+use strict;
+
+my $makefiles = `find . -name Makefile.in -print`;
+
+my %directories = ();
+
+# Programs that we want to install in the bin directory too
+my %bin_install =
+(
+  "notepad" => 1,
+  "progman" => 1,
+  "regedit" => 1,
+  "regsvr32" => 1,
+  "uninstaller" => 1,
+  "wcmd" => 1,
+  "wineboot" => 1,
+  "winecfg" => 1,
+  "wineconsole" => 1,
+  "winedbg" => 1,
+  "winefile" => 1,
+  "winemine" => 1,
+  "winepath" => 1,
+  "winhelp" => 1,
+);
+
+# Programs that we don't want to install at all
+my %dont_install =
+(
+  "cmdlgtst" => 1,
+  "view" => 1,
+);
+
+foreach my $i (split(/\s/,$makefiles))
+{
+    my $module;
+
+    next if $i =~ /\/tests\/Makefile.in/;
+
+    open MAKE,$i;
+
+    $module = undef;
+    while (<MAKE>)
+    {
+        chop;
+        # hack to disable this program... the MKPROG_SKIP comment must appear
+        # at the very top of the Makefile.in
+        last if (/^\#\s*MKPROG_SKIP/);
+
+        if (/^MODULE\s*=\s*([a-zA-Z0-9_.]+)/)
+        {
+            $module = $1;
+            next if ($module eq "none");
+            ($directories{$module} = $i) =~ s/^\.\/(.*)\/[^\/]+$/$1/;
+            last;
+        }
+        if (/^PROGRAMS\s*=((\s*[a-zA-Z0-9_.]+)+)/)
+        {
+            my @programs = split / /, $1;
+            foreach my $prog (@programs)
+            {
+                next unless $prog =~ /\.exe$/;
+                ($directories{$prog} = $i) =~ s/^\.\/(.*)\/[^\/]+$/$1/;
+            }
+            last;
+        }
+    }
+    close MAKE;
+}
+
+open NEWMAKE,">Makefile.in.new" or die "cannot create Makefile.in.new";
+
+################################################################
+# makefile header
+
+print NEWMAKE <<EOF;
+# Automatically generated by make_progs; DO NOT EDIT!!
+
+TOPSRCDIR = \@top_srcdir\@
+TOPOBJDIR = ..
+SRCDIR    = \@srcdir\@
+VPATH     = \@srcdir\@
+
+EOF
+
+################################################################
+# output the subdirs list
+
+# get rid of duplicates
+my %alldirs = ();
+foreach my $dir (sort values %directories) { $alldirs{$dir} = 1; }
+
+print NEWMAKE "SUBDIRS =";
+foreach my $dir (sort keys %alldirs)
+{
+    printf NEWMAKE " \\\n\t%s", $dir;
+}
+
+print NEWMAKE "\n\n# Sub-directories to run make install into\nINSTALLSUBDIRS =";
+foreach my $dir (sort keys %alldirs)
+{
+    next if $dont_install{$dir};
+    printf NEWMAKE " \\\n\t%s", $dir;
+}
+
+print NEWMAKE "\n\n# Programs to install in bin directory\nINSTALLPROGS =";
+foreach my $dir (sort keys %alldirs)
+{
+    printf NEWMAKE " \\\n\t%s", $dir if $bin_install{$dir};
+}
+
+print NEWMAKE "\n\n# Symlinks to apps that we want to run from inside the source tree\nSYMLINKS =";
+foreach my $mod (sort keys %directories)
+{
+    printf NEWMAKE " \\\n\t%s", $mod;
+}
+
+################################################################
+# output the build and install targets
+
+print NEWMAKE <<EOF;
+
+
+\@MAKE_RULES\@
+
+all: wineapploader winelauncher \$(SUBDIRS) \$(SYMLINKS:%=%\$(DLLEXT))
+
+wineapploader: wineapploader.in
+	sed -e 's,\@bindir\\\@,\$(bindir),g' \$(SRCDIR)/wineapploader.in >\$\@ || (\$(RM) \$\@ && false)
+
+winelauncher: winelauncher.in
+	sed -e 's,\@bindir\\\@,\$(bindir),g' -e 's,\@libdir\\\@,\$(libdir),g' -e 's,\@dlldir\\\@,\$(dlldir),g' \$(SRCDIR)/winelauncher.in >\$\@ || (\$(RM) \$\@ && false)
+
+# Rules for installation
+
+.PHONY: install-apploader install-progs install-progs.so \$(INSTALLPROGS:%=%/__installprog__)
+
+install-apploader: wineapploader dummy
+	\$(MKINSTALLDIRS) \$(bindir)
+	\$(INSTALL_SCRIPT) wineapploader \$(bindir)/wineapploader
+
+\$(INSTALLPROGS:%=%/__installprog__): install-apploader
+	\$(RM) \$(bindir)/`dirname \$\@` && \$(LN) \$(bindir)/wineapploader \$(bindir)/`dirname \$\@`
+
+install-progs.so: \$(INSTALLPROGS:%=%/__installprog__)
+	\$(RM) \$(bindir)/wineapploader
+
+install-progs: # nothing to do here
+
+install:: winelauncher install-progs\$(DLLEXT)
+	\$(MKINSTALLDIRS) \$(bindir)
+	\$(INSTALL_SCRIPT) winelauncher \$(bindir)/winelauncher
+
+uninstall::
+	\$(RM) \$(bindir)/wineapploader \$(bindir)/winelauncher \$(INSTALLPROGS:%=\$(bindir)/%)
+	-rmdir \$(dlldir)
+
+clean::
+	\$(RM) wineapploader winelauncher \$(SYMLINKS)
+
+# Rules for testing
+
+check test:: \$(SUBDIRS:%=%/__test__)
+
+EOF
+
+################################################################
+# output the symlinks rules
+
+print NEWMAKE "# Rules for symlinks\n\n";
+
+foreach my $mod (sort keys %directories)
+{
+    printf NEWMAKE "%s\$(DLLEXT)", $mod;
+    printf NEWMAKE ": %s/%s\$(DLLEXT)\n", $directories{$mod}, $mod;
+    printf NEWMAKE "\t\$(RM) \$@ && \$(LN_S) %s/%s\$(DLLEXT) \$@\n\n", $directories{$mod}, $mod;
+}
+
+foreach my $mod (sort keys %directories)
+{
+    printf NEWMAKE "%s/%s\$(DLLEXT): %s\n", $directories{$mod}, $mod, $directories{$mod};
+}
+
+################################################################
+# makefile trailer
+
+print NEWMAKE "\n### Dependencies:\n";
+
+close NEWMAKE;
+rename "Makefile.in.new", "Makefile.in";
+printf "Successfully updated Makefile.in\n";