diff options
| author | fergus.henderson <fergushenderson@users.noreply.github.com> | 2008-05-20 20:23:15 +0000 |
|---|---|---|
| committer | fergus.henderson <fergushenderson@users.noreply.github.com> | 2008-05-20 20:23:15 +0000 |
| commit | e40c1b78f5a7dd957108c6bc9d091603abc8c6a0 (patch) | |
| tree | c6ba75083f41074280150da7688ab2ac0d34a4f1 /include_server | |
| parent | b8a0beb58019f3fcc671f9e913d5611aa2afd102 (diff) | |
| download | distcc-git-e40c1b78f5a7dd957108c6bc9d091603abc8c6a0.tar.gz | |
Re-enable Objective C and Objective C++ support.
This required the following changes:
- Compute the default search paths for each language lazily,
when the language is first encountered, rather than
computing it for 'c' and 'c++'.
- Make the tests of Objective C and Objective C++
conditional on the relevant compiler being installed.
Tested by "make check" on two systems:
- One with Objective C installed, but not Objective C++.
- One with neither installed.
I didn't test on a system with Objective C++ installed,
because I didn't have one easily available.
Reviewers: Craig Silverstein, Nils Klarlund.
Diffstat (limited to 'include_server')
| -rwxr-xr-x | include_server/basics.py | 16 | ||||
| -rwxr-xr-x | include_server/compiler_defaults.py | 30 | ||||
| -rwxr-xr-x | include_server/parse_command.py | 9 | ||||
| -rwxr-xr-x | include_server/parse_command_test.py | 2 |
4 files changed, 26 insertions, 31 deletions
diff --git a/include_server/basics.py b/include_server/basics.py index e86b218..536e0e9 100755 --- a/include_server/basics.py +++ b/include_server/basics.py @@ -235,17 +235,7 @@ BAD_REALPATH_WARNING_MSG = ( # LANGUAGES AND FILE EXTENSIONS # The languages that we recognize. -# -# TODO(klarlund): add "objective-c" and "objective-c++". Currently we try to -# compute the default include path for all languages at startup, and barf if it -# fails. We need to fix that before enabling objective-c or objective-c++. So -# Objective C and Objective C++ support is disabled for now. -# -# To enable, uncomment the code below and the test case -# ObjectiveC(PlusPlus)_Case in ../test/testdistcc.py.) - -LANGUAGES = set(['c', 'c++']) -#LANGUAGES = set(['c', 'c++', 'objective-c', 'objective-c++']) +LANGUAGES = set(['c', 'c++', 'objective-c', 'objective-c++']) # The suffixes, following last period, used for source files and # preprocessed files, each with their corresponding source language. @@ -256,9 +246,9 @@ TRANSLATION_UNIT_MAP = { 'cc': 'c++', 'cpp': 'c++', 'cxx': 'c++', 'C': 'c++', 'CXX': 'c++', 'ii': 'c++', # Objective C - # 'm': 'objective-c', 'mi': 'objective-c' + 'm': 'objective-c', 'mi': 'objective-c', # Objective C++ - # 'mm': 'objective-c++', 'M': 'objective-c++', 'mii': 'objective-c++', + 'mm': 'objective-c++', 'M': 'objective-c++', 'mii': 'objective-c++', } # All languages are described by suffixes. diff --git a/include_server/compiler_defaults.py b/include_server/compiler_defaults.py index 62095d3..02a323b 100755 --- a/include_server/compiler_defaults.py +++ b/include_server/compiler_defaults.py @@ -151,11 +151,12 @@ class CompilerDefaults(object): self.system_dirs_default = {} - def SetSystemDirsDefaults(self, compiler, timer=None): + def SetSystemDirsDefaults(self, compiler, language, timer=None): """Set instance variables according to compiler. Arguments: - compiler: a string "c", "c++",... + compiler: a filepath (the first argument on the distcc command line) + language: 'c' or 'c++' or other item in basics.LANGUAGES timer: a basis.IncludeAnalyzerTimer or None The timer will be disabled during this routine because the select involved @@ -164,23 +165,26 @@ class CompilerDefaults(object): See also the constructor documentation for this class. """ assert isinstance(compiler, str) - Debug(DEBUG_TRACE, "SetSystemDirsDefauls with CC: %s" % compiler) - if compiler in self.system_dirs_default: return + assert isinstance(language, str) + Debug(DEBUG_TRACE, "SetSystemDirsDefaults with CC, LANG: %s, %s" % + (compiler, language)) + if compiler in self.system_dirs_default: + if language in self.system_dirs_default[compiler]: + return + else: + self.system_dirs_default[compiler] = {} try: if timer: # We have to disable the timer because the select system call that is # executed when calling the compiler through Popen gives up if presented # with a SIGALRM. timer.Stop() - self.system_dirs_default[compiler] = {} - # Try 'c', 'c++', ... - for language in basics.LANGUAGES: - self.system_dirs_default[compiler][language] = ( - _SystemSearchdirsGCC(compiler, language, self.canonical_lookup)) - Debug(DEBUG_DATA, - "system_dirs_default[%s][%s]: %s" % - (compiler, language, - self.system_dirs_default[compiler][language])) + self.system_dirs_default[compiler][language] = ( + _SystemSearchdirsGCC(compiler, language, self.canonical_lookup)) + Debug(DEBUG_DATA, + "system_dirs_default[%s][%s]: %s" % + (compiler, language, + self.system_dirs_default[compiler][language])) # Now summarize what we know and add to system_dirs_default_all. self.system_dirs_default_all |= set( [ _default diff --git a/include_server/parse_command.py b/include_server/parse_command.py index 1a5fcc3..eab51b9 100755 --- a/include_server/parse_command.py +++ b/include_server/parse_command.py @@ -425,10 +425,11 @@ def ParseCommandArgs(args, current_dir, fp_map, dir_map, compiler_defaults, if not language_match: raise NotCoveredError( "For source file '%s': unrecognized filename extension" % source_file) - parse_state.language = language_match.group('suffix') - assert parse_state.language in basics.TRANSLATION_UNIT_MAP + suffix = language_match.group('suffix') + parse_state.language = basics.TRANSLATION_UNIT_MAP[suffix] + assert parse_state.language in basics.LANGUAGES - compiler_defaults.SetSystemDirsDefaults(compiler, timer) + compiler_defaults.SetSystemDirsDefaults(compiler, parse_state.language, timer) def IndexDirs(dir_list): """Normalize directory names and index. @@ -446,7 +447,7 @@ def ParseCommandArgs(args, current_dir, fp_map, dir_map, compiler_defaults, if not parse_state.nostdinc: angle_dirs.extend( IndexDirs(compiler_defaults.system_dirs_default - [compiler][basics.TRANSLATION_UNIT_MAP[parse_state.language]])) + [compiler][parse_state.language])) angle_dirs.extend(IndexDirs(parse_state.after_system_dirs)) quote_dirs = IndexDirs(parse_state.quote_dirs) diff --git a/include_server/parse_command_test.py b/include_server/parse_command_test.py index fd5db01..2e754e3 100755 --- a/include_server/parse_command_test.py +++ b/include_server/parse_command_test.py @@ -47,7 +47,7 @@ class ParseCommandUnitTest(unittest.TestCase): mock_compiler = '/usr/crosstool/v8/gcc-4.1.0-glibc-2.2.2/blah/gcc' self.mock_compiler = mock_compiler - def Mock_SetSystemDirsDefaults(compiler, timer=None): + def Mock_SetSystemDirsDefaults(compiler, language, timer=None): if compiler != mock_compiler: raise Exception, "compiler: %s, mock_compiler: %s" % ( compiler, mock_compiler) |
