]>
git.saurik.com Git - wxWidgets.git/blob - utils/wxPython/distrib/build.py
c375b1cf3a86ab8454970d0de478bd861aa14e6d
   2 #---------------------------------------------------------------------------- 
   4 # Purpose:      This script is used to build wxPython.  It reads a build 
   5 #               configuration file in the requested project directory and 
   6 #               based on the contents of the file can build Makefiles for 
   7 #               unix or win32, and can execute make with various options 
   8 #               potentially automating the entire build/install/clean process 
   9 #               from a single command. 
  13 # Created:      18-Aug-1999 
  15 # Copyright:    (c) 1999 by Total Control Software 
  16 # Licence:      wxWindows license 
  17 #---------------------------------------------------------------------------- 
  21     This script is used to build wxPython.  It reads a build configuration 
  22     file in the requested project directory and based on the contents of 
  23     the file can build Makefiles for unix or win32, and can execute make 
  24     with various options potentially automating the entire 
  25     build/install/clean process from a single command. 
  27     The default action is to build the Makefile and exit. 
  30     -C dir        CD to dir before doing anything 
  31     -B file       Use file as the build configuration (default ./build.cfg) 
  32     -M file       Use file as the name of the makefile to create 
  35     -b            Build the module (runs make) 
  36     -i            Install the module (runs make install) 
  37     -c            Cleanup (runs make clean) 
  38     -u            Uninstall (runs make uninstall) 
  45     The build configuration file lists targets, source files and options 
  46     for the the build process.  The contents of the build.cfg are used to 
  47     dynamically generate the Makefile. 
  49     To prevent you from getting screwed when the default build.cfg is 
  50     updated, you can override the values in build.cfg by putting your 
  51     custom definitions in a file named build.local.  You can also place a 
  52     build.local file in the parent directory, or even in the grandparent 
  53     directory for project-wide overrides.  Finally, command-line arguments 
  54     of the form NAME=VALUE can also be used to override simple configuration 
  55     values.  The order of evaluation is: 
  57         0. comman-line flags (-M, -b, etc.) 
  59         2. ../../build.local   (if present) 
  60         3. ../build.local      (if present) 
  61         4. ./build.local       (if present) 
  62         5. command-line NAME=VALUEs 
  64     The config files are actually just Python files that get exec'ed in a 
  65     separate namespace which is then used later as a configuration object. 
  66     This keeps the build script simple in that it doesn't have to parse 
  67     anything, and the config files can be much more than just names and 
  68     values as pretty much any python code can be executed.  The global 
  69     variables set in the config namespace are what are used later as 
  75     The following variables can be set in the config files.  Only a few are 
  76     required, the rest will either have suitable defaults or will be 
  77     calculated from your current Python runtime environment. 
  79     MODULE           The name of the extension module to produce 
  80     SWIGFILES        A list of files that should be run through SWIG 
  81     SWIGFLAGS        Flags for SWIG 
  82     SOURCES          Other C/C++ sources that should be part of the module 
  83     PYFILES          Other Python files that should be installed with the module 
  84     CFLAGS           Flags to be used by the compiler 
  85     LFLAGS           Flags to be used at the link step 
  86     LIBS             Libraries to be linked with 
  88     OTHERCFLAGS      Extra flags to append to CFLAGS 
  89     OTHERLFLAGS      Extra flags to append to LFLAGS 
  90     OTHERSWIGFLAGS   Extra flags to append to SWIGFLAGS 
  91     OTHERLIBS        Other libraries to be linked with, in addition to LIBS 
  92     OTHERTARGETS     Other targets to be placed on the default rule line 
  94                      Other targets to be placed on the install rule line 
  95     OTHERRULES       This text is placed at the end of the makefile and 
  96                      will typically be used for adding rules and such 
  97     DEFAULTRULE      Text to be used for the default rule in the makefile 
  99     TARGETDIR        Destination for the install step 
 101     MAKE             The make program to use 
 102     MAKEFILE         The name of the makefile 
 104     runBuild         Setting this to 1 is eqivalent to the -b flag 
 105     runInstall       Setting this to 1 is eqivalent to the -i flag 
 106     runClean         Setting this to 1 is eqivalent to the -c flag 
 107     runUninstall     Setting this to 1 is eqivalent to the -u flag 
 109     PYVERSION        Version number of Python used in pathnames 
 110     PYPREFIX         The root of the Python install 
 111     EXECPREFIX       The root of the Python install for binary files 
 112     PYTHONLIB        The Python link library 
 116 import sys
