aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend/ninjabackend.py
diff options
context:
space:
mode:
authorMartin Hostettler <textshell@uchuujin.de>2018-04-26 20:49:44 +0200
committerNirbheek Chauhan <nirbheek.chauhan@gmail.com>2018-04-27 02:10:21 +0000
commitab17476355c8faff3be7031983c58d3bf54926b3 (patch)
treed89390f7839ddd387a5afaf790c4b3de455d84a0 /mesonbuild/backend/ninjabackend.py
parentceeae58225976db6f59bd563c2fac66ccf948674 (diff)
downloadmeson-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)
Diffstat (limited to 'mesonbuild/backend/ninjabackend.py')
-rw-r--r--mesonbuild/backend/ninjabackend.py13
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: