home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gnunet10.zip / source / std.mk < prev   
Text File  |  1996-07-27  |  12KB  |  451 lines

  1. ##############################################################################
  2. #
  3. #  std.mk  (c) 1995,6 E. Krämer (ekraemer@pluto.camelot.de)
  4. #
  5. # This file is not under the GNU Copyleft.
  6. # It is Copyright (c) 1996 Ekkehard Krämer and may only be distributed  
  7. # unchanged and together with the software package it came with. 
  8. #
  9. # Provided "as is".
  10. #
  11. ##############################################################################
  12.  
  13. ##############################################################################
  14. # Allgemein                                                                  #
  15. ##############################################################################
  16. #
  17. # PROG          - Name des Executables (PROG.exe oder PROG.dll)
  18. # SRC           - Liste aller .o-Files ohne Extension
  19. # TYPE          - Typ des Programms (PM, VIO, LIBA, LIBOMF oder DLL)
  20. #                 Bei DLL wird DLL und Import-LIB (.a und .lib) erzeugt, 
  21. #                 bei LIBA eine Unix-Library (.a / .o),
  22. #                 bei LIBOMF eine OMF-Library (.lib / .obj),
  23. #                 sonst EXE
  24. #
  25. ##############################################################################
  26. # Von diesem File bereitgestellt                                             #
  27. ##############################################################################
  28. #
  29. # DEF           - Name des .def-Files ($(PROG).def, falls nicht vorbelegt)
  30. # DEFSRC        - Falls TYPE==DLL: die Def-Source-Datei, an die Exports angehängt
  31. #                 werden ($(PROG).df, falls nicht vorbelegt)
  32. # DLL           - Name der DLL ($(PROG).dll, falls nicht vorbelegt)
  33. # EXE           - Name des Exes ($(PROG).exe, falls nicht vorbelegt)
  34. # LIBA          - Name der .a  ($(PROG).a, falls nicht vorbelegt)
  35. # LIBADLL       - Name der .a LIB zur DLL ($(PROG).a, falls nicht vorbelegt)
  36. # LIBOMF        - Name der .lib ($(PROG).lib, falls nicht vorbelegt)
  37. # LIBOMFDLL     - Name der OMF-LIB zur DLL ($(PROG).lib, falls nicht vorbelegt)
  38. #
  39. # run           - Target zum Starten des EXEs, falls Typ PM oder VIO
  40. # clean         - Entfernt .o und evtl. .d / $(DEPFILE)
  41. # profile       - Startet Programm, gprof, Ausgabe in profile.txt
  42. #
  43. ##############################################################################
  44. # Optionen ('Y' für Aktiv, 'N' für Inaktiv)                                  #
  45. ##############################################################################
  46. #
  47. # ALLWARNINGS   - -Wall (Default)
  48. # AUTOTEMPLATE  - falls ==N, -fno-implicit-templates (Default)
  49. # CHECKBOUNDS   - -fbounds-checking (N. Default)
  50. # CPPLIB        - C++ library linken (N. Default)
  51. # DEBUG         - -g (N. Default)
  52. # EKLIB         - EK library linken (N. Default)
  53. # EXCEPTIONS    - -fhandle-exceptions (N. Default, deaktiviert Optimierungen)
  54. # LIBDEPS    - Pfade zu Libraries (EKLIB) - für Dependencies
  55. # M486          - -m486 (Default)
  56. # MAKEDEF       - .def File verwenden, wird angelegt, falls nicht vorhanden
  57. # MAKEDEP       - Dependencies herstellen (Default)
  58. # MAKERES       - Resourcefile PROG.res aus PROG.rc (Default, falls Type==PM)
  59. # MULTITHREAD   - -Zmt (Default, falls TYPE==PM)
  60. # NICE          - gcc auf niedrigster Priorität (Default)
  61. # NOWARNINGS    - Keine Warnungen (N. Default)
  62. # OMF           - -Zomf (Default, falls TYPE==DLL oder TYPE==LIBOMF)
  63. # OPTIMIZE      - -O3 (Default)
  64. # PROFILE       - -pg (N. Default)
  65. # PROFILEPARAMS - Parameter, die dem Executable vom profile-Target übergeben werden
  66. # QUIET         - gcc-Aufrufe nicht wiedergeben (N. Default)
  67. # RUNPARAMS     - Parameter, die dem Executable vom run-Target übergeben werden
  68. # STRIP         - -s (Fest Y, falls OMF oder !DEBUG, sonst N. Default)
  69. # USEDLL        - DLL-Versionen der C-Library verwenden (Default)
  70. # WARNERR       - -Werror (Default)
  71. #
  72. ##############################################################################
  73. # Optionale Makros                                                           #
  74. ##############################################################################
  75. #
  76. # ADDOBJS       - Weitere .o oder .lib etc. fürs Exe
  77. # ADDLIBS    - Weitere Libraries (mit Pfad, NUR FÜR DEPEDENCIES (-> LFLAGS))
  78. # CFLAGS    - Compileroptionen
  79. # DEPFILE       - Dependencies-Datei, Default=dependencies
  80. # LFLAGS    - Linkeroptionen
  81. # NEXTMAKEFILE  - Evtl. zusätzlich aufzurufendes Makefile (selbe Kommandozeilenoptionen)
  82. # RCFILE    - RC-File (Defaullt PROG.rc)
  83. # RES2          - Res-File, das an das eigentliche Resfile angehängt wird (DlgEdit!)
  84. # RESH          - Includefile(s) für Resfile (Default=ressource.h, falls MAKERES)
  85. #
  86. ##############################################################################
  87.  
  88. #
  89. # dmake options
  90. #
  91. .KEEP_STATE:
  92. .IGNORE:
  93.  
  94. #
  95. # Standard Definitions
  96. #
  97. CC              = gcc
  98. OBJ             = o
  99.  
  100. .IF $(SRC)==
  101. ERRDEFAULT      = Y
  102. default:
  103.   @echo SRC has not been defined!
  104. .ELIF $(PROG)==
  105. ERRDEFAULT      = Y
  106. default:
  107.   @echo PROG has not been defined!
  108. .ENDIF
  109.  
  110. #
  111. # Defaults
  112. #
  113. .IF $(TYPE)==
  114.   DEFAULT       += typewarning
  115.   TYPE           = VIO
  116. .ENDIF
  117.  
  118. .IF $(TYPE)==PM
  119.   MULTITHREAD   *= Y
  120.   MAKERES       *= Y
  121.   MAKEDEF       *= Y
  122.   MAKERUNTARGET  = Y
  123.   MAKEEXE        = Y
  124. .ELIF $(TYPE)==VIO
  125.   MAKERUNTARGET  = Y
  126.   MAKEEXE        = Y
  127. .ELIF $(TYPE)==DLL
  128.   OMF           *= Y
  129.   USEDLL        *= Y
  130.   LFLAGS        += -Zdll
  131.   MAKEDLL        = Y
  132.   MAKEDLLLIB     = Y
  133.   MAKEDEF        = Y
  134. .ELIF $(TYPE)==LIBA
  135.   MAKELIBA       = Y
  136. .ELIF $(TYPE)==LIBOMF
  137.   OMF           *= Y
  138.   MAKELIBOMF     = Y
  139. .ELSE
  140.   ERRDEFAULT     = Y
  141. default:
  142.   @echo Wrong type!
  143. .ENDIF
  144.  
  145. ALLWARNINGS     *= Y
  146. AUTOTEMPLATE    *= Y
  147. CHECKBOUNDS     *= N
  148. CPPLIB          *= N
  149. DEBUG           *= N
  150. EKLIB           *= N
  151. EXCEPTIONS      *= N
  152. M486            *= Y
  153. MAKEDEF         *= N
  154. MAKEDEP         *= Y
  155. MAKERES         *= N
  156. MULTITHREAD     *= N
  157. NICE            *= Y
  158. NOWARNINGS    *= N
  159. OMF             *= N
  160. OPTIMIZE        *= Y
  161. PROFILE         *= N
  162. QUIET           *= Y
  163. STRIP           *= N
  164. USEDLL          *= Y
  165. WARNERR         *= Y
  166.  
  167. #
  168. # Auswertung der Optionen
  169. #
  170. .IF $(MAKELIBOMF)==Y
  171.   LIB           *= $(PROG).lib
  172.   DEFAULT       += $(LIB)
  173. .ENDIF
  174.  
  175. .IF $(MAKELIBA)==Y
  176.   LIBA          *= $(PROG).a
  177.   DEFAULT       += $(LIBA)
  178. .ENDIF  
  179.  
  180. .IF $(MAKEDLLLIB)==Y
  181.   LIBOMFDLL     *= $(PROG).lib
  182.   LIBADLL       *= $(PROG).a
  183.   DEFAULT       += $(LIBOMFDLL) $(LIBADLL)
  184. .ENDIF
  185.  
  186. .IF $(MAKEDLL)==Y
  187.   DLL           *= $(PROG).dll
  188.   DEFAULT       += $(DLL)
  189. .ENDIF
  190.  
  191. .IF $(MAKEEXE)==Y
  192.   EXE           *= $(PROG).exe
  193.   DEFAULT       += $(EXE)
  194. .ENDIF
  195.  
  196. .IF $(MAKERES)==Y
  197.   RES          *= $(PROG).res
  198.   RESH         *= ressource.h
  199. .ENDIF
  200.  
  201. .IF $(MAKEDEF)==Y
  202.   DEF          *= $(PROG).def
  203. .IF $(TYPE)==DLL
  204.   DEFSRC       *= $(PROG).df
  205. .ENDIF
  206. .ENDIF
  207.  
  208. .IF $(MAKEDEP)==Y
  209.   DEPFILE       *= dependencies
  210.   DEFAULT       += $(DEPFILE)
  211. .ENDIF
  212.  
  213. .IF $(DEBUG)==Y
  214.   CFLAGS        += -g
  215. .ELSE
  216.   STRIP          = Y
  217. .ENDIF
  218.  
  219. .IF $(EXCEPTIONS)==Y
  220.   OPTIMIZE       = N
  221.   CFLAGS        += -fhandle-exceptions 
  222. .ENDIF
  223.  
  224. .IF $(OPTIMIZE)==Y 
  225.   CFLAGS        += -O3 
  226. .ENDIF
  227.  
  228. .IF $(MULTITHREAD)==Y
  229.   CFLAGS        += -Zmt 
  230.   LFLAGS        += -Zmt
  231. .ENDIF
  232.  
  233. .IF $(OMF)==Y
  234.   STRIP          = Y
  235.   CFLAGS        += -Zomf        
  236.   LFLAGS        += -Zomf         
  237.   OBJ            = obj
  238. .ENDIF
  239.  
  240. .IF $(STRIP)==Y
  241.   CFLAGS        += -s
  242.   LFLAGS        += -s
  243. .ENDIF
  244.         
  245. .IF $(NOWARNINGS)==Y
  246.   ALLWARNINGS     = 
  247. .ENDIF
  248.  
  249. .IF $(ALLWARNINGS)==Y
  250.   CFLAGS        += -Wall 
  251. .ENDIF
  252.  
  253. .IF $(WARNERR)==Y
  254.   CFLAGS        += -Werror 
  255. .ENDIF
  256.  
  257. .IF $(EKLIB)==Y
  258.   LFLAGS        += -L/gcc/lib -leklib
  259. .IF $(OMF)==Y
  260.   LIBDEPS    += /gcc/lib/eklib.lib
  261.   EKLIBMEMOBJ    = /gcc/lib/memcl.obj
  262. .ELSE
  263.   LIBDEPS    += /gcc/lib/eklib.a
  264.   EKLIBMEMOBJ    = /gcc/lib/memcl.o
  265. .ENDIF
  266. .ENDIF
  267.  
  268. .IF $(CPPLIB)==Y
  269.   LFLAGS        += -lgpp -lstdcpp
  270. .ENDIF
  271.  
  272. .IF $(PROFILE)==Y
  273.   CFLAGS        += -pg
  274.   LFLAGS        += -pg
  275. .ENDIF
  276.  
  277. .IF $(CHECKBOUNDS)==Y
  278.   CFLAGS        += -fbounds-checking
  279. .ENDIF
  280.  
  281. .IF $(M486)==Y
  282.   CFLAGS        += -m486
  283. .ENDIF
  284.  
  285. .IF $(NICE)==Y
  286.   NICECMD       *= nice -i -n -30
  287. .ENDIF
  288.  
  289. .IF $(AUTOTEMPLATE)==N
  290.   CFLAGS        += -fno-implicit-templates
  291. .ENDIF
  292.  
  293. .IF $(USEDLL)==Y
  294.   CFLAGS        += -Zcrtdll
  295.   LFLAGS        += -Zcrtdll
  296. .ENDIF
  297.  
  298. OBJS             = {$(SRC)}.$(OBJ)
  299. RCFILE              *= $(PROG).rc
  300.  
  301. #
  302. # Standard Rules
  303. #
  304. .IF $(QUIET)!=Y
  305. %.o : %.cpp ; $(NICECMD) $(CC) $(CFLAGS) -o $@ -c $<
  306.  
  307. %.o : %.c ; $(NICECMD) $(CC) $(CFLAGS) -o $@ -c $<
  308.  
  309. %.obj : %.cpp ; $(NICECMD) $(CC) $(CFLAGS) -o $@ -c $<
  310.  
  311. %.obj : %.c ; $(NICECMD) $(CC) $(CFLAGS) -o $@ -c $<
  312. .ELSE
  313. %.o : %.cpp ; 
  314.         @ echo Compiling $<
  315.         @ $(NICECMD) $(CC) $(CFLAGS) -o $@ -c $<
  316.  
  317. %.o : %.c ; 
  318.         @ echo Compiling $<
  319.         @ $(NICECMD) $(CC) $(CFLAGS) -o $@ -c $<
  320.  
  321. %.obj : %.cpp ; 
  322.         @ echo Compiling $<
  323.         @ $(NICECMD) $(CC) $(CFLAGS) -o $@ -c $<
  324.  
  325. %.obj : %.c ; 
  326.         @ echo Compiling $<
  327.         @ $(NICECMD) $(CC) $(CFLAGS) -o $@ -c $<
  328. .ENDIF
  329.  
  330. #
  331. # Targets
  332. #
  333. .IF $(ERRDEFAULT)!=Y
  334. default: $(DEFAULT) $(NEXTMAKEFILE)
  335. .ENDIF
  336.  
  337. typewarning:
  338.   @echo No TYPE specified, assuming VIO.
  339.  
  340. .IF $(MAKERUNTARGET)==Y
  341. run:    $(EXE) 
  342.         $(EXE) $(RUNPARAMS)
  343.  
  344. profile: $(EXE) 
  345.         $(EXE) $(PROFILEPARAMS)
  346.         gprof $(EXE) gmon.out > profile.txt
  347. .ENDIF
  348.  
  349. clean .PHONY:
  350.         rm *.$(OBJ) _state.mk
  351.         rm *.d $(DEPFILE) 1>nul 2>nul
  352.  
  353. .IF $(MAKEDEP)==Y
  354. %.d : %.cpp ;
  355.     @ $(NICECMD) gcc $(CFLAGS) -E -MMD $< 1>nul 2>nul
  356. %.d : %.c ;
  357.     @ $(NICECMD) gcc $(CFLAGS) -E -MMD $< 1>nul 2>nul
  358.  
  359. $(DEPFILE) .IGNORE: $(OBJS) {$(SRC)}.d
  360. .IF $(QUIET)!=Y
  361.         + type {$(SRC)}.d > $(DEPFILE)
  362. .ELSE
  363. #    @ echo Updating $(DEPFILE)
  364.         @ + type {$(SRC)}.d > $(DEPFILE)
  365. .ENDIF
  366. .ENDIF
  367.  
  368. .IF $(MAKEDEF)==Y
  369. .IF $(TYPE)!=DLL
  370. $(DEF):
  371.         + echo NAME WINDOWAPI > $(DEF)
  372.         + echo STACKSIZE 32768 >> $(DEF)
  373. .ELSE
  374. $(DEF): $(DEFSRC) $(OBJS)        
  375.         cp $(DEFSRC) $(DEF)
  376.         emxexp -u $(OBJS) >> $(DEF)
  377. .ENDIF
  378. .ENDIF
  379.  
  380. .IF $(MAKERES)==Y
  381. .IF $(RES2)==
  382. $(RES): $(RCFILE) $(RESH)
  383.        rc -r $(RCFILE)
  384. .ELSE
  385. $(RES): $(RCFILE) $(RES2) $(RESH)
  386.        cp $(RCFILE) tmp.rc
  387.        + type $(RES2) >> tmp.rc
  388.        rc -r tmp.rc
  389.        mv tmp.res $(RES)
  390. .ENDIF
  391. .ENDIF
  392.  
  393. .IF $(MAKEEXE)==Y
  394. $(EXE): $(OBJS) $(ADDOBJS) $(ADDLIBS) $(DEF) $(RES) $(LIBDEPS)
  395. .IF $(QUIET)!=Y
  396.         $(TMPDIRS) $(NICECMD) $(CC) -o $(EXE) $(EKLIBMEMOBJ) $(OBJS) $(ADDOBJS) $(LFLAGS) $(DEF) $(RES) 
  397. .ELSE
  398.         @ echo Linking $(EXE)
  399.         @ $(TMPDIRS) $(NICECMD) $(CC) -o $(EXE) $(EKLIBMEMOBJ) $(OBJS) $(ADDOBJS) $(LFLAGS) $(DEF) $(RES) 
  400. .ENDIF
  401. .ENDIF
  402.  
  403. .IF $(MAKEDLL)==Y
  404. $(DLL): $(OBJS) $(ADDOBJS) $(ADDLIBS) $(DEF) $(RES) $(LIBDEPS)
  405. .IF $(QUIET)!=Y
  406.         $(TMPDIRS) $(NICECMD) $(CC) -o $(DLL) $(OBJS) $(ADDOBJS) $(DEF) $(RES) $(LFLAGS)
  407. .ELSE
  408.         @ echo Creating $(DLL)
  409.     @ $(TMPDIRS) $(NICECMD) $(CC) -o $(DLL) $(OBJS) $(ADDOBJS) $(DEF) $(RES) $(LFLAGS)
  410. .ENDIF
  411. .ENDIF
  412.  
  413. .IF $(MAKEDLLLIB)==Y
  414. $(LIBOMFDLL): $(DEF) 
  415.         emximp -o $(LIBOMFDLL) $(DEF)
  416.  
  417. $(LIBADLL): $(LIBOMFDLL)
  418.         emximp -o $(LIBADLL) $(LIBOMFDLL)
  419. .ENDIF
  420.  
  421. .IF $(MAKELIBA)==Y
  422. $(LIBA): $(OBJS) $(ADDOBJS)
  423.     -+@ rm $(LIBA) 1>nul 2>nul
  424. .IF $(QUIET)!=Y
  425.     $(AR) r $(LIBA) $(OBJS) $(ADDOBJS)
  426. .ELSE
  427.         @ echo Creating $(LIBA)
  428.         @ $(AR) r $(LIBA) $(OBJS) $(ADDOBJS)
  429. .ENDIF
  430. .ENDIF
  431.  
  432. .IF $(MAKELIBOMF)==Y
  433. $(LIB): $(OBJS) $(ADDOBJS)
  434.         emxomfar rv $(LIB) $(OBJS) $(ADDOBJS)
  435. .ENDIF
  436.  
  437. .IF $(NEXTMAKEFILE)
  438. $(NEXTMAKEFILE) .PHONY .PRECIOUS: $(DEFAULT)
  439. .IF $(QUIET)!=Y
  440.     sh -c "$(MAKECMD) $(MFLAGS) -f $(NEXTMAKEFILE)"
  441. .ELSE
  442.     @ echo ------------------ $(NEXTMAKEFILE) ------------------
  443.     @ sh -c "$(MAKECMD) $(MFLAGS) -f $(NEXTMAKEFILE)"    
  444. .ENDIF
  445. .ENDIF
  446.  
  447. .IF $(MAKEDEP)==Y
  448. .INCLUDE: $(DEPFILE)
  449. .ENDIF
  450.  
  451.