File: Makefile

package info (click to toggle)
pcal 4.11.0-4
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,604 kB
  • sloc: ansic: 6,747; csh: 245; makefile: 140; sh: 126; perl: 117
file content (358 lines) | stat: -rw-r--r-- 12,292 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
#
# Makefile for 'pcal' under Unix/Linux, DOS+DJGPP, and DOS/Windows+Cygwin
# 
# Use these commands:
# 
#    Unix/Linux: make
# 
#    DOS+DJGPP: make OS=DJGPP
# 
# 
# v4.11.0: Bill Marr
#    
#    Provide support for a user-specified destination directory ('$DESTDIR') 
#    on the installation step.
#    
#       For example: make DESTDIR=$HOME/test install
#    
#    Remove all remaining references (environment variables, etc) to the
#    unneeded 'pcalinit' items, which were accidentally overlooked in the 
#    last release.
#    
# v4.10.0: Bill Marr
#    
#    Accommodate the fact that the use of 'pcalinit.{c,ps,h}' is no longer
#    needed.  PostScript output is now directly generated by C code, without
#    the use of a PostScript template which was converted to a C header file.
#    
#    Eliminate other now-unused files ('pcalglob.h', 'pcalpapr.{c,h}') and add
#    new files ('encvec.c', 'pcallang.c').
#    
#    Drop support for obsolete platforms (Amiga, VMS, OS/2).
#    
#    Rename 'EPS' definition to 'EPS_DSC' (in order to more clearly show its
#    purpose and to avoid confusion with the embedded EPS image capability for
#    monthly calendars).  Enhance comments about its use.
#    
#    Expand the explanation and provide more examples of the use of the 
#    timezone setting.
#    
#    Remove the now-unneeded 'VERSION = x.y' declaration.
# 
# v4.9.1: Bill Marr
#    
#    Fix syntax which causes error when using 'make install' command.
#    
# v4.9.0: Bill Marr
#    
#    Add comments for new 'MAPFONTS' options to control PostScript character
#    encodings to support multiple languages.
#    
#    Remove obsolete comment about directory usage.  Fix minor comment typo.
#    
#    Remove reference to now-obsolete 'Esperanto' character encoding.
#    
#    Enable the '-DSEARCH_PCAL_DIR=0' line by default now, so that the 'pcal'
#    configuration file (a.k.a. the 'date' file, often named 'calendar') will
#    _not_ be looked for in the same directory as the 'pcal' executable file.
#    This prevents erroneous use of a common Unix executable named 'calendar'
#    as a 'pcal' configuration file.  This change was done to minimize the
#    deltas applied by the Debian distribution.
#    
#    Bypass some processing of the documentation if the directory specified
#    by 'MANDIR' and/or 'CATDIR' does not exist.  This prevents an error 
#    during the 'make install' step when building in certain environments 
#    (e.g. DOS+DJGPP).
# 
# v4.8.0: Bill Marr
#    
#    Enhance comments; reverse sense of 'SEARCH_PCAL_DIR' flag so that
#    enabling the commented-out line has the desired effect; remove unused
#    'make' targets ('compress' and 'uuencode') and now-obsolete list of files
#    for 'TARSRC'; remove refs to obsolete source files; remove now-unneeded
#    specification of paper size; provide for new directory locations for
#    source code, object code, and executable code; merge OS/2 'Makefile.os2'
#    file into this file; add support for DOS+DJGPP building based on a patch
#    from Thiago F.G. Albuquerque; provide a new flag 'BUILD_ENV_xxx' so that
#    we can distinquish the build environment among Unix, OS/2, and DOS+DJGPP
#    at compile time; fixed up the out-of-date target dependency lists
#         
# v4.7: Andrew Rogers
# 
#       add HTML-specific command-line definitions (cf. pcaldefs.h)
#       delete moon96; add moon98
#       add Makefile.os2 to TARSRC definition
#       parameterize executable names; define pcalinit-specific compiler
#       name (to facilitate cross-builds)
#
# v4.6: Andrew Rogers
# 
#       "make compress" creates compressed tar file; "make uuencode" creates
#       uuencode-d version thereof
#
# v4.5: Andrew Rogers
# 
#       "make clean" leaves pcal intact but removes other by-products;
#       "make clobber" blows everything away;
#       "make fresh" rebuilds from scratch
#

