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 8fb93f228f498e584272c61f6fcdc675ccaa1384..9c8645a04111a5311acc78c6871bee4fbd5ecb17 100644 (file)
@@ -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 d9176e2a83650799728016792fcc279184c24fb5..ce02fa7b78860b37a48c7797259bbf65067dfa48 100644 (file)
@@ -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 f7c42494d2c04c5d4ca0443f5a81636bd3669bdb..de3260507e978f3734b9e4d80fb81dc73cfb95e4 100644 (file)
@@ -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
 }