# # $Id: makefile.os2,v 1.50.2.1 2008/02/23 11:21:24 mikulik Exp $ # # GNUPLOT Makefile for use on OS/2 2.x (and above) # using emx 0.9 (and above) and GNUMake # # To compile gnuplot, run the following command in directory gnuplot\src: # make -f ..\config\makefile.os2 # # The following tools and libraries are recommended/required to use this # makefile out of the box: # - GNU make, e.g. http://hobbes.nmsu.edu/pub/os2/dev/util/make-3.81beta3-r2-bin.zip # - IPFC included in the OS/2 developer kit # - emtex is only required for some parts of the documentation # # - GD library, http://hobbes.nmsu.edu/pub/os2/util/gd-2-0-33.zip # - GNU readline, http://os2ports.com/ftp/pub/os2/unix/devtools/readline/readline4.1-os2.zip # - PDFlib Lite 6.0 or later compiled for emx (available as source from http://www.pdflib.com/ ) # - XFree86 libraries, ftp://ftp.netlabs.org/pub/xfree86/4.5.0 # We depend on using cmd.exe (or a compatible one) and the # standard OS/2 tool set. (additionally we use 'cat') SHELL=cmd.exe # # ***************** Begin of Configuration section *************************** # # # Comment out the definition lines to disable the according features: # # X11 driver # requires installed XFree86 X11=1 # GIF, PNG, JPEG device drivers # Requires gd library (not part of gnuplot) # # You can use the following set of options for GD library v2.0 something # or newer. This library writes PNG, JPEG and GIF images. # If libgd has been compiled with TrueType font support, then you can use # scaled TrueType fonts in PNG images. If not, then uncomment FREETYPE. # The pre-compiled GD library by Ilya Zakharevich available at # http://hobbes.nmsu.edu/pub/os2/util/gd-2-0-33.zip # is strongly recommended. This packages already includes the required # GD, JPEG and Z and freetype libraries. GD=1 PNG=1 GIF=1 JPEG=1 FREETYPE=1 # PDF device driver # requires PDFlib (not part of gnuplot) PDF=1 # VESAkit support # requires SVGA- and VESA Kit (not part of gnuplot) # VESA=1 # GNU_ReadLine support # requires GNU readline library (static or DLL; not part of gnuplot) # GNU_RL=1 # saving of history (no longer requires GNU readline) HISTORY=1 # DEBUGging support # creates binaries suitable for debugging. Some bugs may come and go # as opposed to a production build since we lower the optimization level # DEBUG=1 # MOUSE support for PM and X11 terminals MOUSE=1 # # ****************** End of Configuration section **************************** # # # Miscellaneous setup # .PHONY: all runtime alldocs demo binaries infomin clean veryclean .SUFFIXES: .c .trm .o .obj .exe .rc .res .dll # A reasonable default default: runtime # A basic help screen help: @echo " Usage: $(MAKE) -f makefile.os2 target" @echo " where target is one of:" @echo " all runtime alldocs demo binaries infomin help clean veryclean" # # Definitions of flags and symbols used by makefile.all and makefile.os2 # # these definitions are used by makefile.all T=../term/ D=../docs/ L=$(D)latextut/ M=../demo/ # # Definitions valid for all targets on OS/2 # OS2DIR = os2 DOCDIR = ..\docs DEMODIR = ..\demo TERMDIR = ..\term # where to place gnuplot.gih helpfile HELPFILE = $(DOCDIR)\gnuplot.gih # Where to install the PostScript prologue files, relatively to the executable # gnuplot.exe GNUPLOT_PS_DIR = share/PostScript # # 3 sets of variables are defined and used to create # 1: gnuplot.exe, and utilities # 2: gnupmdrv.exe (the PM-driver executable) # CC = gcc CC2 = gcc O = o O2 = obj # Flags for compiler and linker under OS/2 OS2FLAGS = -DOS2 # Flags for compiling with EMX/GCC # Special note: -ffloat-store is necessary to avoid some strange behaviour # of this code: # reset; set key; set xlabel "Year"; set xdata time; set timefmt "%y%m%d" # set format x "%y"; set xrange ["900621" : "950126"]; # plot '-' using 1:2 title 'Fitted IO' with lines 1 # 900621 20 # 950126 55 # e # Confirmed for gcc 2.7.x/2.8.x; graphics.c used to be the culprit, but as # of today (20010918) it isn't any more ... # EMXSPECIFIC = -DHAVE_CONFIG_H -ffloat-store LIBS = # # Choose flags suitable for a debugging or for a production build # ifdef DEBUG CFLAGS = -g $(OS2FLAGS) $(EMXSPECIFIC) -Wall -Wno-comment -O0 -Zmt LDFLAGS = -g -Zmt -Zcrtdll -Zbsd-signals CFLAGS2 = -g $(OS2FLAGS) $(EMXSPECIFIC) -Wall -O0 -Zmt -Zomf LDFLAGS2 = -g -Zmt -Zcrtdll -Zbsd-signals -Zomf else CFLAGS = $(OS2FLAGS) $(EMXSPECIFIC) -O4 -mpentium -Wall -Wno-unused -Wno-comment -Zmt LDFLAGS = -s -Zmt -Zcrtdll -Zbsd-signals CFLAGS2 = $(OS2FLAGS) $(EMXSPECIFIC) -O4 -mpentium -Wall -Wno-unused -Zmt -Zomf LDFLAGS2 = -s -Zmt -Zcrtdll -Zbsd-signals -Zomf endif # # Settings for the terminals to be included # TERMFLAGS = -DGNUPLOT_PS_DIR=\"$(GNUPLOT_PS_DIR)\" -I. -I.. -I$(T) ifdef GD CFLAGS += -DHAVE_LIBGD -DHAVE_GD_H TERMLIBS += -lgd ifdef FREETYPE CFLAGS += -DHAVE_GD_TTF endif ifdef PNG CFLAGS += -DHAVE_GD_PNG endif ifdef GIF CFLAGS += -DHAVE_GD_GIF -DGIF_ANIMATION endif ifdef JPEG CFLAGS += -DHAVE_GD_JPEG endif endif ifdef PDF TERMFLAGS += -DHAVE_LIBPDF -DHAVE_PDFLIB_H TERMLIBS += -lpdflib endif # SVGA-/VESAkit support ifdef VESA TERMFLAGS += -DEMXVESA TERMLIBS += -ljmgraph -lvesa endif # X11 support ifdef X11 TERMFLAGS += -DX11 -DX11_DRIVER_DIR=\".\" endif # MOUSE support ifdef MOUSE TERMFLAGS += -DUSE_MOUSE # the interprocess communication flag OS2_IPC is #defined in config.(os2,h) endif # GNU readline support ifdef GNU_RL CFLAGS += -DHAVE_LIBREADLINE LIBS += -lreadline -ltermcap endif # saving history (independent of GNU readline) ifdef HISTORY CFLAGS += -DGNUPLOT_HISTORY endif # TOOLS CPP = cpp # Do not name this variable "IPFC"!! This won't work out... IPF_C = ipfc.exe # Tools for buildings the docs DVIPS = dvips LATEX = latex PDFLATEX = vlatex PLAINTEX = tex # # Default Rules # .c.$(O): $(CC) $(CFLAGS) $(TERMFLAGS) -o $*.$(O) -c $*.c .c.obj: $(CC2) $(CFLAGS2) $(TERMFLAGS) -o $*.obj -c $*.c # # Include dependencies valid for all platforms from makefile.all # include makefile.all # # Pre-defined sets of targets: # all: runtime demo alldocs: $(DOCDIR)\gnuplot.gih $(DOCDIR)\gnuplot.inf $(DOCDIR)\gnuplot.html \ $(DOCDIR)\gnuplot.info $(DOCDIR)\gnuplot.ps \ $(DOCDIR)\gnuplot.pdf runtime: config.h binaries infomin $(DOCDIR)\gnuplot.inf infomin: gnupmdrv.hlp $(DOCDIR)\gnuplot.gih demo: $(M)binary1 $(M)binary2 $(M)binary3 ifdef X11 binaries: gnuplot.exe gnupmdrv.exe gnuplot_x11.exe else binaries: gnuplot.exe gnupmdrv.exe endif OBJS = $(COREOBJS) version.$(O) $(OBJS): config.h term.$(O): $(CORETERM) term.h config.h $(OS2DIR)\pm_msgs.h gnuplot.exe: $(OBJS) $(CC) $(LDFLAGS) -o $@ $(OBJS) $(TERMLIBS) $(LIBS) # # Build the PM outboard driver # $(OS2DIR)\gnupmdrv.$(O2): $(OS2DIR)\gnupmdrv.c $(OS2DIR)\gnupmdrv.h config.h $(OS2DIR)\gclient.$(O2): $(OS2DIR)\gclient.c $(OS2DIR)\gnupmdrv.h config.h $(OS2DIR)\pm_msgs.h mouse.h $(OS2DIR)\dialogs.$(O2): $(OS2DIR)\dialogs.c $(OS2DIR)\gnupmdrv.h config.h $(OS2DIR)\dialogs.h $(OS2DIR)\print.$(O2): $(OS2DIR)\print.c $(OS2DIR)\gnupmdrv.h config.h $(OS2DIR)\gpexecute.$(O2): gpexecute.c gpexecute.h $(OS2DIR)\gnupmdrv.res : $(OS2DIR)\gnupmdrv.rc $(OS2DIR)\gnuplot.ico $(OS2DIR)\dialogs.h cd $(OS2DIR) && rc -r gnupmdrv.rc & cd .. OS2OBJ = $(OS2DIR)\gnupmdrv.$(O2) $(OS2DIR)\gclient.$(O2) $(OS2DIR)\print.$(O2) \ $(OS2DIR)\dialogs.$(O2) gpexecute.$(O2) gnupmdrv.exe: $(OS2OBJ) $(OS2DIR)\gnupmdrv.res $(OS2DIR)\gnupmdrv.def $(CC2) $(LDFLAGS2) -o $@ $(OS2OBJ) $(OS2DIR)\gnupmdrv.res $(OS2DIR)\gnupmdrv.def gnupmdrv.hlp: $(OS2DIR)\gnupmdrv.ipf # Cannot use the command # $(IPF_C) $< $@ # because IPFC 2.1 does not support this syntax. Use instead: copy $< . && $(IPF_C) gnupmdrv.ipf && del gnupmdrv.ipf # # Build the X11 outboard driver # # X11 libraries X11LIBS = -L$(X11ROOT)/XFree86/lib -lX11 -lsocket -Zbsd-signals -Zcrtdll # X11 includes X11INCLUDES = -I$(X11ROOT)/XFree86/include X11FLAGS= -Zmt -D__UNIXOS2__ -DI_NEED_OS2_H ifdef MOUSE X11FLAGS += -DUSE_MOUSE endif gnuplot_x11.exe: gplt_x11.o gpexecute.o getcolor_x11.o $(CC) $(LDFLAGS) $(X11FLAGS) $(EMXSPECIFIC) -o $@ -DGPLT_X11_MODE $^ $(X11LIBS) gplt_x11.o: gplt_x11.c mouse.h gpexecute.h config.h $(CC) $(CFLAGS) $(X11FLAGS) $(EMXSPECIFIC) $(X11INCLUDES) -c -o $@ $< getcolor_x11.o: getcolor.c $(CC) $(CFLAGS) $(X11FLAGS) $(EMXSPECIFIC) -DGPLT_X11_MODE -c -o $@ $< # # Create config.h # This file is preferable over having explicit gcc command longer than 10 lines: # gcc ... -DHAVE_ -DHAVE_ ... -DHAVE_ -DHAVE_ ... myfile.c # config.h: ..\config\config.os2 if exist $@ del $@ copy $< $@ # # Create documentation in various formats # # The idea behind the renaming business is that we may want to # use various LaTeX systems which may choke if they find existing # intermediate files from other systems. # Call LaTeX three times to get the toc right. $(DOCDIR)\gnuplot.dvi: $(DOCDIR)\gnuplot.tex copy $(DOCDIR)\gnuplot.tex $(DOCDIR)\gnuplot_2.tex cd $(DOCDIR) && $(LATEX) gnuplot_2.tex && $(LATEX) gnuplot_2.tex && $(LATEX) gnuplot_2.tex if exist $(DOCDIR)\gnuplot.dvi del $(DOCDIR)\gnuplot.dvi move $(DOCDIR)\gnuplot_2.dvi $(DOCDIR)\gnuplot.dvi del $(DOCDIR)\gnuplot_2.* $(DOCDIR)\gnuplot.ps: $(DOCDIR)\gnuplot.dvi $(DVIPS) -o $@ $(DOCDIR)\gnuplot.dvi $(DOCDIR)\gnuplot.pdf: $(DOCDIR)\gnuplot.tex copy $(DOCDIR)\gnuplot.tex $(DOCDIR)\gnuplot_3.tex copy $(DOCDIR)\..\VERSION $(DOCDIR) cd $(DOCDIR) && $(PDFLATEX) gnuplot_3.tex && $(PDFLATEX) gnuplot_3.tex && $(PDFLATEX) gnuplot_3.tex if exist $(DOCDIR)\gnuplot.pdf del $(DOCDIR)\gnuplot.pdf move $(DOCDIR)\gnuplot_3.pdf $(DOCDIR)\gnuplot.pdf del $(DOCDIR)\gnuplot_3.* $(DOCDIR)\gnuplot.tex: $(DOCDIR)\gnuplot.doc $(DOCDIR)\doc2tex.exe $(DOCDIR)\doc2tex.exe $(DOCDIR)\gnuplot.doc $@ $(DOCDIR)\gnuplot.inf: $(DOCDIR)\gnuplot.ipf # Cannot use the command # $(IPF_C) /INF $< $@ # because IPFC 2.1 does not support this syntax. Use instead: cd $(DOCDIR) && $(IPF_C) /INF gnuplot.ipf $(DOCDIR)\gnuplot.gih: $(DOCDIR)\gnuplot.doc $(DOCDIR)\doc2gih.exe $(DOCDIR)\doc2gih.exe $(DOCDIR)\gnuplot.doc $@ $(DOCDIR)\gnuplot.html: $(DOCDIR)\gnuplot.texi $(DOCDIR)\gnuplot.doc $(MAKEINFO) --html -I$(DOCDIR) $(DOCDIR)\gnuplot.texi --no-split --output=$@ $(DOCDIR)\gnuplot.info: $(DOCDIR)\gnuplot.texi $@ $(MAKEINFO) -I$(DOCDIR) $(DOCDIR)\gnuplot.texi --no-split --output=$@ # $(DOCDIR)\gnuplot.texi: $(DOCDIR)\gnuplot.doc $(DOCDIR)\doc2texi.pl # perl $(DOCDIR)\doc2texi.pl $(DOCDIR)\gnuplot.doc >$@ $(DOCDIR)\gnuplot.rtf: $(DOCDIR)\gnuplot.doc $(DOCDIR)\doc2rtf.exe $(DOCDIR)\doc2rtf.exe $(DOCDIR)\gnuplot.doc $@ $(DOCDIR)\gnuplot.ms: $(DOCDIR)\gnuplot.doc $(DOCDIR)\doc2ms.exe $(DOCDIR)\doc2ms.exe $(DOCDIR)\gnuplot.doc $@ $(DOCDIR)\gnuplot.ipf: $(DOCDIR)\gnuplot.doc $(DOCDIR)\doc2ipf.exe $(DOCDIR)\doc2ipf.exe $(DOCDIR)\gnuplot.doc $@ # Assume we need A4 format $(DOCDIR)\gpcard.ps: $(DOCDIR)\gpcard.dvi cd $(DOCDIR) && $(DVIPS) -o gpcard_letter.ps $< cd $(DOCDIR) && psresize -pletter -Pa4 gpcard_letter.ps $@ $(DOCDIR)\gpcard.dvi: $(DOCDIR)\gpcard.tex cd $(DOCDIR) && $(PLAINTEX) gpcard.tex && $(PLAINTEX) gpcard.tex # # Tools for converting the documentation from docs\gnuplot.doc # in various formats # # Some dependencies - no rule! $(DOCDIR)\doc2gih.exe $(DOCDIR)\doc2ipf.exe $(DOCDIR)\doc2info.exe \ $(DOCDIR)\doc2tex.exe $(DOCDIR)\doc2rtf.exe: \ $(DOCDIR)\termdoc.c $(DOCDIR)\xref.c $(DOCDIR)\allterm.h ..\src\config.h SORT_TERMINALS=1 ifdef SORT_TERMINALS # sort alphabetically all terminals $(DOCDIR)\allterm.h: $(CORETERM) @echo "Building allterm.h" @..\src\os2\4allterm.cmd sort else # SORT_TERMINALS==0, then sequence of terminals according to "ls term/*.trm": $(DOCDIR)\allterm.h: $(CORETERM) @echo "Building allterm.h" @..\src\os2\4allterm.cmd nosort endif $(DOCDIR)\doc2gih.exe: $(DOCDIR)\doc2gih.c $(DOCDIR)\termdoc.c $(OS2TERM) $(CC) $(CFLAGS) $(TERMFLAGS) -DALL_TERM_DOC -o $@ $(DOCDIR)\doc2gih.c $(DOCDIR)\termdoc.c $(DOCDIR)\doc2ipf.exe: $(DOCDIR)\doc2ipf.c $(DOCDIR)\termdoc.c $(DOCDIR)\xref.c $(OS2TERM) $(CC) $(CFLAGS) $(TERMFLAGS) -DALL_TERM_DOC -o $@ $(DOCDIR)\doc2ipf.c $(DOCDIR)\termdoc.c $(DOCDIR)\xref.c $(DOCDIR)\doc2tex.exe: $(DOCDIR)\doc2tex.c $(DOCDIR)\termdoc.c $(OS2TERM) $(DOCDIR)\allterm.h $(CC) $(CFLAGS) $(TERMFLAGS) -DALL_TERM_DOC -o $@ $(DOCDIR)\doc2tex.c $(DOCDIR)\termdoc.c $(DOCDIR)\doc2rtf.exe: $(DOCDIR)\doc2rtf.c $(DOCDIR)\termdoc.c $(DOCDIR)\xref.c $(OS2TERM) $(CC) $(CFLAGS) $(TERMFLAGS) -DALL_TERM_DOC -o $@ $(DOCDIR)\doc2rtf.c $(DOCDIR)\termdoc.c $(DOCDIR)\xref.c $(DOCDIR)\doc2ms.exe: $(DOCDIR)\doc2ms.c $(DOCDIR)\termdoc.c $(OS2TERM) $(CC) $(CFLAGS) $(TERMFLAGS) -DALL_TERM_DOC -o $@ $(DOCDIR)\doc2ms.c $(DOCDIR)\termdoc.c # # Create binary demo files # $(M)binary1 $(M)binary2 $(M)binary3: $(M)bf_test.exe cd $(DEMODIR) && bf_test.exe $(M)bf_test.exe : bf_test.c binary.$(O) alloc.$(O) $(CC) $(CFLAGS) -o $@ bf_test.c binary.$(O) alloc.$(O) # # Clean up # # Clean up all files temporary used clean: if exist config.h del config.h if exist *.$(O) del *.$(O) if exist *.$(O2) del *.$(O2) cd $(OS2DIR) && if exist *.$(O2) del *.$(O2) if exist $(OS2DIR)\gnupmdrv.res del $(OS2DIR)\gnupmdrv.res if exist $(DEMODIR)\bf_test.exe del $(DEMODIR)\bf_test.exe if exist $(DOCDIR)\doc2*.exe del $(DOCDIR)\doc2*.exe if exist $(DOCDIR)\gnuplot.ipf del $(DOCDIR)\gnuplot.ipf if exist $(DOCDIR)\gnuplot_2* del $(DOCDIR)\gnuplot_2* if exist $(DOCDIR)\gnuplot_3* del $(DOCDIR)\gnuplot_3* if exist core del core if exist $(DOCDIR)\allterm.? del $(DOCDIR)\allterm.? # Clean up ALL files that were not part of the source distribution veryclean: clean if exist *.exe del *.exe if exist $(DOCDIR)\gnuplot.dvi del $(DOCDIR)\gnuplot.dvi if exist $(DOCDIR)\gnuplot.gih del $(DOCDIR)\gnuplot.gih if exist $(DOCDIR)\gnupmdrv.hlp del $(DOCDIR)\gnupmdrv.hlp if exist $(DOCDIR)\gnuplot.html del $(DOCDIR)\gnuplot.html if exist $(DOCDIR)\gnuplot.inf del $(DOCDIR)\gnuplot.inf if exist $(DOCDIR)\gnuplot.info del $(DOCDIR)\gnuplot.info if exist $(DOCDIR)\gnuplot.ms del $(DOCDIR)\gnuplot.ms if exist $(DOCDIR)\gnuplot.ps del $(DOCDIR)\gnuplot.ps if exist $(DOCDIR)\gnuplot.pdf del $(DOCDIR)\gnuplot.pdf if exist $(DOCDIR)\gnuplot.rtf del $(DOCDIR)\gnuplot.rtf if exist $(DOCDIR)\gnuplot.tex del $(DOCDIR)\gnuplot.tex if exist $(DOCDIR)\gpcard*.ps del $(DOCDIR)\gpcard*.ps if exist $(DOCDIR)\*.dvi del $(DOCDIR)\*.dvi if exist $(DOCDIR)\*.log del $(DOCDIR)\*.log if exist $(DOCDIR)\*.aux del $(DOCDIR)\*.aux if exist $(DOCDIR)\*.toc del $(DOCDIR)\*.toc if exist $(DEMODIR)\binary? del $(DEMODIR)\binary?