> > Regarding building win32all from sources: > > > > I have started a distutils' style setup script for building. > > Maybe this is of interest to someone? > > > > Yes, this would be nice. It would then be much simpler for people like me > that straddle the Windows/Unix fence <ouch!> Attached. This is unfinished work, probably it has to hacked to get it to work. Thomas
# win32-all build script # Tested for CVS-version with tag b132 # directory where HTML Help is installed, used to # generate an include and lib directory htmlhelp_dir = r'c:/HTML Help Workshop' from distutils.core import setup, Extension, Command from distutils.command.install import install from distutils.command.build_ext import build_ext from distutils.dep_util import newer_group import os class WinExt (Extension): # Base class for all win32 extensions, with # predefined library and include dirs, # and predefined windows libraries def __init__ (self, name, sources, include_dirs=[], define_macros=None, undef_macros=None, library_dirs=[], libraries=[], runtime_library_dirs=None, extra_objects=None, extra_compile_args=None, extra_link_args=None, export_symbols=None, export_symbol_file=None ): library_dirs = ['build/temp.win32'] + library_dirs include_dirs = ['com/win32com/src/include', 'win32/src'] + include_dirs libraries = ['user32', 'odbc32', 'advapi32', 'oleaut32', 'ole32', 'shell32'] + libraries Extension.__init__ (self, name, sources, include_dirs, define_macros, undef_macros, library_dirs, libraries, runtime_library_dirs, extra_objects, extra_compile_args, extra_link_args, export_symbols) scintilla = WinExt('scintilla', ['PythonWin/Scintilla/win32/ScintillaWin.cxx', 'PythonWin/Scintilla/src/ScintillaBase.cxx', 'PythonWin/Scintilla/src/Editor.cxx', 'PythonWin/Scintilla/src/Document.cxx', 'PythonWin/Scintilla/src/ContractionState.cxx', 'PythonWin/Scintilla/src/CellBuffer.cxx', 'PythonWin/Scintilla/src/CallTip.cxx', 'PythonWin/Scintilla/win32/PlatWin.cxx', 'PythonWin/Scintilla/src/KeyMap.cxx', 'PythonWin/Scintilla/src/Indicator.cxx', 'PythonWin/Scintilla/src/LineMarker.cxx', 'PythonWin/Scintilla/src/Style.cxx', 'PythonWin/Scintilla/src/ViewStyle.cxx', 'PythonWin/Scintilla/src/AutoComplete.cxx', 'PythonWin/Scintilla/src/UniConversion.cxx', 'PythonWin/Scintilla/src/KeyWords.cxx', 'PythonWin/Scintilla/src/DocumentAccessor.cxx', 'PythonWin/Scintilla/src/PropSet.cxx', 'PythonWin/Scintilla/src/LexCPP.cxx', 'PythonWin/Scintilla/src/LexHTML.cxx', 'PythonWin/Scintilla/src/LexOthers.cxx', 'PythonWin/Scintilla/src/LexPerl.cxx', 'PythonWin/Scintilla/src/LexPython.cxx', 'PythonWin/Scintilla/src/LexSQL.cxx', 'PythonWin/Scintilla/src/LexVB.cxx', 'PythonWin/Scintilla/win32/ScintRes.rc', ], include_dirs = ['PythonWin/Scintilla/include', 'PythonWin/Scintilla/src',], libraries = ['gdi32', 'imm32', 'comctl32'], extra_compile_args = ['-DSCI_LEXER'], ) pythonwin = WinExt('pythonwin', ['PythonWin/pythonwin.cpp', 'PythonWin/pythonwin.rc', 'PythonWin/stdafxpw.cpp'], extra_compile_args = ['-D_MBCS', '-D_AFXDLL'], extra_link_args = ['/subsystem:windows']) dll_files = [scintilla] exe_files = [pythonwin] axdebug = WinExt('axdebug', [#'com/win32comext/axdebug/src/AXDebug.cpp', 'com/win32comext/axdebug/src/PyIActiveScriptDebug.cpp', 'com/win32comext/axdebug/src/PyIActiveScriptErrorDebug.cpp', 'com/win32comext/axdebug/src/PyIActiveScriptSiteDebug.cpp', 'com/win32comext/axdebug/src/PyIApplicationDebugger.cpp', 'com/win32comext/axdebug/src/PyIDebugApplication.cpp', 'com/win32comext/axdebug/src/PyIDebugApplicationNode.cpp', 'com/win32comext/axdebug/src/PyIDebugApplicationNodeEvents.cpp', 'com/win32comext/axdebug/src/PyIDebugApplicationThread.cpp', 'com/win32comext/axdebug/src/PyIDebugCodeContext.cpp', 'com/win32comext/axdebug/src/PyIDebugDocument.cpp', 'com/win32comext/axdebug/src/PyIDebugDocumentContext.cpp', 'com/win32comext/axdebug/src/PyIDebugDocumentHelper.cpp', 'com/win32comext/axdebug/src/PyIDebugDocumentHost.cpp', 'com/win32comext/axdebug/src/PyIDebugDocumentInfo.cpp', 'com/win32comext/axdebug/src/PyIDebugDocumentProvider.cpp', 'com/win32comext/axdebug/src/PyIDebugDocumentText.cpp', 'com/win32comext/axdebug/src/PyIDebugDocumentTextAuthor.cpp', 'com/win32comext/axdebug/src/PyIDebugDocumentTextEvents.cpp', 'com/win32comext/axdebug/src/PyIDebugDocumentTextExternalAuthor.cpp', 'com/win32comext/axdebug/src/PyIDebugExpression.cpp', 'com/win32comext/axdebug/src/PyIDebugExpressionCallBack.cpp', 'com/win32comext/axdebug/src/PyIDebugExpressionContext.cpp', 'com/win32comext/axdebug/src/PyIDebugProperties.cpp', 'com/win32comext/axdebug/src/PyIDebugSessionProvider.cpp', 'com/win32comext/axdebug/src/PyIDebugStackFrame.cpp', 'com/win32comext/axdebug/src/PyIDebugStackFrameSniffer.cpp', 'com/win32comext/axdebug/src/PyIDebugStackFrameSnifferEx.cpp', 'com/win32comext/axdebug/src/PyIDebugSyncOperation.cpp', 'com/win32comext/axdebug/src/PyIEnumDebugApplicationNodes.cpp', 'com/win32comext/axdebug/src/PyIEnumDebugCodeContexts.cpp', 'com/win32comext/axdebug/src/PyIEnumDebugExpressionContexts.cpp', 'com/win32comext/axdebug/src/PyIEnumDebugPropertyInfo.cpp', 'com/win32comext/axdebug/src/PyIEnumDebugStackFrames.cpp', 'com/win32comext/axdebug/src/PyIEnumRemoteDebugApplications.cpp', 'com/win32comext/axdebug/src/PyIEnumRemoteDebugApplicationThreads.cpp', 'com/win32comext/axdebug/src/PyIMachineDebugManager.cpp', 'com/win32comext/axdebug/src/PyIMachineDebugManagerEvents.cpp', 'com/win32comext/axdebug/src/PyIProcessDebugManager.cpp', 'com/win32comext/axdebug/src/PyIProvideExpressionContexts.cpp', 'com/win32comext/axdebug/src/PyIRemoteDebugApplication.cpp', 'com/win32comext/axdebug/src/PyIRemoteDebugApplicationEvents.cpp', 'com/win32comext/axdebug/src/PyIRemoteDebugApplicationThread.cpp', 'com/win32comext/axdebug/src/stdafx.cpp'], libraries = ['msgdbg'] ) #adsi = Extension('adsi', []) axscript = WinExt('win32comext.axscript.axscript', ['com/win32comext/AXScript/src/AXScript.cpp', 'com/win32comext/AXScript/src/GUIDS.cpp', 'com/win32comext/AXScript/src/PyGActiveScript.cpp', 'com/win32comext/AXScript/src/PyGActiveScriptError.cpp', 'com/win32comext/AXScript/src/PyGActiveScriptParse.cpp', 'com/win32comext/AXScript/src/PyGActiveScriptSite.cpp', 'com/win32comext/AXScript/src/PyGObjectSafety.cpp', 'com/win32comext/AXScript/src/PyIActiveScript.cpp', 'com/win32comext/AXScript/src/PyIActiveScriptError.cpp', 'com/win32comext/AXScript/src/PyIActiveScriptParse.cpp', 'com/win32comext/AXScript/src/PyIActiveScriptParseProcedure.cpp', 'com/win32comext/AXScript/src/PyIActiveScriptSite.cpp', 'com/win32comext/AXScript/src/PyIMultiInfos.cpp', 'com/win32comext/AXScript/src/PyIObjectSafety.cpp', 'com/win32comext/AXScript/src/stdafx.cpp', ], extra_compile_args = ['-DWIDEOLE', '-DPY_BUILD_AXSCRIPT'], ) dbi = WinExt('dbi', ['win32/src/dbi.cpp',], export_symbol_file = 'win32/src/dbi.def', ) dde = WinExt('dde', ['win32/src/stddde.cpp', 'win32/src/ddeconv.cpp', 'win32/src/ddeitem.cpp', 'win32/src/ddemodule.cpp', 'win32/src/ddeserver.cpp', 'win32/src/ddetopic.cpp', ], include_dirs = ['PythonWin'], extra_compile_args = ['-D_AFXDLL', '-D_AFXEXT', '-D_MBCS'], ) #exchange = WinExt('exchange', []) #exchdapi = WinExt('exchdapi', []) internet = WinExt('internet', ['com/win32comext/internet/src/internet.cpp', 'com/win32comext/internet/src/PyIInternetBindInfo.cpp', 'com/win32comext/internet/src/PyIInternetPriority.cpp', 'com/win32comext/internet/src/PyIInternetProtocol.cpp', 'com/win32comext/internet/src/PyIInternetProtocolInfo.cpp', 'com/win32comext/internet/src/PyIInternetProtocolRoot.cpp', 'com/win32comext/internet/src/PyIInternetProtocolSink.cpp', ], ) mmapfile = WinExt('mmapfile', ['win32/src/mmapfilemodule.cpp'], ) odbc = WinExt('odbc', ['win32/src/odbc.cpp'], ) perfmon = WinExt('perfmon', ['win32/src/perfmon/MappingManager.cpp', 'win32/src/perfmon/PerfCounterDefn.cpp', 'win32/src/perfmon/PerfObjectType.cpp', 'win32/src/perfmon/PyPerfMon.cpp', ], extra_compile_args = ['-D_UNICODE', '-DUNICODE'], ) perfmondata = WinExt('perfmondata', ['win32/src/perfmon/PyPerfMsgs.mc', 'win32/src/perfmon/perfmondata.cpp'], export_symbol_file = 'win32/src/perfmon/perfmondata.def', extra_compile_args = ['-D_UNICODE', '-DUNICODE'], ) #pythonserviceexe pywintypes = WinExt('pywintypes', ['win32/src/PyACL.cpp', 'win32/src/PyHandle.cpp', 'win32/src/PyIID.cpp', 'win32/src/PyLARGE_INTEGER.cpp', 'win32/src/PyOVERLAPPED.cpp', 'win32/src/PySECURITY_ATTRIBUTES.cpp', 'win32/src/PySECURITY_DESCRIPTOR.cpp', 'win32/src/PySID.cpp', 'win32/src/PyTime.cpp', 'win32/src/PyUnicode.cpp', 'win32/src/PyWinTypesmodule.cpp', ], extra_compile_args = ['-DBUILD_PYWINTYPES'] ) shell = WinExt('shell', ['com/win32comext/shell/src/PyIShellLink.cpp', 'com/win32comext/shell/src/shell.cpp', ], ) timer = WinExt('timer', ['win32/src/timermodule.cpp'], ) univgw = WinExt('univgw', ['com/win32comext/univgw/src/dataconv.cpp', 'com/win32comext/univgw/src/univgw.cpp', ], ) win32api = WinExt('win32api', ['win32/src/win32apimodule.cpp'] ) win32clipboard = WinExt('win32clipboard', ['win32/src/win32clipboardmodule.cpp'] ) # source directories for win32com com_src = 'com/win32com/src/' com_ext = 'com/win32com/src/extensions/' win32com = WinExt('pythoncom', [com_src + 'dllmain.cpp', com_src + 'ErrorUtils.cpp', com_src + 'MiscTypes.cpp', com_src + 'oleargs.cpp', com_src + 'PyComHelpers.cpp', com_src + 'PyFactory.cpp', com_src + 'PyGatewayBase.cpp', com_src + 'PyIBase.cpp', com_src + 'PyIClassFactory.cpp', com_src + 'PyIDispatch.cpp', com_src + 'PyIUnknown.cpp', com_src + 'PyRecord.cpp', com_src + 'PyStorage.cpp', com_src + 'PythonCOM.cpp', com_src + 'Register.cpp', com_src + 'stdafx.cpp', com_ext + 'PyFUNCDESC.cpp', com_ext + 'PyGConnectionPoint.cpp', com_ext + 'PyGConnectionPointContainer.cpp', com_ext + 'PyGEnumVariant.cpp', com_ext + 'PyGErrorLog.cpp', com_ext + 'PyGPersist.cpp', com_ext + 'PyGPersistPropertyBag.cpp', com_ext + 'PyGPersistStorage.cpp', com_ext + 'PyGPersistStream.cpp', com_ext + 'PyGPersistStreamInit.cpp', com_ext + 'PyGPropertyBag.cpp', com_ext + 'PyGStream.cpp', com_ext + 'PyIBindCtx.cpp', com_ext + 'PyICatInformation.cpp', com_ext + 'PyICatRegister.cpp', com_ext + 'PyIConnectionPoint.cpp', com_ext + 'PyIConnectionPointContainer.cpp', com_ext + 'PyICreateTypeInfo.cpp', com_ext + 'PyICreateTypeLib.cpp', com_ext + 'PyIEnumCATEGORYINFO.cpp', com_ext + 'PyIEnumConnectionPoints.cpp', com_ext + 'PyIEnumConnections.cpp', com_ext + 'PyIEnumGUID.cpp', com_ext + 'PyIEnumSTATPROPSTG.cpp', com_ext + 'PyIEnumSTATSTG.cpp', com_ext + 'PyIEnumVariant.cpp', com_ext + 'PyIErrorLog.cpp', com_ext + 'PyIExternalConnection.cpp', com_ext + 'PyILockBytes.cpp', com_ext + 'PyIMoniker.cpp', com_ext + 'PyIPersist.cpp', com_ext + 'PyIPersistFile.cpp', com_ext + 'PyIPersistPropertyBag.cpp', com_ext + 'PyIPersistStorage.cpp', com_ext + 'PyIPersistStream.cpp', com_ext + 'PyIPersistStreamInit.cpp', com_ext + 'PyIPropertyBag.cpp', com_ext + 'PyIPropertySetStorage.cpp', com_ext + 'PyIPropertyStorage.cpp', com_ext + 'PyIprovideClassInfo.cpp', com_ext + 'PyIRunningObjectTable.cpp', com_ext + 'PyIServiceProvider.cpp', com_ext + 'PyIStorage.cpp', com_ext + 'PyIStream.cpp', com_ext + 'PyIType.cpp', com_ext + 'PyITypeObjects.cpp', com_ext + 'PyTYPEATTR.cpp', com_ext + 'PyVARDESC.cpp', ], export_symbol_file = 'com/win32com/src/PythonCOM.def', extra_compile_args = ['-DBUILD_PYTHONCOM'], ) win32event = WinExt('win32event', ['win32/src/win32event.i', ], include_dirs = ['Hallo'], ) win32evtlog = WinExt('win32evtlog', ['win32/src/win32evtlog_messages.mc', 'win32/src/win32evtlog.i', ], ) win32file = WinExt('win32file', ['win32/src/win32file.i']) win32gui = WinExt('win32gui', ['win32/src/win32gui.i'], libraries = ['comdlg32', 'gdi32', 'comctl32']) win32help = WinExt('win32help', ['win32/src/win32helpmodule.cpp'], include_dirs = [htmlhelp_dir + '/include'], library_dirs = [htmlhelp_dir + '/lib'], libraries = ['htmlhelp'] ) win32lz = WinExt('win32lz', ['win32/src/win32lzmodule.cpp'], libraries = ['lz32']) win32net = WinExt('win32net', ['win32/src/win32net/win32netgroup.cpp', 'win32/src/win32net/win32netmisc.cpp', 'win32/src/win32net/win32netmodule.cpp', 'win32/src/win32net/win32netuse.cpp', 'win32/src/win32net/win32netuser.cpp'], libraries = ['netapi32'], extra_compile_args = ['-D_UNICODE', '-DUNICODE']) win32pdh = WinExt('win32pdh', ['win32/src/win32pdhmodule.cpp']) win32pipe = WinExt('win32pipe', ['win32/src/win32pipe.i', 'win32/src/win32popen.cpp']) win32print = WinExt('win32print', ['win32/src/win32print/win32print.cpp'], libraries = ['winspool']) win32process = WinExt('win32process', ['win32/src/win32process.i']) win32ras = WinExt('win32ras', ['win32/src/win32rasmodule.cpp'], libraries = ['rasapi32']) win32security = WinExt('win32security', ['win32/src/win32security.i']) win32service = WinExt('win32service', ['win32/src/win32service_messages.mc', 'win32/src/win32service.i', ], extra_compile_args = ['-D_UNICODE', '-DUNICODE'], ) win32trace = WinExt('win32trace', ['win32/src/win32trace.cpp']) win32ui = WinExt('win32ui', ['PythonWin/dbgthread.cpp', 'PythonWin/dibapi.cpp', 'PythonWin/dllmain.cpp', 'PythonWin/pythondoc.cpp', 'PythonWin/pythonppage.cpp', 'PythonWin/pythonpsheet.cpp', 'PythonWin/pythonRichEditCntr.cpp', 'PythonWin/pythonRichEditDoc.cpp', 'PythonWin/pythonview.cpp', 'PythonWin/stdafx.cpp', 'PythonWin/win32app.cpp', 'PythonWin/win32assoc.cpp', 'PythonWin/win32bitmap.cpp', 'PythonWin/win32brush.cpp', 'PythonWin/win32cmd.cpp', 'PythonWin/win32cmdui.cpp', 'PythonWin/win32context.cpp', 'PythonWin/win32control.cpp', 'PythonWin/win32ctledit.cpp', 'PythonWin/win32ctrlList.cpp', 'PythonWin/win32ctrlRichEdit.cpp', 'PythonWin/win32ctrlTree.cpp', 'PythonWin/win32dc.cpp', 'PythonWin/win32dlg.cpp', 'PythonWin/win32dlgbar.cpp', ## 'PythonWin/win32dlgdyn.cpp', 'PythonWin/win32dll.cpp', 'PythonWin/win32doc.cpp', 'PythonWin/win32font.cpp', 'PythonWin/win32gdi.cpp', 'PythonWin/win32ImageList.cpp', 'PythonWin/win32menu.cpp', 'PythonWin/win32notify.cpp', 'PythonWin/win32pen.cpp', 'PythonWin/win32prinfo.cpp', 'PythonWin/win32prop.cpp', 'PythonWin/win32rgn.cpp', 'PythonWin/win32RichEdit.cpp', 'PythonWin/win32RichEditDocTemplate.cpp', 'PythonWin/win32splitter.cpp', 'PythonWin/win32template.cpp', 'PythonWin/win32thread.cpp', 'PythonWin/win32toolbar.cpp', 'PythonWin/win32tooltip.cpp', 'PythonWin/win32uimodule.cpp', 'PythonWin/win32util.cpp', 'PythonWin/win32view.cpp', 'PythonWin/win32virt.cpp', 'PythonWin/win32win.cpp', 'PythonWin/win32ui.rc', ], extra_compile_args = ['-DBUILD_PYW', '-D_WINDLL', '-D_AFXDLL', '-D_AFXEXT', '-GX'], # enable C++ exception handling ) win32uiole = WinExt('win32uiole', ['PythonWin/stdafxole.cpp', 'PythonWin/win32oleDlgInsert.cpp', 'PythonWin/win32oleDlgs.cpp', 'PythonWin/win32uiole.cpp', 'PythonWin/win32uioleClientItem.cpp', 'PythonWin/win32uioledoc.cpp'], extra_compile_args = ['-D_MBCS', '-D_AFXDLL'] ) win32wnet = WinExt('win32wnet', ['win32/src/win32wnet/PyNCB.cpp', 'win32/src/win32wnet/PyNetresource.cpp', 'win32/src/win32wnet/win32wnet.cpp'], libraries = ['netapi32', 'mpr'], extra_compile_args = ['-D_UNICODE', '-DUNICODE'], ) ext_modules = [pywintypes, win32ui, win32com, # dbi, # odbc, mmapfile, timer, dde, shell, univgw, internet, perfmon, perfmondata, win32api, win32clipboard, win32event, win32file, win32gui, win32help, win32lz, win32net, win32pdh, win32pipe, #win32popenWin9x, win32print, win32ras, win32process, win32security, win32service, win32trace, win32uiole, win32wnet, #win32cerapi, scintilla, axscript, ## axdebug, ] # code fr COM registration copied and hacked from win32com/scripts/regsetup.py(?) # List of COM Servers to be registered by the Win32 stuff com_servers = [\ ("AXScript Engine", "win32com.axscript.client.pyscript", "Register"), ("Python Interpreter", "win32com.servers.interp", "Register"), ("Python Dictionary", "win32com.servers.dictionary", "Register"), ] def RegisterCOMServer(desc, module, function, cmdlineList): import string, sys mod = __import__(module) for attr in string.split(module, ".")[1:]: mod = getattr(mod, attr) fn = getattr(mod, function) sys.argv = ['setup.py',] + list (cmdlineList) fn() user_options = [('name=', None, "your first name"), ('message=', 'm', "message to print")] class register (Command): user_options = [('unregister', 'u', 'Unregister Servers')] def initialize_options (self): self.unregister = 0 def finalize_options (self): pass def run (self): if self.unregister: options = ['--unregister'] else: options = [] for desc, module, function in com_servers: RegisterCOMServer (desc, module, function, options) # class register class my_install (install): def run (self): install.run (self) self.copy_file (os.path.join (self.install_lib, "pythoncom.pyd"), "c:\\winnt\\system32\\pythoncom.pyd") os.remove (os.path.join (self.install_lib, "pythoncom.pyd")) self.copy_file (os.path.join (self.install_lib, "pywintypes.pyd"), "c:\\winnt\\system32\\pywintypes.pyd") os.remove (os.path.join (self.install_lib, "pywintypes.pyd")) class my_build_ext (build_ext): def run (self): build_ext.run (self) self.build_dlls() self.build_exes() def build_dlls (self): for target in dll_files: sources = target.sources ext_filename = os.path.join (self.build_lib, target.name + '.dll') if not (self.force or newer_group(sources, ext_filename, 'newer')): self.announce ("skipping '%s' (up-to-date)" % target.name) return else: self.announce ("building '%s'" % target.name) extra_args = target.extra_compile_args objects = self.compiler.compile (sources, output_dir=self.build_temp, #macros=macros, include_dirs=target.include_dirs, debug=self.debug, extra_postargs=extra_args) extra_args = target.extra_link_args self.compiler.link_shared_object( objects, ext_filename, libraries=target.libraries, library_dirs=target.library_dirs, #runtime_library_dirs=ext.runtime_library_dirs, extra_postargs=extra_args, debug=self.debug) def build_exes (self): for target in exe_files: sources = target.sources ext_filename = os.path.join (self.build_lib, target.name) if not (self.force or newer_group(sources, ext_filename + '.exe', 'newer')): self.announce ("skipping '%s' (up-to-date)" % target.name) return else: self.announce ("building '%s'" % target.name) extra_args = target.extra_compile_args objects = self.compiler.compile (sources, output_dir=self.build_temp, #macros=macros, include_dirs=target.include_dirs, debug=self.debug, extra_postargs=extra_args) extra_args = target.extra_link_args self.compiler.link_executable( objects, ext_filename, libraries=target.libraries, library_dirs=target.library_dirs, #runtime_library_dirs=ext.runtime_library_dirs, extra_postargs=extra_args, debug=self.debug) # class my_build_ext setup(name="win32all", version="b132", description="Mark Hammond's windows extensions", long_description="", author="Mark Hammond", author_email = "???", url="http://starship.python.net/crew/mhammond/", license="???", cmdclass = {#'install': myinstall, 'register': register, 'build_ext': my_build_ext, 'install': my_install, }, ext_modules = ext_modules, data_files = [('pywin', ['PythonWin/readme.html', 'PythonWin/pywin/default.cfg', 'PythonWin/pywin/IDLE.cfg'] )], package_dir = {'win32com': 'com/win32com', 'win32comext': 'com/win32comext',\ 'pywin': 'PythonWin/pywin', 'win32': 'win32/lib'}, packages=['win32', 'win32com', 'win32com.client', 'win32com.demos', 'win32com.makegw', 'win32com.server', 'win32com.servers', 'win32com.test', 'win32comext.axscript', 'win32comext.axscript.client', 'win32comext.axscript.server', 'win32comext.axscript.demos', # XXX not a package 'win32comext.axscript.demos.client', 'win32comext.axscript.demos.client.asp', 'win32comext.axscript.demos.client.ie', 'win32comext.axscript.demos.client.wsh', 'win32comext.axscript.test', # XXX not a package 'win32comext.axdebug', 'win32comext.axscript', 'win32comext.axscript.client', 'win32comext.axscript.server', 'pywin', 'pywin.debugger', 'pywin.dialogs', 'pywin.docking', 'pywin.framework', 'pywin.framework.editor', 'pywin.framework.editor.color', 'pywin.idle', 'pywin.mfc', 'pywin.scintilla', 'pywin.tools', ], )