From c1df95e12f50e4e0ac2fb6d17cbf69a6a3d5583c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Tue, 16 Jun 2009 08:31:01 +0000 Subject: starting distutils.ccompiler test coverage and cleanup --- Lib/distutils/ccompiler.py | 42 +++++++++++++++++------------------ Lib/distutils/tests/test_ccompiler.py | 37 ++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 22 deletions(-) create mode 100644 Lib/distutils/tests/test_ccompiler.py diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py index 5a9ff76..e093eef 100644 --- a/Lib/distutils/ccompiler.py +++ b/Lib/distutils/ccompiler.py @@ -1217,27 +1217,27 @@ def gen_preprocess_options (macros, include_dirs): return pp_opts -# gen_preprocess_options () - -def gen_lib_options (compiler, library_dirs, runtime_library_dirs, libraries): +def gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries): """Generate linker options for searching library directories and - linking with specific libraries. 'libraries' and 'library_dirs' are, - respectively, lists of library names (not filenames!) and search - directories. Returns a list of command-line options suitable for use - with some compiler (depending on the two format strings passed in). + linking with specific libraries. + + 'libraries' and 'library_dirs' are, respectively, lists of library names + (not filenames!) and search directories. Returns a list of command-line + options suitable for use with some compiler (depending on the two format + strings passed in). """ lib_opts = [] for dir in library_dirs: - lib_opts.append (compiler.library_dir_option (dir)) + lib_opts.append(compiler.library_dir_option(dir)) for dir in runtime_library_dirs: - opt = compiler.runtime_library_dir_option (dir) - if type(opt) is ListType: - lib_opts = lib_opts + opt + opt = compiler.runtime_library_dir_option(dir) + if isinstance(opt, list): + lib_opts.extend(opt) else: - lib_opts.append (opt) + lib_opts.append(opt) # XXX it's important that we *not* remove redundant library mentions! # sometimes you really do have to say "-lfoo -lbar -lfoo" in order to @@ -1246,17 +1246,15 @@ def gen_lib_options (compiler, library_dirs, runtime_library_dirs, libraries): # pretty nasty way to arrange your C code. for lib in libraries: - (lib_dir, lib_name) = os.path.split (lib) - if lib_dir: - lib_file = compiler.find_library_file ([lib_dir], lib_name) - if lib_file: - lib_opts.append (lib_file) + lib_dir, lib_name = os.path.split(lib) + if lib_dir != '': + lib_file = compiler.find_library_file([lib_dir], lib_name) + if lib_file is not None: + lib_opts.append(lib_file) else: - compiler.warn ("no library file corresponding to " - "'%s' found (skipping)" % lib) + compiler.warn("no library file corresponding to " + "'%s' found (skipping)" % lib) else: - lib_opts.append (compiler.library_option (lib)) + lib_opts.append(compiler.library_option(lib)) return lib_opts - -# gen_lib_options () diff --git a/Lib/distutils/tests/test_ccompiler.py b/Lib/distutils/tests/test_ccompiler.py new file mode 100644 index 0000000..58c8c5d --- /dev/null +++ b/Lib/distutils/tests/test_ccompiler.py @@ -0,0 +1,37 @@ +"""Tests for distutils.ccompiler.""" +import os +import unittest + +from distutils.ccompiler import gen_lib_options + +class FakeCompiler(object): + def library_dir_option(self, dir): + return "-L" + dir + + def runtime_library_dir_option(self, dir): + return ["-cool", "-R" + dir] + + def find_library_file(self, dirs, lib, debug=0): + return 'found' + + def library_option(self, lib): + return "-l" + lib + +class CCompilerTestCase(unittest.TestCase): + + def test_gen_lib_options(self): + compiler = FakeCompiler() + libdirs = ['lib1', 'lib2'] + runlibdirs = ['runlib1'] + libs = [os.path.join('dir', 'name'), 'name2'] + + opts = gen_lib_options(compiler, libdirs, runlibdirs, libs) + wanted = ['-Llib1', '-Llib2', '-cool', '-Rrunlib1', 'found', + '-lname2'] + self.assertEquals(opts, wanted) + +def test_suite(): + return unittest.makeSuite(CCompilerTestCase) + +if __name__ == "__main__": + unittest.main(defaultTest="test_suite") -- cgit v0.12