Makefile.in                 |    3 +
 bin/module-deps.pl          |   79 ++++++++++++++++++++++++++++++++++++++++++++
 solenv/gbuild/LinkTarget.mk |    9 +++++
 3 files changed, 91 insertions(+)

New commits:
commit d614ca7ebe77894e38754576de0969c4086827be
Author: Michael Meeks <michael.me...@suse.com>
Date:   Mon Mar 4 18:01:19 2013 +0000

    initial gnumake module deps dumping.

diff --git a/Makefile.in b/Makefile.in
index 915db2c..92ae836 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -403,6 +403,9 @@ findunusedcode:
 
 check: dev-install subsequentcheck
 
+dump-deps:
+       $(SRCDIR)/bin/module-deps.pl $(GNUMAKE) $(SRCDIR)/Makefile.gbuild
+
 subsequentcheck :| $(if $(filter-out 
subsequentcheck,$(MAKECMDGOALS)),dev-install)
        $(GNUMAKE) -j $(CHECK_PARALLELISM) $(GMAKE_OPTIONS) -f 
$(SRCDIR)/Makefile.gbuild $@
 
diff --git a/bin/module-deps.pl b/bin/module-deps.pl
new file mode 100755
index 0000000..453570a
--- /dev/null
+++ b/bin/module-deps.pl
@@ -0,0 +1,79 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+my $gnumake;
+my $makefile_build;
+
+sub read_deps()
+{
+    my $p;
+    my $invalid_tolerance = 100;
+    my $line_count = 0;
+    my %deps;
+    open ($p, "ENABLE_PRINT_DEPS=1 $gnumake -n -f $makefile_build all|") || 
die "can't launch make: $!";
+#    open ($p, "/tmp/deps") || die "can't read deps: $!";
+    $|=1;
+    print STDERR "reading deps ";
+    while (<$p>) {
+       my $line = $_;
+       $line_count++;
+       print STDERR '.' if ($line_count % 10 == 0);
+#      print STDERR $line;
+       chomp ($line);
+        if ($line =~ m/^LibraryDep:\s+(\S+) links against (.*)$/) {
+#        if ($line =~ m/^LibraryDep:\s+(\S+)\s+links against/) {
+           $deps{$1} = ' ' if (!defined $deps{$1});
+           $deps{$1} = $deps{$1} . ' ' . $2;
+        } elsif ($line =~ m/^LibraryDep:\s+links against/) {
+#           these need fixing, we call gb_LinkTarget__use_$...
+#           and get less than normal data back to gb_LinkTarget_use_libraries
+#          print STDERR "ignoring unhelpful external dep\n";
+       } elsif ($invalid_tolerance < 0) {
+#          print "read all dependencies to: '$line'\n";
+           last;
+       } else {
+#          print "no match '$line'\n";
+           $invalid_tolerance--;
+       }
+    }
+    close ($p);
+    print STDERR " done\n";
+
+    return \%deps;
+}
+
+# first create nodes for each entry
+sub build_tree($)
+{
+    my $deps = shift;
+    for my $name (sort keys %{$deps}) {
+       my $need_str = $deps->{$name};
+       $need_str =~ s/^\s+//g;
+       $need_str =~ s/\s+$//g;
+       my @needs = split /\s+/, $need_str;
+       $name =~ m/^([^_]+)_(\S+)$/ || die "invalid target name: '$name'";
+       my $type = $1;
+       my $target = $2;
+       $type eq 'Executable' || $type eq 'Library' ||
+           $type eq 'CppunitTest' || die "Unknown type '$type'";
+       print "$target ($type): " . join (',', @needs) . "\n";
+    }
+}
+
+while (my $arg = shift @ARGV) {
+    if (!defined $gnumake) {
+       $gnumake = $arg;
+    } elsif (!defined $makefile_build) {
+       $makefile_build = $arg;
+    } else {
+       die "un-needed argument '$arg'";
+    }
+}
+
+$gnumake = 'make' if (!defined $gnumake);
+$makefile_build = 'Makefile.gbuild' if (!defined $makefile_build);
+
+my $deps = read_deps();
+my $tree = build_tree($deps);
+
diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk
index 190f671..b39f478 100644
--- a/solenv/gbuild/LinkTarget.mk
+++ b/solenv/gbuild/LinkTarget.mk
@@ -816,12 +816,21 @@ $$(call gb_Output_error,\
  gb_LinkTarget_add_linked_libs: use gb_LinkTarget_use_libraries instead.)
 endef
 
+define gb_PrintDeps_info
+$(info LibraryDep: $(4) links against $(2))
+endef
+
 define gb_LinkTarget_use_libraries
 ifneq (,$$(filter-out $(gb_Library_KNOWNLIBS),$(2)))
 $$(eval $$(call gb_Output_info,currently known libraries are: $(sort 
$(gb_Library_KNOWNLIBS)),ALL))
 $$(eval $$(call gb_Output_error,Cannot link against library/libraries 
$$(filter-out $(gb_Library_KNOWNLIBS),$(2)). Libraries must be registered in 
Repository.mk))
 endif
 
+# used by bin/module-deps.pl
+ifneq ($(ENABLE_PRINT_DEPS),)
+$$(eval $$(call gb_PrintDeps_info,$(1),$(2),$(3),$(4)))
+endif
+
 gb_LINKED_LIBS := $(if $(filter $(gb_MERGEDLIBS),$(2)), \
        $(if $(filter $(1),$(foreach lib,$(gb_MERGEDLIBS),$(call 
gb_Library_get_linktargetname,$(lib)))),, merged)) \
        $(filter-out $(gb_MERGEDLIBS),$(2))
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to