From 0624f3dcbd990bc9cf9b2e9740cdd68de72227c9 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Sun, 19 Jul 1998 04:17:13 +0000
Subject: [PATCH] My mailer munged the intro text in my last post.  Here is the
 text in a more readable form.  -- I am submitting the following patches to
 the June 6, 1998 snapshot of PostgreSQL.  These patches implement a port of
 PostgreSQL to SCO UnixWare 7, and updates the Univel port (UnixWare 2.x). 
 The patched files, and the reason  for the patch are:

File            Reason for the patch ---------------
---------------------------------------------------------------
src/backend/port/dynloader/unixware.c src/backend/port/dynloader/unixware.h
src/include/port/unixware.h src/makefiles/Makefile.unixware
src/template/unixware
		Created for the UNIXWARE port.

src/include/port/univel.h
		Modifed this file to work with the changes made to
		s_lock.[ch].

src/backend/storage/buffer/s_lock.c src/include/storage/s_lock.h
		Moved the UNIXWARE (and Univel) tas() function from
		s_lock.c to s_lock.h.  The UnixWare compiler asm
		construct is treated as a macro and needs to be in
		the s_lock.h file.  I also reworked the tas()
		function to correct some errors in the code.

src/include/version.h.in
		The use of the ## operator with quoted strings in
		the VERSION macro caused problems with the UnixWare
		C compiler.  I removed the ## operators since they
		were not needed in this case.  The macro expands
		into a sequence of quoted strings that will be
		concatenated by any ANSI C compiler.

src/config.guess
		This script was modified to recognize SCO UnixWare
		7.

src/configure src/configure.in
		The configure script was modified to recognize SCO
		UnixWare 7.

Billy G. Allie
---
 src/backend/port/dynloader/unixware.c |  4 ++++
 src/backend/port/dynloader/unixware.h | 34 +++++++++++++++++++++++++++
 src/config.guess                      |  3 +++
 src/configure                         |  1 +
 src/configure.in                      |  1 +
 src/include/port/unixware.h           | 32 +++++++++++++++++++++++++
 src/include/storage/s_lock.h          | 23 +++++++++---------
 src/include/version.h.in              |  4 ++--
 src/makefiles/Makefile.unixware       |  7 ++++++
 src/template/unixware                 |  8 +++++++
 10 files changed, 103 insertions(+), 14 deletions(-)
 create mode 100644 src/backend/port/dynloader/unixware.c
 create mode 100644 src/backend/port/dynloader/unixware.h
 create mode 100644 src/include/port/unixware.h
 create mode 100644 src/makefiles/Makefile.unixware
 create mode 100644 src/template/unixware

diff --git a/src/backend/port/dynloader/unixware.c b/src/backend/port/dynloader/unixware.c
new file mode 100644
index 00000000000..0ae1c69dee1
--- /dev/null
+++ b/src/backend/port/dynloader/unixware.c
@@ -0,0 +1,4 @@
+/* Dummy file used for nothing at this point
+ *
+ * see unixware.h
+ */
diff --git a/src/backend/port/dynloader/unixware.h b/src/backend/port/dynloader/unixware.h
new file mode 100644
index 00000000000..edc3a3b18e0
--- /dev/null
+++ b/src/backend/port/dynloader/unixware.h
@@ -0,0 +1,34 @@
+/*-------------------------------------------------------------------------
+ *
+ * unixware.h--
+ *	  port-specific prototypes for Intel x86/UNIXWARE 7
+ *
+ *
+ * Copyright (c) 1994, Regents of the University of California
+ *
+ * unixware.h,v 1.2 1995/03/17 06:40:18 andrew Exp
+ *
+ *-------------------------------------------------------------------------
+  */
+#ifndef PORT_PROTOS_H
+#define PORT_PROTOS_H
+
+#include <dlfcn.h>
+#include "fmgr.h"				/* for func_ptr */
+#include "utils/dynamic_loader.h"
+
+ /* dynloader.c */
+/*
+ * Dynamic Loader on Intel x86/Intel SVR4.
+ *
+ * this dynamic loader uses the system dynamic loading interface for shared
+ * libraries (ie. dlopen/dlsym/dlclose). The user must specify a shared
+ * library as the file to be dynamically loaded.
+ *
+  */
+#define pg_dlopen(f)	dlopen(f,RTLD_LAZY)
+#define pg_dlsym		dlsym
+#define pg_dlclose		dlclose
+#define pg_dlerror		dlerror
+
+#endif	/* PORT_PROTOS_H */
diff --git a/src/config.guess b/src/config.guess
index a1563dabf1a..0db17eaca2f 100755
--- a/src/config.guess
+++ b/src/config.guess
@@ -450,6 +450,9 @@ EOF
     i?86:DYNIX/ptx:4*:*)
 	echo i386-sequent-sysv4
 	exit 0 ;;
+    i[34]86:UnixWare:*:*)
+	echo ${UNAME_MACHINE}-unixware-sysv${UNAME_RELEASE}
+	exit 0 ;;
     i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
 		echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
diff --git a/src/configure b/src/configure
index 0236de2bdb0..8ee5b3948b7 100755
--- a/src/configure
+++ b/src/configure
@@ -626,6 +626,7 @@ nextstep*) os=nextstep need_tas=no ;;
 		    *) os=unknown need_tas=no ;;
        esac ;;
    sysv4*) os=svr4 need_tas=no ;;
