code: def solutionEmitter(target, source, env):
      if source[0] == target[0]:
          source = []
      (base, suff) = SCons.Util.splitext(str(target[0]))
      suff = env.subst('$MSVSSOLUTIONSUFFIX')
      target[0] = base + suff
      if not source:
          source = 'sln_inputs:'
          if 'name' in env:
              if SCons.Util.is_String(env['name']):
                  source = source + ' "%s"' % env['name']
              else:
                  raise SCons.Errors.InternalError("name must be a string")
          if 'variant' in env:
              if SCons.Util.is_String(env['variant']):
                  source = source + ' "%s"' % env['variant']
              elif SCons.Util.is_List(env['variant']):
                  for variant in env['variant']:
                      if SCons.Util.is_String(variant):
                          source = source + ' "%s"' % variant
                      else:
                          raise SCons.Errors.InternalError("name must be a string or a list of strings")
              else:
                  raise SCons.Errors.InternalError("variant must be a string or a list of strings")
          else:
              raise SCons.Errors.InternalError("variant must be specified")
          if 'slnguid' in env:
              if SCons.Util.is_String(env['slnguid']):
                  source = source + ' "%s"' % env['slnguid']
              else:
                  raise SCons.Errors.InternalError("slnguid must be a string")
          if 'projects' in env:
              if SCons.Util.is_String(env['projects']):
                  source = source + ' "%s"' % env['projects']
              elif SCons.Util.is_List(env['projects']):
                  for t in env['projects']:
                      if SCons.Util.is_String(t):
                          source = source + ' "%s"' % t
          source = source + ' "%s"' % str(target[0])
          source = [SCons.Node.Python.Value(source)]
      return ([target[0]], source)