0001-DragonFly-BSD-support.patch
application/mbox
Filename: 0001-DragonFly-BSD-support.patch
Type: application/mbox
Part: 0
Message:
Porting PostgreSQL to DragonFly BSD
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch 0001
Subject: DragonFly BSD support.
| File | + | − |
|---|---|---|
| configure | 1 | 0 |
| configure.in | 1 | 0 |
| src/backend/port/dynloader/dragonfly.c | 92 | 0 |
| src/backend/port/dynloader/dragonfly.h | 59 | 0 |
| src/include/port/dragonfly.h | 1 | 0 |
| src/Makefile.shlib | 11 | 0 |
| src/makefiles/Makefile.dragonfly | 29 | 0 |
| src/template/dragonfly | 0 | 0 |
From 0e6ed29a9862097a0bd959c3eb03ddc45682bba6 Mon Sep 17 00:00:00 2001
From: Rumko <rumko@rumko.net>
Date: Sun, 27 Feb 2011 20:56:11 +0100
Subject: [PATCH] DragonFly BSD support.
Based on FreeBSD port with minimal changes.
---
configure | 1 +
configure.in | 1 +
src/Makefile.shlib | 11 ++++
src/backend/port/dynloader/dragonfly.c | 92 ++++++++++++++++++++++++++++++++
src/backend/port/dynloader/dragonfly.h | 59 ++++++++++++++++++++
src/include/port/dragonfly.h | 1 +
src/makefiles/Makefile.dragonfly | 29 ++++++++++
7 files changed, 194 insertions(+), 0 deletions(-)
create mode 100644 src/backend/port/dynloader/dragonfly.c
create mode 100644 src/backend/port/dynloader/dragonfly.h
create mode 100644 src/include/port/dragonfly.h
create mode 100644 src/makefiles/Makefile.dragonfly
create mode 100644 src/template/dragonfly
diff --git a/configure b/configure
index 0bddb5f..6d208ec 100755
--- a/configure
+++ b/configure
@@ -2196,6 +2196,7 @@ case $host_os in
darwin*) template=darwin ;;
dgux*) template=dgux ;;
freebsd*) template=freebsd ;;
+dragonfly*) template=dragonfly ;;
hpux*) template=hpux ;;
irix*) template=irix ;;
linux*|gnu*|k*bsd*-gnu)
diff --git a/configure.in b/configure.in
index 6aae504..3bc9120 100644
--- a/configure.in
+++ b/configure.in
@@ -60,6 +60,7 @@ case $host_os in
darwin*) template=darwin ;;
dgux*) template=dgux ;;
freebsd*) template=freebsd ;;
+dragonfly*) template=dragonfly ;;
hpux*) template=hpux ;;
irix*) template=irix ;;
linux*|gnu*|k*bsd*-gnu)
diff --git a/src/Makefile.shlib b/src/Makefile.shlib
index a5cf6c6..a78c98c 100644
--- a/src/Makefile.shlib
+++ b/src/Makefile.shlib
@@ -198,6 +198,17 @@ ifeq ($(PORTNAME), netbsd)
endif
endif
+ifeq ($(PORTNAME), dragonfly)
+ ifdef ELF_SYSTEM
+ LINK.shared = $(COMPILER) -shared
+ ifdef soname
+ LINK.shared += -Wl,-x,-soname,$(soname)
+ endif
+ else
+ LINK.shared = $(LD) -x -Bshareable -Bforcearchive
+ endif
+endif
+
ifeq ($(PORTNAME), hpux)
ifdef SO_MAJOR_VERSION
shlib = lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
diff --git a/src/backend/port/dynloader/dragonfly.c b/src/backend/port/dynloader/dragonfly.c
new file mode 100644
index 0000000..a752301
--- /dev/null
+++ b/src/backend/port/dynloader/dragonfly.c
@@ -0,0 +1,92 @@
+/* src/backend/port/dynloader/dragonfly.c */
+
+/*
+ * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)dl.c 5.4 (Berkeley) 2/23/91";
+#endif /* LIBC_SCCS and not lint */
+
+#include "postgres.h"
+
+#include <nlist.h>
+#include <link.h>
+#include <dlfcn.h>
+
+#include "dynloader.h"
+
+static char error_message[BUFSIZ];
+
+char *
+BSD44_derived_dlerror(void)
+{
+ static char ret[BUFSIZ];
+
+ strcpy(ret, error_message);
+ error_message[0] = 0;
+ return (ret[0] == 0) ? NULL : ret;
+}
+
+void *
+BSD44_derived_dlopen(const char *file, int num)
+{
+ void *vp;
+
+ if ((vp = dlopen((char *) file, num)) == NULL)
+ snprintf(error_message, sizeof(error_message),
+ "dlopen (%s) failed: %s", file, dlerror());
+ return vp;
+}
+
+void *
+BSD44_derived_dlsym(void *handle, const char *name)
+{
+ void *vp;
+
+#ifndef __ELF__
+ char buf[BUFSIZ];
+
+ if (*name != '_')
+ {
+ snprintf(buf, sizeof(buf), "_%s", name);
+ name = buf;
+ }
+#endif
+ if ((vp = dlsym(handle, (char *) name)) == NULL)
+ snprintf(error_message, sizeof(error_message),
+ "dlsym (%s) failed", name);
+ return vp;
+}
+
+void
+BSD44_derived_dlclose(void *handle)
+{
+ dlclose(handle);
+}
diff --git a/src/backend/port/dynloader/dragonfly.h b/src/backend/port/dynloader/dragonfly.h
new file mode 100644
index 0000000..443aed9
--- /dev/null
+++ b/src/backend/port/dynloader/dragonfly.h
@@ -0,0 +1,59 @@
+/*-------------------------------------------------------------------------
+ *
+ * dragonfly.h
+ * port-specific prototypes for DragonFly BSD
+ *
+ * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/backend/port/dynloader/dragonfly.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef PORT_PROTOS_H
+#define PORT_PROTOS_H
+
+#include <sys/types.h>
+#include <nlist.h>
+#include <link.h>
+#include <dlfcn.h>
+
+#include "utils/dynamic_loader.h"
+
+/*
+ * Dynamic Loader on NetBSD 1.0.
+ *
+ * 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.
+ *
+ * agc - I know this is all a bit crufty, but it does work, is fairly
+ * portable, and works (the stipulation that the d.l. function must
+ * begin with an underscore is fairly tricky, and some versions of
+ * NetBSD (like 1.0, and 1.0A pre June 1995) have no dlerror.)
+ */
+
+/*
+ * In some older systems, the RTLD_NOW flag isn't defined and the mode
+ * argument to dlopen must always be 1. The RTLD_GLOBAL flag is wanted
+ * if available, but it doesn't exist everywhere.
+ * If it doesn't exist, set it to 0 so it has no effect.
+ */
+#ifndef RTLD_NOW
+#define RTLD_NOW 1
+#endif
+#ifndef RTLD_GLOBAL
+#define RTLD_GLOBAL 0
+#endif
+
+#define pg_dlopen(f) BSD44_derived_dlopen((f), RTLD_NOW | RTLD_GLOBAL)
+#define pg_dlsym BSD44_derived_dlsym
+#define pg_dlclose BSD44_derived_dlclose
+#define pg_dlerror BSD44_derived_dlerror
+
+char *BSD44_derived_dlerror(void);
+void *BSD44_derived_dlopen(const char *filename, int num);
+void *BSD44_derived_dlsym(void *handle, const char *name);
+void BSD44_derived_dlclose(void *handle);
+
+#endif /* PORT_PROTOS_H */
diff --git a/src/include/port/dragonfly.h b/src/include/port/dragonfly.h
new file mode 100644
index 0000000..3ebe8b4
--- /dev/null
+++ b/src/include/port/dragonfly.h
@@ -0,0 +1 @@
+/* src/include/port/dragonfly.h */
diff --git a/src/makefiles/Makefile.dragonfly b/src/makefiles/Makefile.dragonfly
new file mode 100644
index 0000000..839864c
--- /dev/null
+++ b/src/makefiles/Makefile.dragonfly
@@ -0,0 +1,29 @@
+AROPT = cr
+
+ifdef ELF_SYSTEM
+export_dynamic = -Wl,-export-dynamic
+rpath = -Wl,-R'$(rpathdir)'
+endif
+
+DLSUFFIX = .so
+
+CFLAGS_SL = -fPIC -DPIC
+
+ifeq ($(findstring i386,$(host_cpu)), i386)
+allow_nonpic_in_shlib = yes
+endif
+
+
+# Rule for building a shared library from a single .o file
+%.so: %.o
+ifdef ELF_SYSTEM
+ $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_SL) -shared -o $@ $<
+else
+ $(LD) $(LDREL) $(LDOUT) $<.obj -x $<
+ @echo building shared object $@
+ @rm -f $@.pic
+ @${AR} cq $@.pic $<.obj
+ ${RANLIB} $@.pic
+ @rm -f $@
+ $(LD) -x -Bshareable -Bforcearchive -o $@ $@.pic
+endif
diff --git a/src/template/dragonfly b/src/template/dragonfly
new file mode 100644
index 0000000..e69de29
--
1.7.3.5