home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / py2s152.zip / PC / os2vacpp / makefile < prev    next >
Makefile  |  1999-06-27  |  14KB  |  365 lines

  1. ######################################################################
  2. #
  3. #          Top-Level Makefile for Building Python for OS/2
  4. #
  5. # This makefile was developed for use with IBM's VisualAge C/C++
  6. # for OS/2 compiler, version 3.0, with Fixpack 8 applied.  It uses
  7. # version 4.0 of the NMAKE tool that comes with that package.
  8. #
  9. # The output of the build is a largish Python15.DLL containing the
  10. # essential modules of Python and a small Python.exe program to start
  11. # the interpreter.  When embedding Python within another program, only
  12. # Python15.DLL is needed.
  13. #
  14. # These two binaries can be statically linked with the VisualAge C/C++
  15. # runtime library (producing larger binaries), or dynamically linked
  16. # to make smaller ones that require the compiler to be installed on
  17. # any system Python is used on.  Review the /Gd+ compiler option for
  18. # how to do this.
  19. #
  20. # NOTE: IBM's NMAKE 4.0 is rather dumb, requiring this makefile to
  21. #       be much more complicated than necessary.  I use OpusMAKE
  22. #       myself for a much more powerful MAKE tool but not everyone
  23. #       wishes to buy it.  However, as a result I didn't hook in
  24. #       the dependencies on the include files as NMAKE has no easy
  25. #       way to do this without explicitly spelling it all out.
  26. #
  27. # History (Most Recent First)
  28. #
  29. # 27-Jun-99 jrr Retested and adjusted for building w/Python 1.5.2
  30. # 24-Mar-99 jrr Retested and adjusted for building w/Python 1.5.2b1
  31. # 26-Sep-98 jrr Retested and adjusted for building w/Python 1.5.2a1
  32. # 20-Nov-97 jrr Cleaned Up for Applying to Distribution
  33. # 29-Oct-97 jrr Modified for Use with Python 1.5 Alpha 4
  34. # 03-Aug-96 jrr Original for Use with Python 1.4 Release
  35. #
  36. ######################################################################
  37.  
  38. ###################
  39. # Places and Things
  40. ###################
  41. PY_MODULES      = ..\..\Modules
  42. PY_OBJECTS      = ..\..\Objects
  43. PY_PARSER       = ..\..\Parser
  44. PY_PYTHON       = ..\..\Python
  45. PY_INCLUDE      = ..\..\Include
  46.  
  47. PY_INCLUDES     = .;$(PY_INCLUDE);$(PY_MODULES);$(PY_OBJECTS);$(PY_PARSER);$(PY_PYTHON)
  48.  
  49. # File to Collect Wordy Compiler Output re Errors
  50. ERRS        = make.out
  51.  
  52. # Where to Find the IBM TCP/IP Socket Includes and Libraries
  53. OS2TCPIP        = C:\MPTN
  54.  
  55. # Where to Put the .OBJ Files, To Keep Them Out of the Way
  56. PATHOBJ        = obj
  57.  
  58. # Search Path for Include Files
  59. PROJINCLUDE    = .;$(OS2TCPIP)\Include;$(PY_INCLUDES)
  60.  
  61. # Place to Search for Sources re OpusMAKE Dependency Generator (Commercial)
  62. MKMF_SRCS    = $(PY_MODULES)\*.c $(PY_OBJECTS)\*.c $(PY_PARSER)\*.c $(PY_PYTHON)\*.c
  63.  
  64. OTHERLIBS    = $(OS2TCPIP)\lib\so32dll.lib $(OS2TCPIP)\lib\tcp32dll.lib
  65.  
  66. #################
  67. # Inference Rules
  68. #################
  69. {$(PY_MODULES)\}.c{$(PATHOBJ)\}.obj:    # Compile C Code into a .OBJ File
  70.     @ Echo Compiling $<
  71.     @ $(CC) -c $(CFLAGS) -Fo$@ $< >>$(ERRS)
  72.  
  73. {$(PY_OBJECTS)\}.c{$(PATHOBJ)\}.obj:    # Compile C Code into a .OBJ File
  74.     @ Echo Compiling $<
  75.     @ $(CC) -c $(CFLAGS) -Fo$@ $< >>$(ERRS)
  76.  
  77. {$(PY_PARSER)\}.c{$(PATHOBJ)\}.obj:    # Compile C Code into a .OBJ File
  78.     @ Echo Compiling $<
  79.     @ $(CC) -c $(CFLAGS) -Fo$@ $< >>$(ERRS)
  80.  
  81. {$(PY_PYTHON)\}.c{$(PATHOBJ)\}.obj:    # Compile C Code into a .OBJ File
  82.     @ Echo Compiling $<
  83.     @ $(CC) -c $(CFLAGS) -Fo$@ $< >>$(ERRS)
  84.  
  85. .c{$(PATHOBJ)\}.obj:            # Compile C Code into a .OBJ File
  86.     @ Echo Compiling $<
  87.     @ $(CC) -c $(CFLAGS) -Fo$@ $< >>$(ERRS)
  88.  
  89. ###################
  90. # Python Subsystems
  91. ###################
  92.  
  93. # PYTHON is the central core, containing the builtins and interpreter.
  94. PYTHON        =                               \
  95.                   $(PATHOBJ)\BltinModule.obj    \
  96.                   $(PATHOBJ)\CEval.obj          \
  97.                   $(PATHOBJ)\Compile.obj        \
  98.                   $(PATHOBJ)\Errors.obj         \
  99.                   $(PATHOBJ)\Frozen.obj         \
  100.                   $(PATHOBJ)\Getargs.obj        \
  101.                   $(PATHOBJ)\GetCompiler.obj    \
  102.                   $(PATHOBJ)\GetCopyright.obj   \
  103.                   $(PATHOBJ)\GetMTime.obj       \
  104.                   $(PATHOBJ)\GetOpt.obj         \
  105.                   $(PATHOBJ)\GetPlatform.obj    \
  106.                   $(PATHOBJ)\GetVersion.obj     \
  107.                   $(PATHOBJ)\GramInit.obj       \
  108.                   $(PATHOBJ)\Import.obj         \
  109.                   $(PATHOBJ)\ImportDL.obj       \
  110.                   $(PATHOBJ)\Marshal.obj        \
  111.                   $(PATHOBJ)\ModSupport.obj     \
  112.                   $(PATHOBJ)\MyStrtoul.obj      \
  113.                   $(PATHOBJ)\PyState.obj        \
  114.                   $(PATHOBJ)\PythonRun.obj      \
  115.                   $(PATHOBJ)\StructMember.obj   \
  116.                   $(PATHOBJ)\SysModule.obj      \
  117.                   $(PATHOBJ)\Thread.obj         \
  118.                   $(PATHOBJ)\TraceBack.obj      \
  119.                   $(PATHOBJ)\FrozenMain.obj
  120.  
  121. # Python's Internal Parser
  122. PARSER        =                              \
  123.                   $(PATHOBJ)\Acceler.obj       \
  124.                   $(PATHOBJ)\Grammar1.obj      \
  125.                   $(PATHOBJ)\MyReadline.obj    \
  126.                   $(PATHOBJ)\Node.obj          \
  127.                   $(PATHOBJ)\Parser.obj        \
  128.                   $(PATHOBJ)\ParseTok.obj      \
  129.                   $(PATHOBJ)\Tokenizer.obj
  130.  
  131. # Python Object Types
  132. OBJECTS        =                              \
  133.                   $(PATHOBJ)\Abstract.obj      \
  134.                   $(PATHOBJ)\BufferObject.obj  \
  135.                   $(PATHOBJ)\ClassObject.obj   \
  136.                   $(PATHOBJ)\CObject.obj       \
  137.                   $(PATHOBJ)\ComplexObject.obj \
  138.                   $(PATHOBJ)\DictObject.obj    \
  139.                   $(PATHOBJ)\FileObject.obj    \
  140.                   $(PATHOBJ)\FloatObject.obj   \
  141.                   $(PATHOBJ)\FrameObject.obj   \
  142.                   $(PATHOBJ)\FuncObject.obj    \
  143.                   $(PATHOBJ)\IntObject.obj     \
  144.                   $(PATHOBJ)\ListObject.obj    \
  145.                   $(PATHOBJ)\LongObject.obj    \
  146.                   $(PATHOBJ)\MethodObject.obj  \
  147.                   $(PATHOBJ)\ModuleObject.obj  \
  148.                   $(PATHOBJ)\Object.obj        \
  149.                   $(PATHOBJ)\RangeObject.obj   \
  150.                   $(PATHOBJ)\SliceObject.obj   \
  151.                   $(PATHOBJ)\StringObject.obj  \
  152.                   $(PATHOBJ)\TupleObject.obj   \
  153.                   $(PATHOBJ)\TypeObject.obj
  154.  
  155. # Extension Modules (Built-In or as Separate DLLs)
  156. MODULES        =                               \
  157.                   $(PATHOBJ)\ArrayModule.obj    \
  158.                   $(PATHOBJ)\BinAscii.obj       \
  159.                   $(PATHOBJ)\CMathModule.obj    \
  160.                   $(PATHOBJ)\cPickle.obj        \
  161.                   $(PATHOBJ)\cStringIO.obj      \
  162.                   $(PATHOBJ)\ErrnoModule.obj    \
  163.                   $(PATHOBJ)\GetBuildInfo.obj   \
  164.                   $(PATHOBJ)\GetPathP.obj       \
  165.                   $(PATHOBJ)\Main.obj           \
  166.                   $(PATHOBJ)\MathModule.obj     \
  167.                   $(PATHOBJ)\MD5c.obj           \
  168.                   $(PATHOBJ)\MD5Module.obj      \
  169.                   $(PATHOBJ)\NewModule.obj      \
  170.                   $(PATHOBJ)\Operator.obj       \
  171.                   $(PATHOBJ)\ParserModule.obj   \
  172.                   $(PATHOBJ)\_LocaleModule.obj  \
  173.                   $(PATHOBJ)\PCREModule.obj     \
  174.                   $(PATHOBJ)\PyPCRE.obj         \
  175.                   $(PATHOBJ)\RotorModule.obj    \
  176.                   $(PATHOBJ)\PosixModule.obj    \
  177.                   $(PATHOBJ)\RegexModule.obj    \
  178.                   $(PATHOBJ)\RegExpr.obj        \
  179.                   $(PATHOBJ)\SelectModule.obj   \
  180.                   $(PATHOBJ)\ShaModule.obj      \
  181.                   $(PATHOBJ)\SignalModule.obj   \
  182.                   $(PATHOBJ)\SocketModule.obj   \
  183.                   $(PATHOBJ)\SoundEx.obj        \
  184.                   $(PATHOBJ)\StropModule.obj    \
  185.                   $(PATHOBJ)\StructModule.obj   \
  186.                   $(PATHOBJ)\TimeModule.obj     \
  187.                   $(PATHOBJ)\ThreadModule.obj   \
  188.                   $(PATHOBJ)\YUVConvert.obj
  189.  
  190. # Standalone Parser Generator Program (Shares Some of Python's Modules)
  191. #PGEN            =                              \
  192. #                  $(PATHOBJ)\PGenMain.obj      \
  193. #                  $(PATHOBJ)\PGen.obj          \
  194. #                  $(PATHOBJ)\PrintGrammar.obj  \
  195. #                  $(PATHOBJ)\ListNode.obj      \
  196. #                  $(PATHOBJ)\Grammar.obj       \
  197. #                  $(PATHOBJ)\BitSet.obj        \
  198. #                  $(PATHOBJ)\FirstSets.obj     \
  199. #                  $(PATHOBJ)\MetaGrammar.obj
  200.  
  201. ##################
  202. # Macros and Flags
  203. ##################
  204. _BASE        = /Q /W2 /I$(PROJINCLUDE)
  205.         # /Q   = Omit IBM Copyright
  206.         # /W2  = Show Warnings/Errors Only
  207.         # /W3  = Show All Informationals/Warnings/Errors
  208.         # /Fi  = Create Precompiled Headers
  209.         # /Si  = Utilize Precompiled Headers
  210.  
  211. _GEN        = /G4 /Gm /Gd- /B"/STACK:360000"
  212.         # /G4  = Generate Code for 486 (Use 386 for Debugger)
  213.         # /Gm  = Use Multithread Runtime
  214.         # /Gd  = Dynamically Load Runtime
  215.         # /Gs  = Remove Code for Stack Probes
  216.         # /Gx  = Remove C++ Exception-Handling Info
  217.         # /Tdp = Generate Code for C++ Templates
  218.         # /Rn  = Generate Code without a Runtime
  219.         # /Ms  = Use _System Calling Convention (vs _Optlink)
  220.         #        (to allow non-VAC++ code to call into Python15.dll)
  221.         # /B"/STACK:n" = Set Stack Size
  222.  
  223. _OPT        = /O /Gl
  224.         # /O   = Enable Speed-Optimizations
  225.         # /Ol  = Pass Code Thru Intermediate Linker
  226.         # /Gu  = Advise Linker All Ext Data is ID'd
  227.         # /Gl  = Have Linker Remove Unused Fns
  228.  
  229. _DBG        = /Wpro- /Ti- /DHAVE_CONFIG_H /DUSE_SOCKET
  230.                 # /Wall= Generate All Compiler Warnings
  231.                 # /Wpro= Generate Compiler Warnings re Missing Prototypes
  232.         # /Ti  = Embed Debugger/Analyzer Recs
  233.         # /Tm  = Enable Debug Memory Fns
  234.         # /Tx  = Request Full Dump Upon Exception
  235.         # /DHAVE_CONFIG_H = Causes Use of CONFIG.H Settings
  236.                 # /DUSE_SOCKET = Enables Building In of Socket API
  237.  
  238. _OUT        = /B"/NOE"
  239.         # /Fb  = Embed Browser Recs
  240.         # /Gh  = Generate Code for Profiler Hooks
  241.         # /Fl  = Output C/C++ Listing Files
  242.                 # /Lf  = Provide Full (Detailed) Listing Files
  243.         # /Fm. = Output Linker Map File
  244.         # /Ft. = Output C++ Template Resolution Files
  245.  
  246. _MAP        = /FmNoise\$(@R).map
  247.  
  248. _DLL        = /Ge-
  249. _EXE        = /Ge
  250.         # /Ge = Create an EXE, not DLL
  251.  
  252. CFLAGS        = $(_BASE) $(_GEN) $(_OPT) $(_DBG) $(_OUT) $(_EXE) /Ss
  253.  
  254. ###################
  255. # Primary Target(s)
  256. ###################
  257. All:  obj noise PyCore.lib Python15.lib Python.exe PythonPM.exe Python15.dll
  258.  
  259. Modules: $(MODULES)
  260. Objects: $(OBJECTS)
  261. Parser:  $(PARSER)
  262. Python:  $(PYTHON)
  263.  
  264. # Directory to Keep .OBJ Files Out of the Way
  265. obj:
  266.     @-mkdir obj >>NUL
  267.  
  268. # Directory to Keep .MAP and Such Text Files Out of the Way
  269. noise:
  270.     @-mkdir noise >>NUL
  271.  
  272. ##############
  273. #
  274. ##############
  275.  
  276. # Object Library of All Essential Python Routines
  277. PyCore.lib: $(MODULES) $(OBJECTS) $(PARSER) $(PYTHON) $(PATHOBJ)\Config.obj
  278.     @ Echo Adding Updated Object Files to Link Library $@
  279.     @ ! ILIB $@ /NOLOGO /NOBACKUP -+$? ; >>$(ERRS)
  280.  
  281. Python15.dll: $(PATHOBJ)\Compile.obj PyCore.lib Python.def
  282.     @ Echo Linking $@ As DLL
  283.     @ $(CC) $(CFLAGS) /B"/NOE" $(_DLL) /Fe$@ $(_MAP) $** $(OTHERLIBS) >>$(ERRS)
  284.     @ Echo Compressing $@ with LxLite
  285.     @ lxlite $@
  286.  
  287. # IBM Linker Requires One Explicit .OBJ To Build a .DLL from a .LIB
  288. $(PATHOBJ)\Compile.obj: $(PY_PYTHON)\Compile.c
  289.     @ Echo Compiling $**
  290.     @ $(CC) -c $(CFLAGS) $(_DLL) -Fo$@ $** >>$(ERRS)
  291.  
  292. # Import Library for Using the Python15.dll
  293. Python15.lib: Python.def
  294.     @ Echo Making $@
  295.     @ IMPLIB /NOLOGO /NOIGNORE $@ $** >>$(ERRS)
  296.     @ ILIB /NOLOGO /CONVFORMAT /NOEXTDICTIONARY /NOBROWSE /NOBACKUP $@; >>$(ERRS)
  297.  
  298. # Small Command-Line Program to Start Interpreter in Python15.dll
  299. Python.exe: $(PATHOBJ)\Python.obj Python15.lib
  300.     @ Echo Linking $@ As EXE
  301.     @ $(CC) $(CFLAGS) $(_EXE) /B"/PM:VIO /STACK:360000" /Fe$@ $(_MAP) $** $(OTHERLIBS) >>$(ERRS)
  302.  
  303. # Small PM-GUI Program to Start Interpreter in Python15.dll
  304. PythonPM.exe: $(PATHOBJ)\Python.obj Python15.lib
  305.     @ Echo Linking $@ As EXE
  306.     @ $(CC) $(CFLAGS) $(_EXE) /B"/PM:PM /STACK:360000" /Fe$@ $(_MAP) $** $(OTHERLIBS) >>$(ERRS)
  307.  
  308. #PGen.exe: $(PGEN) PyCore.lib
  309. #    @ Echo Linking $@ As EXE
  310. #    @ $(CC) $(CFLAGS) $(_EXE) /B"/STACK:360000" /Fe$@ $(_MAP) $** $(OTHERLIBS) >>$(ERRS)
  311.  
  312. #######################
  313. # Miscellaneous Targets
  314. #######################
  315.  
  316. # Remove Intermediate Targets but Leave Executable Binaries
  317. clean:
  318.     -- Del    $(PATHOBJ)\*.obj        >NUL 2>&1
  319.     -- Del    /Y Noise            >NUL 2>&1
  320.     -- Del    $(ERRS)            >NUL 2>&1
  321.  
  322. # Remove All Targets, Including Final Binaries
  323. distclean: clean
  324.         -- Del    PyCore.lib Python15.lib       >NUL 2>&1
  325.         -- Del    Python15.dll PGen.exe         >NUL 2>&1
  326.         -- Del    Python.exe PythonPM.exe    >NUL 2>&1
  327.  
  328. test:
  329.         python ..\..\lib\test\regrtest.py
  330.  
  331. bins:   PY2B152.ZIP PY2S152.ZIP PY2D152.ZIP
  332.  
  333. allpkg: binpkg srcpkg docpkg
  334. binpkg: PY2B152.ZIP
  335. srcpkg: PY2S152.ZIP
  336. docpkg: PY2D152.ZIP
  337.  
  338. PY2B152.ZIP: Python.exe Python15.lib Python15.dll
  339.     cd ..\..
  340.     -- Del       py2b152.zip >NUL 2>&1
  341.         zip -r -9    py2b152.zip Demo Tools Misc
  342.         zip    -9    py2b152.zip lib\*.*
  343.         zip -r -9    py2b152.zip lib\dos-8x3 lib\lib-old lib\lib-tk
  344.         zip -r -9    py2b152.zip lib\lib-dynload lib\site-packages
  345.         zip -r -9    py2b152.zip lib\plat-win lib\test
  346.     zip -j -9    py2b152.zip PC\OS2Vacpp\Python.exe PC\OS2Vacpp\*.dll
  347.     zip -j -9    py2b152.zip PC\OS2Vacpp\Python15.lib
  348.         zip -j -9    py2b152.zip NEWS README README.OS2
  349.     cd PC\OS2Vacpp
  350.  
  351. PY2S152.ZIP:
  352.     cd ..\..
  353.     -- Del       py2s152.zip >NUL 2>&1
  354.         zip -r -9    py2s152.zip Include Modules Objects Parser Python Add-Ons
  355.         zip -r -9    py2s152.zip PC -x *.obj -x *.map -x *.exe -x *.dll -x *.lib -x make.out
  356.         zip -j -9    py2s152.zip NEWS README README.OS2
  357.     cd PC\OS2Vacpp
  358.  
  359. PY2D152.ZIP:
  360.     cd ..\..
  361.     -- Del       py2d152.zip >NUL 2>&1
  362.         zip -r -9    py2d152.zip html
  363.     cd PC\OS2Vacpp
  364.  
  365.