# -----------------------------------------------------------------------------
# 
# Depending on whether we're compiling for Unix/Linux or DOS+DJGPP, use
# appropriate values for the OS name, the 'build environment' flag, the names
# of the executable files, the compiler(s), and the 'PACK' value.
# 
# The 'PACK' value is used for packing the 'man' page.  Note that setting
# 'PACK' to ":" will cause no packing to be done; otherwise, choose
# "compress", "pack", or "gzip" as your system requires.
# 
ifeq ($(OS),DJGPP)   # DOS+DJGPP
	OS_NAME = "DOS+DJGPP"
	D_BUILD_ENV	= -DBUILD_ENV_DJGPP
	PCAL		= pcal.exe
	CC		= gcc
	PACK =		:
else   # Unix
	OS_NAME = "Unix"
	D_BUILD_ENV	= -DBUILD_ENV_UNIX
	PCAL		= pcal
	CC		= /usr/bin/gcc
	PACK		= gzip -9
	# PACK		= pack
	# PACK		= gzip
endif

# 
# Define various directories for the following items:
# 
#    - source code
#    - object code (and compile-time, auto-generated C header files)
#    - installed 'pcal' executable
#    - documentation
#    - 'man' pages
#    - 'cat' pages
# 
SRCDIR	= src
OBJDIR	= obj
EXECDIR	= exec
DOCDIR	= doc

# 
# Compiling for DOS+DJGPP requires different directories for the installed
# executable and the 'man'/'cat' pages.  Unix uses the values shown below.
# 
ifeq ($(OS),DJGPP)   # DOS+DJGPP
	BINDIR = $(DJDIR)/bin
	MANDIR = $(DJDIR)/man/man1
	CATDIR = $(DJDIR)/man/cat1
else   # Unix
	BINDIR = usr/bin
	MANDIR = usr/share/man/man1
	CATDIR = usr/man/cat1
endif

OBJECTS = $(OBJDIR)/pcal.o \
		$(OBJDIR)/encvec.o $(OBJDIR)/exprpars.o \
		$(OBJDIR)/moonphas.o $(OBJDIR)/pcalutil.o \
		$(OBJDIR)/pcallang.o \
		$(OBJDIR)/readfile.o $(OBJDIR)/writefil.o

# ------------------------------------------------------------------
# 
# Site-specific defaults which may be overridden here (cf. pcallang.h);
# uncomment the examples below and/or change them to your liking
# 

# 
# Allow the ability to specify an alternate 8-bit character mapping by
# defining 'MAPFONTS' to one of the following:
#    
#    ENC_LATIN_1   (ISO 8859-1)
#    ENC_LATIN_2   (ISO 8859-2)
#    ENC_LATIN_3   (ISO 8859-3)
#    ENC_LATIN_4   (ISO 8859-4)
#    ENC_CYRILLIC  (ISO 8859-5)
#    ENC_ARABIC    (ISO 8859-6) (*** unsupported ***)
#    ENC_GREEK     (ISO 8859-7)
#    ENC_HEBREW    (ISO 8859-8)  (*** unsupported ***)
#    ENC_LATIN_5   (ISO 8859-9)
#    ENC_LATIN_6   (ISO 8859-10)
#    ENC_THAI      (ISO 8859-11)
#    ENC_LATIN_7   (ISO 8859-13)
#    ENC_LATIN_8   (ISO 8859-14)
#    ENC_LATIN_9   (ISO 8859-15)
#    ENC_LATIN_10  (ISO 8859-16)  (*** unsupported ***)
#    ENC_KOI8_R    (Russian)
#    ENC_KOI8_U    (Ukrainian)
#    ENC_ROMAN8    (Roman8)
#    
# This is equivalent to the use of the '-r' option.
# 
# Note that this is not normally needed, since 'pcal' will automatically
# assign the proper character encoding (if any) depending on the language
# selected.
# 
# D_MAPFONTS = -DMAPFONTS=ENC_KOI8_R

# redefine title, date, and notes font/pointsize ('-t', '-d', '-n')
# D_TITLEFONT = '-DTITLEFONT="Helvetica-Bold/48"'
# D_DATEFONT  = '-DDATEFONT="Helvetica-Bold/28"'
# D_NOTESFONT = '-DNOTESFONT="Helvetica/8"'

