--- 000/setup.py	2020-06-20 14:41:31.583265800 +0300
+++ 001/setup.py	2020-06-20 17:41:06.998916300 +0300
@@ -1006,12 +1009,12 @@
         # need at this stage.
         if sys.version_info > (2, 7) and sys.version_info < (3, 3):
             # only stuff built with msvc9 needs this loader.
-            self._build_pycom_loader()
-        self._build_scintilla()
+            #self._build_pycom_loader()
+            pass
+        #self._build_scintilla()
         # Copy cpp lib files needed to create Python COM extensions
-        clib_files = (['win32', 'pywintypes%s.lib'],
-                      ['win32com', 'pythoncom%s.lib'],
-                      ['win32com', 'axscript%s.lib'])
+        clib_files = (['win32', 'pywintypes%s.def'],
+                      ['win32com', 'pythoncom%s.def'])
         for clib_file in clib_files:
             target_dir = os.path.join(self.build_lib, clib_file[0], "libs")
             if not os.path.exists(target_dir):
@@ -1041,20 +1041,6 @@
             mfc_version = "vc140"
             mfc_libraries = ["mfc140u.dll", "mfcm140u.dll"]
 
-        mfc_contents = self.lookupMfcInVisualStudio(mfc_version, mfc_libraries)
-        if not mfc_contents:
-            print("Can't find MFC contents in VisualStudio. Looking into WinSxS now..")
-            mfc_contents = self.lookupMfcInWinSxS(mfc_version, mfc_libraries)
-
-        if not mfc_contents:
-            raise RuntimeError("No MFC files found!")
-
-        for mfc_content in mfc_contents:
-            shutil.copyfile(mfc_content,
-                            os.path.join(target_dir, os.path.split(mfc_content)[1]),
-                            )
-
-
     def build_exefile(self, ext):
         sources = ext.sources
         if sources is None or type(sources) not in (list, tuple):
@@ -1917,6 +1920,6 @@
                     """ % dirs).split(),
                     depends=["%(internet)s/internet_pch.h" % dirs]),
-    WinExt_win32com('mapi', libraries="advapi32", pch_header="PythonCOM.h",
+    WinExt_win32com('mapi', libraries="advapi32 SKIP", pch_header="PythonCOM.h",
                     include_dirs=["%(mapi)s/mapi_headers" % dirs],
                     sources=("""
                         %(mapi)s/mapi.i                 %(mapi)s/mapi.cpp
@@ -2041,6 +2045,6 @@
                         """ % dirs).split()),
 
-    WinExt_win32com('propsys', libraries='propsys', delay_load_libraries='shell32',
+    WinExt_win32com('propsys', libraries='propsys SKIP', delay_load_libraries='shell32',
                     unicode_mode=True,
                     sources=("""
                         %(propsys)s/propsys.cpp
@@ -2122,6 +2127,7 @@
 
 pythonwin_extensions = [
     WinExt_pythonwin("win32ui",
+        libraries="SKIP",
         sources = [
             "Pythonwin/dbgthread.cpp",
             "Pythonwin/dibapi.cpp",
@@ -2225,6 +2231,7 @@
             ],
         optional_headers=['afxres.h']),
     WinExt_pythonwin("win32uiole",
+        libraries="SKIP",
         sources = [
             "Pythonwin/stdafxole.cpp",
             "Pythonwin/win32oleDlgInsert.cpp",
@@ -2242,6 +2249,7 @@
         windows_h_version = 0x500,
         optional_headers=['afxres.h']),
     WinExt_pythonwin("dde",
+        libraries="SKIP",
         sources = [
             "Pythonwin/stddde.cpp",
             "Pythonwin/ddetopic.cpp",
@@ -2292,6 +2300,7 @@
          unicode_mode = True,
          libraries = "user32 advapi32 ole32 shell32 pywintypes"),
     WinExt_pythonwin_subsys_win("Pythonwin",
+        libraries="SKIP",
         sources = [
             "Pythonwin/pythonwin.cpp",
             "Pythonwin/pythonwin.rc",
