More robust searching for the ICL license file. (Gary Oberbrunner)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 13 Apr 2004 03:46:05 +0000 (03:46 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 13 Apr 2004 03:46:05 +0000 (03:46 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@953 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/CHANGES.txt
src/engine/SCons/Tool/icl.py
test/import.py

index d7922ce81b5fe9e4e4cb6ba987a5fafacd191369..bf2c7607f1040e1ddb104505715f6bc78368af7d 100644 (file)
@@ -85,6 +85,9 @@ RELEASE 0.96 - XXX
     are otherwise silently (and confusingly) turned into construction
     variable overrides.
 
+  - Try to find the ICL license file path name in the external environment
+    and the registry before resorting to the hard-coded path name.
+
   From Simon Perkins:
 
   - Fix a bug introduced in building shared libraries under MinGW.
index ec1e0633b9b03bcf265f001df5833fbc964e3506..d59647ce970897faed2a72b313b75af6a8aeec80 100644 (file)
@@ -38,6 +38,7 @@ import string
 
 import SCons.Tool.msvc
 import SCons.Util
+import SCons.Warnings
 
 # Find Intel compiler:
 # Could enumerate subkeys here to be more flexible.
@@ -99,7 +100,33 @@ def generate(env):
     env['CXX']        = 'icl'
     env['LINK']        = 'xilink'
 
-    env['ENV']['INTEL_LICENSE_FILE'] = r'C:\Program Files\Common Files\Intel\Licenses'
+    # Look for license file dir.
+    envlicdir = os.environ.get("INTEL_LICENSE_FILE", '')
+    K = ('SOFTWARE\Intel\Licenses')
+    try:
+        k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, K)
+        reglicdir = SCons.Util.RegQueryValueEx(k, "w_cpp")[0]
+    except (AttributeError, SCons.Util.RegError):
+        reglicdir = ""
+    defaultlicdir = r'C:\Program Files\Common Files\Intel\Licenses'
+
+    licdir = None
+    for ld in [envlicdir, reglicdir]:
+        if ld and os.path.exists(ld):
+            licdir = ld
+            break
+    if not licdir:
+        licdir = defaultlicdir
+        if not os.path.exists(licdir):
+            class ICLLicenseDirWarning(SCons.Warnings.Warning):
+                pass
+            SCons.Warnings.enableWarningClass(ICLLicenseDirWarning)
+            SCons.Warnings.warn(ICLLicenseDirWarning,
+                                "Intel license dir was not found."
+                                "  Tried using the INTEL_LICENSE_FILE environment variable (%s), the registry (%s) and the default path (%s)."
+                                "  Using the default path as a last resort."
+                                    % (envlicdir, reglicdir, defaultlicdir))
+    env['ENV']['INTEL_LICENSE_FILE'] = licdir
 
 def exists(env):
     try:
index 6d154ae8d34e4fac4ffacafb012c451e016728e2..48ae5466764ce365aacda4fe525c5fcd07859ebb 100644 (file)
@@ -115,6 +115,13 @@ tools = [
     'zip',
 ]
 
+error_output = {
+    'icl' : """
+scons: warning: Intel license dir was not found.  Tried using the INTEL_LICENSE_FILE environment variable (), the registry () and the default path (C:\Program Files\Common Files\Intel\Licenses).  Using the default path as a last resort.
+File "SConstruct", line 1, in ?
+"""
+}
+
 # An SConstruct for importing Tool names that have illegal characters
 # for Python variable names.
 indirect_import = """\
@@ -136,6 +143,11 @@ for tool in tools:
         test.write('SConstruct', indirect_import % (tool, tool, tool))
     else:
         test.write('SConstruct', direct_import % (tool, tool, tool))
-    test.run()
+    test.run(stderr=None)
+    stderr = test.stderr()
+    if stderr != '' and stderr != error_output.get(tool, ''):
+        print "Failed importing '%s', stderr:" % tool
+        print stderr
+        test.fail_test(1)
 
 test.pass_test()