, os
, string
, getopt
 
 118 #---------------------------------------------------------------------------- 
 119 # This is really the wxPython version number, and will be placed in the 
 120 # Makefiles for use with the distribution related targets. 
 122 __version__ 
= '2.1b3' 
 124 #---------------------------------------------------------------------------- 
 128         opts
, args 
= getopt
.getopt(args
[1:], 'C:B:M:bicu') 
 133     if not os
.environ
.has_key('WXWIN'): 
 134         print "WARNING: WXWIN is not set in the environment.  WXDIR may not\n"\
 
 135               "         be set properly in the makefile, you will have to \n"\
 
 136               "         set the environment variable or override in build.local." 
 139     bldCfgLocal  
= 'build.local' 
 140     MAKEFILE     
= 'Makefile' 
 146     for flag
, value 
in opts
: 
 147         if   flag 
== '-C':   os
.chdir(value
) 
 148         elif flag 
== '-B':   bldCfgFile 
= value
 
 149         elif flag 
== '-M':   makefile 
= value
 
 150         elif flag 
== '-b':   runBuild 
= 1 
 151         elif flag 
== '-c':   runClean 
= 1 
 152         elif flag 
== '-i':   runInstall 
= 1 
 153         elif flag 
== '-u':   runUninstall 
= 1 
 155         elif flag 
== '-h':   usage(); sys
.exit(1) 
 156         else:  usage(); sys
.exit(1) 
 158     config 
= BuildConfig(bldCfg 
= bldCfg
, 
 159                          bldCfgLocal 
= bldCfgLocal
, 
 162                          runInstall 
=  runInstall
, 
 164                          runUninstall 
= runUninstall
) 
 166     if config
.readConfigFiles(args
): 
 168         config
.makeMakefile() 
 172             cmd 
= "%s -f %s" % (config
.MAKE
, config
.MAKEFILE
) 
 173             print "Running:", cmd
 
 176         if not err 
and config
.runInstall
: 
 177             cmd 
= "%s -f %s install" % (config
.MAKE
, config
.MAKEFILE
) 
 178             print "Running:", cmd
 
 182         if not err 
and config
.runClean
: 
 183             cmd 
= "%s -f %s clean" % (config
.MAKE
, config
.MAKEFILE
) 
 184             print "Running:", cmd
 
 187         if not err 
and config
.runUninstall
: 
 188             cmd 
= "%s -f %s uninstall" % (config
.MAKE
, config
.MAKEFILE
) 
 189             print "Running:", cmd
 
 194 #---------------------------------------------------------------------------- 
 199 #---------------------------------------------------------------------------- 
 202     if sys
.platform 
!= 'win32': 
 203         st 
= string
.join(string
.split(st
, '\\'), '/') 
 206 #---------------------------------------------------------------------------- 
 209     return string
.join(string
.split(string
.strip(st
), ' '), ' \\\n\t') 
 211 #---------------------------------------------------------------------------- 
 214     def __init__(self
, **kw
): 
 215         self
.__dict
__.update(kw
) 
 218     #------------------------------------------------------------ 
 219     def setDefaults(self
): 
 220         self
.VERSION 
= __version__
 
 223         self
.SWIGFLAGS 
= '-c++ -shadow -python -keyword -dnone -I$(WXPSRCDIR)' 
 227         self
.OTHERCFLAGS 
= '' 
 228         self
.OTHERLFLAGS 
= '' 
 229         self