# redefine shading (dates/fillboxes) ('-s')
# D_SHADING = '-DSHADING="0.6/0.99"'

# specify American (USA_DATES) or European (EUR_DATES) date parsing ('-A', '-E')
# D_DATE_STYLE = -DDATE_STYLE=USA_DATES

# specify first (leftmost) weekday on calendar ('-F')
# D_FIRST_DAY  = -DFIRST_DAY=MON

# 
# Specify the timezone ('-z') for determining the correct day when
# calculating the moon phases:
#    
#    "0"    = UTC/GMT (default)
#    "5"    = New York EST
#    "-3"   = Moscow
#    "-5.5" = India
# 
# D_TIMEZONE = '-DTIMEZONE="5 [New York EST]"'
# D_TIMEZONE = '-DTIMEZONE="4 [New York EDT]"'
# D_TIMEZONE = '-DTIMEZONE="8 [Los Angeles PST]"'
# D_TIMEZONE = '-DTIMEZONE="7 [Los Angeles PDT]"'
# D_TIMEZONE = '-DTIMEZONE="-3 [Moscow]"'
# D_TIMEZONE = '-DTIMEZONE="-5.5 [India]"'

# 
# This flag controls the generation of EPS-like PostScript Document
# Structuring Conventions (DSC) so that the output contains enhanced comments
# ('%%Page:', etc.) that are necessary for programs like 'psnup' to do useful
# things with the generated calendars.  These comments also allow PostScript
# previewer applications to page up to the previous page.
# 
D_EPS_DSC = -DEPS_DSC

# specify default language
# D_LANGUAGE = -DLANG_DEFAULT=LANG_ENGLISH

# customize HTML output
# D_BGCOLOR = '-DBGCOLOR="ffffff"'
# D_BACKGROUND = -DBACKGROUND=NULL
# D_TEXT = -DTEXT=NULL
# D_LINK = -DLINK=NULL
# D_ALINK = -DALINK=NULL
# D_VLINK = -DVLINK=NULL
# D_HOLIDAY_PRE = '-DHOLIDAY_PRE="<font color=\"ff0000\"><b>"'
# D_HOLIDAY_POST = '-DHOLIDAY_POST="</b></font>"'
# D_BLANK_STYLE = '-DDIVIDE_BLANK_SPACE=0'

# 
# This flag controls whether 'pcal' will search for the calendar
# control/options file ('calendar') in the directory where the 'pcal'
# executable code resides.  Disabling this flag (by enabling the line below)
# prevents the search, thereby avoiding a potential conflict with any program
# named 'calendar' which has also been installed there.  Note that the
# 'pcaldefs.h' source code file enables this search by default, unless it has
# been overridden here.
# 
D_SEARCH_PCAL_DIR = '-DSEARCH_PCAL_DIR=0'

# ------------------------------------------------------------------

COPTS = $(D_MAPFONTS) $(D_TITLEFONT) $(D_DATEFONT) $(D_NOTESFONT) \
	$(D_SHADING) $(D_DATE_STYLE) $(D_FIRST_DAY) $(D_TIMEZONE) \
	$(D_EPS_DSC) $(D_LANGUAGE) $(D_BGCOLOR) $(D_BACKGROUND) \
	$(D_TEXT) $(D_LINK) $(D_ALINK) $(D_VLINK) \
	$(D_HOLIDAY_PRE) $(D_HOLIDAY_POST) $(D_BLANK_STYLE) \
	$(D_SEARCH_PCAL_DIR) $(D_BUILD_ENV)

# 
# Depending on whether we're compiling for Unix/Linux or DOS+DJGPP, use
# appropriate values as flags for the C compiler.
# 
#    '-O2' enables a 2nd-level code optimization
#    '-Wall' enables many compile-time warning messages
#    '-W' enables some additional compile-time warning messages
# 
ifeq ($(OS),DJGPP)   # DOS+DJGPP
	CFLAGS = -Wall -W
else   # Unix
	CFLAGS = -g -O2 -Wall -W
endif

$(EXECDIR)/$(PCAL):	$(OBJECTS)
	$(CC) $(LDFLAGS) -o $(EXECDIR)/$(PCAL) $(OBJECTS) -lm -lpaper
	@ echo Build of $(PCAL) for $(OS_NAME) completed.

