Faster check of makefile dependencies (#59)
Faster check of makefile dependencies
This commit is contained in:
commit
0fa56021d1
@ -3,11 +3,9 @@ Checks that every .c and .h file in an implementation is present as a
|
|||||||
dependency of that scheme's Makefile.
|
dependency of that scheme's Makefile.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import hashlib
|
|
||||||
import os
|
import os
|
||||||
import pqclean
|
import pqclean
|
||||||
import helpers
|
import helpers
|
||||||
import subprocess
|
|
||||||
import glob
|
import glob
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
@ -15,18 +13,20 @@ import datetime
|
|||||||
def test_makefile_dependencies():
|
def test_makefile_dependencies():
|
||||||
for scheme in pqclean.Scheme.all_schemes():
|
for scheme in pqclean.Scheme.all_schemes():
|
||||||
for implementation in scheme.implementations:
|
for implementation in scheme.implementations:
|
||||||
# initial build - want to have all files in place at beginning
|
# initial build - want to have *all* files in place at beginning
|
||||||
helpers.run_subprocess(['make', 'clean'], implementation.path())
|
helpers.run_subprocess(['make', 'clean'], implementation.path())
|
||||||
helpers.run_subprocess(['make'], implementation.path())
|
helpers.run_subprocess(['make'], implementation.path())
|
||||||
# test case for each candidate file
|
# test case for each candidate file
|
||||||
cfiles = glob.glob(os.path.join(implementation.path(), '*.c'))
|
cfiles = glob.glob(os.path.join(implementation.path(), '*.c'))
|
||||||
hfiles = glob.glob(os.path.join(implementation.path(), '*.h'))
|
hfiles = glob.glob(os.path.join(implementation.path(), '*.h'))
|
||||||
for file in cfiles + hfiles:
|
for file in cfiles + hfiles:
|
||||||
yield check_makefile_dependencies, scheme.name, implementation.name, file
|
yield (check_makefile_dependencies, scheme.name,
|
||||||
|
implementation.name, file)
|
||||||
|
|
||||||
|
|
||||||
def check_makefile_dependencies(scheme_name, implementation_name, file):
|
def check_makefile_dependencies(scheme_name, implementation_name, file):
|
||||||
scheme = pqclean.Scheme.by_name(scheme_name)
|
implementation = pqclean.Implementation.by_name(scheme_name,
|
||||||
implementation = pqclean.Implementation.by_name(scheme_name, implementation_name)
|
implementation_name)
|
||||||
|
|
||||||
cfiles = glob.glob(os.path.join(implementation.path(), '*.c'))
|
cfiles = glob.glob(os.path.join(implementation.path(), '*.c'))
|
||||||
hfiles = glob.glob(os.path.join(implementation.path(), '*.h'))
|
hfiles = glob.glob(os.path.join(implementation.path(), '*.h'))
|
||||||
@ -41,22 +41,24 @@ def check_makefile_dependencies(scheme_name, implementation_name, file):
|
|||||||
ago10 = now - datetime.timedelta(seconds=10)
|
ago10 = now - datetime.timedelta(seconds=10)
|
||||||
ago5 = now - datetime.timedelta(seconds=5)
|
ago5 = now - datetime.timedelta(seconds=5)
|
||||||
formatstring = "%Y%m%d%H%M.%S"
|
formatstring = "%Y%m%d%H%M.%S"
|
||||||
helpers.run_subprocess(['touch', '-t', ago15.strftime(formatstring)] + cfiles + hfiles)
|
helpers.run_subprocess(
|
||||||
helpers.run_subprocess(['touch', '-t', ago10.strftime(formatstring)] + ofiles)
|
['touch', '-t', ago15.strftime(formatstring)] + cfiles + hfiles)
|
||||||
helpers.run_subprocess(['touch', '-t', ago5.strftime(formatstring), libfile])
|
helpers.run_subprocess(
|
||||||
mtime_lib_orig = os.stat(libfile).st_mtime_ns
|
['touch', '-t', ago10.strftime(formatstring)] + ofiles)
|
||||||
|
helpers.run_subprocess(
|
||||||
|
['touch', '-t', ago5.strftime(formatstring), libfile])
|
||||||
|
|
||||||
|
# Sanity check: the scheme is up to date
|
||||||
|
helpers.run_subprocess(['make', '-q'], implementation.path(),
|
||||||
|
expected_returncode=0)
|
||||||
|
|
||||||
# touch the candidate .c / .h file
|
# touch the candidate .c / .h file
|
||||||
helpers.run_subprocess(['touch', '-t', now.strftime(formatstring), file])
|
helpers.run_subprocess(['touch', '-t', now.strftime(formatstring), file])
|
||||||
|
|
||||||
# rebuild
|
# check if it needs to be rebuilt using make -q
|
||||||
helpers.run_subprocess(['make'], implementation.path())
|
helpers.run_subprocess(['make', '-q'], implementation.path(),
|
||||||
|
expected_returncode=1)
|
||||||
|
|
||||||
# make sure the libfile's modification time changed
|
|
||||||
mtime_lib_upd = os.stat(libfile).st_mtime_ns
|
|
||||||
if (mtime_lib_orig == mtime_lib_upd):
|
|
||||||
print("ERROR: Library was not updated after touching {}".format(file))
|
|
||||||
assert(mtime_lib_orig != mtime_lib_upd)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user