</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>
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>
# 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 $@
$(mkinstalldirs) '$(DESTDIR)$(datadir)'
uninstall:
+ifeq (,$(with_system_tzdata))
rm -rf '$(DESTDIR)$(datadir)/timezone'
+endif
$(MAKE) -C tznames $@
clean distclean maintainer-clean:
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);
/*
* 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;
done_tzdir = true;
return tzdir;
+#else
+ /* we're configured to use system's timezone database */
+ return SYSTEMTZDIR;
+#endif
}