Commits

Steven Knight  committed 245e829

Add support for an explicit SCONS_HOME variable for writing the SCons execution line in Visual Studio project files. (Dobes Vandermeer) Two minor test fixes for win32 portability.

  • Participants
  • Parent commits 6f01759

Comments (0)

Files changed (6)

File doc/man/scons.1

 .I -e
 to check out editable files from SCCS.
 
+.IP SCONS_HOME
+The (optional) path to the SCons library directory,
+initialized from the external environment.
+If set, this is used to construct a shorter and more
+efficient search path in the
+.B MSVSSCONS
+command line executed
+from Microsoft Visual Studio project files.
+
 .IP SHCC
 The C compiler used for generating shared-library objects.
 

File src/CHANGES.txt

     $MSVS_PROJECT_GUID, $MSVS_SCC_AUX_PATH, $MSVS_SCC_LOCAL_PATH,
     $MSVS_SCC_PROJECT_NAME, $MSVS_SCC_PROVIDER,
 
+  - Add support for using a $SCONS_HOME variable (imported from the
+    external environment, or settable internally) to put a shortened
+    SCons execution line in the Visual Studio project file.
+
   From Greg Ward:
 
   - Fix a misplaced line in the man page.

File src/engine/SCons/Tool/msvs.py

         r = r + h[(i >> 4) & 0xF] + h[i & 0xF]
     return r
 
+def xmlify(s):
+    s = string.replace(s, "&", "&") # do this first
+    s = string.replace(s, "'", "'")
+    s = string.replace(s, '"', """)
+    return s
+
 def _generateGUID(slnfile, name):
     """This generates a dummy GUID for the sln file to use.  It is
     based on the MD5 signatures of the sln filename plus the name of
 # things and ends up with "-c" as sys.argv[0].  Consequently, we have
 # the MSVS Project file invoke SCons the same way that scons.bat does,
 # which works regardless of how we were invoked.
-exec_script_main = "from os.path import join; import sys; sys.path = [ join(sys.prefix, 'Lib', 'site-packages', 'scons-__VERSION__'), join(sys.prefix, 'scons-__VERSION__'), join(sys.prefix, 'Lib', 'site-packages', 'scons'), join(sys.prefix, 'scons') ] + sys.path; import SCons.Script; SCons.Script.main()"
+def getExecScriptMain(env, xml=None):
+    scons_home = env.get('SCONS_HOME')
+    if scons_home:        
+        exec_script_main = "from os.path import join; import sys; sys.path = [ r'%s' ] + sys.path; import SCons.Script; SCons.Script.main()" % scons_home
+    else:
+        exec_script_main = "from os.path import join; import sys; sys.path = [ join(sys.prefix, 'Lib', 'site-packages', 'scons-__VERSION__'), join(sys.prefix, 'scons-__VERSION__'), join(sys.prefix, 'Lib', 'site-packages', 'scons'), join(sys.prefix, 'scons') ] + sys.path; import SCons.Script; SCons.Script.main()"
+    if xml:
+        exec_script_main = xmlify(exec_script_main)
+    return exec_script_main
 
 # The string for the Python executable we tell the Project file to use
 # is either sys.executable or, if an external PYTHON_ROOT environment
             outdir = self.configs[kind].outdir
             buildtarget = self.configs[kind].buildtarget
 
-            def xmlify(cmd):
-                cmd = string.replace(cmd, "&", "&") # do this first
-                cmd = string.replace(cmd, "'", "'")
-                cmd = string.replace(cmd, '"', """)
-                return cmd
-
             env_has_buildtarget = self.env.has_key('MSVSBUILDTARGET')
             if not env_has_buildtarget:
                 self.env['MSVSBUILDTARGET'] = buildtarget
             default_MSVS_SConscript = env.File('SConstruct')
         env['MSVSSCONSCRIPT'] = default_MSVS_SConscript
 
-    env['MSVSSCONS'] = '"%s" -c "%s"' % (python_executable, exec_script_main)
+    env['MSVSSCONS'] = '"%s" -c "%s"' % (python_executable, getExecScriptMain(env))
     env['MSVSSCONSFLAGS'] = '-C "${MSVSSCONSCRIPT.dir.abspath}" -f ${MSVSSCONSCRIPT.name}'
     env['MSVSSCONSCOM'] = '$MSVSSCONS $MSVSSCONSFLAGS'
     env['MSVSBUILDCOM'] = '$MSVSSCONSCOM $MSVSBUILDTARGET'
     env['GET_MSVSSOLUTIONSUFFIX']  = GetMSVSSolutionSuffix
     env['MSVSPROJECTSUFFIX']  = '${GET_MSVSPROJECTSUFFIX}'
     env['MSVSSOLUTIONSUFFIX']  = '${GET_MSVSSOLUTIONSUFFIX}'
+    env['SCONS_HOME'] = os.environ.get('SCONS_HOME')
 
 def exists(env):
     try:

File src/engine/SCons/Tool/msvs.xml

 when using earlier versions of Visual Studio.
 </summary>
 </cvar>
+
+<cvar name="SCONS_HOME">
+<summary>
+The (optional) path to the SCons library directory,
+initialized from the external environment.
+If set, this is used to construct a shorter and more
+efficient search path in the
+&cv-MSVSSCONS;
+command line executed
+from Microsoft Visual Studio project files.
+</summary>
+</cvar>

File test/QT/generated-ui.py

 Test that the UI scanning logic correctly picks up scansG
 """
 
+import os
+
 import TestSCons
 
 test = TestSCons.TestSCons()
 
+if not os.environ.get('QTDIR', None):
+    x ="External environment variable $QTDIR not set; skipping test(s).\n"
+    test.skip_test(x)
+
 test.subdir(['layer'],
             ['layer', 'aclock'],
             ['layer', 'aclock', 'qt_bug'])

File test/rebuild-generated.py

 This may be a duplicate to bug 1019683.
 """
 
+import os
 import sys
 import TestSCons
 
 
 kernelImports = env.Command(
   "KernelImport.hh", kernelImporter,
-  "./$SOURCE > $TARGET")
+  ".%s$SOURCE > $TARGET")
                                         
 osLinuxModule = env.StaticObject(
   ["target.cc"])
-""" % (generator_name, kernel_action))
+""" % (generator_name, kernel_action, os.sep))
 
 test.write('main.cc', """\
 int