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 [EMAIL PROTECTED](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;
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to