Implemented import libraries; on Unix we import the .def file directly, on Mingw we use it to build the .a library.
diff --git a/dlls/make_dlls b/dlls/make_dlls index 2d46231..fb53c5a 100755 --- a/dlls/make_dlls +++ b/dlls/make_dlls
@@ -202,6 +202,48 @@ ################################################################ +# output the import libraries rules + +my @implibs = grep /\.dll$/, keys %directories; +push @implibs, "winspool.drv"; + +print NEWMAKE "\n# Import libraries\n\nIMPORT_LIBS ="; +foreach my $mod (sort @implibs) +{ + my $def = $mod; + $def =~ s/\.(dll|drv)$/.\$(IMPLIBEXT)/; + printf NEWMAKE " \\\n\tlib%s", $def; +} +print NEWMAKE "\n\n"; + +foreach my $mod (sort @implibs) +{ + my $dir = $directories{$mod}; + my $def = $mod; + my $spec = $mod; + $spec =~ s/\.dll$//; + $def =~ s/\.(dll|drv)$//; + printf NEWMAKE "lib%s.def: %s/%s.spec.def\n", $def, $dir, $spec; + printf NEWMAKE "\t\$(RM) \$@ && \$(LN_S) %s/%s.spec.def \$@\n", $dir, $spec; + printf NEWMAKE "lib%s.a: %s/%s.spec.def\n", $def, $dir, $spec; + printf NEWMAKE "\t\$(DLLTOOL) -k -l \$@ -d %s/%s.spec.def\n\n", $dir, $spec; +} +foreach my $mod (sort @implibs) +{ + my $dir = $directories{$mod}; + my $spec = $mod; + $spec =~ s/\.dll$//; + printf NEWMAKE "%s/%s.spec.def: \$(WINEBUILD)\n", $dir, $spec; +} + + +print NEWMAKE <<EOF; + +\$(SUBDIRS): \$(IMPORT_LIBS) + +EOF + +################################################################ # output the inter-dll dependencies and rules print NEWMAKE "# Map library name to the corresponding directory\n\n"; @@ -218,38 +260,6 @@ printf NEWMAKE "%s/__install__: %s\$(DLLEXT)\n", $directories{$mod}, $mod; } -print NEWMAKE "\n# Inter-dll dependencies\n\n"; - -my @depends = (); -foreach my $mod (sort keys %imports) -{ - next unless @{$imports{$mod}}; - my $count = 0; - my $dep = sprintf("%s:", $directories{$mod}); - $dep .= " " x (8-length($directories{$mod})); - foreach my $i (@{$imports{$mod}}) - { - if ($count++ >= 4) - { - $count = 1; - $dep .= " \\\n" . " " x 9; - } - $dep .= sprintf(" %s\$(DLLEXT)", $i); - } - foreach my $i (@{$linked_dlls{$mod}}) - { - if ($count++ >= 4) - { - $count = 1; - $dep .= " \\\n" . " " x 9; - } - $dep .= sprintf(" lib%s.\$(LIBEXT)", $i); - } - push @depends, $dep . "\n"; -} -print NEWMAKE sort @depends; - - ################################################################ # output the linkable dlls special links @@ -268,11 +278,19 @@ printf NEWMAKE "\t\$(RM) \$@ && \$(LN_S) %s/%s\$(DLLEXT) \$@\n\n", $directories{$mod}, $mod; } +foreach my $mod (keys %imports) +{ + my $deps = ""; + foreach my $i (@{$linked_dlls{$mod}}) { $deps .= " lib$i.\$(LIBEXT)"; } + if ($deps) { printf NEWMAKE "%s:%s\n", $directories{$mod}, $deps; } +} + print NEWMAKE <<EOF; + uninstall:: \$(RM) \$(LINKABLE_DLLS:%=\$(libdir)/lib%.\$(LIBEXT)) -install:: +install install-lib:: \$(RM) \$(LINKABLE_DLLS:%=\$(libdir)/lib%.\$(LIBEXT)) cd \$(libdir) && if [ "\$(dlldir)" = "\$(libdir)/wine" ]; \\ then \\ @@ -294,9 +312,19 @@ print NEWMAKE <<EOF; # Misc rules +install install-dev:: \$(IMPORT_LIBS) + \$(MKINSTALLDIRS) \$(dlldir) + for f in \$(IMPORT_LIBS); do \$(INSTALL_DATA) \$\$f \$(dlldir)/\$\$f; done + +install install-lib:: \$(INSTALLSUBDIRS:%=%/__install__) + uninstall:: + \$(RM) \$(IMPORT_LIBS:%=\$(dlldir)/%) -rmdir \$(dlldir) +clean:: + \$(RM) \$(IMPORT_LIBS) + check test:: \$(BUILDSUBDIRS:%=%/__test__) crosstest:: \$(BUILDSUBDIRS:%=%/__crosstest__)