+   sysv5*) os=unixware need_tas=no ;;
 *) echo ""
    echo "*************************************************************"
    echo "configure does not currently recognize your operating system,"
diff --git a/src/configure.in b/src/configure.in
index c58a1eb2db0..74a0f4f5957 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -32,6 +32,7 @@ nextstep*) os=nextstep need_tas=no ;;
 		    *) os=unknown need_tas=no ;;
        esac ;;
    sysv4*) os=svr4 need_tas=no ;;
+   sysv5*) os=unixware need_tas=no ;;
 *) echo ""
    echo "*************************************************************"
    echo "configure does not currently recognize your operating system,"
diff --git a/src/include/port/unixware.h b/src/include/port/unixware.h
new file mode 100644
index 00000000000..e552202f5f9
--- /dev/null
+++ b/src/include/port/unixware.h
@@ -0,0 +1,32 @@
+#define USE_POSIX_TIME
+#define NO_EMPTY_STMTS
+#define USE_POSIX_SIGNALS
+#define SYSV_DIRENT
+
+#define HAS_TEST_AND_SET
+#define NEED_I386_TAS_ASM
+/***************************************
+ * Define this if you are compiling with
+ * the native UNIXWARE C compiler.
+ ***************************************/
+#define UNIXWARE
+typedef unsigned char slock_t;
+
+/***************************************************************
+ * The following include will get the needed prototype for the 
+ * strcasecmp() function. 
+ ***************************************************************/
+#include <strings.h>
+
+#ifndef			BIG_ENDIAN
+#define			BIG_ENDIAN		4321
+#endif
+#ifndef			LITTLE_ENDIAN
+#define			LITTLE_ENDIAN	1234
+#endif
+#ifndef			PDP_ENDIAN
+#define			PDP_ENDIAN		3412
+#endif
+#ifndef			BYTE_ORDER
+#define			BYTE_ORDER		LITTLE_ENDIAN
+#endif
diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
index 70a0f4226c4..e3658b742cd 100644
--- a/src/include/storage/s_lock.h
+++ b/src/include/storage/s_lock.h
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.40 1998/07/19 01:19:54 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.41 1998/07/19 04:16:59 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -188,23 +188,22 @@ tas(volatile slock_t *lock)
 #if defined(NEED_I386_TAS_ASM)
 /* non gcc i386 based things */
 
-#if defined(USE_UNIVEL_CC)
+#if defined(USE_UNIVEL_CC) || defined(UNIXWARE)
 #define TAS(lock)	tas(lock)
 
-asm int
+asm int 
 tas(slock_t *s_lock)
 {
-	%lab locked;
-	/* Upon entry, %eax will contain the pointer to the lock byte */
-	pushl % ebx
-	xchgl % eax, %ebx
-	xor % eax, %eax
-	movb $255, %al
+% mem s_lock
+	pushl	%ebx
+	movl	s_lock,%ebx
+	movl	$255,%eax
 	lock
-	xchgb % al, (%ebx)
-	popl % ebx
+	xchgb	%al,(%ebx)
+	popl	%ebx
 }
-#endif /* USE_UNIVEL_CC */
+
+#endif /* USE_UNIVEL_CC || UNIXWARE */
 
 #endif /* NEED_I386_TAS_ASM */
 
diff --git a/src/include/version.h.in b/src/include/version.h.in
index 699b136bfbd..e295925d669 100644
--- a/src/include/version.h.in
+++ b/src/include/version.h.in
@@ -4,7 +4,7 @@
  *	  this file contains the interface to version.c.
  *	  Also some parameters.
  *
- * $Header: /cvsroot/pgsql/src/include/Attic/version.h.in,v 1.2 1998/06/09 22:59:04 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/include/Attic/version.h.in,v 1.3 1998/07/19 04:16:53 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -20,6 +20,6 @@ void SetPgVersion(const char *path, char **reason_p);
 
 #define PG_VERFILE		"PG_VERSION"
 
-#define PG_VERSION_STR  "PostgreSQL " ## PG_RELEASE ## "." ## PG_VERSION ## "." ## PG_SUBVERSION ## " on @host@, compiled by @CC@ @CC_VERSION@"
+#define PG_VERSION_STR  "PostgreSQL " PG_RELEASE "." PG_VERSION "." PG_SUBVERSION " on @host@, compiled by @CC@ @CC_VERSION@"
 
 #endif
diff --git a/src/makefiles/Makefile.unixware b/src/makefiles/Makefile.unixware
new file mode 100644
index 00000000000..442994ca4f7
--- /dev/null
+++ b/src/makefiles/Makefile.unixware
@@ -0,0 +1,7 @@
+LDFLAGS+= -Wl,-Bexport
+
+%.so: %.o
+	$(LD) -G -Bdynamic -o $@ $<
+
+INSTALL= /usr/ucb/install
+
diff --git a/src/template/unixware b/src/template/unixware
new file mode 100644
index 00000000000..d68d4aaa63a
--- /dev/null
+++ b/src/template/unixware
@@ -0,0 +1,8 @@
+AROPT:crs
+CFLAGS:-Xa -v -O -K i486,host,inline,loop_unroll,alloca -Dsvr4
+SHARED_LIB:-K PIC
+SRCH_INC:
+SRCH_LIB:
+USE_LOCALE:no
+DLSUFFIX:.so
+CC:cc
-- 
GitLab