[tz] Minor build fixes (#3)

Paul Eggert eggert at cs.ucla.edu
Wed Oct 2 17:51:01 UTC 2013


Thanks, I pushed the following slightly-more-ambitious patch, which
I think addresses all the issues you raised.

>From 1d67c5bfca504b728bd7dd22d19128721196e20e Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert at cs.ucla.edu>
Date: Wed, 2 Oct 2013 10:48:46 -0700
Subject: [PATCH] build: Makefile fixes; let user give AR and RANLIB; local
 libtz.a

* Makefile: Let the user override AR, and build libtz.a before
installing it, as suggested by Michael Forney in
<https://github.com/eggert/tz/pull/3>.  Also, let the user
override RANLIB.  Modernize a bit by assuming POSIX.2-1992 or
later; this is safe nowadays and simplifies the libtz.a business.
And treat 'leapseconds' more like we used to, since it's
machine-independent a 'make clean' doesn't need to remove it.
(TZLIB): Remove.
(AR, RANLIB): New macros.
(TABDATA): Add leapseconds, so that 'make' builds it by default.
(DATA): Remove leapseconds, since $(TABDATA) now has it.
(all): Depend on libtz.a, not $(LIBOBJS).
(install): Install libtz.a using 'cp', like other files.
Also invoke $(RANLIB) on it, after installing.
Do not assume that TZDIR is not overridden.
(install, INSTALL, check_time_t_alternatives): Use 'mkdir -p', as
it's safe to assume nowadays (standardized in POSIX.2-1992).
(install, INSTALL): Prefer 'cp -f' to 'rm' followed by 'cp', as
it's safe to assume 'cp -f' nowadays (also standardized in POSIX.2-1992).
(libtz.a): Rename from $(DESTDIR)$(TZLIB), since we now build it here.
Use $(AR) rather than ar.
Use $(RANLIB) rather than trying to guess it.
(clean_misc): Do not remove 'leapseconds', as it's machine-independent.
(maintainer-clean): Remove 'leapseconds' here instead.
(clean, check_public): Standardize on 'rm -fr' rather than 'rm -f -r';
formerly the makefile was inconsistent.
(set-timestamps.out): Don't ignore failurs of the actual touch command.
---
 Makefile | 92 ++++++++++++++++++++++++++++++----------------------------------
 1 file changed, 43 insertions(+), 49 deletions(-)

diff --git a/Makefile b/Makefile
index 1f83dde..74923e7 100644
--- a/Makefile
+++ b/Makefile
@@ -72,7 +72,6 @@ MANDIR=        $(TOPDIR)/man
 # Library functions are put in an archive in LIBDIR.
 
 LIBDIR=        $(TOPDIR)/lib
-TZLIB=        $(LIBDIR)/libtz.a
 
 # If you always want time values interpreted as "seconds since the epoch
 # (not counting leap seconds)", use
@@ -298,6 +297,11 @@ GZIPFLAGS=    -9n
 cc=        cc
 CC=        $(cc) -DTZDIR=\"$(TZDIR)\"
 
+AR=        ar
+
+# ':' on typical hosts; 'ranlib' on the ancient hosts that still need ranlib.
+RANLIB=        :
+
 TZCOBJS=    zic.o localtime.o asctime.o scheck.o ialloc.o
 TZDOBJS=    zdump.o localtime.o ialloc.o asctime.o
 DATEOBJS=    date.o localtime.o strftime.o asctime.o
@@ -321,10 +325,10 @@ YDATA=        $(PRIMARY_YDATA) pacificnew etcetera backward
 NDATA=        systemv factory
 SDATA=        solar87 solar88 solar89
 TDATA=        $(YDATA) $(NDATA) $(SDATA)
-TABDATA=    iso3166.tab zone.tab
+TABDATA=    iso3166.tab zone.tab leapseconds
 LEAP_DEPS=    leapseconds.awk leap-seconds.list
 DATA=        $(YDATA) $(NDATA) $(SDATA) $(TABDATA) \
-            leapseconds $(LEAP_DEPS) yearistype.sh
+            $(LEAP_DEPS) yearistype.sh
 WEB_PAGES=    tz-art.htm tz-link.htm
 AWK_SCRIPTS=    checktab.awk leapseconds.awk
 MISC=        usno1988 usno1989 usno1989a usno1995 usno1997 usno1998 \
@@ -337,38 +341,29 @@ ENCHILADA=    $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC)
 
 SHELL=        /bin/sh
 
