OS timezone files support - Mailing list pgsql-patches
From | Zdenek Kotala |
---|---|
Subject | OS timezone files support |
Date | |
Msg-id | 4602B19B.6080208@sun.com Whole thread Raw |
Responses |
Re: OS timezone files support
|
List | pgsql-patches |
This patch brings possibility to switch from default build-in timezone to another timezone source - typically to OS timezone location. This enhancement helps to packagers easy solve integration problem with systems Timezones. If --with-tzdir=/usr/share/zoneinfo is specified as ./configure parameter, postgres will use timezone files from /usr/share/zoneinfo directory and build-in timezone files will not be installed by make install command. It was discussed few weeks ago: http://archives.postgresql.org/pgsql-hackers/2007-03/msg00784.php With regards Zdenek Index: configure.in =================================================================== RCS file: /projects/cvsroot/pgsql/configure.in,v retrieving revision 1.503 diff -c -r1.503 configure.in *** configure.in 21 Mar 2007 14:39:23 -0000 1.503 --- configure.in 22 Mar 2007 16:01:51 -0000 *************** *** 121,126 **** --- 121,133 ---- # + # Directory where timezone files are stored + # + PGAC_ARG_REQ(with, tzdir, [ --with-tzdir=DIR timezone files directory location], + [tzdir=$withval]) + AC_SUBST(tzdir) + + # # Add non-standard directories to the include path # PGAC_ARG_REQ(with, includes, [ --with-includes=DIRS look for additional header files in DIRS]) Index: src/Makefile.global.in =================================================================== RCS file: /projects/cvsroot/pgsql/src/Makefile.global.in,v retrieving revision 1.233 diff -c -r1.233 Makefile.global.in *** src/Makefile.global.in 9 Feb 2007 15:55:57 -0000 1.233 --- src/Makefile.global.in 22 Mar 2007 16:01:51 -0000 *************** *** 77,82 **** --- 77,84 ---- endif endif + tzdir := @tzdir@ + sysconfdir := @sysconfdir@ ifeq "$(findstring pgsql, $(sysconfdir))" "" ifeq "$(findstring postgres, $(sysconfdir))" "" *************** *** 122,127 **** --- 124,130 ---- bindir := $(shell $(PG_CONFIG) --bindir) datadir := $(shell $(PG_CONFIG) --sharedir) + tzdir := $(shell $(PG_CONFIG) --timezonedir) sysconfdir := $(shell $(PG_CONFIG) --sysconfdir) libdir := $(shell $(PG_CONFIG) --libdir) pkglibdir := $(shell $(PG_CONFIG) --pkglibdir) Index: src/bin/pg_config/pg_config.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/bin/pg_config/pg_config.c,v retrieving revision 1.24 diff -c -r1.24 pg_config.c *** src/bin/pg_config/pg_config.c 7 Feb 2007 00:28:54 -0000 1.24 --- src/bin/pg_config/pg_config.c 22 Mar 2007 16:01:51 -0000 *************** *** 194,199 **** --- 194,211 ---- } static void + show_timezonedir(bool all) + { + char path[MAXPGPATH]; + + if (all) + printf("TIMEZONEDIR = "); + get_timezone_path(mypath, path); + cleanup_path(path); + printf("%s\n", path); + } + + static void show_sysconfdir(bool all) { char path[MAXPGPATH]; *************** *** 377,382 **** --- 389,395 ---- {"--localedir", show_localedir}, {"--mandir", show_mandir}, {"--sharedir", show_sharedir}, + {"--timezonedir", show_timezonedir}, {"--sysconfdir", show_sysconfdir}, {"--pgxs", show_pgxs}, {"--configure", show_configure}, Index: src/include/port.h =================================================================== RCS file: /projects/cvsroot/pgsql/src/include/port.h,v retrieving revision 1.110 diff -c -r1.110 port.h *** src/include/port.h 7 Feb 2007 00:28:55 -0000 1.110 --- src/include/port.h 22 Mar 2007 16:01:51 -0000 *************** *** 34,39 **** --- 34,40 ---- extern bool path_is_prefix_of_path(const char *path1, const char *path2); extern const char *get_progname(const char *argv0); extern void get_share_path(const char *my_exec_path, char *ret_path); + extern void get_timezone_path(const char *my_exec_path, char *ret_path); extern void get_etc_path(const char *my_exec_path, char *ret_path); extern void get_include_path(const char *my_exec_path, char *ret_path); extern void get_pkginclude_path(const char *my_exec_path, char *ret_path); Index: src/port/Makefile =================================================================== RCS file: /projects/cvsroot/pgsql/src/port/Makefile,v retrieving revision 1.34 diff -c -r1.34 Makefile *** src/port/Makefile 9 Feb 2007 15:56:00 -0000 1.34 --- src/port/Makefile 22 Mar 2007 16:01:51 -0000 *************** *** 82,87 **** --- 82,88 ---- echo "#define LOCALEDIR \"$(localedir)\"" >>$@ echo "#define DOCDIR \"$(docdir)\"" >>$@ echo "#define MANDIR \"$(mandir)\"" >>$@ + echo "#define TZDIR \"$(tzdir)\"" >>$@ clean distclean maintainer-clean: rm -f libpgport.a libpgport_srv.a $(LIBOBJS) $(LIBOBJS_SRV) pg_config_paths.h Index: src/port/path.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/port/path.c,v retrieving revision 1.71 diff -c -r1.71 path.c *** src/port/path.c 5 Jan 2007 22:20:02 -0000 1.71 --- src/port/path.c 22 Mar 2007 16:01:51 -0000 *************** *** 528,533 **** --- 528,553 ---- } /* + * get_timezone_path + * + * Note: PostgreSQL delivers its own timezone files by default. They are stored + * in {share}/timezone directory. However, in case when packagers and integrators + * prefere usage of OS timezone files, TZDIR is set by ./configure and it + * contains direct path to the system timezone information directory. + */ + void + get_timezone_path(const char *my_exec_path, char *ret_path) + { + if( TZDIR[0] == 0 ) { + make_relative_path(ret_path, PGSHAREDIR, PGBINDIR, my_exec_path); + strlcpy(ret_path + strlen(ret_path), "/timezone", MAXPGPATH - strlen(ret_path)); + } + else { + strlcpy(ret_path, TZDIR, MAXPGPATH); + } + } + + /* * get_etc_path */ void Index: src/timezone/Makefile =================================================================== RCS file: /projects/cvsroot/pgsql/src/timezone/Makefile,v retrieving revision 1.26 diff -c -r1.26 Makefile *** src/timezone/Makefile 14 Mar 2007 17:38:06 -0000 1.26 --- src/timezone/Makefile 22 Mar 2007 16:01:51 -0000 *************** *** 36,49 **** --- 36,53 ---- $(CC) $(CFLAGS) $(ZICOBJS) $(LDFLAGS) $(LIBS) -o $@$(X) install: all installdirs + ifndef tzdir ./zic -d '$(DESTDIR)$(datadir)/timezone' -p '$(POSIXRULES)' $(TZDATAFILES) + endif $(MAKE) -C tznames $@ installdirs: $(mkinstalldirs) '$(DESTDIR)$(datadir)' uninstall: + ifndef tzdir rm -rf '$(DESTDIR)$(datadir)/timezone' + endif $(MAKE) -C tznames $@ clean distclean maintainer-clean: Index: src/timezone/pgtz.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/timezone/pgtz.c,v retrieving revision 1.50 diff -c -r1.50 pgtz.c *** src/timezone/pgtz.c 10 Feb 2007 14:58:55 -0000 1.50 --- src/timezone/pgtz.c 22 Mar 2007 16:01:52 -0000 *************** *** 51,58 **** if (done_tzdir) return tzdir; ! get_share_path(my_exec_path, tzdir); ! strlcpy(tzdir + strlen(tzdir), "/timezone", MAXPGPATH - strlen(tzdir)); done_tzdir = true; return tzdir; --- 51,57 ---- if (done_tzdir) return tzdir; ! get_timezone_path(my_exec_path, tzdir); done_tzdir = true; return tzdir;
pgsql-patches by date: