From 568b80168f1166a4f6cffad90fd030ee280519e8 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 11 Sep 2006 20:10:30 +0000 Subject: [PATCH] Move set_pglocale_pgservice() from path.c to exec.c, so that pulling in path.c does not in itself force linking of both exec.c and libintl. Should fix current ecpglib build failure on pickier platforms. --- src/include/port.h | 17 +++++---- src/interfaces/ecpg/ecpglib/Makefile | 8 ++--- src/port/exec.c | 54 +++++++++++++++++++++++++++- src/port/path.c | 50 +------------------------- 4 files changed, 66 insertions(+), 63 deletions(-) diff --git a/src/include/port.h b/src/include/port.h index 5f692db886..792ff28d7d 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -6,21 +6,20 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/port.h,v 1.97 2006/08/30 18:06:27 tgl Exp $ + * $PostgreSQL: pgsql/src/include/port.h,v 1.98 2006/09/11 20:10:30 tgl Exp $ * *------------------------------------------------------------------------- */ -#include -#include - #include +#include +#include /* non-blocking */ extern bool pg_set_noblock(int sock); extern bool pg_set_block(int sock); -/* Portable path handling for Unix/Win32 */ +/* Portable path handling for Unix/Win32 (in path.c) */ extern char *first_dir_separator(const char *filename); extern char *last_dir_separator(const char *filename); @@ -42,15 +41,13 @@ extern void get_pkglib_path(const char *my_exec_path, char *ret_path); extern void get_locale_path(const char *my_exec_path, char *ret_path); extern void get_doc_path(const char *my_exec_path, char *ret_path); extern void get_man_path(const char *my_exec_path, char *ret_path); -extern void set_pglocale_pgservice(const char *argv0, const char *app); extern bool get_home_path(char *ret_path); extern void get_parent_directory(char *path); /* * is_absolute_path * - * By making this a macro we prevent the need for libpq to include - * path.c which uses exec.c. + * By making this a macro we avoid needing to include path.c in libpq. */ #ifndef WIN32 #define is_absolute_path(filename) \ @@ -67,8 +64,10 @@ extern void get_parent_directory(char *path); ) #endif +/* Portable locale initialization (in exec.c) */ +extern void set_pglocale_pgservice(const char *argv0, const char *app); -/* Portable way to find binaries */ +/* Portable way to find binaries (in exec.c) */ extern int find_my_exec(const char *argv0, char *retpath); extern int find_other_exec(const char *argv0, const char *target, const char *versionstr, char *retpath); diff --git a/src/interfaces/ecpg/ecpglib/Makefile b/src/interfaces/ecpg/ecpglib/Makefile index 374432dd66..c8d1c437f5 100644 --- a/src/interfaces/ecpg/ecpglib/Makefile +++ b/src/interfaces/ecpg/ecpglib/Makefile @@ -4,7 +4,7 @@ # # Copyright (c) 1994, Regents of the University of California # -# $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.42 2006/09/10 22:07:02 tgl Exp $ +# $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.43 2006/09/11 20:10:30 tgl Exp $ # #------------------------------------------------------------------------- @@ -26,7 +26,7 @@ override CFLAGS += $(PTHREAD_CFLAGS) LIBS := $(filter-out -lpgport, $(LIBS)) OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \ - connect.o misc.o path.o exec.o \ + connect.o misc.o path.o \ $(filter snprintf.o, $(LIBOBJS)) # thread.c is needed only for non-WIN32 implementation of path.c @@ -51,7 +51,7 @@ include $(top_srcdir)/src/Makefile.shlib # necessarily use the same object files as the backend uses. Instead, # symlink the source files in here and build our own object file. -path.c exec.c snprintf.c thread.c: % : $(top_srcdir)/src/port/% +path.c snprintf.c thread.c: % : $(top_srcdir)/src/port/% rm -f $@ && $(LN_S) $< . path.o: path.c $(top_builddir)/src/port/pg_config_paths.h @@ -67,7 +67,7 @@ installdirs: uninstall: uninstall-lib clean distclean maintainer-clean: clean-lib - rm -f $(OBJS) path.c exec.c snprintf.c thread.c + rm -f $(OBJS) path.c snprintf.c thread.c depend dep: $(CC) -MM $(CFLAGS) *.c >depend diff --git a/src/port/exec.c b/src/port/exec.c index 7abc3d650b..642bd5fdc9 100644 --- a/src/port/exec.c +++ b/src/port/exec.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/port/exec.c,v 1.42 2006/06/07 22:24:46 momjian Exp $ + * $PostgreSQL: pgsql/src/port/exec.c,v 1.43 2006/09/11 20:10:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -590,3 +590,55 @@ pclose_check(FILE *stream) return -1; } + + +/* + * set_pglocale_pgservice + * + * Set application-specific locale and service directory + * + * This function takes the value of argv[0] rather than a full path. + * + * (You may be wondering why this is in exec.c. It requires this module's + * services and doesn't introduce any new dependencies, so this seems as + * good as anyplace.) + */ +void +set_pglocale_pgservice(const char *argv0, const char *app) +{ + char path[MAXPGPATH]; + char my_exec_path[MAXPGPATH]; + char env_path[MAXPGPATH + sizeof("PGSYSCONFDIR=")]; /* longer than + * PGLOCALEDIR */ + + /* don't set LC_ALL in the backend */ + if (strcmp(app, "postgres") != 0) + setlocale(LC_ALL, ""); + + if (find_my_exec(argv0, my_exec_path) < 0) + return; + +#ifdef ENABLE_NLS + get_locale_path(my_exec_path, path); + bindtextdomain(app, path); + textdomain(app); + + if (getenv("PGLOCALEDIR") == NULL) + { + /* set for libpq to use */ + snprintf(env_path, sizeof(env_path), "PGLOCALEDIR=%s", path); + canonicalize_path(env_path + 12); + putenv(strdup(env_path)); + } +#endif + + if (getenv("PGSYSCONFDIR") == NULL) + { + get_etc_path(my_exec_path, path); + + /* set for libpq to use */ + snprintf(env_path, sizeof(env_path), "PGSYSCONFDIR=%s", path); + canonicalize_path(env_path + 13); + putenv(strdup(env_path)); + } +} diff --git a/src/port/path.c b/src/port/path.c index cb7ab9eb22..818b3212c4 100644 --- a/src/port/path.c +++ b/src/port/path.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/port/path.c,v 1.66 2006/03/05 15:59:10 momjian Exp $ + * $PostgreSQL: pgsql/src/port/path.c,v 1.67 2006/09/11 20:10:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -652,54 +652,6 @@ get_parent_directory(char *path) } -/* - * set_pglocale_pgservice - * - * Set application-specific locale and service directory - * - * This function takes an argv[0] rather than a full path. - */ -void -set_pglocale_pgservice(const char *argv0, const char *app) -{ - char path[MAXPGPATH]; - char my_exec_path[MAXPGPATH]; - char env_path[MAXPGPATH + sizeof("PGSYSCONFDIR=")]; /* longer than - * PGLOCALEDIR */ - - /* don't set LC_ALL in the backend */ - if (strcmp(app, "postgres") != 0) - setlocale(LC_ALL, ""); - - if (find_my_exec(argv0, my_exec_path) < 0) - return; - -#ifdef ENABLE_NLS - get_locale_path(my_exec_path, path); - bindtextdomain(app, path); - textdomain(app); - - if (getenv("PGLOCALEDIR") == NULL) - { - /* set for libpq to use */ - snprintf(env_path, sizeof(env_path), "PGLOCALEDIR=%s", path); - canonicalize_path(env_path + 12); - putenv(strdup(env_path)); - } -#endif - - if (getenv("PGSYSCONFDIR") == NULL) - { - get_etc_path(my_exec_path, path); - - /* set for libpq to use */ - snprintf(env_path, sizeof(env_path), "PGSYSCONFDIR=%s", path); - canonicalize_path(env_path + 13); - putenv(strdup(env_path)); - } -} - - /* * trim_directory *