From: Tom Lane Date: Sat, 25 Aug 2007 20:29:25 +0000 (+0000) Subject: Adjust with-system-tzdata patch to not attempt to install a symlink, X-Git-Tag: REL8_3_BETA1~294 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=75d5f6fe791439fa925cd3a3b06c97ce2ddd705f;p=postgresql Adjust with-system-tzdata patch to not attempt to install a symlink, but just hardwire the specified timezone database path into the executable. Per discussion, this avoids some packaging disadvantages of using a symlink. --- diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index 0b5899c1ae..3f952ebaf3 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -1,4 +1,4 @@ - + <![%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> diff --git a/src/timezone/Makefile b/src/timezone/Makefile index f5667809f9..d4ad6f0790 100644 --- a/src/timezone/Makefile +++ b/src/timezone/Makefile @@ -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: diff --git a/src/timezone/pgtz.c b/src/timezone/pgtz.c index ad599c7093..7370a9306d 100644 --- a/src/timezone/pgtz.c +++ b/src/timezone/pgtz.c @@ -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 }