summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/SCons/scons-local/SCons/Tool/sunc++.py')
-rw-r--r--3rdParty/SCons/scons-local/SCons/Tool/sunc++.py82
1 files changed, 59 insertions, 23 deletions
diff --git a/3rdParty/SCons/scons-local/SCons/Tool/sunc++.py b/3rdParty/SCons/scons-local/SCons/Tool/sunc++.py
index c2bcf8e..68e7b66 100644
--- a/3rdParty/SCons/scons-local/SCons/Tool/sunc++.py
+++ b/3rdParty/SCons/scons-local/SCons/Tool/sunc++.py
@@ -9,7 +9,7 @@ selection method.
"""
#
-# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 The SCons Foundation
+# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
@@ -31,18 +31,68 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sunc++.py 4043 2009/02/23 09:06:45 scons"
+__revision__ = "src/engine/SCons/Tool/sunc++.py 4761 2010/04/04 14:04:44 bdeegan"
import SCons
-import os.path
+import os
+import re
+import subprocess
cplusplus = __import__('c++', globals(), locals(), [])
+package_info = {}
+
+def get_package_info(package_name, pkginfo, pkgchk):
+ try:
+ return package_info[package_name]
+ except KeyError:
+ version = None
+ pathname = None
+ try:
+ sadm_contents = open('/var/sadm/install/contents', 'r').read()
+ except EnvironmentError:
+ pass
+ else:
+ sadm_re = re.compile('^(\S*/bin/CC)(=\S*)? %s$' % package_name, re.M)
+ sadm_match = sadm_re.search(sadm_contents)
+ if sadm_match:
+ pathname = os.path.dirname(sadm_match.group(1))
+
+ try:
+ p = subprocess.Popen([pkginfo, '-l', package_name],
+ stdout=subprocess.PIPE,
+ stderr=open('/dev/null', 'w'))
+ except EnvironmentError:
+ pass
+ else:
+ pkginfo_contents = p.communicate()[0]
+ version_re = re.compile('^ *VERSION:\s*(.*)$', re.M)
+ version_match = version_re.search(pkginfo_contents)
+ if version_match:
+ version = version_match.group(1)
+
+ if pathname is None:
+ try:
+ p = subprocess.Popen([pkgchk, '-l', package_name],
+ stdout=subprocess.PIPE,
+ stderr=open('/dev/null', 'w'))
+ except EnvironmentError:
+ pass
+ else:
+ pkgchk_contents = p.communicate()[0]
+ pathname_re = re.compile(r'^Pathname:\s*(.*/bin/CC)$', re.M)
+ pathname_match = pathname_re.search(pkgchk_contents)
+ if pathname_match:
+ pathname = os.path.dirname(pathname_match.group(1))
+
+ package_info[package_name] = (pathname, version)
+ return package_info[package_name]
+
# use the package installer tool lslpp to figure out where cppc and what
# version of it is installed
def get_cppc(env):
- cxx = env.get('CXX', None)
+ cxx = env.subst('$CXX')
if cxx:
cppcPath = os.path.dirname(cxx)
else:
@@ -53,25 +103,11 @@ def get_cppc(env):
pkginfo = env.subst('$PKGINFO')
pkgchk = env.subst('$PKGCHK')
- def look_pkg_db(pkginfo=pkginfo, pkgchk=pkgchk):
- version = None
- path = None
- for package in ['SPROcpl']:
- cmd = "%s -l %s 2>/dev/null | grep '^ *VERSION:'" % (pkginfo, package)
- line = os.popen(cmd).readline()
- if line:
- version = line.split()[-1]
- cmd = "%s -l %s 2>/dev/null | grep '^Pathname:.*/bin/CC$' | grep -v '/SC[0-9]*\.[0-9]*/'" % (pkgchk, package)
- line = os.popen(cmd).readline()
- if line:
- path = os.path.dirname(line.split()[-1])
- break
-
- return path, version
-
- path, version = look_pkg_db()
- if path and version:
- cppcPath, cppcVersion = path, version
+ for package in ['SPROcpl']:
+ path, version = get_package_info(package, pkginfo, pkgchk)
+ if path and version:
+ cppcPath, cppcVersion = path, version
+ break
return (cppcPath, 'CC', 'CC', cppcVersion)