diff options
author | Martin Hostettler <textshell@uchuujin.de> | 2018-04-26 20:49:44 +0200 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek.chauhan@gmail.com> | 2018-04-27 02:10:21 +0000 |
commit | ab17476355c8faff3be7031983c58d3bf54926b3 (patch) | |
tree | d89390f7839ddd387a5afaf790c4b3de455d84a0 | |
parent | ceeae58225976db6f59bd563c2fac66ccf948674 (diff) | |
download | meson-ab17476355c8faff3be7031983c58d3bf54926b3.zip meson-ab17476355c8faff3be7031983c58d3bf54926b3.tar.gz meson-ab17476355c8faff3be7031983c58d3bf54926b3.tar.bz2 |
guess_external_link_dependencies: deduplicate search dirs and libraries.
Reduce speed impact of duplicated libs and pathes in the link command
line. (fixes #3465)
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 20b2e08..6dd04da 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -2431,8 +2431,8 @@ rule FORTRAN_DEP_HACK%s # https://sourceware.org/bugzilla/show_bug.cgi?id=22843 # * Meson optimizes libraries from the same build using the symbol extractor. # Just letting ninja use ld generated dependencies would undo this optimization. - search_dirs = [] - libs = [] + search_dirs = OrderedSet() + libs = OrderedSet() absolute_libs = [] build_dir = self.environment.get_build_dir() @@ -2453,23 +2453,24 @@ rule FORTRAN_DEP_HACK%s break if not os.path.isabs(path): path = os.path.join(build_dir, path) - search_dirs.append(path) + search_dirs.add(path) elif item.startswith('-l'): if len(item) > 2: - libs.append(item[2:]) + lib = item[2:] else: try: - libs.append(next(it)) + lib = next(it) except StopIteration: mlog.warning("Generated linker command has '-l' argument without following library name") break + libs.add(lib) elif os.path.isabs(item) and self.environment.is_library(item) and os.path.isfile(item): absolute_libs.append(item) guessed_dependencies = [] # TODO The get_library_naming requirement currently excludes link targets that use d or fortran as their main linker if hasattr(linker, 'get_library_naming'): - search_dirs += linker.get_library_dirs() + search_dirs = list(search_dirs) + linker.get_library_dirs() prefixes_static, suffixes_static = linker.get_library_naming(self.environment, 'static', strict=True) prefixes_shared, suffixes_shared = linker.get_library_naming(self.environment, 'shared', strict=True) for libname in libs: |