| #!/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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, 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"; |