.OTHERSWIGFLAGS 
= '' 
 231         self
.OTHERTARGETS 
= '' 
 232         self
.OTHERINSTALLTARGETS 
= '' 
 233         self
.OTHERUNINSTALLTARGETS 
= '' 
 235         self
.DEFAULTRULE 
= 'default: $(GENCODEDIR) $(TARGET)' 
 236         self
.PYVERSION 
= sys
.version
[:3] 
 237         self
.PYPREFIX  
= sys
.prefix
 
 238         self
.EXECPREFIX 
= sys
.exec_prefix
 
 239         self
.WXDIR 
= '$(WXWIN)' 
 241         self
.WXP_USE_THREAD 
= '1' 
 242         self
.WXUSINGDLL 
= '1' 
 244         self
.WXPSRCDIR 
= '$(WXDIR)/utils/wxPython/src' 
 249         if sys
.platform 
== 'win32': 
 251             self
.PYTHONLIB 
= '$(PYPREFIX)\\libs\\python15.lib' 
 252             self
.TARGETDIR 
= '$(PYPREFIX)\\wxPython' 
 253             self
.LIBS 
= '$(PYTHONLIB) $(WXPSRCDIR)\wxc.lib' 
 254             self
.GENCODEDIR 
= 'msw' 
 255             self
.SWIGTOOLKITFLAG 
= '-D__WXMSW__' 
 257             self
.TARGET 
= '$(MODULE).pyd' 
 258             self
.CFLAGS 
= '-I$(PYPREFIX)\include -I$(WXPSRCDIR) -I. /Fp$(MODULE).pch /YXhelpers.h -DSWIG_GLOBAL -DHAVE_CONFIG_H $(THREAD) ' 
 259             self
.LFLAGS 
= '$(DEBUGLFLAGS) /DLL /subsystem:windows,3.50 /machine:I386 /nologo' 
 262             self
.OVERRIDEFLAGS 
= '/GX-' 
 263             self
.RMCMD  
= '-erase ' 
 264             self
.WXPSRCDIR 
= os
.path
.normpath(self
.WXPSRCDIR
) 
 269             self
.PYLIB     
= '$(EXECPREFIX)/lib/python$(PYVERSION)' 
 270             self
.LIBPL     
= '$(PYLIB)/config' 
 271             self
.PYTHONLIB 
= '$(LIBPL)/libpython$(PYVERSION).a' 
 272             self
.TARGETDIR 
= '$(EXECPREFIX)/lib/python$(PYVERSION)/site-packages/wxPython' 
 273             self
.TARGET 
= '$(MODULE)module$(SO)' 
 275             self
.HELPERLIB 
= 'wxPyHelpers' 
 276             self
.HELPERLIBDIR 
= '/usr/local/lib' 
 277             self
.CFLAGS 
= '-DSWIG_GLOBAL -DHAVE_CONFIG_H $(THREAD) -I. '\
 
 278                           '`wx-config --cflags` -I$(PYINCLUDE) -I$(EXECINCLUDE) '\
 
 280             self
.LFLAGS 
= '-L$(WXPSRCDIR) `wx-config --libs`' 
 281             self
.LIBS   
= '-l$(HELPERLIB)' 
 282             self
.RMCMD  
= '-rm -f ' 
 284             # **** What to do when I start supporting Motif, etc.??? 
 285             self
.GENCODEDIR 
= 'gtk' 
 286             self
.SWIGTOOLKITFLAG 
= '-D__WXGTK__' 
 288             # Extract a few things from Python's Makefile... 
 290                 filename 
