code: def generate(env):
      
      gnulink.generate(env)
  
      env['LINKFLAGS']   = SCons.Util.CLVar('-Wl,-no-undefined')
  
      env['SHLINKCOM'] = shlib_action
      env['LDMODULECOM'] = ldmod_action
      env.Append(SHLIBEMITTER = [shlib_emitter])
      env.Append(LDMODULEEMITTER = [ldmod_emitter])
  
      env['SHLIBPREFIX']         = 'cyg'
      env['SHLIBSUFFIX']         = '.dll'
  
      env['IMPLIBPREFIX']        = 'lib'
      env['IMPLIBSUFFIX']        = '.dll.a'
  
      # Variables used by versioned shared libraries
      env['_SHLIBVERSIONFLAGS']      = '$SHLIBVERSIONFLAGS'
      env['_LDMODULEVERSIONFLAGS']   = '$LDMODULEVERSIONFLAGS'
  
      # SHLIBVERSIONFLAGS and LDMODULEVERSIONFLAGS are same as in gnulink...
  
      # LINKCALLBACKS are NOT inherited from gnulink
      env['LINKCALLBACKS'] = {
          'VersionedShLibSuffix'          : _versioned_lib_suffix,
          'VersionedLdModSuffix'          : _versioned_lib_suffix,
          'VersionedImpLibSuffix'         : _versioned_lib_suffix,
          'VersionedShLibName'            : link._versioned_shlib_name,
          'VersionedLdModName'            : link._versioned_ldmod_name,
          'VersionedShLibImpLibName'      : lambda *args: _versioned_implib_name(*args, libtype='ShLib'),
          'VersionedLdModImpLibName'      : lambda *args: _versioned_implib_name(*args, libtype='LdMod'),
          'VersionedShLibImpLibSymlinks'  : lambda *args: _versioned_implib_symlinks(*args, libtype='ShLib'),
          'VersionedLdModImpLibSymlinks'  : lambda *args: _versioned_implib_symlinks(*args, libtype='LdMod'),
      }
  
      # these variables were set by gnulink but are not used in cyglink
      try: del env['_SHLIBSONAME']
      except KeyError: pass
      try: del env['_LDMODULESONAME']
      except KeyError: pass
docs: Add Builders and construction variables for cyglink to an Environment.