c++.announce - Client libpq library and psql client program for DMC
- Hans Oesterholt-Dijkema (16/16) Jun 23 2004 L.S.,
- Hans Oesterholt-Dijkema (579/579) Jun 23 2004 diff -u -r -N postgresql-7.4.3/doc/README.dmc postgresql-7.4.3.dmc/doc/R...
L.S.,
I've made a patch against PostgreSQL 7.4.3 to be able to
compile 'libpq' and 'psql' with Digital Mars C++.
As Digital Mars C++ doesn't support 'popen()' and 'pclose()'
calls (yet), I was in need to patch some psql .c files to let
them work well with the Digital Mars C++ port.
One needs MSYS and mingw32-make to patch and compile the
postgres sources. The Makefiles (Makefile.sc) are GNU Makefiles.
Read doc/README.dmc in the postgres source tree and follow
instructions.
One can apply the patch doing:
tar xzf postgresql-7.4.3.tar.gz
cd postgresql-7.4.3
patch -p1 <pgsql-7.4.3-dmc.patch
Best regards,
Hans Oesterholt-Dijkema
Jun 23 2004
diff -u -r -N postgresql-7.4.3/doc/README.dmc
postgresql-7.4.3.dmc/doc/README.dmc
--- postgresql-7.4.3/doc/README.dmc Thu Jan 1 00:00:00 1970
+++ postgresql-7.4.3.dmc/doc/README.dmc Wed Jun 23 09:29:44 2004
-0,0 +1,69
+Introduction
+************
+
+This readme file addresses the client port of PostgreSQL
+for the Digital Mars C(++) Compiler
+
+Prerequisites
+*************
+
+You will need following packages to compile libpq and psql
+with Digital Mars C(++):
+
+ Digital Mars C(++) >=8.34
+ MSYS >=1.0
+ GNU Make for WIN32 >=3.75 ==> mingw32-make will do the job.
+
+
+
+Makefiles
+*********
+
+To compile the client library 'libpq.lib' and the client
+program 'psql.exe' with Digital Mars C(++), the following
+have been added to the PostgreSQL source directories:
+
+ src/Makefile.sc
+ src/Makefile.sc.in
+ src/bin/psql/Makefile.sc
+ src/interfaces/libpq/Makefile.sc
+
+To change the default settings for these Makefiles, edit
+'src/Makefile.sc.in'. This makefile contains the default
+paths, prefixes, etc.
+
+
+
+
+Compiling
+*********
+
+Important to note is following:
+
+When you have entered the MSYS shell, using 'make -fMakefile.sc'
+won't work, because of UNIX shell incompatilities with some
+DMC programs, notably:
+
+ lib.exe
+ link.exe
+
+So you will have to do the following:
+
+
+ 1. Run the MSYS shell
+ 2. Type:
+ cd <Postgresql Source Base Directory>
+ cd src
+ vi Makefile.sc.in
+ mingw32-make -f Makefile.sc
+ mingw32-make -f Makefile.sc install
+ mingw32-make -f Makefile.sc clean
+
+That's all.
+
+
+Author
+******
+
+(p) 6-2004 Hans Oesterholt-Dijkema <hdnews -at- gawab.com>
+
diff -u -r -N postgresql-7.4.3/src/Makefile.sc
postgresql-7.4.3.dmc/src/Makefile.sc
--- postgresql-7.4.3/src/Makefile.sc Thu Jan 1 00:00:00 1970
+++ postgresql-7.4.3.dmc/src/Makefile.sc Wed Jun 23 08:38:18 2004
-0,0 +1,38
+
+include ./Makefile.sc.in
+
+all:
+ echo "$(OS) $(SHELL)"
+ if [ ! -f include/pg_config.h ]; then $(cp) include/pg_config.h.win32
include/pg_config.h; fi
+ $(MAKE) -C interfaces/libpq -f Makefile.sc
+ $(MAKE) -C bin/psql -f Makefile.sc
+ echo All Win32 parts have been built!
+
+clean:
+ $(MAKE) -C interfaces/libpq -f Makefile.sc clean
+ $(MAKE) -C bin/psql -f Makefile.sc clean
+ echo All Win32 parts have been cleaned!
+
+distclean: clean
+ $(rm) include/config.h
+
+install: all
+ $(MAKE) -C interfaces/libpq -f Makefile.sc install
+ $(MAKE) -C bin/psql -f Makefile.sc install
diff -u -r -N postgresql-7.4.3/src/Makefile.sc.in
postgresql-7.4.3.dmc/src/Makefile.sc.in
--- postgresql-7.4.3/src/Makefile.sc.in Thu Jan 1 00:00:00 1970
+++ postgresql-7.4.3.dmc/src/Makefile.sc.in Wed Jun 23 08:10:16 2004
-0,0 +1,36
+
+DMCDIR=c:/dm
+
+EXE=.exe
+LIB=.lib
+OBJ=.obj
+LOC_INC=-I. -Ic:/local/dm/include -I../../include -D_MSC_VER
-I../../interfaces/libpq
+INC=-I$(DMCDIR)/stlport/stlport -I$(DMCDIR)/include $(LOC_INC)
+HAVES=-DHAVE_RANDOM -DHAVE_SIG_ATOMIC_T -DHAVE_STRDUP -DHAVE_VSNPRINTF
+DEFINES=-DHAVE_RANDOM -DHAVE_SIG_ATOMIC_T -D__DMC__ -DFRONTEND -DWIN32
-D_WINDOWS -D_CONSOLE -D_MBCS
+CFLAGS=$(DEFINES) $(HAVES) -Jm -o
+DMCL=$(DMCDIR)/lib
+LOC_LD=
+CXX=dmc
+AR=lib
+ARFLAGS=-c
+LD=$(CXX)
+POD=spod2html --pod
+PREFIX=/c/local/dm
+PREFIX_BIN=$(PREFIX)/bin
+PREFIX_LIB=$(PREFIX)/lib
+PREFIX_INC=$(PREFIX)/include
+PREFIX_DOC=$(PREFIX)/html
+
+mkdir_p=mkdir -p
+cp=cp
+cd=cd
+RM=rm -f
+
diff -u -r -N postgresql-7.4.3/src/bin/psql/Makefile.sc
postgresql-7.4.3.dmc/src/bin/psql/Makefile.sc
--- postgresql-7.4.3/src/bin/psql/Makefile.sc Thu Jan 1 00:00:00 1970
+++ postgresql-7.4.3.dmc/src/bin/psql/Makefile.sc Wed Jun 23 08:49:50 2004
-0,0 +1,84
+
+include ../../Makefile.sc.in
+
+INTDIR=.
+PORT=../../port
+BACK=../../backend/lib
+BLIBPQ=../../backend/libpq
+BACKUTIL=../../backend/utils/mb
+LIBPQDIR=../../interfaces/libpq
+
+
+OBJECTS= \
+ $(INTDIR)/command.obj \
+ $(INTDIR)/common.obj \
+ $(INTDIR)/help.obj \
+ $(INTDIR)/input.obj \
+ $(INTDIR)/stringutils.obj \
+ $(INTDIR)/mainloop.obj \
+ $(INTDIR)/copy.obj \
+ $(INTDIR)/startup.obj \
+ $(INTDIR)/prompt.obj \
+ $(INTDIR)/variables.obj \
+ $(INTDIR)/large_obj.obj \
+ $(INTDIR)/print.obj \
+ $(INTDIR)/describe.obj \
+ $(INTDIR)/tab-complete.obj \
+ $(PORT)/sprompt.obj \
+ $(PORT)/getopt.obj \
+ $(PORT)/getopt_long.obj \
+ $(PORT)/path.obj \
+ $(INTDIR)/mbprint.obj
+
+DMCLIBS=$(DMCL)/wsock32.lib $(DMCL)/advapi32.lib
+
+LIBS= \
+ $(LIBPQDIR)/libpq.lib \
+ $(DMCLIBS)
+
+
+all: psql$(EXE)
+ echo "done"
+
+psql$(EXE): $(OBJECTS)
+ if [ ! -d ./release ]; then $(mkdir_p) ./release; fi
+ for obj in $(OBJECTS); do $(cp) $$obj ./release; done
+ for lib in $(LIBS); do $(cp) $$lib ./release; done
+ $(cd) ./release;$(LD) -opsql$(EXE) *$(OBJ) *$(LIB)
+
+
+$(OBJECTS): %$(OBJ): %.c
+ if [ ! -d ./dmc ]; then $(mkdir_p) ./dmc; fi
+ $(CXX) $(CFLAGS) $(INC) $(OPT) -c $< -o$
+
+
+clean:
+ $(RM) $(OBJECTS)
+ $(RM) -r ./release
+
+
+install:
+ $(cp) ./release/psql$(EXE) $(PREFIX_BIN)
+
\ No newline at end of file
diff -u -r -N postgresql-7.4.3/src/bin/psql/command.c
postgresql-7.4.3.dmc/src/bin/psql/command.c
--- postgresql-7.4.3/src/bin/psql/command.c Sat Oct 11 18:04:26 2003
+++ postgresql-7.4.3.dmc/src/bin/psql/command.c Wed Jun 23 08:21:50 2004
-782,8 +782,13
{
if (fname[0] == '|')
{
+#ifdef __DMC__
+ fprintf(stderr,"Pipes are not supported on this variant (compiled with
Digital Mars C++)\n");
+ fd = fopen(fname,"w");
+#else
is_pipe = true;
fd = popen(&fname[1], "w");
+#endif
}
else
fd = fopen(fname, "w");
-803,10 +808,14
if (query_buf && query_buf->len > 0)
fprintf(fd, "%s\n", query_buf->data);
+#ifndef __DMC__
if (is_pipe)
result = pclose(fd);
else
result = fclose(fd);
+#else
+ result = fclose(fd);
+#endif
if (result == EOF)
{
-1005,7 +1014,12
options_string[pos + 1 + len] = '\0';
file = options_string + pos + 1;
+#ifdef __DMC__
+ fprintf(stderr,"Pipes are not supported on this variant (compiled with
Digital Mars C++)\n");
+ fd = NULL;
+#else
fd = popen(file, "r");
+#endif
if (!fd)
{
psql_error("%s: %s\n", file, strerror(errno));
-1030,11 +1044,13
appendPQExpBufferChar(&output, '\0');
}
+#ifndef __DMC__
if (fd && pclose(fd) == -1)
{
psql_error("%s: %s\n", file, strerror(errno));
error = true;
}
+#endif
if (!error)
{
diff -u -r -N postgresql-7.4.3/src/bin/psql/common.c
postgresql-7.4.3.dmc/src/bin/psql/common.c
--- postgresql-7.4.3/src/bin/psql/common.c Wed Nov 12 22:55:42 2003
+++ postgresql-7.4.3.dmc/src/bin/psql/common.c Wed Jun 23 08:17:54 2004
-107,10 +107,14
/* Close old file/pipe */
if (pset.queryFout && pset.queryFout != stdout && pset.queryFout != stderr)
{
+#ifdef __DMC__
+ fclose(pset.queryFout);
+#else
if (pset.queryFoutPipe)
pclose(pset.queryFout);
else
fclose(pset.queryFout);
+#endif
}
/* If no filename, set stdout */
-121,8 +125,15
}
else if (*fname == '|')
{
+#ifdef __DMC__
+ fprintf(stderr,"Pipes are not supported on this variant (compiled with
Digital Mars C++)\n");
+ pset.queryFout = stdout;
+ pset.queryFoutPipe = false;
+#else
pset.queryFout = popen(fname + 1, "w");
pset.queryFoutPipe = true;
+#endif
+
}
else
{
diff -u -r -N postgresql-7.4.3/src/bin/psql/help.c
postgresql-7.4.3.dmc/src/bin/psql/help.c
--- postgresql-7.4.3/src/bin/psql/help.c Thu Oct 2 06:39:32 2003
+++ postgresql-7.4.3.dmc/src/bin/psql/help.c Wed Jun 23 08:38:54 2004
-82,6 +82,9
/* If this " is the start of the string then it ought to end there to fit in
80 columns >> " */
printf(_("This is psql %s, the PostgreSQL interactive terminal.\n\n"),
PG_VERSION);
+#ifdef __DMC__
+ printf(_("%s can't use Pipes.\n\n"),__DMC_VERSION_STRING__);
+#endif
puts(_("Usage:"));
puts(_(" psql [OPTIONS]... [DBNAME [USERNAME]]\n"));
-252,7 +255,9
if (output != stdout)
{
+#ifndef __DMC__
pclose(output);
+#endif
#ifndef WIN32
pqsignal(SIGPIPE, SIG_DFL);
#endif
-293,7 +298,9
/* Only close if we used the pager */
if (output != stdout)
{
+#ifndef __DMC__
pclose(output);
+#endif
#ifndef WIN32
pqsignal(SIGPIPE, SIG_DFL);
#endif
-355,7 +362,9
/* Only close if we used the pager */
if (output != stdout)
{
+#ifndef __DMC__
pclose(output);
+#endif
#ifndef WIN32
pqsignal(SIGPIPE, SIG_DFL);
#endif
diff -u -r -N postgresql-7.4.3/src/bin/psql/print.c
postgresql-7.4.3.dmc/src/bin/psql/print.c
--- postgresql-7.4.3/src/bin/psql/print.c Thu Aug 14 18:49:42 2003
+++ postgresql-7.4.3.dmc/src/bin/psql/print.c Wed Jun 23 08:18:14 2004
-995,6 +995,9
PageOutput(int lines, unsigned short int pager)
{
/* check whether we need / can / are supposed to use pager */
+#ifdef __DMC__
+ return stdout;
+#else
if (pager
#ifndef WIN32
&&
-1028,6 +1031,7
}
return stdout;
+#endif
}
-1117,7 +1121,9
/* Only close if we used the pager */
if (fout == stdout && output != stdout)
{
+#ifndef __DMC__
pclose(output);
+#endif
#ifndef WIN32
pqsignal(SIGPIPE, SIG_DFL);
#endif
diff -u -r -N postgresql-7.4.3/src/bin/psql/prompt.c
postgresql-7.4.3.dmc/src/bin/psql/prompt.c
--- postgresql-7.4.3/src/bin/psql/prompt.c Sat Oct 4 01:04:46 2003
+++ postgresql-7.4.3.dmc/src/bin/psql/prompt.c Wed Jun 23 08:18:34 2004
-250,12 +250,18
cmdend = strcspn(file, "`");
file[cmdend] = '\0';
+#ifdef __DMC__
+ fprintf(stderr,"Pipes are not supported on this variant (compiled with
Digital Mars C++)\n");
+#else
if (file)
fd = popen(file, "r");
+#endif
if (fd)
{
fgets(buf, MAX_PROMPT_SIZE - 1, fd);
+#ifndef __DMC__
pclose(fd);
+#endif
}
if (strlen(buf) > 0 && buf[strlen(buf) - 1] == '\n')
buf[strlen(buf) - 1] = '\0';
diff -u -r -N postgresql-7.4.3/src/include/pg_config.h
postgresql-7.4.3.dmc/src/include/pg_config.h
--- postgresql-7.4.3/src/include/pg_config.h Thu Jan 1 00:00:00 1970
+++ postgresql-7.4.3.dmc/src/include/pg_config.h Wed Jun 23 08:05:44 2004
-0,0 +1,63
+#ifndef pg_config_h_win32__
+#define pg_config_h_win32__
+/*
+ * Parts of pg_config.h that you get with autoconf on other systems
+ */
+#define PG_VERSION "7.4.3"
+#define PG_VERSION_STR "7.4.3 (win32)"
+
+#define SYSCONFDIR ""
+
+#define DEF_PGPORT 5432
+#define DEF_PGPORT_STR "5432"
+
+#define MAXIMUM_ALIGNOF 4
+#define ACCEPT_TYPE_ARG3 int
+
+#define MAXPGPATH 1024
+
+#define INDEX_MAX_KEYS 32
+
+#define HAVE_ATEXIT
+#define HAVE_MEMMOVE
+
+#ifdef __BORLANDC__
+#define HAVE_RANDOM
+#endif
+
+/* use _snprintf instead of snprintf */
+#define HAVE_DECL_SNPRINTF 1
+#define snprintf _snprintf
+
+/* defines for dynamic linking on Win32 platform */
+#ifdef __CYGWIN__
+
+#if __GNUC__ && ! defined (__declspec)
+#error You need egcs 1.1 or newer for compiling!
+#endif
+
+#ifdef BUILDING_DLL
+#define DLLIMPORT __declspec (dllexport)
+#else /* not BUILDING_DLL */
+#define DLLIMPORT __declspec (dllimport)
+#endif
+
+#elif defined(WIN32) && defined(_MSC_VER) /* not CYGWIN */
+
+#if defined(_DLL)
+#define DLLIMPORT __declspec (dllexport)
+#else /* not _DLL */
+#define DLLIMPORT __declspec (dllimport)
+#endif
+
+#else /* not CYGWIN, not MSVC */
+
+#define DLLIMPORT
+
+#endif
+
+#ifndef __CYGWIN__
+#include <windows.h>
+#endif
+
+#endif /* pg_config_h_win32__ */
diff -u -r -N postgresql-7.4.3/src/interfaces/libpq/Makefile.sc
postgresql-7.4.3.dmc/src/interfaces/libpq/Makefile.sc
--- postgresql-7.4.3/src/interfaces/libpq/Makefile.sc Thu Jan 1 00:00:00 1970
+++ postgresql-7.4.3.dmc/src/interfaces/libpq/Makefile.sc Wed Jun 23 08:23:38
2004
-0,0 +1,75
+
+include ../../Makefile.sc.in
+
+INTDIR=.
+PORT=../../port
+BACK=../../backend/lib
+BLIBPQ=../../backend/libpq
+BACKUTIL=../../backend/utils/mb
+INCDIR=../../include
+
+
+OBJECTS= \
+ $(INTDIR)/win32.obj \
+ $(PORT)/getaddrinfo.obj \
+ $(PORT)/thread.obj \
+ $(PORT)/inet_aton.obj \
+ $(PORT)/crypt.obj \
+ $(PORT)/path.obj \
+ $(BACK)/dllist.obj \
+ $(BLIBPQ)/md5.obj \
+ $(BLIBPQ)/ip.obj \
+ $(INTDIR)/fe-auth.obj \
+ $(INTDIR)/fe-protocol2.obj \
+ $(INTDIR)/fe-protocol3.obj \
+ $(INTDIR)/fe-connect.obj \
+ $(INTDIR)/fe-exec.obj \
+ $(INTDIR)/fe-lobj.obj \
+ $(INTDIR)/fe-misc.obj \
+ $(INTDIR)/fe-print.obj \
+ $(INTDIR)/fe-secure.obj \
+ $(INTDIR)/pqexpbuffer.obj \
+ $(BACKUTIL)/wchar.obj \
+ $(BACKUTIL)/encnames.obj
+
+
+
+
+all: libpq$(LIB)
+ echo "done"
+
+libpq$(LIB): $(OBJECTS)
+ $(AR) $(ARFLAGS) libpq$(LIB) $(OBJECTS)
+
+
+$(OBJECTS): %$(OBJ): %.c
+ if [ ! -d ./dmc ]; then $(mkdir_p) ./dmc; fi
+ $(CXX) $(CFLAGS) $(INC) $(OPT) -c $< -o$
+
+
+clean:
+ $(RM) $(OBJECTS) libpq$(LIB)
+
+install:
+ $(cp) libpq$(LIB) $(PREFIX_LIB)
+ $(cp) libpq-fe.h $(PREFIX_INC)
+ $(cp) $(INCDIR)/postgres_ext.h $(PREFIX_INC)
Jun 23 2004








Hans Oesterholt-Dijkema <hdnews gawab.com>