diff options
author | Bruce Momjian <bruce@momjian.us> | 2004-05-17 14:35:34 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2004-05-17 14:35:34 +0000 |
commit | 3febb477e643c1cd37fc8d2d3e02685dce6d1196 (patch) | |
tree | adc5f3696ec9001b0bda4d9c0336c50c251c2f62 /src/backend | |
parent | 85383214ea2b0085658a650b4e6b293464dcf045 (diff) | |
download | postgresql-3febb477e643c1cd37fc8d2d3e02685dce6d1196.tar.gz postgresql-3febb477e643c1cd37fc8d2d3e02685dce6d1196.zip |
Reorganize code to allow path-relative installs.
Create new get_* functions to access compiled-in paths and adjust if
relative installs are to be used.
Clean up substitute_libpath_macro() code.
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/postmaster/postmaster.c | 4 | ||||
-rw-r--r-- | src/backend/tcop/postgres.c | 5 | ||||
-rw-r--r-- | src/backend/utils/fmgr/Makefile | 4 | ||||
-rw-r--r-- | src/backend/utils/fmgr/dfmgr.c | 65 | ||||
-rw-r--r-- | src/backend/utils/init/globals.c | 3 |
5 files changed, 24 insertions, 57 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 1e558d5a639..c37cb259df2 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -37,7 +37,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.387 2004/05/14 17:04:44 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.388 2004/05/17 14:35:29 momjian Exp $ * * NOTES * @@ -697,6 +697,8 @@ PostmasterMain(int argc, char *argv[]) ereport(FATAL, (errmsg("%s: could not locate my own executable path", progname))); + if (strlen(pkglib_path) == 0) + get_pkglib_path(my_exec_path, pkglib_path); #ifdef EXEC_BACKEND if (find_other_exec(argv[0], "postgres", PG_VERSIONSTR, postgres_exec_path) < 0) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 72750bfa623..f06340a54e4 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.406 2004/05/14 17:04:45 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.407 2004/05/17 14:35:31 momjian Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -2652,6 +2652,9 @@ PostgresMain(int argc, char *argv[], const char *username) ereport(FATAL, (errmsg("%s: could not locate postgres executable", argv[0]))); + if (strlen(pkglib_path) == 0) + get_pkglib_path(my_exec_path, pkglib_path); + /* * Validate we have been given a reasonable-looking DataDir (if * under postmaster, assume postmaster did this already). diff --git a/src/backend/utils/fmgr/Makefile b/src/backend/utils/fmgr/Makefile index 000b17a21d5..37b6d03e23f 100644 --- a/src/backend/utils/fmgr/Makefile +++ b/src/backend/utils/fmgr/Makefile @@ -4,7 +4,7 @@ # Makefile for utils/fmgr # # IDENTIFICATION -# $PostgreSQL: pgsql/src/backend/utils/fmgr/Makefile,v 1.15 2003/12/23 21:56:20 tgl Exp $ +# $PostgreSQL: pgsql/src/backend/utils/fmgr/Makefile,v 1.16 2004/05/17 14:35:31 momjian Exp $ # #------------------------------------------------------------------------- @@ -14,7 +14,7 @@ include $(top_builddir)/src/Makefile.global OBJS = dfmgr.o fmgr.o funcapi.o -override CPPFLAGS += -DPKGLIBDIR=\"$(pkglibdir)\" -DDLSUFFIX=\"$(DLSUFFIX)\" +override CPPFLAGS += -DDLSUFFIX=\"$(DLSUFFIX)\" all: SUBSYS.o diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c index 60d982b9458..3aeadfa20e2 100644 --- a/src/backend/utils/fmgr/dfmgr.c +++ b/src/backend/utils/fmgr/dfmgr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.71 2004/03/09 05:06:45 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.72 2004/05/17 14:35:31 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -270,12 +270,6 @@ file_exists(const char *name) #error "DLSUFFIX must be defined to compile this file." #endif -/* Example format: "/usr/local/pgsql/lib" */ -#ifndef PKGLIBDIR -#error "PKGLIBDIR needs to be defined to compile this file." -#endif - - /* * If name contains a slash, check if the file exists, if so return * the name. Else (no slash) try to expand using search path (see @@ -341,62 +335,29 @@ expand_dynamic_library_name(const char *name) static char * substitute_libpath_macro(const char *name) { - size_t macroname_len; - char *replacement = NULL; -#ifdef WIN32 - char basename[MAXPGPATH]; -#endif - + const char *sep_ptr; + char *ret; + AssertArg(name != NULL); if (name[0] != '$') return pstrdup(name); -#ifndef WIN32 - macroname_len = strcspn(name + 1, "/") + 1; -#else - macroname_len = strcspn(name + 1, "/\\") + 1; -#endif - - if (strncmp(name, "$libdir", macroname_len) == 0) -#ifndef WIN32 - replacement = PKGLIBDIR; -#else - { - char *p; - if (GetModuleFileName(NULL,basename,MAXPGPATH) == 0) - ereport(FATAL, - (errmsg("GetModuleFileName failed (%i)",(int)GetLastError()))); - - canonicalize_path(basename); - if ((p = last_path_separator(basename)) == NULL) - ereport(FATAL, - (errmsg("unexpected failure in determining PKGLIBDIR (%s)",basename))); - else - *p = '\0'; - - strcat(basename,"/../lib"); - replacement = basename; - } -#endif - else + if ((sep_ptr = first_path_separator(name)) == NULL) + sep_ptr = name + strlen(name); + + if (strlen("$libdir") != sep_ptr - name || + strncmp(name, "$libdir", strlen("$libdir")) != 0) ereport(ERROR, (errcode(ERRCODE_INVALID_NAME), errmsg("invalid macro name in dynamic library path"))); - if (name[macroname_len] == '\0') - return pstrdup(replacement); - else - { - char *new; + ret = palloc(strlen(pkglib_path) + strlen(sep_ptr) + 1); - new = palloc(strlen(replacement) + (strlen(name) - macroname_len) + 1); + strcpy(ret, pkglib_path); + strcat(ret, sep_ptr); - strcpy(new, replacement); - strcat(new, name + macroname_len); - - return new; - } + return ret; } diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c index 356d45e62e4..d94130a1b0a 100644 --- a/src/backend/utils/init/globals.c +++ b/src/backend/utils/init/globals.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/init/globals.c,v 1.85 2004/05/13 22:45:03 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/init/globals.c,v 1.86 2004/05/17 14:35:32 momjian Exp $ * * NOTES * Globals used all over the place should be declared here and not @@ -46,6 +46,7 @@ char *DataDir = NULL; char OutputFileName[MAXPGPATH]; char my_exec_path[MAXPGPATH]; /* full path to postgres executable */ +char pkglib_path[MAXPGPATH]; /* full path to lib directory */ BackendId MyBackendId; |