From be6bbcef5678c67f7f1f48972d126233ff64ac48 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 22 Apr 2004 01:53:37 +0000 Subject: [PATCH] Add global psql config file, psql.rc.sample. --- doc/src/sgml/ref/psql-ref.sgml | 19 +++++++----- src/bin/psql/Makefile | 5 ++-- src/bin/psql/psql.rc.sample | 7 +++++ src/bin/psql/startup.c | 54 +++++++++++++++++++++------------- 4 files changed, 55 insertions(+), 30 deletions(-) create mode 100644 src/bin/psql/psql.rc.sample diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 99c0dbd95e..9779789bef 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1,5 +1,5 @@ @@ -440,7 +440,8 @@ PostgreSQL documentation - Do not read the start-up file ~/.psqlrc. + Do not read the start-up file /psql.rc or + ~/.psqlrc. @@ -1859,8 +1860,9 @@ bar The autocommit-on mode is PostgreSQL's traditional behavior, but autocommit-off is closer to the SQL spec. If you - prefer autocommit-off, you may wish to set it in - your .psqlrc file. + prefer autocommit-off, you may wish to set it in the system-wide + psql.rc or your + .psqlrc file. @@ -2488,9 +2490,12 @@ $endif Before starting up, psql attempts to - read and execute commands from the file - $HOME/.psqlrc. It could be used to set up - the client or the server to taste (using the \set + read and execute commands from the the system-wide + psql.rc file and the + $HOME/.psqlrc file in the user's home + directory. See PREFIX/share/psql.rc.sample + for information on setting up the system-wide file. It could be used + to set up the client or the server to taste (using the \set and SET commands). diff --git a/src/bin/psql/Makefile b/src/bin/psql/Makefile index efbffe4859..a29f18e88e 100644 --- a/src/bin/psql/Makefile +++ b/src/bin/psql/Makefile @@ -5,7 +5,7 @@ # Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group # Portions Copyright (c) 1994, Regents of the University of California # -# $PostgreSQL: pgsql/src/bin/psql/Makefile,v 1.40 2004/03/09 19:47:05 petere Exp $ +# $PostgreSQL: pgsql/src/bin/psql/Makefile,v 1.41 2004/04/22 01:53:37 momjian Exp $ # #------------------------------------------------------------------------- @@ -15,7 +15,7 @@ include $(top_builddir)/src/Makefile.global REFDOCDIR= $(top_srcdir)/doc/src/sgml/ref -override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -DFRONTEND +override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) -DFRONTEND -DSYSCONFDIR='"$(sysconfdir)"' OBJS= command.o common.o help.o input.o stringutils.o mainloop.o copy.o \ startup.o prompt.o variables.o large_obj.o print.o describe.o \ @@ -50,6 +50,7 @@ distprep: $(srcdir)/sql_help.h $(srcdir)/psqlscan.c install: all installdirs $(INSTALL_PROGRAM) psql$(X) $(DESTDIR)$(bindir)/psql$(X) + $(INSTALL_DATA) $(srcdir)/psql.rc.sample $(DESTDIR)$(datadir)/psql.rc.sample installdirs: $(mkinstalldirs) $(DESTDIR)$(bindir) diff --git a/src/bin/psql/psql.rc.sample b/src/bin/psql/psql.rc.sample new file mode 100644 index 0000000000..ff23bfa528 --- /dev/null +++ b/src/bin/psql/psql.rc.sample @@ -0,0 +1,7 @@ +-- +-- psql configuration file +-- +-- This file is read before the .psqlrc file in the user's home directory. +-- +-- Copy this to your sysconf directory (typically /usr/local/pgsql/etc) and +-- rename it psql.rc. diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 3d321b7992..aeb7c13fbd 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2003, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.88 2004/04/19 17:42:58 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.89 2004/04/22 01:53:37 momjian Exp $ */ #include "postgres_fe.h" @@ -44,7 +44,8 @@ int optreset; */ PsqlSettings pset; -#define PSQLRC ".psqlrc" +#define PSQLRC ".psqlrc" +#define SYSPSQLRC "psql.rc" /* * Structures to pass information between the option parsing routine @@ -74,6 +75,7 @@ struct adhoc_opts static void parse_psql_options(int argc, char *argv[], struct adhoc_opts * options); static void process_psqlrc(void); +static void process_psqlrc_file(char *filename); static void showVersion(void); #ifdef USE_SSL @@ -562,6 +564,9 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options) } +#ifndef SYSCONFDIR +#error "You must compile this file with SYSCONFDIR defined." +#endif /* @@ -570,32 +575,39 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options) static void process_psqlrc(void) { - char *psqlrc; + char *globalFile = SYSCONFDIR "/" SYSPSQLRC; char *home; + char *psqlrc; + + process_psqlrc_file(globalFile); + + if ((home = getenv("HOME")) != NULL) + { + psqlrc = pg_malloc(strlen(home) + 1 + strlen(PSQLRC) + 1); + sprintf(psqlrc, "%s/%s", home, PSQLRC); + process_psqlrc_file(psqlrc); + } +} + + + +static void +process_psqlrc_file(char *filename) +{ + char *psqlrc; #if defined(WIN32) && (!defined(__MINGW32__)) #define R_OK 4 #endif - /* Look for one in the home dir */ - home = getenv("HOME"); + psqlrc = pg_malloc(strlen(filename) + 1 + strlen(PG_VERSION) + 1); + sprintf(psqlrc, "%s-%s", filename, PG_VERSION); - if (home) - { - psqlrc = pg_malloc(strlen(home) + 1 + strlen(PSQLRC) + 1 + - strlen(PG_VERSION) + 1); - sprintf(psqlrc, "%s/%s-%s", home, PSQLRC, PG_VERSION); - - if (access(psqlrc, R_OK) == 0) - process_file(psqlrc); - else - { - sprintf(psqlrc, "%s/%s", home, PSQLRC); - if (access(psqlrc, R_OK) == 0) - process_file(psqlrc); - } - free(psqlrc); - } + if (access(psqlrc, R_OK) == 0) + process_file(psqlrc); + else if (access(filename, R_OK) == 0) + process_file(filename); + free(psqlrc); }