summaryrefslogtreecommitdiff
path: root/include_server
diff options
context:
space:
mode:
authorfergus.henderson <fergushenderson@users.noreply.github.com>2008-05-20 20:23:15 +0000
committerfergus.henderson <fergushenderson@users.noreply.github.com>2008-05-20 20:23:15 +0000
commite40c1b78f5a7dd957108c6bc9d091603abc8c6a0 (patch)
treec6ba75083f41074280150da7688ab2ac0d34a4f1 /include_server
parentb8a0beb58019f3fcc671f9e913d5611aa2afd102 (diff)
downloaddistcc-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-xinclude_server/basics.py16
-rwxr-xr-xinclude_server/compiler_defaults.py30
-rwxr-xr-xinclude_server/parse_command.py9
-rwxr-xr-xinclude_server/parse_command_test.py2
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)