|  | #!/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 = | 
|  | ( | 
|  | "msiexec" => 1, | 
|  | "notepad" => 1, | 
|  | "progman" => 1, | 
|  | "regedit" => 1, | 
|  | "regsvr32" => 1, | 
|  | "uninstaller" => 1, | 
|  | "wcmd" => 1, | 
|  | "wineboot" => 1, | 
|  | "winebrowser" => 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, | 
|  | "winetest" => 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/; | 
|  | die "invalid module $module in dir $directories{$module}\n" if "$directories{$module}.exe" ne $module; | 
|  | 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}; | 
|  | } | 
|  |  | 
|  | ################################################################ | 
|  | # output the build and install targets | 
|  |  | 
|  | print NEWMAKE <<EOF; | 
|  |  | 
|  |  | 
|  | \@MAKE_RULES\@ | 
|  |  | 
|  | all: wineapploader winelauncher \$(SUBDIRS) | 
|  |  | 
|  | 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) \$(DESTDIR)\$(bindir) | 
|  | \$(INSTALL_SCRIPT) wineapploader \$(DESTDIR)\$(bindir)/wineapploader | 
|  |  | 
|  | \$(INSTALLPROGS:%=%/__installprog__): install-apploader | 
|  | \$(RM) \$(DESTDIR)\$(bindir)/`dirname \$\@` && \$(LN) \$(DESTDIR)\$(bindir)/wineapploader \$(DESTDIR)\$(bindir)/`dirname \$\@` | 
|  |  | 
|  | install-progs.so: \$(INSTALLPROGS:%=%/__installprog__) | 
|  | \$(RM) \$(DESTDIR)\$(bindir)/wineapploader | 
|  |  | 
|  | install-progs: # nothing to do here | 
|  |  | 
|  | install:: winelauncher install-progs\$(DLLEXT) | 
|  | \$(MKINSTALLDIRS) \$(DESTDIR)\$(bindir) | 
|  | \$(INSTALL_SCRIPT) winelauncher \$(DESTDIR)\$(bindir)/winelauncher | 
|  |  | 
|  | uninstall:: | 
|  | -cd \$(DESTDIR)\$(bindir) && \$(RM) wineapploader winelauncher \$(INSTALLPROGS) | 
|  | -rmdir \$(DESTDIR)\$(dlldir) | 
|  |  | 
|  | clean:: | 
|  | \$(RM) wineapploader winelauncher | 
|  |  | 
|  | # Rules for testing | 
|  |  | 
|  | check test:: \$(SUBDIRS:%=%/__test__) | 
|  |  | 
|  | ### Dependencies: | 
|  | EOF | 
|  |  | 
|  | close NEWMAKE; | 
|  | rename "Makefile.in.new", "Makefile.in"; | 
|  | printf "Successfully updated Makefile.in\n"; |