$(OBJDIR)/encvec.o:	$(SRCDIR)/encvec.c
	$(CC) $(CFLAGS) $(COPTS) -o $@ -c $(SRCDIR)/encvec.c

$(OBJDIR)/exprpars.o:	$(SRCDIR)/exprpars.c $(SRCDIR)/pcaldefs.h \
			$(SRCDIR)/protos.h
	$(CC) $(CFLAGS) $(COPTS) -o $@ -c $(SRCDIR)/exprpars.c

$(OBJDIR)/moonphas.o:	$(SRCDIR)/moonphas.c $(SRCDIR)/pcaldefs.h \
			$(SRCDIR)/pcallang.h \
			$(SRCDIR)/protos.h
	$(CC) $(CFLAGS) $(COPTS) -o $@ -c $(SRCDIR)/moonphas.c

$(OBJDIR)/pcal.o:	$(SRCDIR)/pcal.c $(SRCDIR)/pcaldefs.h \
			$(SRCDIR)/pcallang.h \
			$(SRCDIR)/protos.h
	$(CC) $(CFLAGS) $(COPTS) -o $@ -c $(SRCDIR)/pcal.c

$(OBJDIR)/pcallang.o:	$(SRCDIR)/pcallang.c $(SRCDIR)/pcallang.h \
			$(SRCDIR)/pcaldefs.h
	$(CC) $(CFLAGS) $(COPTS) -o $@ -c $(SRCDIR)/pcallang.c

$(OBJDIR)/pcalutil.o:	$(SRCDIR)/pcalutil.c $(SRCDIR)/pcaldefs.h \
			$(SRCDIR)/pcallang.h \
			$(SRCDIR)/protos.h
	$(CC) $(CFLAGS) $(COPTS) -o $@ -c $(SRCDIR)/pcalutil.c

$(OBJDIR)/readfile.o:	$(SRCDIR)/readfile.c $(SRCDIR)/pcaldefs.h \
			$(SRCDIR)/pcallang.h \
			$(SRCDIR)/protos.h
	$(CC) $(CFLAGS) $(COPTS) -o $@ -c $(SRCDIR)/readfile.c

$(OBJDIR)/writefil.o:	$(SRCDIR)/writefil.c $(SRCDIR)/pcaldefs.h \
			$(SRCDIR)/pcallang.h \
			$(SRCDIR)/protos.h 
	$(CC) $(CFLAGS) $(COPTS) -o $@ -c $(SRCDIR)/writefil.c

# 
# This target will delete everything except the 'pcal' executable.
# 
clean:
	rm -f $(OBJECTS) \
		$(DOCDIR)/pcal.cat $(DOCDIR)/pcal-help.ps \
		$(DOCDIR)/pcal-help.html $(DOCDIR)/pcal-help.txt

# 
# This target will delete everything, including the 'pcal' executable.
# 
clobber: clean
	rm -f $(EXECDIR)/$(PCAL)

# 
# This target will delete everything and rebuild 'pcal' from scratch.
# 
fresh:	clobber $(PCAL)

man:	$(DOCDIR)/pcal.man
	nroff -man $(DOCDIR)/pcal.man > $(DOCDIR)/pcal.cat
	groff -man -Tps $(DOCDIR)/pcal.man >$(DOCDIR)/pcal-help.ps
	groff -man -Thtml $(DOCDIR)/pcal.man >$(DOCDIR)/pcal-help.html
	groff -man -Tascii $(DOCDIR)/pcal.man >$(DOCDIR)/pcal-help.txt

install:	$(EXECDIR)/$(PCAL) man
	mkdir -p $(DESTDIR)/$(BINDIR)
	mkdir -p $(DESTDIR)/$(MANDIR)
#	mkdir -p $(DESTDIR)/$(CATDIR)
	cp $(EXECDIR)/$(PCAL) $(DESTDIR)/$(BINDIR)
	cp $(DOCDIR)/pcal.man $(DESTDIR)/$(MANDIR)/pcal.1
	$(PACK) $(DESTDIR)/$(MANDIR)/pcal.1
#	cp $(DOCDIR)/pcal.cat $(DESTDIR)/$(CATDIR)/pcal.1
#	$(PACK) $(DESTDIR)/$(CATDIR)/pcal.1