]> granicus.if.org Git - postgresql/commitdiff
Adjust with-system-tzdata patch to not attempt to install a symlink,
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 25 Aug 2007 20:29:25 +0000 (20:29 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 25 Aug 2007 20:29:25 +0000 (20:29 +0000)
but just hardwire the specified timezone database path into the executable.
Per discussion, this avoids some packaging disadvantages of using a
symlink.

doc/src/sgml/installation.sgml
src/timezone/Makefile
src/timezone/pgtz.c

index 0b5899c1ae7e481994662256866d35156e8bd751..3f952ebaf3733262525b81c1324b6c98333c14aa 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.291 2007/08/20 08:53:12 petere Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.292 2007/08/25 20:29:25 tgl Exp $ -->
 
 <chapter id="installation">
  <title><![%standalone-include[<productname>PostgreSQL</>]]>
@@ -1028,20 +1028,21 @@ su - postgres
        </indexterm>
        <listitem>
         <para>
-         PostgreSQL includes its own time zone database, which it
-         requires for date and time operations.  This time zone
-         database is in fact compatible with the time zone database
-         provided by many operating systems such as FreeBSD, Linux,
-         and Solaris, so it would be redundant to install it again.
-         When this option is used, the operating system supplied time
-         zone database in <replaceable>DIRECTORY</replaceable> is used
-         instead of the one included in the PostgreSQL source
-         distribution.  <filename>/usr/share/zoneinfo/</filename> is a
+         <productname>PostgreSQL</> includes its own time zone database,
+         which it requires for date and time operations.  This time zone
+         database is in fact compatible with the <quote>zic</> time zone
+         database provided by many operating systems such as FreeBSD,
+         Linux, and Solaris, so it would be redundant to install it again.
+         When this option is used, the system-supplied time zone database
+         in <replaceable>DIRECTORY</replaceable> is used instead of the one
+         included in the PostgreSQL source distribution.
+         <replaceable>DIRECTORY</replaceable> must be specified as an
+         absolute path.  <filename>/usr/share/zoneinfo</filename> is a
          likely directory on some operating systems.  Note that the
-         installation routine does not detect mismatching or erroneous
-         time zone data.  You are advised to run the regression tests
-         to verify that the time zone data you have pointed to works
-         correctly.
+         installation routine will not detect mismatching or erroneous time
+         zone data.  If you use this option, you are advised to run the
+         regression tests to verify that the time zone data you have
+         pointed to works correctly with <productname>PostgreSQL</>.
         </para>
 
         <para>
@@ -1049,11 +1050,10 @@ su - postgres
          who know their target operating system well.  The main
          advantage of using this option is that the PostgreSQL package
          won't need to be upgraded whenever any of the many local
-         daylight-saving time rules changes.  Another completely
-         incidental advantage is that PostgreSQL can be
-         cross-compiled<indexterm><primary>cross
-         compilation</primary></indexterm> straightforwardly if the
-         time-zone database does not need to be built during the
+         daylight-saving time rules change.  Another advantage is that
+         PostgreSQL can be cross-compiled<indexterm><primary>cross
+         compilation</primary></indexterm> more straightforwardly if the
+         time zone database files do not need to be built during the
          installation.
         </para>
        </listitem>
index f5667809f99ace791c9df8fa9a61e299ba8cbb96..d4ad6f0790a73cb988069129f70551a8a335badb 100644 (file)
@@ -4,7 +4,7 @@
 #    Makefile for the timezone library
 
 # IDENTIFICATION
-#    $PostgreSQL: pgsql/src/timezone/Makefile,v 1.27 2007/08/20 08:53:12 petere Exp $
+#    $PostgreSQL: pgsql/src/timezone/Makefile,v 1.28 2007/08/25 20:29:25 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -27,21 +27,26 @@ TZDATAFILES = $(TZDATA:%=$(srcdir)/data/%)
 # for POSIX-style timezone specs
 POSIXRULES = US/Eastern
 
-all: SUBSYS.o submake-libpgport zic
+# use system timezone data?
+ifneq (,$(with_system_tzdata))
+override CPPFLAGS += '-DSYSTEMTZDIR="$(with_system_tzdata)"'
+endif
+
+all: SUBSYS.o
+
+ifeq (,$(with_system_tzdata))
+all: submake-libpgport zic
+endif
 
 SUBSYS.o: $(OBJS)
        $(LD) $(LDREL) $(LDOUT) SUBSYS.o $(OBJS)
 
-ifeq (,$(with_system_tzdata))
 zic: $(ZICOBJS)
        $(CC) $(CFLAGS) $(ZICOBJS) $(LDFLAGS) $(LIBS) -o $@$(X)
-endif
 
 install: all installdirs
 ifeq (,$(with_system_tzdata))
        ./zic -d '$(DESTDIR)$(datadir)/timezone' -p '$(POSIXRULES)' $(TZDATAFILES)
-else
-       ln -s '$(with_system_tzdata)' '$(DESTDIR)$(datadir)/timezone'
 endif
        $(MAKE) -C tznames $@
 
@@ -49,7 +54,9 @@ installdirs:
        $(mkinstalldirs) '$(DESTDIR)$(datadir)'
 
 uninstall:
+ifeq (,$(with_system_tzdata))
        rm -rf '$(DESTDIR)$(datadir)/timezone'
+endif
        $(MAKE) -C tznames $@
 
 clean distclean maintainer-clean:
index ad599c70936d65cdbc725d610e1d0d08ba3ef3bd..7370a9306d5975d5caaaa3d279cf6c04e68e6eaf 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/timezone/pgtz.c,v 1.53 2007/08/04 19:29:25 tgl Exp $
+ *       $PostgreSQL: pgsql/src/timezone/pgtz.c,v 1.54 2007/08/25 20:29:25 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -38,9 +38,6 @@ pg_tz    *gmt_timezone = NULL;
 static pg_tz gmt_timezone_data;
 
 
-static char tzdir[MAXPGPATH];
-static bool done_tzdir = false;
-
 static bool scan_directory_ci(const char *dirname,
                                                          const char *fname, int fnamelen,
                                                          char *canonname, int canonnamelen);
@@ -52,9 +49,14 @@ static pg_tz *select_default_timezone(void);
 /*
  * Return full pathname of timezone data directory
  */
-static char *
+static const char *
 pg_TZDIR(void)
 {
+#ifndef SYSTEMTZDIR
+       /* normal case: timezone stuff is under our share dir */
+       static bool done_tzdir = false;
+       static char tzdir[MAXPGPATH];
+
        if (done_tzdir)
                return tzdir;
 
@@ -63,6 +65,10 @@ pg_TZDIR(void)
 
        done_tzdir = true;
        return tzdir;
+#else
+       /* we're configured to use system's timezone database */
+       return SYSTEMTZDIR;
+#endif
 }