Improved make_dlls script. Moved dll list out of
Make.rules.in. Removed a few no longer used rules.
diff --git a/dlls/make_dlls b/dlls/make_dlls
index 05dd5a2..5db5b3e 100755
--- a/dlls/make_dlls
+++ b/dlls/make_dlls
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/perl -w
#
# Update the dll dependencies in the dlls main Makefile.in.
# Must be run in the dlls/ directory of the Wine tree.
@@ -12,6 +12,15 @@
%directories = ();
%altnames = ();
+# list of special dlls that can be switched on or off by configure
+%special_dlls =
+(
+ "ddraw" => "XFILES",
+ "glu32" => "GLU32FILES",
+ "opengl32" => "OPENGLFILES",
+ "x11drv" => "XFILES"
+);
+
foreach $i (split(/\s/,$makefiles))
{
open MAKE,$i;
@@ -55,91 +64,153 @@
}
}
-open OLDMAKE,"Makefile.in" or die "cannot open Makefile.in";
open NEWMAKE,">Makefile.in.new" or die "cannot create Makefile.in.new";
-while (<OLDMAKE>)
-{
- last if (/^EXTRADLLNAMES/);
- print NEWMAKE $_;
-}
-close OLDMAKE;
+################################################################
+# makefile header
-printf NEWMAKE "EXTRADLLNAMES =";
-foreach $extra (values %altnames) { push @extra, @$extra; }
-foreach $extra (sort @extra)
-{
- printf NEWMAKE " \\\n\t%s", $extra;
-}
+print NEWMAKE <<EOF;
+# Automatically generated by make_dlls; DO NOT EDIT!!
-printf NEWMAKE "\n\nSUBDIRS =";
+TOPSRCDIR = \@top_srcdir\@
+TOPOBJDIR = ..
+SRCDIR = \@srcdir\@
+VPATH = \@srcdir\@
+LIBEXT = \@LIBEXT\@
+
+EOF
+
+################################################################
+# output special dlls configure definitions
+
+printf NEWMAKE "# special configure-dependent targets\n\n";
+my %specials = ();
+foreach $mod (sort keys %special_dlls)
+{
+ $specials{$special_dlls{$mod}} .= " " . $mod;
+}
+foreach $i (sort keys %specials)
+{
+ printf NEWMAKE "%s =%s\n", $i, $specials{$i};
+}
+printf NEWMAKE "EXTRADIRS =";
+foreach $i (sort keys %specials) { printf NEWMAKE " \@%s\@", $i; }
+printf NEWMAKE "\n\n";
+
+
+################################################################
+# output the subdirs list
+
+print NEWMAKE <<EOF;
+# Subdir list
+
+SUBDIRS = \\
+EOF
+printf NEWMAKE "\t\$(EXTRADIRS)";
foreach $dir (sort values %directories)
{
+ next if defined($special_dlls{$dir}); # skip special dlls
printf NEWMAKE " \\\n\t%s", $dir;
}
printf NEWMAKE "\n";
+
+################################################################
+# output the all: target
+
+my %targets = (); # use a hash to get rid of duplicate target names
+foreach $mod (sort keys %directories)
+{
+ next if defined($special_dlls{$mod}); # skip special dlls
+ $targets{sprintf("lib%s.\$(LIBEXT)",$mod)} = 1;
+ next unless defined $altnames{$mod};
+ foreach $i (sort @{$altnames{$mod}})
+ {
+ $targets{sprintf("lib%s.\$(LIBEXT)",$i)} = 1;
+ }
+}
+print NEWMAKE <<EOF;
+
+# Main target
+
+all: \\
+ \$(EXTRADIRS:%=lib%.\$(LIBEXT)) \\
+EOF
+printf NEWMAKE "\t%s\n", join( " \\\n\t", sort keys %targets );
+
+
+################################################################
+# output the lib name -> directory rules
+
print NEWMAKE <<EOF;
\@MAKE_RULES\@
-all: \$(DLLS:%=lib%.\@LIBEXT\@) \$(EXTRADLLNAMES:%=lib%.\@LIBEXT\@)
-
# Map library name to directory
EOF
foreach $mod (sort keys %directories)
{
- my $count = 0;
- printf NEWMAKE "lib%s.\@LIBEXT\@", $mod;
- foreach $i (sort @{$altnames{$mod}})
+ printf NEWMAKE "lib%s.\$(LIBEXT)", $mod;
+ if (defined $altnames{$mod})
{
- if ($count++ >= 3)
+ my $count = 1;
+ foreach $i (sort @{$altnames{$mod}})
{
- $count = 0;
- printf NEWMAKE " \\\n ";
+ if (!($count++ % 3)) { printf NEWMAKE " \\\n "; }
+ printf NEWMAKE " lib%s.\$(LIBEXT)", $i;
}
- printf NEWMAKE " lib%s.\@LIBEXT\@", $i;
}
- printf NEWMAKE ": %s/lib%s.\@LIBEXT\@\n", $directories{$mod}, $mod;
- printf NEWMAKE "\t\$(RM) \$@ && \$(LN_S) %s/lib%s.\@LIBEXT\@ \$@\n\n", $directories{$mod}, $mod;
+ printf NEWMAKE ": %s/lib%s.\$(LIBEXT)\n", $directories{$mod}, $mod;
+ printf NEWMAKE "\t\$(RM) \$@ && \$(LN_S) %s/lib%s.\$(LIBEXT) \$@\n\n", $directories{$mod}, $mod;
}
-print NEWMAKE "# Inter-dll dependencies (only necessary for dynamic libs)\n\n";
+
+################################################################
+# output the inter-dll dependencies and rules
+
+print NEWMAKE "# Inter-dll dependencies\n\n";
my @depends = ();
foreach $mod (sort keys %imports)
{
- next unless $#{$imports{$mod}} >= 0;
- my $dep = sprintf("%s/lib%s.\@LIBEXT\@:", $directories{$mod}, $mod);
+ my $count = 1;
+ my $dep = sprintf("%s/lib%s.\$(LIBEXT): dummy", $directories{$mod}, $mod);
foreach $i (@{$imports{$mod}})
{
- $dep .= sprintf(" lib%s.\@LIBEXT\@", $i);
+ if ($count++ >= 3)
+ {
+ $count = 0;
+ $dep .= " \\\n ";
+ }
+ $dep .= sprintf(" lib%s.\$(LIBEXT)", $i);
}
- push @depends, $dep . "\n";
+ $dep .= sprintf("\n\t\@cd %s && \$(MAKE) lib%s.\$(LIBEXT)\n\n",$directories{$mod}, $mod);
+ push @depends, $dep;
}
print NEWMAKE sort @depends;
+
+################################################################
+# makefile trailer
+
print NEWMAKE <<EOF;
+# Misc rules
-\$(DLLFILES): dummy
- \@cd `dirname \$\@` && \$(MAKE)
-
-\$(DLLFILES:%=%_install_): dummy
- \@cd `dirname \$\@` && \$(MAKE) install
-
-\$(DLLFILES:%=%_uninstall_): dummy
- \@cd `dirname \$\@` && \$(MAKE) uninstall
-
-\$(DLLFILES:%=%_checklink_): dummy
+\$(SUBDIRS:%=%/__checklink__): dummy
\@cd `dirname \$\@` && \$(MAKE) checklink
-install:: \$(DLLFILES:%=%_install_)
+\$(SUBDIRS:%=%/__debug_channels__): dummy
+ \@cd `dirname \$\@` && \$(MAKE) debug_channels
-uninstall:: \$(DLLFILES:%=%_uninstall_)
+install:: \$(SUBDIRS:%=%/__install__)
-checklink:: \$(DLLFILES:%=%_checklink_)
+uninstall:: \$(SUBDIRS:%=%/__uninstall__)
+
+checklink:: \$(SUBDIRS:%=%/__checklink__)
+
+debug_channels:: \$(SUBDIRS:%=%/__debug_channels__)
EOF
close NEWMAKE;