> > 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',
                ],
      )

Reply via email to