Make the dependency order deterministic. (#3927)

We were using sets to store the dependencies. Just switch to
OrderedSet.

Fixes #3922.
pull/3936/head
Rafael Ávila de Espíndola 7 years ago committed by Nirbheek Chauhan
parent 6fafbad6d5
commit 1a27714f97
  1. 4
      mesonbuild/backend/ninjabackend.py
  2. 13
      run_unittests.py
  3. 0
      test cases/common/206 dep order/lib1.c
  4. 0
      test cases/common/206 dep order/lib2.c
  5. 8
      test cases/common/206 dep order/meson.build
  6. 3
      test cases/common/206 dep order/myexe.c

@ -73,8 +73,8 @@ class NinjaBuildElement:
self.infilenames = [infilenames]
else:
self.infilenames = infilenames
self.deps = set()
self.orderdeps = set()
self.deps = OrderedSet()
self.orderdeps = OrderedSet()
self.elems = []
self.all_outputs = all_outputs

@ -3587,6 +3587,19 @@ endian = 'little'
self.build()
self.run_tests()
def test_deterministic_dep_order(self):
'''
Test that the dependencies are always listed in a deterministic order.
'''
testdir = os.path.join(self.common_test_dir, '206 dep order')
self.init(testdir)
with open(os.path.join(self.builddir, 'build.ninja')) as bfile:
for line in bfile:
if 'build myexe:' in line or 'build myexe.exe:' in line:
self.assertIn('liblib1.a liblib2.a', line)
return
raise RuntimeError('Could not find the build rule')
@skipIfNoPkgconfig
def test_usage_external_library(self):
'''

@ -0,0 +1,8 @@
project('myexe', 'c')
lib1 = static_library('lib1', 'lib1.c')
lib2 = static_library('lib2', 'lib2.c')
executable('myexe',
'myexe.c',
link_with: [lib1, lib2])

@ -0,0 +1,3 @@
int main(int ac, char** av) {
return 0;
}
Loading…
Cancel
Save