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)
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" ) : 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 ) ) : 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 ) : pchobj = SCons . Util . splitext ( str ( env [ 'PCH' ] ) ) [ 0 ] + '.obj' if pchobj not in extrasources : extrasources . append ( pchobj ) if not no_import_lib and not env . FindIxes ( target , "LIBPREFIX" , "LIBSUFFIX" ) : extratargets . append ( env . ReplaceIxes ( dll , '%sPREFIX' % paramtp , '%sSUFFIX' % paramtp , "LIBPREFIX" , "LIBSUFFIX" ) ) extratargets . append ( env . ReplaceIxes ( dll , '%sPREFIX' % paramtp , '%sSUFFIX' % paramtp , "WINDOWSEXPPREFIX" , "WINDOWSEXPSUFFIX" ) ) return ( target + extratargets , source + extrasources )
Common implementation of dll emitter.