1### Driver "pcl3" for various PCL-3+ printers #################################
2#
3# @(#)$Id: contrib.mak.add,v 1.7 2001/07/27 13:52:58 Martin Rel $
4# Author: Martin Lottermoser, Greifswaldstrasse 28, 38124 Braunschweig,
5#         Germany, e-mail: Martin.Lottermoser@t-online.de.
6#
7# Read the file README in the pcl3 distribution for general installation
8# instructions. If you don't have a distribution, visit
9# http://home.t-online.de/home/Martin.Lottermoser/pcl3.html.
10#
11# If you are including both, hpdj and pcl3, in the compilation, you should
12# disable the rules for pclcomp.$(OBJ) and pagecount.$(OBJ) in the hpdj
13# section. The versions of these files contained in the pcl3 distribution are
14# binary compatible with what hpdj 2.6 expects.
15#
16# You can add compilation options to the variable "pcl3_options" below.
17#
18#   NDEBUG
19#	Define this to remove certain runtime checks from the code which might
20#	then become slightly faster. Don't define this for pcl3 beta releases
21#	or ghostscript test releases.
22#
23#   PCL3_MEDIA_FILE
24#	Define this to be a C string containing the absolute path name of a
25#	media configuration file if you want the "unspec" subdevice to use this
26#	file instead of its default HP DeskJet 850C/855C/870C/890C media
27#	configuration. An example definition for UNIX systems is:
28#
29#	    pcl3_options=-DPCL3_MEDIA_FILE='"$(gsdatadir)/pcl3.mcf"'
30#
31#       A detailed description of the meaning and the syntax of this file can
32#       be found in the reference page gs-pcl3(1). Briefly, it tells the
33#	driver which media sizes your printer supports and how. You can
34#       override this at run time with the option "-sMediaConfigurationFile".
35#
36# The variable "eprn_fs_options" is intended for optimization options used only
37# when compiling eprnfs.c. Choose the combination producing the fastest code.
38# You should leave this variable empty unless (a) you definitely know which
39# options produce the fastest code from eprnfs.c, and (b) ghostscript does not
40# use the same options anyway.
41#
42# You should also look at the section below containing the rules for the *.dev
43# files in order to find out which values you can add to the DEVICE_DEVS*
44# variables in the platform-specific make file. You should always add at least
45# the "pcl3" device but you may add others; the latter are shortcuts to the
46# subdevices of pcl3.
47#
48#
49# Remarks for Microsoft Windows
50# =============================
51# When compiling on Microsoft Windows and unless you are using Cygwin, you must
52# define the preprocessor symbol "EPRN_NO_PAGECOUNTFILE" and either remove the
53# dependency of pcl3 on pagecount.obj or replace pagecount.c with an empty
54# file.
55#
56###############################################################################
57
58# Compilation options
59pcl3_options=
60eprn_fs_options=
61
62# Version of the pcl3 rules: $Revision: 1.1.1.4.4.2 $.
63
64#==============================================================================
65
66# eprn rules
67# This is the part you need if you are developing another eprn-based driver.
68
69# Complete set of compilation options
70eprn_opts=-DGS_REVISION=$(GS_REVISION) $(pcl3_options)
71
72# Directory with eprn's source code as seen from the gs directory. The name
73# does not include a trailing path separator.
74eprn_dir=pcl3$(D)eprn
75# Same as above but with a separator
76eprn_src=$(eprn_dir)$(D)
77
78# List of all eprn object files
79eprn_=$(GLOBJ)gdeveprn.$(OBJ) $(GLOBJ)pagecount.$(OBJ) \
80  $(GLOBJ)mediasize.$(OBJ) $(GLOBJ)eprnparm.$(OBJ) $(GLOBJ)eprnrend.$(OBJ) \
81  $(GLOBJ)eprnfs.$(OBJ)
82
83# List of eprn headers needed when gdeveprn.h is included:
84eprn_headers=$(eprn_src)mediasize.h $(eprn_src)gdeveprn.h
85
86#------------------------------------------------------------------------------
87
88# Rules for individual files
89
90$(GLOBJ)mediasize.$(OBJ): $(eprn_src)mediasize.c $(eprn_src)mediasize.h
91	$(GLCC) $(C_) $(O_)$@ $(eprn_opts) $(eprn_src)mediasize.c
92
93$(GLOBJ)gdeveprn.$(OBJ): $(eprn_src)gdeveprn.c $(eprn_headers) \
94	  $(eprn_src)pagecount.h
95	$(GLCC) $(C_) $(O_)$@ $(eprn_opts) $(eprn_src)gdeveprn.c
96
97$(GLOBJ)eprnparm.$(OBJ): $(eprn_src)eprnparm.c $(eprn_headers)
98	$(GLCC) $(C_) $(O_)$@ $(eprn_opts) $(eprn_src)eprnparm.c
99
100$(GLOBJ)eprnrend.$(OBJ): $(eprn_src)eprnrend.c $(eprn_headers)
101	$(GLCC) $(C_) $(O_)$@ $(eprn_opts) $(eprn_src)eprnrend.c
102
103$(GLOBJ)eprnfs.$(OBJ): $(eprn_src)eprnfs.c $(eprn_headers)
104	$(GLCC) $(C_) $(O_)$@ $(eprn_opts) $(eprn_fs_options) \
105	  $(eprn_src)eprnfs.c
106
107# File also used by hpdj:
108$(GLOBJ)pagecount.$(OBJ): $(eprn_src)pagecount.c $(eprn_src)pagecount.h
109	$(GLCC) $(C_) $(O_)$@ $(eprn_opts) $(eprn_src)pagecount.c
110
111#==============================================================================
112
113# pcl3 rules
114
115# Complete set of compilation options
116pcl3_opts=-DGS_REVISION=$(GS_REVISION) -I$(eprn_dir) $(pcl3_options)
117
118# Root directory of pcl3 distribution as seen from the gs directory. The
119# variable includes a trailing path separator.
120pcl3_root=pcl3$(D)
121
122# Directory with pcl3's source code (name includes a trailing path separator)
123pcl3_src=$(pcl3_root)src$(D)
124
125# Headers used by most pcl3 files
126pcl3_headers=$(eprn_headers) \
127  $(pcl3_src)pclgen.h $(pcl3_src)pclcap.h $(pcl3_src)pclsize.h
128
129# List of all object files needed for pcl3
130pcl3_=$(eprn_) $(GLOBJ)gdevpcl3.$(OBJ) $(GLOBJ)pclcap.$(OBJ) \
131  $(GLOBJ)pclgen.$(OBJ) $(GLOBJ)pclcomp.$(OBJ) $(GLOBJ)pclsize.$(OBJ)
132
133#------------------------------------------------------------------------------
134
135# Rules for individual files
136
137$(GLOBJ)pclgen.$(OBJ): $(pcl3_src)pclgen.c $(pcl3_src)pclgen.h
138	$(GLCC) $(C_) $(O_)$@ $(pcl3_opts) $(pcl3_src)pclgen.c
139
140$(GLOBJ)pclsize.$(OBJ): $(pcl3_src)pclsize.c $(eprn_src)mediasize.h \
141	  $(pcl3_src)pclsize.h $(pcl3_src)pclgen.h
142	$(GLCC) $(C_) $(O_)$@ $(pcl3_opts) $(pcl3_src)pclsize.c
143
144$(GLOBJ)pclcap.$(OBJ): $(pcl3_src)pclcap.c $(pcl3_headers)
145	$(GLCC) $(C_) $(O_)$@ $(pcl3_opts) $(pcl3_src)pclcap.c
146
147$(GLOBJ)gdevpcl3.$(OBJ): $(pcl3_src)gdevpcl3.c $(pcl3_headers)
148	$(GLCC) $(C_) $(O_)$@ $(pcl3_opts) $(pcl3_src)gdevpcl3.c
149
150# File also used by hpdj:
151$(GLOBJ)pclcomp.$(OBJ): $(pcl3_src)pclcomp.c $(pcl3_src)pclgen.h
152	$(GLCC) $(C_) $(O_)$@ $(pcl3_opts) $(pcl3_src)pclcomp.c
153
154#------------------------------------------------------------------------------
155
156# Device rules. The targets here (e.g., "$(DD)pcl3.dev") are the values you
157# can add to the DEVICE_DEVS* variables in the platform-specific make file.
158
159# The generic pcl3 device with selectable subdevices
160$(DD)pcl3.dev: $(pcl3_) $(DD)page.dev
161	$(SETPDEV) $(DD)pcl3 $(pcl3_)
162
163# Fixed devices for specific printers
164$(DD)hpdjplus.dev: $(pcl3_) $(DD)page.dev
165	$(SETPDEV) $(DD)hpdjplus $(pcl3_)
166$(DD)hpdjportable.dev: $(pcl3_) $(DD)page.dev
167	$(SETPDEV) $(DD)hpdjportable $(pcl3_)
168$(DD)hpdj310.dev: $(pcl3_) $(DD)page.dev
169	$(SETPDEV) $(DD)hpdj310 $(pcl3_)
170$(DD)hpdj320.dev: $(pcl3_) $(DD)page.dev
171	$(SETPDEV) $(DD)hpdj320 $(pcl3_)
172$(DD)hpdj340.dev: $(pcl3_) $(DD)page.dev
173	$(SETPDEV) $(DD)hpdj340 $(pcl3_)
174$(DD)hpdj400.dev: $(pcl3_) $(DD)page.dev
175	$(SETPDEV) $(DD)hpdj400 $(pcl3_)
176$(DD)hpdj500.dev: $(pcl3_) $(DD)page.dev
177	$(SETPDEV) $(DD)hpdj500 $(pcl3_)
178$(DD)hpdj500c.dev: $(pcl3_) $(DD)page.dev
179	$(SETPDEV) $(DD)hpdj500c $(pcl3_)
180$(DD)hpdj510.dev: $(pcl3_) $(DD)page.dev
181	$(SETPDEV) $(DD)hpdj510 $(pcl3_)
182$(DD)hpdj520.dev: $(pcl3_) $(DD)page.dev
183	$(SETPDEV) $(DD)hpdj520 $(pcl3_)
184$(DD)hpdj540.dev: $(pcl3_) $(DD)page.dev
185	$(SETPDEV) $(DD)hpdj540 $(pcl3_)
186$(DD)hpdj550c.dev: $(pcl3_) $(DD)page.dev
187	$(SETPDEV) $(DD)hpdj550c $(pcl3_)
188$(DD)hpdj560c.dev: $(pcl3_) $(DD)page.dev
189	$(SETPDEV) $(DD)hpdj560c $(pcl3_)
190$(DD)hpdj600.dev: $(pcl3_) $(DD)page.dev
191	$(SETPDEV) $(DD)hpdj600 $(pcl3_)
192$(DD)hpdj660c.dev: $(pcl3_) $(DD)page.dev
193	$(SETPDEV) $(DD)hpdj660c $(pcl3_)
194$(DD)hpdj670c.dev: $(pcl3_) $(DD)page.dev
195	$(SETPDEV) $(DD)hpdj670c $(pcl3_)
196$(DD)hpdj680c.dev: $(pcl3_) $(DD)page.dev
197	$(SETPDEV) $(DD)hpdj680c $(pcl3_)
198$(DD)hpdj690c.dev: $(pcl3_) $(DD)page.dev
199	$(SETPDEV) $(DD)hpdj690c $(pcl3_)
200$(DD)hpdj850c.dev: $(pcl3_) $(DD)page.dev
201	$(SETPDEV) $(DD)hpdj850c $(pcl3_)
202$(DD)hpdj855c.dev: $(pcl3_) $(DD)page.dev
203	$(SETPDEV) $(DD)hpdj855c $(pcl3_)
204$(DD)hpdj870c.dev: $(pcl3_) $(DD)page.dev
205	$(SETPDEV) $(DD)hpdj870c $(pcl3_)
206$(DD)hpdj890c.dev: $(pcl3_) $(DD)page.dev
207	$(SETPDEV) $(DD)hpdj890c $(pcl3_)
208$(DD)hpdj1120c.dev: $(pcl3_) $(DD)page.dev
209	$(SETPDEV) $(DD)hpdj1120c $(pcl3_)
210
211#------------------------------------------------------------------------------
212
213# The pcl3opts command.
214# This is deliberately not included in the normal compilation because (a) the
215# rule is unlikely to work and (b) the code is unlikely to compile on any but
216# UNIX systems.
217
218pcl3opts: $(BINDIR)$(D)pcl3opts$(XE)
219pcl3opts_=$(pcl3_src)pcl3opts.c $(pcl3_src)pclscan.c $(eprn_src)mediasize.c \
220	$(pcl3_src)pclsize.c
221
222$(BINDIR)$(D)pcl3opts$(XE): $(pcl3opts_)
223	$(CC_) -o $@ -I$(eprn_src) $(pcl3opts_)
224	gencat $(GLOBJ)pcl3opts-en.cat $(pcl3_src)pcl3opts-en.msg
225	gencat $(GLOBJ)pcl3opts-de.cat $(pcl3_src)pcl3opts-de.msg
226
227#------------------------------------------------------------------------------
228
229# Installation rules (work only for UNIX). Note that the PostScript examples
230# and the PPD files are not copied. There are deliberately no prerequisites
231# for this target in order for the first part to work even if pcl3opts did not
232# compile.
233pcl3-install:
234	for f in gs-pcl3 pcl3opts; do	\
235	  $(INSTALL_DATA) $(pcl3_root)doc$(D)$$f.1 \
236	    $(mandir)/man$(man1ext)/$$f.$(man1ext) || exit 1;	\
237	  $(INSTALL_DATA) $(pcl3_root)doc$(D)$$f.html $(docdir) || exit 1; done
238	$(INSTALL_PROGRAM) $(BINDIR)$(D)pcl3opts$(XE) $(bindir)
239
240