-all:        tzselect zic zdump $(LIBOBJS) $(TABDATA)
+all:        tzselect zic zdump libtz.a $(TABDATA)
 
 ALL:        all date
 
-install:    all $(DATA) $(REDO) $(DESTDIR)$(TZLIB) $(MANS)
+install:    all $(DATA) $(REDO) $(MANS)
+        mkdir -p $(DESTDIR)$(ETCDIR) $(DESTDIR)$(TZDIR) \
+            $(DESTDIR)$(LIBDIR) \
+            $(DESTDIR)$(MANDIR)/man3 $(DESTDIR)$(MANDIR)/man5 \
+            $(DESTDIR)$(MANDIR)/man8
         $(ZIC) -y $(YEARISTYPE) \
             -d $(DESTDIR)$(TZDIR) -l $(LOCALTIME) -p $(POSIXRULES)
-        -rm -f $(DESTDIR)$(TZDIR)/iso3166.tab \
-            $(DESTDIR)$(TZDIR)/zone.tab
-        cp iso3166.tab zone.tab $(DESTDIR)$(TZDIR)/.
-        -mkdir $(DESTDIR)$(TOPDIR) $(DESTDIR)$(ETCDIR)
+        cp -f iso3166.tab zone.tab $(DESTDIR)$(TZDIR)/.
         cp tzselect zic zdump $(DESTDIR)$(ETCDIR)/.
-        -mkdir $(DESTDIR)$(TOPDIR) $(DESTDIR)$(MANDIR) \
-            $(DESTDIR)$(MANDIR)/man3 $(DESTDIR)$(MANDIR)/man5 \
-            $(DESTDIR)$(MANDIR)/man8
-        -rm -f $(DESTDIR)$(MANDIR)/man3/newctime.3 \
-            $(DESTDIR)$(MANDIR)/man3/newtzset.3 \
-            $(DESTDIR)$(MANDIR)/man5/tzfile.5 \
-            $(DESTDIR)$(MANDIR)/man8/tzselect.8 \
-            $(DESTDIR)$(MANDIR)/man8/zdump.8 \
-            $(DESTDIR)$(MANDIR)/man8/zic.8
-        cp newctime.3 newtzset.3 $(DESTDIR)$(MANDIR)/man3/.
-        cp tzfile.5 $(DESTDIR)$(MANDIR)/man5/.
-        cp tzselect.8 zdump.8 zic.8 $(DESTDIR)$(MANDIR)/man8/.
+        cp libtz.a $(DESTDIR)$(LIBDIR)/.
+        $(RANLIB) $(DESTDIR)$(LIBDIR)/libtz.a
+        cp -f newctime.3 newtzset.3 $(DESTDIR)$(MANDIR)/man3/.
+        cp -f tzfile.5 $(DESTDIR)$(MANDIR)/man5/.
+        cp -f tzselect.8 zdump.8 zic.8 $(DESTDIR)$(MANDIR)/man8/.
 
 INSTALL:    ALL install date.1
-        -mkdir $(DESTDIR)$(TOPDIR) $(DESTDIR)$(BINDIR)
+        mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(MANDIR)/man1
         cp date $(DESTDIR)$(BINDIR)/.
