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