= os
.path
.join(self
.EXECPREFIX
, 
 291                                         'lib/python'+self
.PYVERSION
, 
 293                 mfText 
= string
.split(open(filename
, 'r').read(), '\n') 
 295                 raise SystemExit, "Python development files not found" 
 297             self
.CCC 
= self
.findMFValue(mfText
, 'CCC') 
 298             self
.CC 
= self
.findMFValue(mfText
, 'CC') 
 299             self
.OPT 
= self
.findMFValue(mfText
, 'OPT') 
 300             self
.SO 
= self
.findMFValue(mfText
, 'SO') 
 301             self
.LDSHARED 
= self
.findMFValue(mfText
, 'LDSHARED') 
 302             self
.CCSHARED 
= self
.findMFValue(mfText
, 'CCSHARED') 
 303             #self.LINKFORSHARED = self.findMFValue(mfText, 'LINKFORSHARED') 
 304             #self. = self.findMFValue(mfText, '') 
 305             #self. = self.findMFValue(mfText, '') 
 308             # The majority of cases will require LDSHARED to be 
 309             # modified to use the C++ driver instead of the C driver 
 310             # for linking.  We'll try to do it here and if we goof up 
 311             # then the user can correct it in their build.local file. 
 312             self
.LDSHARED 
= string
.join(['$(CCC)'] + 
 313                                         string
.split(self
.LDSHARED
, ' ')[1:], 
 317     #------------------------------------------------------------ 
 319         # This is called after the config files have been evaluated 
 320         # so we can do some sanity checking... 
 321         if sys
.platform 
!= 'win32': 
 323                 print "Warning: C++ compiler not specified (CCC). Assuming c++" 
 326                 print "Warning: C compiler not specified (CC). Assuming cc" 
 329     #------------------------------------------------------------ 
 330     def findMFValue(self
, mfText
, st
): 
 331         # Find line begining with st= and return the value 
 332         # Regex would probably be to cooler way to do this, but 
 333         # I think this is the most understandable. 
 335             if string
.find(line
, st
+'=') == 0: 
 336                 st 
= string
.strip(line
[len(st
)+1:]) 
 340     #------------------------------------------------------------ 
 341     def makeMakefile(self
): 
 343         # make a list of object file names 
 345         for name 
in self
.SWIGFILES
: 
 346             objects 
= objects 
+ os
.path
.splitext(name
)[0] + self
.OBJEXT 
+ ' ' 
 347         for name 
in self
.SOURCES
: 
 348             obj 
= os
.path
.basename(name
) 
 349             objects 
= objects 
+ os
.path
.splitext(obj
)[0] + self
.OBJEXT 
+ ' ' 
 350         self
.OBJECTS 
= splitlines(objects
) 
 353         # now build the text for the dependencies 
 355         for name 
in self
.SWIGFILES
: 
 356             rootname 
= os
.path
.splitext(name
)[0] 
 357             text 
= '$(GENCODEDIR)/%s.cpp $(GENCODEDIR)/%s.py : %s.i %s\n' \
 
 358                    '$(TARGETDIR)\\%s.py : $(GENCODEDIR)\\%s.py\n' % \
 
 359                    (rootname
, rootname
, rootname
, self
.SWIGDEPS
, rootname
, rootname
) 
 360             depends 
= depends 
+ text
 
 362                 text 
= '%s%s : %s\n' % \
 
 363                        (os
.path
.splitext(name
)[0], self
.OBJEXT
, self
.OTHERDEPS
) 
 364                 depends 
= depends 
+ text
 
 365         for name 
in self
.PYFILES
: 
 366             text 
= '$(TARGETDIR)\\%s.py : %s.py\n' % \
 
 367                    tuple([os
.path
.splitext(name
)[0]] * 2) 
 368             depends 
= depends 
+ text
 
 370             for name 
in self
.SOURCES
: 
 371                 name 
= os
.path
.basename(name
) 
 372                 text 
= '%s%s : %s\n' % \
 
 373                        (os
.path
.splitext(name
)[0], self
.OBJEXT
, self
.OTHERDEPS
) 
 374                 depends 
= depends 
+ text
 
 376         self
.DEPENDS 
= swapslash(depends
) 
 379         # and the list of .py files 
 381         for name 
in self
.SWIGFILES
: 
 382             pymodules 
= pymodules 
+ '$(TARGETDIR)\\%s.py ' % os
.path
.splitext(name
)[0] 
 383         for name 
in self
.PYFILES
: 
 384             pymodules 
= pymodules 
+ '$(TARGETDIR)\\%s.py ' % os
.path
.splitext(name
)[0] 
 385         self
.PYMODULES 
= splitlines(swapslash(pymodules
)) 
 388         # now make a list of the python files that would need uninstalled 
 390         for name 
in self
.SWIGFILES
: 
 391             pycleanup 
= pycleanup 
+ self
.makeCleanupList(name
) 
 392         for name 
in self
.PYFILES
: 
 393             pycleanup 
= pycleanup 
+ self
.makeCleanupList(name
) 
 394         self
.PYCLEANUP 
= swapslash(pycleanup
) 
 397         # finally, build the makefile 
 398         if sys
.platform 
== 'win32': 
 400                 self
.RESFILE 
= '$(MODULE).res' 
 401                 self
.RESRULE 
= '$(MODULE).res : $(MODULE).rc $(WXDIR)\\include\\wx\\msw\\wx.rc\n\t'\
 
 402                                '$(rc) -r /i$(WXDIR)\\include -fo$@ $(MODULE).rc' 
 403             text 
= win32Template 
% self
.__dict
__ 
 405             text 
= unixTemplate 
% self
.__dict
__ 
 406         f 
= open(self
.MAKEFILE
, 'w') 
 410         print "Makefile created: ", self
.MAKEFILE
 
 414     #------------------------------------------------------------ 
 415     def makeCleanupList(self
, name
): 
 417         st 
= st 
+ '\t%s$(TARGETDIR)\\%s.py\n' % (self
.RMCMD
, os
.path
.splitext(name
)[0]) 
 418         st 
= st 
+ '\t%s$(TARGETDIR)\\%s.pyc\n' % (self
.RMCMD
, os
.path
.splitext(name
)[0]) 
 419         st 
= st 
+ '\t%s$(TARGETDIR)\\%s.pyo\n' % (self
.RMCMD
, os
.path
.splitext(name
)[0]) 
 423     #------------------------------------------------------------ 
 424     def readConfigFiles(self
, args
): 
 425         return self
.processFile(self
.bldCfg
, 1) and \
 
 426                self
.processFile(os
.path
.join('../..', self
.bldCfgLocal
)) and \
 
 427                self
.processFile(os
.path
.join('..', self
.bldCfgLocal
)) and \
 
 428                self
.processFile(os
.path
.join('.', self
.bldCfgLocal
)) and \
 
 429                self
.processArgs(args
) 
 431     #------------------------------------------------------------ 
 432     def processFile(self
, filename
, required
=0): 
 434             text 
= open(filename
, 'r').read() 
 437                 print "Unable to open %s" % filename
 
 443             exec(text
, self
.__dict
__) 
 445             print "Error evaluating %s" % filename
 
 447             traceback
.print_exc() 
 452     #------------------------------------------------------------ 
 453     def processArgs(self
, args
): 
 456                 pair 
= string
.split(st
, '=') 
 459                 self
.__dict
__[name
] = value
 
 461             print "Error parsing command-line: %s" % st
 
 467     #------------------------------------------------------------ 
 473 #---------------------------------------------------------------------------- 
 474 #---------------------------------------------------------------------------- 
 475 #---------------------------------------------------------------------------- 
 478 #---------------------------------------------------------------------- 
 479 # This makefile was autogenerated from build.py.  Your changes will be 
 480 # lost if the generator is run again.  You have been warned. 
 481 #---------------------------------------------------------------------- 
 484 VERSION = %(VERSION)s 
 486 SWIGFLAGS = %(SWIGFLAGS)s %(SWIGTOOLKITFLAG)s %(OTHERSWIGFLAGS)s 
 489 PYVERSION = %(PYVERSION)s 
 490 PYPREFIX = %(PYPREFIX)s 
 491 EXECPREFIX = %(EXECPREFIX)s 
 492 PYTHONLIB = %(PYTHONLIB)s 
 494 WXP_USE_THREAD = %(WXP_USE_THREAD)s 
 495 WXUSINGDLL = %(WXUSINGDLL)s 
 496 GENCODEDIR = %(GENCODEDIR)s 
 497 RESFILE = %(RESFILE)s 
 498 WXPSRCDIR = %(WXPSRCDIR)s 
 501 TARGETDIR = %(TARGETDIR)s 
 503 OBJECTS = %(OBJECTS)s 
 504 PYMODULES = %(PYMODULES)s 
 510 !if "$(FINAL)" == "0" 
 511 DEBUGLFLAGS = /DEBUG /INCREMENTAL:YES 
 513 DEBUGLFLAGS = /INCREMENTAL:NO 
 515 !if "$(WXP_USE_THREAD)" == "1" 
 516 THREAD=-DWXP_USE_THREAD=1 
 523 OVERRIDEFLAGS=%(OVERRIDEFLAGS)s 
 524 EXTRAFLAGS = $(CFLAGS) %(OTHERCFLAGS)s 
 526 LFLAGS = %(LFLAGS)s %(OTHERLFLAGS)s 
 527 EXTRALIBS = %(LIBS)s %(OTHERLIBS)s 
 529 #---------------------------------------------------------------------- 
 531 !include $(WXDIR)\\src\\makevc.env 
 533 #---------------------------------------------------------------------- 
 535 %(DEFAULTRULE)s %(OTHERTARGETS)s 
 539 install: $(TARGETDIR) $(TARGETDIR)\\$(TARGET) pycfiles %(OTHERINSTALLTARGETS)s 
 555 uninstall: %(OTHERUNINSTALLTARGETS)s 
 556         -erase $(TARGETDIR)\\$(TARGET) 
 560 #---------------------------------------------------------------------- 
 561 # implicit rule for compiling .cpp and .c files 
 564 $(CPPFLAGS) /c /Tp $< 
 567 {$(GENCODEDIR)}.cpp{}.obj: 
 569 $(CPPFLAGS) /c /Tp $< 
 579 # Implicit rules to run SWIG 
 580 {}.i{$(GENCODEDIR)}.cpp: 
 581         swig $(SWIGFLAGS) -c -o $@ $< 
 583 {}.i{$(GENCODEDIR)}.py: 
 584         swig $(SWIGFLAGS) -c -o $(GENCODEDIR)\\tmp_wrap.cpp $< 
 585         -erase $(GENCODEDIR)\\tmp_wrap.cpp 
 588 {$(GENCODEDIR)}.py{$(TARGETDIR)}.py: 
 591 {}.py{$(TARGETDIR)}.py: 
 594 #---------------------------------------------------------------------- 
 596 $(TARGET) : $(DUMMYOBJ) $(WXLIB) $(OBJECTS) $(RESFILE) 
 599 $(LFLAGS) /def:$(MODULE).def /implib:./$(MODULE).lib 
 600 $(DUMMYOBJ) $(OBJECTS) $(RESFILE) 
 608 $(TARGETDIR)\\$(TARGET) : $(TARGET) 
 612 pycfiles : $(PYMODULES) 
 613         $(EXECPREFIX)\\python $(PYPREFIX)\\Lib\\compileall.py -l $(TARGETDIR) 
 614         $(EXECPREFIX)\\python -O $(PYPREFIX)\Lib\\compileall.py -l $(TARGETDIR) 
 623 #---------------------------------------------------------------------- 
 627 #---------------------------------------------------------------------- 
 640 #---------------------------------------------------------------------------- 
 641 #---------------------------------------------------------------------------- 
 642 #---------------------------------------------------------------------------- 
 645 #---------------------------------------------------------------------- 
 646 # This makefile was autogenerated from build.py.  Your changes will be 
 647 # lost if the generator is run again.  You have been warned. 
 648 #---------------------------------------------------------------------- 
 653 VERSION = %(VERSION)s 
 655 SWIGFLAGS = %(SWIGFLAGS)s %(SWIGTOOLKITFLAG)s %(OTHERSWIGFLAGS)s 
 656 CFLAGS = %(CFLAGS)s $(OPT) %(OTHERCFLAGS)s 
 657 LFLAGS = %(LFLAGS)s %(OTHERLFLAGS)s 
 658 LIBS = %(LIBS)s %(OTHERLIBS)s 
 659 PYVERSION = %(PYVERSION)s 
 660 PYPREFIX = %(PYPREFIX)s 
 661 EXECPREFIX = %(EXECPREFIX)s 
 662 PYINCLUDE = $(PYPREFIX)/include/python$(PYVERSION) 
 663 EXECINCLUDE = $(EXECPREFIX)/include/python$(PYVERSION) 
 666 PYTHONLIB = %(PYTHONLIB)s 
 668 WXP_USE_THREAD = %(WXP_USE_THREAD)s 
 669 GENCODEDIR = %(GENCODEDIR)s 
 670 WXPSRCDIR = %(WXPSRCDIR)s 
 671 HELPERLIB = %(HELPERLIB)s 
 672 HELPERLIBDIR = %(HELPERLIBDIR)s 
 674 TARGETDIR = %(TARGETDIR)s 
 681 LDSHARED = %(LDSHARED)s 
 682 CCSHARED = %(CCSHARED)s 
 685 OBJECTS = %(OBJECTS)s 
 686 PYMODULES = %(PYMODULES)s 
 690 ifeq ($(WXP_USE_THREAD), 1) 
 691 THREAD=-DWXP_USE_THREAD 
 694 #---------------------------------------------------------------------- 
 696 %(DEFAULTRULE)s %(OTHERTARGETS)s 
 698 install: $(TARGETDIR) $(TARGETDIR)/$(TARGET) pycfiles %(OTHERINSTALLTARGETS)s 
 704 uninstall: %(OTHERUNINSTALLTARGETS)s 
 705         -rm -f $(TARGETDIR)/$(TARGET) 
 709 #---------------------------------------------------------------------- 
 712         $(CCC) $(CCSHARED) $(CFLAGS) $(OTHERCFLAGS) -c $< 
 714 %%.o : $(GENCODEDIR)/%%.cpp 
 715         $(CCC) $(CCSHARED) $(CFLAGS) $(OTHERCFLAGS) -c $< 
 718         $(CC) $(CCSHARED) $(CFLAGS) $(OTHERCFLAGS) -c $< 
 720 %%.o : $(GENCODEDIR)/%%.c 
 721         $(CC) $(CCSHARED) $(CFLAGS) $(OTHERCFLAGS) -c $< 
 723 $(GENCODEDIR)/%%.cpp : %%.i 
 724         swig $(SWIGFLAGS) -c -o $@ $< 
 726 $(GENCODEDIR)/%%.py : %%.i 
 727         swig $(SWIGFLAGS) -c -o $(GENCODEDIR)/tmp_wrap.cpp $< 
 728         rm $(GENCODEDIR)/tmp_wrap.cpp 
 733 $(TARGETDIR)/%% : $(GENCODEDIR)/%% 
 736 #---------------------------------------------------------------------- 
 740 #---------------------------------------------------------------------- 
 742 $(TARGET) : $(OBJECTS) 
 743         $(LDSHARED) $(OBJECTS) $(LFLAGS) $(LIBS) $(OTHERLIBS) -o $(TARGET) 
 747 pycfiles : $(PYMODULES) 
 748         $(EXECPREFIX)/bin/python $(PYLIB)/compileall.py -l $(TARGETDIR) 
 749         $(EXECPREFIX)/bin/python -O $(PYLIB)/compileall.py -l $(TARGETDIR) 
 758 #---------------------------------------------------------------------- 
 768 #---------------------------------------------------------------------------- 
 770 if __name__ 
== '__main__': 
 773 #----------------------------------------------------------------------------