-        -mkdir $(DESTDIR)$(TOPDIR) $(DESTDIR)$(MANDIR) \
-            $(DESTDIR)$(MANDIR)/man1
-        -rm -f $(DESTDIR)$(MANDIR)/man1/date.1
-        cp date.1 $(DESTDIR)$(MANDIR)/man1/.
+        cp -f date.1 $(DESTDIR)$(MANDIR)/man1/.
 
 version.h:
         (echo 'static char const PKGVERSION[]="($(PACKAGE)) ";' && \
@@ -423,11 +418,9 @@ posix_right:    posix_only leapseconds
 
 zones:        $(REDO)
 
-$(DESTDIR)$(TZLIB): $(LIBOBJS)
-        -mkdir -p $(DESTDIR)$(TOPDIR) $(DESTDIR)$(LIBDIR)
-        ar ru $@ $(LIBOBJS)
-        if [ -x /usr/ucb/ranlib ] || [ -x /usr/bin/ranlib ]; \
-            then ranlib $@ ; fi
+libtz.a:    $(LIBOBJS)
+        $(AR) ru $@ $(LIBOBJS)
+        $(RANLIB) $@
 
 date:        $(DATEOBJS)
         $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(DATEOBJS) $(LDLIBS)
@@ -456,14 +449,14 @@ check_web:    $(WEB_PAGES)
 
 clean_misc:
         rm -f core *.o *.out \
-          date leapseconds tzselect version.h zdump zic yearistype
+          date tzselect version.h zdump zic yearistype
 clean:        clean_misc
-        rm -f -r tzpublic
+        rm -fr tzpublic
 
 maintainer-clean: clean
         @echo 'This command is intended for maintainers to use; it'
         @echo 'deletes files that may need special tools to rebuild.'
-        rm -f $(MANTXTS) *.asc *.tar.gz
+        rm -f leapseconds $(MANTXTS) *.asc *.tar.gz
 
 names:
         @echo $(ENCHILADA)
@@ -488,21 +481,23 @@ $(MANTXTS):    workman.sh
 # and if the files have not changed since then.
 # This uses GNU 'touch' syntax 'touch -d at N FILE',
 # where N is the number of seconds since 1970.
-# If git or GNU 'touch' is absent, do nothing and fail.
+# If git or GNU 'touch' is absent, don't bother to sync with git timestamps.
 # Also, set the timestamp of each prebuilt file like 'leapseconds'
 # to be the maximum of the files it depends on.
 set-timestamps.out: $(ENCHILADA)
         rm -f $@
-        -files=`git ls-files $(ENCHILADA)` && \
-        touch -md @1 test.out && rm -f test.out && \
-        for file in $$files; do \
-          if git diff --quiet $$file; then \
-            time=`git log -1 --format='tformat:%ct' $$file` && \
-            touch -cmd @$$time $$file; \
-          else \
-            echo >&2 "$$file: warning: does not match repository"; \
-          fi || exit; \
-        done
+        if files=`git ls-files $(ENCHILADA)` && \
+           touch -md @1 test.out; then \
+          rm -f test.out && \
+          for file in $$files; do \
+            if git diff --quiet $$file; then \
+              time=`git log -1 --format='tformat:%ct' $$file` && \
+              touch -cmd @$$time $$file; \
+            else \
+              echo >&2 "$$file: warning: does not match repository"; \
+            fi || exit; \
+          done; \
+        fi
         touch -cmr `ls -t $(LEAP_DEPS) | sed 1q` leapseconds
         for file in `ls $(MANTXTS) | sed 's/\.txt$$//'`; do \
           touch -cmr `ls -t $$file workman.sh | sed 1q` $$file.txt || \
@@ -521,15 +516,14 @@ check_public:    $(ENCHILADA)
           $(zic) -v -d tzpublic $$i 2>&1 || exit; \
         done
         $(zic) -v -d tzpublic $(TDATA)
-        rm -f -r tzpublic
+        rm -fr tzpublic
 
 # Check that the code works under various alternative
 # implementations of time_t.
 check_time_t_alternatives:
-        mkdir tzpublic
         zones=`$(AWK) '/^[^#]/ { print $$3 }' <zone.tab` && \
         for type in $(TIME_T_ALTERNATIVES); do \
-          mkdir tzpublic/$$type && \
+          mkdir -p tzpublic/$$type && \
           make clean_misc && \
           make TOPDIR=`pwd`/tzpublic/$$type \
             CFLAGS='$(CFLAGS) -Dtime_tz='"'$$type'" \
@@ -550,7 +544,7 @@ check_time_t_alternatives:
           diff -u tzpublic/int64_t.out tzpublic/$$type.out \
             || exit; \
         done
-        rm -f -r tzpublic
+        rm -fr tzpublic
 
 tarballs:    tzcode$(VERSION).tar.gz tzdata$(VERSION).tar.gz
 
-- 
1.8.3.1




More information about the tz mailing list