From 7a6aa851f5016a3aec0a0fe3f8b579ad1c54fddc Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 10 Nov 2009 23:12:21 +0000 Subject: [PATCH] Do not build psql's flex module on its own, but instead include it in mainloop.c. This ensures that postgres_fe.h is read before including any system headers, which is necessary to avoid problems on some platforms where we make nondefault selections of feature macros for stdio.h or other headers. We have had this policy for flex modules in the backend for many years, but for some reason it was not applied to psql. Per trouble report from Alexandra Roy and diagnosis by Albe Laurenz. --- src/bin/psql/Makefile | 7 +++++-- src/bin/psql/mainloop.c | 12 +++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/bin/psql/Makefile b/src/bin/psql/Makefile index 01049d8af2..06d7583480 100644 --- a/src/bin/psql/Makefile +++ b/src/bin/psql/Makefile @@ -5,7 +5,7 @@ # Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group # Portions Copyright (c) 1994, Regents of the University of California # -# $PostgreSQL: pgsql/src/bin/psql/Makefile,v 1.63 2009/06/23 03:46:00 tgl Exp $ +# $PostgreSQL: pgsql/src/bin/psql/Makefile,v 1.63.2.1 2009/11/10 23:12:21 tgl Exp $ # #------------------------------------------------------------------------- @@ -21,7 +21,7 @@ override CPPFLAGS := -I$(srcdir) -I$(libpq_srcdir) -I$(top_srcdir)/src/bin/pg_du 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 \ - psqlscan.o tab-complete.o mbprint.o dumputils.o keywords.o kwlookup.o \ + tab-complete.o mbprint.o dumputils.o keywords.o kwlookup.o \ $(WIN32RES) FLEXFLAGS = -Cfe @@ -43,6 +43,9 @@ kwlookup.c: % : $(top_srcdir)/src/backend/parser/% $(srcdir)/sql_help.h: create_help.pl $(wildcard $(REFDOCDIR)/*.sgml) $(PERL) $< $(REFDOCDIR) $@ +# psqlscan is compiled as part of mainloop +mainloop.o: psqlscan.c + $(srcdir)/psqlscan.c: psqlscan.l ifdef FLEX $(FLEX) $(FLEXFLAGS) -o'$@' $< diff --git a/src/bin/psql/mainloop.c b/src/bin/psql/mainloop.c index c63219bd13..e47f464d14 100644 --- a/src/bin/psql/mainloop.c +++ b/src/bin/psql/mainloop.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2009, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/mainloop.c,v 1.95 2009/06/11 14:49:08 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/psql/mainloop.c,v 1.95.2.1 2009/11/10 23:12:21 tgl Exp $ */ #include "postgres_fe.h" #include "mainloop.h" @@ -407,3 +407,13 @@ MainLoop(FILE *source) return successResult; } /* MainLoop() */ + + +/* + * psqlscan.c is #include'd here instead of being compiled on its own. + * This is because we need postgres_fe.h to be read before any system + * include files, else things tend to break on platforms that have + * multiple infrastructures for stdio.h and so on. flex is absolutely + * uncooperative about that, so we can't compile psqlscan.c on its own. + */ +#include "psqlscan.c"