From 7a7e0240ea84715b987345fb89daa24149a1af0a Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 2 Oct 2000 17:16:01 +0000 Subject: [PATCH] Here is the first batch of files and diffs for the BeOS port. I've run into problems with some bits of it, but when all the patches are in it'll build and we can fix it from there :) I've got a version that builds and runs and that is the basis for these patches. The first file has the new additional files that are required, template/beos backend/port/dynloader/beos.c backend/port/dynloader/beos.h include/port/beos.h makefiles/Makefile.beos The second is a tarball of diffs against a few files. I've added sys/ipc.h to configure and config.h via configure.in and config.h.in and then started adding the check as this file isn't needed on BeOS and having loads of #ifdef BEOS isn't as obvious as #ifdef HAVE_SYS_IPC_H and isn't as autconf'ish :) Files touched are include/c.h configure.in include/config.h.in include/storage/ipc.h include/utils/int8.h Let me know how these go. I'll await a response before submitting any more. Any problems just get in touch. David Reid --- configure.in | 2 +- src/backend/port/dynloader/beos.c | 60 +++++++++++++++++++++++++++++++ src/backend/port/dynloader/beos.h | 33 +++++++++++++++++ src/include/c.h | 16 ++++++++- src/include/config.h.in | 5 ++- src/include/port/beos.h | 10 ++++++ src/include/storage/ipc.h | 4 ++- src/makefiles/Makefile.beos | 6 ++++ src/template/beos | 9 +++++ 9 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 src/backend/port/dynloader/beos.c create mode 100644 src/backend/port/dynloader/beos.h create mode 100644 src/include/port/beos.h create mode 100644 src/makefiles/Makefile.beos create mode 100644 src/template/beos diff --git a/configure.in b/configure.in index 51230d9e22..798f6728a6 100644 --- a/configure.in +++ b/configure.in @@ -660,7 +660,7 @@ fi ## Header files ## dnl sys/socket.h and sys/types.h are required by AC_FUNC_ACCEPT_ARGTYPES -AC_CHECK_HEADERS([crypt.h dld.h endian.h fp_class.h getopt.h ieeefp.h netinet/tcp.h pwd.h sys/pstat.h sys/select.h sys/socket.h sys/types.h sys/un.h termios.h]) +AC_CHECK_HEADERS([crypt.h dld.h endian.h fp_class.h getopt.h ieeefp.h netinet/tcp.h pwd.h sys/ipc.h sys/pstat.h sys/select.h sys/socket.h sys/types.h sys/un.h termios.h]) AC_CHECK_HEADERS([readline/readline.h readline.h], [break]) AC_CHECK_HEADERS([readline/history.h history.h], [break]) diff --git a/src/backend/port/dynloader/beos.c b/src/backend/port/dynloader/beos.c new file mode 100644 index 0000000000..c2a6b78845 --- /dev/null +++ b/src/backend/port/dynloader/beos.c @@ -0,0 +1,60 @@ +/*------------------------------------------------------------------------- + * + * dynloader.c + * Dynamic Loader for Postgres for BeOS + * + * Portions Copyright (c) 1996-2000, PostgreSQL, Inc + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/beos.c,v 1.1 2000/10/02 17:15:53 momjian Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" +#include +#include +#include + +#include "dynloader.h" + +extern char pg_pathname[]; + +void * +beos_dlopen(const char *filename) +{ + image_id id = -1; + + if ((id = load_add_on(filename)) < 0) + return NULL; + + return (void *) id; +} + +void +beos_dlclose(void *handle) +{ + image_id id = (image_id) handle; + unload_add_on(id); + return; +} + +void * +beos_dlsym(void *handle, const char *name) +{ + image_id id = (image_id)handle; + void *addr; + + if (get_image_symbol(id, name, B_SYMBOL_TYPE_ANY, &addr) != B_OK) + return NULL; + + return addr; +} + +char * +beos_dlerror() +{ + return (char *)strerror(errno); +} diff --git a/src/backend/port/dynloader/beos.h b/src/backend/port/dynloader/beos.h new file mode 100644 index 0000000000..3765ff0629 --- /dev/null +++ b/src/backend/port/dynloader/beos.h @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------- + * + * port_protos.h + * port-specific prototypes for BeOS + * + * + * Portions Copyright (c) 1996-2000, PostgreSQL, Inc + * Portions Copyright (c) 1994, Regents of the University of California + * + * $Id: beos.h,v 1.1 2000/10/02 17:15:53 momjian Exp $ + * + *------------------------------------------------------------------------- + */ +#ifndef PORT_PROTOS_H +#define PORT_PROTOS_H + +#include "postgres.h" + +#include "fmgr.h" +#include "utils/dynamic_loader.h" + +char *beos_dlerror(void); +void *beos_dlopen(const char *filename); +void *beos_dlsym(void *handle, const char *name); +void beos_dlclose(void *handle); + +#define pg_dlopen(f) beos_dlopen(f) +#define pg_dlsym beos_dlsym +#define pg_dlclose beos_dlclose +#define pg_dlerror beos_dlerror + + +#endif /* PORT_PROTOS_H */ diff --git a/src/include/c.h b/src/include/c.h index a11106df8c..fcef4a0ff3 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: c.h,v 1.82 2000/09/29 13:53:32 petere Exp $ + * $Id: c.h,v 1.83 2000/10/02 17:15:55 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -56,6 +56,9 @@ #include #include /* ensure O_BINARY is available */ #endif +#ifdef __BEOS__ +#include +#endif /* ---------------------------------------------------------------- * Section 1: bool, true, false, TRUE, FALSE, NULL @@ -66,6 +69,7 @@ * Boolean value, either true or false. * */ +#ifndef __BEOS__ #ifndef __cplusplus #ifndef bool typedef char bool; @@ -78,6 +82,7 @@ typedef char bool; #ifndef false #define false ((bool) 0) #endif +#endif /* __BEOS__ */ typedef bool *BoolPtr; #ifndef TRUE @@ -165,9 +170,11 @@ typedef char *Pointer; * used for numerical computations and the * frontend/backend protocol. */ +#ifndef __BEOS__ typedef signed char int8; /* == 8 bits */ typedef signed short int16; /* == 16 bits */ typedef signed int int32; /* == 32 bits */ +#endif /* __BEOS__ */ /* * uintN @@ -175,9 +182,11 @@ typedef signed int int32; /* == 32 bits */ * used for numerical computations and the * frontend/backend protocol. */ +#ifndef __BEOS__ typedef unsigned char uint8; /* == 8 bits */ typedef unsigned short uint16; /* == 16 bits */ typedef unsigned int uint32; /* == 32 bits */ +#endif /* __BEOS__ */ /* * floatN @@ -259,6 +268,8 @@ typedef int32 int4; typedef float float4; typedef double float8; +/* BeOS already has int64 defined, so skip these... */ +#ifndef BEOS #ifdef HAVE_LONG_INT_64 /* Plain "long int" fits, use it */ typedef long int int64; @@ -272,6 +283,9 @@ typedef long int int64; #define INT64_IS_BUSTED #endif #endif +#else /* Add BeOS support */ +#include +#endif /* BEOS */ /* ---------------------------------------------------------------- * Section 4: datum type + support macros diff --git a/src/include/config.h.in b/src/include/config.h.in index c363bceb4c..86b9623995 100644 --- a/src/include/config.h.in +++ b/src/include/config.h.in @@ -8,7 +8,7 @@ * or in config.h afterwards. Of course, if you edit config.h, then your * changes will be overwritten the next time you run configure. * - * $Id: config.h.in,v 1.137 2000/09/29 22:00:45 momjian Exp $ + * $Id: config.h.in,v 1.138 2000/10/02 17:15:55 momjian Exp $ */ #ifndef CONFIG_H @@ -342,6 +342,9 @@ /* Set to 1 if you have */ #undef HAVE_READLINE_READLINE_H +/* Define if you have */ +#undef HAVE_SYS_IPC_H + /* Set to 1 if you have */ #undef HAVE_SYS_SELECT_H diff --git a/src/include/port/beos.h b/src/include/port/beos.h new file mode 100644 index 0000000000..c7b33efecb --- /dev/null +++ b/src/include/port/beos.h @@ -0,0 +1,10 @@ +#include +#define USE_POSIX_TIME +#define HAS_TEST_AND_SET + +typedef unsigned char slock_t; + +#define AF_UNIX 1 +#define IPPROTO_IP 0 + + diff --git a/src/include/storage/ipc.h b/src/include/storage/ipc.h index 7b01513028..a3abfea037 100644 --- a/src/include/storage/ipc.h +++ b/src/include/storage/ipc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: ipc.h,v 1.38 2000/01/26 05:58:32 momjian Exp $ + * $Id: ipc.h,v 1.39 2000/10/02 17:15:58 momjian Exp $ * * NOTES * This file is very architecture-specific. This stuff should actually @@ -23,7 +23,9 @@ #define IPC_H #include +#ifdef HAVE_SYS_IPC_H #include /* For IPC_PRIVATE */ +#endif #include "config.h" diff --git a/src/makefiles/Makefile.beos b/src/makefiles/Makefile.beos new file mode 100644 index 0000000000..d0ca050c03 --- /dev/null +++ b/src/makefiles/Makefile.beos @@ -0,0 +1,6 @@ +MK_NO_LORDER=true +ifdef ELF_SYSTEM +LDFLAGS += -Wl,-E +endif +%.so: %.o + $(LD) -x -Bshareable -o $@ $< diff --git a/src/template/beos b/src/template/beos new file mode 100644 index 0000000000..0a62b51a1e --- /dev/null +++ b/src/template/beos @@ -0,0 +1,9 @@ +AROPT:crs +SHARED_LIB:-fpic -DPIC +CFLAGS:-O2 -DBEOS +SRCH_INC: +SRCH_LIB: +USE_LOCALE:no +DLSUFFIX:.so +YFLAGS:-d +YACC:bison -y -- GitLab