Makefile revision 1.8 1 # <pre>
2 # This file is in the public domain, so clarified as of
3 # 2009-05-17 by Arthur David Olson.
4
5 # Version numbers of the code and data distributions.
6 VERSION = 2012h
7
8 # Change the line below for your time zone (after finding the zone you want in
9 # the time zone files, or adding it to a time zone file).
10 # Alternately, if you discover you've got the wrong time zone, you can just
11 # zic -l rightzone
12 # to correct things.
13 # Use the command
14 # make zonenames
15 # to get a list of the values you can use for LOCALTIME.
16
17 LOCALTIME= GMT
18
19 # If you want something other than Eastern United States time as a template
20 # for handling POSIX-style time zone environment variables,
21 # change the line below (after finding the zone you want in the
22 # time zone files, or adding it to a time zone file).
23 # (When a POSIX-style environment variable is handled, the rules in the
24 # template file are used to determine "spring forward" and "fall back" days and
25 # times; the environment variable itself specifies UTC offsets of standard and
26 # summer time.)
27 # Alternately, if you discover you've got the wrong time zone, you can just
28 # zic -p rightzone
29 # to correct things.
30 # Use the command
31 # make zonenames
32 # to get a list of the values you can use for POSIXRULES.
33 # If you want POSIX compatibility, use "America/New_York".
34
35 POSIXRULES= America/New_York
36
37 # Also see TZDEFRULESTRING below, which takes effect only
38 # if the time zone files cannot be accessed.
39
40 # Everything gets put in subdirectories of. . .
41
42 TOPDIR= /usr/local
43
44 # "Compiled" time zone information is placed in the "TZDIR" directory
45 # (and subdirectories).
46 # Use an absolute path name for TZDIR unless you're just testing the software.
47
48 TZDIR= $(TOPDIR)/etc/zoneinfo
49
50 # The "tzselect", "zic", and "zdump" commands get installed in. . .
51
52 ETCDIR= $(TOPDIR)/etc
53
54 # If you "make INSTALL", the "date" command gets installed in. . .
55
56 BINDIR= $(TOPDIR)/bin
57
58 # Manual pages go in subdirectories of. . .
59
60 MANDIR= $(TOPDIR)/man
61
62 # Library functions are put in an archive in LIBDIR.
63
64 LIBDIR= $(TOPDIR)/lib
65 TZLIB= $(LIBDIR)/libtz.a
66
67 # If you always want time values interpreted as "seconds since the epoch
68 # (not counting leap seconds)", use
69 # REDO= posix_only
70 # below. If you always want right time values interpreted as "seconds since
71 # the epoch" (counting leap seconds)", use
72 # REDO= right_only
73 # below. If you want both sets of data available, with leap seconds not
74 # counted normally, use
75 # REDO= posix_right
76 # below. If you want both sets of data available, with leap seconds counted
77 # normally, use
78 # REDO= right_posix
79 # below.
80 # POSIX mandates that leap seconds not be counted; for compatibility with it,
81 # use either "posix_only" or "posix_right".
82
83 REDO= posix_right
84
85 # Since "." may not be in PATH...
86
87 YEARISTYPE= ./yearistype
88
89 # Non-default libraries needed to link.
90 # Add -lintl if you want to use `gettext' on Solaris.
91 LDLIBS=
92
93 # Add the following to the end of the "CFLAGS=" line as needed.
94 # -DHAVE_ADJTIME=0 if `adjtime' does not exist (SVR0?)
95 # -DHAVE_GETTEXT=1 if `gettext' works (GNU, Linux, Solaris); also see LDLIBS
96 # -DHAVE_INCOMPATIBLE_CTIME_R=1 if your system's time.h declares
97 # ctime_r and asctime_r incompatibly with the POSIX standard (Solaris 8).
98 # -DHAVE_SETTIMEOFDAY=0 if settimeofday does not exist (SVR0?)
99 # -DHAVE_SETTIMEOFDAY=1 if settimeofday has just 1 arg (SVR4)
100 # -DHAVE_SETTIMEOFDAY=2 if settimeofday uses 2nd arg (4.3BSD)
101 # -DHAVE_SETTIMEOFDAY=3 if settimeofday ignores 2nd arg (4.4BSD)
102 # -DHAVE_STDINT_H=1 if you have a pre-C99 compiler with "stdint.h"
103 # -DHAVE_SYMLINK=0 if your system lacks the symlink function
104 # -DHAVE_SYS_STAT_H=0 if your compiler lacks a "sys/stat.h"
105 # -DHAVE_SYS_WAIT_H=0 if your compiler lacks a "sys/wait.h"
106 # -DLOCALE_HOME=\"path\" if locales are in "path", not "/usr/lib/locale"
107 # -DHAVE_UNISTD_H=0 if your compiler lacks a "unistd.h" (Microsoft C++ 7?)
108 # -DHAVE_UTMPX_H=1 if your compiler has a "utmpx.h"
109 # -DTZDEFRULESTRING=\",date/time,date/time\" to default to the specified
110 # DST transitions if the time zone files cannot be accessed
111 # -DTZ_DOMAIN=\"foo\" to use "foo" for gettext domain name; default is "tz"
112 # -TTZ_DOMAINDIR=\"/path\" to use "/path" for gettext directory;
113 # the default is system-supplied, typically "/usr/lib/locale"
114 # $(GCC_DEBUG_FLAGS) if you are using GCC and want lots of checking
115 # -DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU=1
116 # if you do not want run time warnings about formats that may cause
117 # year 2000 grief
118 # -DNO_ERROR_IN_DST_GAP=1
119 # if you want mktime() not to return an error in the DST gap.
120 # -DZIC_MAX_ABBR_LEN_WO_WARN=3
121 # (or some other number) to set the maximum time zone abbreviation length
122 # that zic will accept without a warning (the default is 6)
123 GCC_DEBUG_FLAGS = -Dlint -g3 -O3 -fno-common -fstrict-aliasing \
124 -Wall -Wextra \
125 -Wbad-function-cast -Wcast-align -Wcast-qual \
126 -Wformat=2 -Winit-self \
127 -Wmissing-declarations -Wmissing-noreturn -Wmissing-prototypes \
128 -Wnested-externs \
129 -Wno-format-nonliteral -Wno-sign-compare -Wno-sign-conversion \
130 -Wno-type-limits \
131 -Wno-unused-parameter -Woverlength-strings -Wpointer-arith \
132 -Wshadow -Wstrict-prototypes -Wsuggest-attribute=const \
133 -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wtrampolines \
134 -Wwrite-strings
135 #
136 # If you want to use System V compatibility code, add
137 # -DUSG_COMPAT
138 # to the end of the "CFLAGS=" line. This arrange for "timezone" and "daylight"
139 # variables to be kept up-to-date by the time conversion functions. Neither
140 # "timezone" nor "daylight" is described in X3J11's work.
141 #
142 # If your system has a "GMT offset" field in its "struct tm"s
143 # (or if you decide to add such a field in your system's "time.h" file),
144 # add the name to a define such as
145 # -DTM_GMTOFF=tm_gmtoff
146 # or
147 # -DTM_GMTOFF=_tm_gmtoff
148 # to the end of the "CFLAGS=" line.
149 # Neither tm_gmtoff nor _tm_gmtoff is described in X3J11's work;
150 # in its work, use of "tm_gmtoff" is described as non-conforming.
151 # Both Linux and BSD have done the equivalent of defining TM_GMTOFF in
152 # their recent releases.
153 #
154 # If your system has a "zone abbreviation" field in its "struct tm"s
155 # (or if you decide to add such a field in your system's "time.h" file),
156 # add the name to a define such as
157 # -DTM_ZONE=tm_zone
158 # or
159 # -DTM_ZONE=_tm_zone
160 # to the end of the "CFLAGS=" line.
161 # Neither tm_zone nor _tm_zone is described in X3J11's work;
162 # in its work, use of "tm_zone" is described as non-conforming.
163 # Both UCB and Sun have done the equivalent of defining TM_ZONE in
164 # their recent releases.
165 #
166 # If you want functions that were inspired by early versions of X3J11's work,
167 # add
168 # -DSTD_INSPIRED
169 # to the end of the "CFLAGS=" line. This arranges for the functions
170 # "tzsetwall", "offtime", "timelocal", "timegm", "timeoff",
171 # "posix2time", and "time2posix" to be added to the time conversion library.
172 # "tzsetwall" is like "tzset" except that it arranges for local wall clock
173 # time (rather than the time specified in the TZ environment variable)
174 # to be used.
175 # "offtime" is like "gmtime" except that it accepts a second (long) argument
176 # that gives an offset to add to the time_t when converting it.
177 # "timelocal" is equivalent to "mktime".
178 # "timegm" is like "timelocal" except that it turns a struct tm into
179 # a time_t using UTC (rather than local time as "timelocal" does).
180 # "timeoff" is like "timegm" except that it accepts a second (long) argument
181 # that gives an offset to use when converting to a time_t.
182 # "posix2time" and "time2posix" are described in an included manual page.
183 # X3J11's work does not describe any of these functions.
184 # Sun has provided "tzsetwall", "timelocal", and "timegm" in SunOS 4.0.
185 # These functions may well disappear in future releases of the time
186 # conversion package.
187 #
188 # If you want Source Code Control System ID's left out of object modules, add
189 # -DNOID
190 # to the end of the "CFLAGS=" line.
191 #
192 # If you'll never want to handle solar-time-based time zones, add
193 # -DNOSOLAR
194 # to the end of the "CFLAGS=" line
195 # (and comment out the "SDATA=" line below).
196 # This reduces (slightly) the run-time data-space requirements of
197 # the time conversion functions; it may reduce the acceptability of your system
198 # to folks in oil- and cash-rich places.
199 #
200 # If you want to allocate state structures in localtime, add
201 # -DALL_STATE
202 # to the end of the "CFLAGS=" line. Storage is obtained by calling malloc.
203 #
204 # If you want an "altzone" variable (a la System V Release 3.1), add
205 # -DALTZONE
206 # to the end of the "CFLAGS=" line.
207 # This variable is not described in X3J11's work.
208 #
209 # If you want a "gtime" function (a la MACH), add
210 # -DCMUCS
211 # to the end of the "CFLAGS=" line
212 # This function is not described in X3J11's work.
213 #
214 # NIST-PCTS:151-2, Version 1.4, (1993-12-03) is a test suite put
215 # out by the National Institute of Standards and Technology
216 # which claims to test C and Posix conformance. If you want to pass PCTS, add
217 # -DPCTS
218 # to the end of the "CFLAGS=" line.
219 #
220 # If you want strict compliance with XPG4 as of 1994-04-09, add
221 # -DXPG4_1994_04_09
222 # to the end of the "CFLAGS=" line. This causes "strftime" to always return
223 # 53 as a week number (rather than 52 or 53) for those days in January that
224 # before the first Monday in January when a "%V" format is used and January 1
225 # falls on a Friday, Saturday, or Sunday.
226
227 CFLAGS=
228
229 # If you want zic's -s option used when installing, uncomment the next line
230 # ZFLAGS= -s
231
232 zic= ./zic
233 ZIC= $(zic) $(ZFLAGS)
234
235 # The name of a Posix-compliant `awk' on your system.
236 AWK= nawk
237
238 # The path where SGML DTDs are kept.
239 # The default is appropriate for Ubuntu.
240 SGML_TOPDIR= /usr
241 SGML_SEARCH_PATH= $(SGML_TOPDIR)/share/xml/xhtml/schema/dtd/REC-html401-19991224
242
243 # The catalog file(s) to use when validating.
244 SGML_CATALOG_FILES= HTML4.cat
245
246 # The name, arguments and environment of a program to validate your web pages.
247 # See <http://www.jclark.com/sp/> for a validator, and
248 # <http://validator.w3.org/source/> for a validation library.
249 VALIDATE = nsgmls
250 VALIDATE_FLAGS = -s -B -wall -wno-unused-param
251 VALIDATE_ENV = \
252 SGML_CATALOG_FILES=$(SGML_CATALOG_FILES) \
253 SGML_SEARCH_PATH=$(SGML_SEARCH_PATH) \
254 SP_CHARSET_FIXED=YES \
255 SP_ENCODING=UTF-8
256
257 # Flags to give 'tar' when making a distribution.
258 # Try to use flags appropriate for GNU tar.
259 GNUTARFLAGS= --numeric-owner --owner=0 --group=0 --mode=go+u,go-w
260 TARFLAGS= `if tar $(GNUTARFLAGS) --version >/dev/null 2>&1; \
261 then echo $(GNUTARFLAGS); \
262 else :; \
263 fi`
264
265 # Flags to give 'gzip' when making a distribution.
266 GZIPFLAGS= -9n
267
268 ###############################################################################
269
270 cc= cc
271 CC= $(cc) -DTZDIR=\"$(TZDIR)\"
272
273 TZCSRCS= zic.c localtime.c asctime.c scheck.c ialloc.c
274 TZCOBJS= zic.o localtime.o asctime.o scheck.o ialloc.o
275 TZDSRCS= zdump.c localtime.c ialloc.c
276 TZDOBJS= zdump.o localtime.o ialloc.o
277 DATESRCS= date.c localtime.c strftime.c asctime.c
278 DATEOBJS= date.o localtime.o strftime.o asctime.o
279 LIBSRCS= localtime.c asctime.c difftime.c
280 LIBOBJS= localtime.o asctime.o difftime.o
281 HEADERS= tzfile.h private.h
282 NONLIBSRCS= zic.c zdump.c scheck.c ialloc.c
283 NEWUCBSRCS= date.c strftime.c
284 SOURCES= $(HEADERS) $(LIBSRCS) $(NONLIBSRCS) $(NEWUCBSRCS) tzselect.ksh
285 MANS= newctime.3 newstrftime.3 newtzset.3 time2posix.3 \
286 tzfile.5 tzselect.8 zic.8 zdump.8
287 COMMON= Makefile
288 DOCS= README Theory $(MANS) date.1
289 PRIMARY_YDATA= africa antarctica asia australasia \
290 europe northamerica southamerica
291 YDATA= $(PRIMARY_YDATA) pacificnew etcetera backward
292 NDATA= systemv factory
293 SDATA= solar87 solar88 solar89
294 TDATA= $(YDATA) $(NDATA) $(SDATA)
295 TABDATA= iso3166.tab zone.tab
296 DATA= $(YDATA) $(NDATA) $(SDATA) $(TABDATA) leapseconds yearistype.sh
297 WEB_PAGES= tz-art.htm tz-link.htm
298 MISC= usno1988 usno1989 usno1989a usno1995 usno1997 usno1998 \
299 $(WEB_PAGES) checktab.awk workman.sh \
300 zoneinfo2tdf.pl
301 ENCHILADA= $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC)
302
303 # And for the benefit of csh users on systems that assume the user
304 # shell should be used to handle commands in Makefiles. . .
305
306 SHELL= /bin/sh
307
308 all: tzselect zic zdump $(LIBOBJS)
309
310 ALL: all date
311
312 install: all $(DATA) $(REDO) $(TZLIB) $(MANS) $(TABDATA)
313 $(ZIC) -y $(YEARISTYPE) \
314 -d $(TZDIR) -l $(LOCALTIME) -p $(POSIXRULES)
315 -rm -f $(TZDIR)/iso3166.tab $(TZDIR)/zone.tab
316 cp iso3166.tab zone.tab $(TZDIR)/.
317 -mkdir $(TOPDIR) $(ETCDIR)
318 cp tzselect zic zdump $(ETCDIR)/.
319 -mkdir $(TOPDIR) $(MANDIR) \
320 $(MANDIR)/man3 $(MANDIR)/man5 $(MANDIR)/man8
321 -rm -f $(MANDIR)/man3/newctime.3 \
322 $(MANDIR)/man3/newtzset.3 \
323 $(MANDIR)/man5/tzfile.5 \
324 $(MANDIR)/man8/tzselect.8 \
325 $(MANDIR)/man8/zdump.8 \
326 $(MANDIR)/man8/zic.8
327 cp newctime.3 newtzset.3 $(MANDIR)/man3/.
328 cp tzfile.5 $(MANDIR)/man5/.
329 cp tzselect.8 zdump.8 zic.8 $(MANDIR)/man8/.
330
331 INSTALL: ALL install date.1
332 -mkdir $(TOPDIR) $(BINDIR)
333 cp date $(BINDIR)/.
334 -mkdir $(TOPDIR) $(MANDIR) $(MANDIR)/man1
335 -rm -f $(MANDIR)/man1/date.1
336 cp date.1 $(MANDIR)/man1/.
337
338 version.h:
339 echo >$@ \
340 'static char const TZVERSION[]="tz$(VERSION)";'
341
342 zdump: $(TZDOBJS)
343 $(CC) $(CFLAGS) $(LFLAGS) $(TZDOBJS) $(LDLIBS) -o $@
344
345 zic: $(TZCOBJS) yearistype
346 $(CC) $(CFLAGS) $(LFLAGS) $(TZCOBJS) $(LDLIBS) -o $@
347
348 yearistype: yearistype.sh
349 cp yearistype.sh yearistype
350 chmod +x yearistype
351
352 posix_only: zic $(TDATA)
353 $(ZIC) -y $(YEARISTYPE) -d $(TZDIR) -L /dev/null $(TDATA)
354
355 right_only: zic leapseconds $(TDATA)
356 $(ZIC) -y $(YEARISTYPE) -d $(TZDIR) -L leapseconds $(TDATA)
357
358 # In earlier versions of this makefile, the other two directories were
359 # subdirectories of $(TZDIR). However, this led to configuration errors.
360 # For example, with posix_right under the earlier scheme,
361 # TZ='right/Australia/Adelaide' got you localtime with leap seconds,
362 # but gmtime without leap seconds, which led to problems with applications
363 # like sendmail that subtract gmtime from localtime.
364 # Therefore, the other two directories are now siblings of $(TZDIR).
365 # You must replace all of $(TZDIR) to switch from not using leap seconds
366 # to using them, or vice versa.
367 other_two: zic leapseconds $(TDATA)
368 $(ZIC) -y $(YEARISTYPE) -d $(TZDIR)-posix -L /dev/null $(TDATA)
369 $(ZIC) -y $(YEARISTYPE) \
370 -d $(TZDIR)-leaps -L leapseconds $(TDATA)
371
372 posix_right: posix_only other_two
373
374 right_posix: right_only other_two
375
376 zones: $(REDO)
377
378 $(TZLIB): $(LIBOBJS)
379 -mkdir $(TOPDIR) $(LIBDIR)
380 ar ru $@ $(LIBOBJS)
381 if [ -x /usr/ucb/ranlib -o -x /usr/bin/ranlib ] ; \
382 then ranlib $@ ; fi
383
384 date: $(DATEOBJS)
385 $(CC) $(CFLAGS) date.o localtime.o asctime.o strftime.o \
386 $(LDLIBS) -lc -o $@
387
388 tzselect: tzselect.ksh
389 sed \
390 -e 's|AWK=[^}]*|AWK=$(AWK)|g' \
391 -e 's|TZDIR=[^}]*|TZDIR=$(TZDIR)|' \
392 -e 's|\(TZVERSION\)=.*|\1=tz$(VERSION)|' \
393 <$? >$@
394 chmod +x $@
395
396 check: check_tables check_web
397
398 check_tables: checktab.awk $(PRIMARY_YDATA)
399 $(AWK) -f checktab.awk $(PRIMARY_YDATA)
400
401 check_web: $(WEB_PAGES)
402 $(VALIDATE_ENV) $(VALIDATE) $(VALIDATE_FLAGS) $(WEB_PAGES)
403
404 clean:
405 rm -f core *.o *.out \
406 date tzselect version.h zdump zic yearistype
407
408 maintainer-clean: clean
409 @echo 'This command is intended for maintainers to use; it'
410 @echo 'deletes files that may need special tools to rebuild.'
411 rm -f *.[1-8].txt tzcode*.tar.gz tzdata*.tar.gz
412
413 names:
414 @echo $(ENCHILADA)
415
416 # Set the time stamps to those of the git repository, if available,
417 # and if the files have not changed since then.
418 # This uses GNU 'touch' syntax 'touch -d@N FILE',
419 # where N is the number of seconds since 1970.
420 # If git or GNU 'touch' is absent, do nothing.
421 set-timestamps:
422 -TZ=UTC0 && export TZ && files=`git ls-files` && \
423 touch -d @1 test.out && rm -f test.out && \
424 for file in $$files; do \
425 test -z "`git diff --name-only $$file`" || continue; \
426 cmd="touch -d @`git log -1 --format='format:%ct' $$file \
427 ` $$file" && \
428 echo "$$cmd" && \
429 $$cmd || exit; \
430 done
431
432 # The zics below ensure that each data file can stand on its own.
433 # We also do an all-files run to catch links to links.
434
435 public: $(ENCHILADA) set-timestamps
436 make maintainer-clean
437 make "CFLAGS=$(GCC_DEBUG_FLAGS)"
438 mkdir -m go-rwx /tmp/,tzpublic
439 -for i in $(TDATA) ; do zic -v -d /tmp/,tzpublic $$i 2>&1 | grep -v "starting year" ; done
440 for i in $(TDATA) ; do zic -d /tmp/,tzpublic $$i || exit; done
441 zic -v -d /tmp/,tzpublic $(TDATA) || exit
442 rm -f -r /tmp/,tzpublic
443 for i in *.[1-8] ; do \
444 LC_ALL=C sh workman.sh $$i > $$i.txt && \
445 touch -r $$i $$i.txt || exit; \
446 done
447 $(AWK) -f checktab.awk $(PRIMARY_YDATA)
448 LC_ALL=C && export LC_ALL && \
449 tar $(TARFLAGS) -cf - \
450 $(COMMON) $(DOCS) $(SOURCES) $(MISC) *.[1-8].txt | \
451 gzip $(GZIPFLAGS) > tzcode$(VERSION).tar.gz
452 LC_ALL=C && export LC_ALL && \
453 tar $(TARFLAGS) -cf - $(COMMON) $(DATA) | \
454 gzip $(GZIPFLAGS) > tzdata$(VERSION).tar.gz
455
456 typecheck:
457 make clean
458 for i in "long long" unsigned double; \
459 do \
460 make CFLAGS="-DTYPECHECK -D__time_t_defined -D_TIME_T \"-Dtime_t=$$i\"" ; \
461 ./zdump -v Europe/Rome ; \
462 make clean ; \
463 done
464
465 zonenames: $(TDATA)
466 @$(AWK) '/^Zone/ { print $$2 } /^Link/ { print $$3 }' $(TDATA)
467
468 asctime.o: private.h tzfile.h
469 date.o: private.h
470 difftime.o: private.h
471 ialloc.o: private.h
472 localtime.o: private.h tzfile.h
473 scheck.o: private.h
474 strftime.o: tzfile.h
475 zdump.o: version.h
476 zic.o: private.h tzfile.h version.h
477
478 .KEEP_STATE:
479