parameters: (target, source, env, paramtp)
return_statement: return (target+extratargets, source+extrasources)
docstring: Common implementation of dll emitter.
docstring_summary: Common implementation of dll emitter.
docstring_tokens: Common implementation of dll emitter .
function: def _dllEmitter(target, source, env, paramtp):
      """Common implementation of dll emitter."""
      SCons.Tool.msvc.validate_vars(env)
  
      extratargets = []
      extrasources = []
  
      dll = env.FindIxes(target, '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp)
      no_import_lib = env.get('no_import_lib', 0)
  
      if not dll:
          raise SCons.Errors.UserError('A shared library should have exactly one target with the suffix: %s' % env.subst('$%sSUFFIX' % paramtp))
  
      insert_def = env.subst("$WINDOWS_INSERT_DEF")
      if not insert_def in ['', '0', 0] and \
         not env.FindIxes(source, "WINDOWSDEFPREFIX", "WINDOWSDEFSUFFIX"):
  
          # append a def file to the list of sources
          extrasources.append(
              env.ReplaceIxes(dll,
                              '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
                              "WINDOWSDEFPREFIX", "WINDOWSDEFSUFFIX"))
  
      version_num, suite = SCons.Tool.msvs.msvs_parse_version(env.get('MSVS_VERSION', '6.0'))
      if version_num >= 8.0 and \
              (env.get('WINDOWS_INSERT_MANIFEST', 0) or env.get('WINDOWS_EMBED_MANIFEST', 0)):
          # MSVC 8 and above automatically generate .manifest files that must be installed
          extratargets.append(
              env.ReplaceIxes(dll,
                              '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
                              "WINDOWSSHLIBMANIFESTPREFIX", "WINDOWSSHLIBMANIFESTSUFFIX"))
  
      if 'PDB' in env and env['PDB']:
          pdb = env.arg2nodes('$PDB', target=target, source=source)[0]
          extratargets.append(pdb)
          target[0].attributes.pdb = pdb
  
      if version_num >= 11.0 and env.get('PCH', 0):
          # MSVC 11 and above need the PCH object file to be added to the link line,
          # otherwise you get link error LNK2011.
          pchobj = SCons.Util.splitext(str(env['PCH']))[0] + '.obj'
          # print "prog_emitter, version %s, appending pchobj %s"%(version_num, pchobj)
          if pchobj not in extrasources:
              extrasources.append(pchobj)
  
      if not no_import_lib and \
         not env.FindIxes(target, "LIBPREFIX", "LIBSUFFIX"):
          # Append an import library to the list of targets.
          extratargets.append(
              env.ReplaceIxes(dll,
                              '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
                              "LIBPREFIX", "LIBSUFFIX"))
          # and .exp file is created if there are exports from a DLL
          extratargets.append(
              env.ReplaceIxes(dll,
                              '%sPREFIX' % paramtp, '%sSUFFIX' % paramtp,
                              "WINDOWSEXPPREFIX", "WINDOWSEXPSUFFIX"))
  
      return (target+extratargets, source+extrasources)
function_tokens: def _dllEmitter ( target , source , env , paramtp ) : SCons . Tool . msvc . validate_vars ( env ) extratargets = [ ] extrasources = [ ] dll = env . FindIxes ( target , '%sPREFIX' % paramtp , '%sSUFFIX' % paramtp ) no_import_lib = env . get ( 'no_import_lib' , 0 ) if not dll : raise SCons . Errors . UserError ( 'A shared library should have exactly one target with the suffix: %s' % env . subst ( '$%sSUFFIX' % paramtp ) ) insert_def = env . subst ( "$WINDOWS_INSERT_DEF" ) if not insert_def in [ '' , '0' , 0 ] and not env . FindIxes ( source , "WINDOWSDEFPREFIX" , "WINDOWSDEFSUFFIX" ) : # append a def file to the list of sources extrasources . append ( env . ReplaceIxes ( dll , '%sPREFIX' % paramtp , '%sSUFFIX' % paramtp , "WINDOWSDEFPREFIX" , "WINDOWSDEFSUFFIX" ) ) version_num , suite = SCons . Tool . msvs . msvs_parse_version ( env . get ( 'MSVS_VERSION' , '6.0' ) ) if version_num >= 8.0 and ( env . get ( 'WINDOWS_INSERT_MANIFEST' , 0 ) or env . get ( 'WINDOWS_EMBED_MANIFEST' , 0 ) ) : # MSVC 8 and above automatically generate .manifest files that must be installed extratargets . append ( env . ReplaceIxes ( dll , '%sPREFIX' % paramtp , '%sSUFFIX' % paramtp , "WINDOWSSHLIBMANIFESTPREFIX" , "WINDOWSSHLIBMANIFESTSUFFIX" ) ) if 'PDB' in env and env [ 'PDB' ] : pdb = env . arg2nodes ( '$PDB' , target = target , source = source ) [ 0 ] extratargets . append ( pdb ) target [ 0 ] . attributes . pdb = pdb if version_num >= 11.0 and env . get ( 'PCH' , 0 ) : # MSVC 11 and above need the PCH object file to be added to the link line, # otherwise you get link error LNK2011. pchobj = SCons . Util . splitext ( str ( env [ 'PCH' ] ) ) [ 0 ] + '.obj' # print "prog_emitter, version %s, appending pchobj %s"%(version_num, pchobj) if pchobj not in extrasources : extrasources . append ( pchobj ) if not no_import_lib and not env . FindIxes ( target , "LIBPREFIX" , "LIBSUFFIX" ) : # Append an import library to the list of targets. extratargets . append ( env . ReplaceIxes ( dll , '%sPREFIX' % paramtp , '%sSUFFIX' % paramtp , "LIBPREFIX" , "LIBSUFFIX" ) ) # and .exp file is created if there are exports from a DLL extratargets . append ( env . ReplaceIxes ( dll , '%sPREFIX' % paramtp , '%sSUFFIX' % paramtp , "WINDOWSEXPPREFIX" , "WINDOWSEXPSUFFIX" ) ) return ( target + extratargets , source + extrasources )