mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-09 05:10:05 +02:00
698 lines
19 KiB
Plaintext
698 lines
19 KiB
Plaintext
From 4352aee748a215e2e23be897c7baee39785d63c9 Mon Sep 17 00:00:00 2001
|
|
From: Augustin Cavalier <waddlesplash@gmail.com>
|
|
Date: Thu, 3 Oct 2019 17:36:43 +0000
|
|
Subject: Changes to make Postgresql run on Haiku.
|
|
|
|
Adapted from Mark Hellegers' 9.3.5 patch.
|
|
|
|
diff --git a/configure.ac b/configure.ac
|
|
index 456c541..ca1e3d6 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -67,6 +67,7 @@ case $host_os in
|
|
darwin*) template=darwin ;;
|
|
dragonfly*) template=netbsd ;;
|
|
freebsd*) template=freebsd ;;
|
|
+ haiku*) template=haiku ;;
|
|
linux*|gnu*|k*bsd*-gnu)
|
|
template=linux ;;
|
|
mingw*) template=win32 ;;
|
|
@@ -1300,12 +1301,12 @@ AC_SEARCH_LIBS(setproctitle, util)
|
|
# gcc/clang's sanitizer helper library provides dlopen but not dlsym, thus
|
|
# when enabling asan the dlopen check doesn't notice that -ldl is actually
|
|
# required. Just checking for dlsym() ought to suffice.
|
|
-AC_SEARCH_LIBS(dlsym, dl)
|
|
-AC_SEARCH_LIBS(socket, [socket ws2_32])
|
|
+AC_SEARCH_LIBS(dlopen, [rt root])
|
|
+AC_SEARCH_LIBS(socket, [socket ws2_32 network])
|
|
AC_SEARCH_LIBS(getopt_long, [getopt gnugetopt])
|
|
-AC_SEARCH_LIBS(shm_open, rt)
|
|
-AC_SEARCH_LIBS(shm_unlink, rt)
|
|
-AC_SEARCH_LIBS(clock_gettime, [rt posix4])
|
|
+AC_SEARCH_LIBS(shm_open, [rt root])
|
|
+AC_SEARCH_LIBS(shm_unlink, [rt root])
|
|
+AC_SEARCH_LIBS(clock_gettime, [rt posix4 root])
|
|
# Solaris:
|
|
AC_SEARCH_LIBS(fdatasync, [rt posix4])
|
|
# Cygwin:
|
|
@@ -2066,7 +2067,10 @@ AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignme
|
|
# Some platforms predefine the types int8, int16, etc. Only check
|
|
# a (hopefully) representative subset.
|
|
AC_CHECK_TYPES([int8, uint8, int64, uint64], [], [],
|
|
-[#include <stdio.h>])
|
|
+[#include <stdio.h>
|
|
+#ifdef __HAIKU__
|
|
+#include <SupportDefs.h>
|
|
+#endif])
|
|
|
|
# Some compilers offer a 128-bit integer scalar type.
|
|
PGAC_TYPE_128BIT_INT
|
|
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
|
|
index ce05cc1..9a6ce21 100644
|
|
--- a/src/Makefile.global.in
|
|
+++ b/src/Makefile.global.in
|
|
@@ -773,6 +773,20 @@ endif
|
|
# Not really standard libc functions, used by the backend.
|
|
TAS = @TAS@
|
|
|
|
+##########################################################################
|
|
+#
|
|
+# Packaging on Haiku puts everything in a postgresql directory
|
|
+# Force the override into postgresql directory
|
|
+
|
|
+ifndef PGXS
|
|
+ifeq ($(PORTNAME), haiku)
|
|
+override datadir := $(datadir)/postgresql
|
|
+override sysconfdir := $(sysconfdir)/postgresql
|
|
+override pkglibdir := $(pkglibdir)/postgresql
|
|
+override pkgincludedir := $(pkgincludedir)/postgresql
|
|
+override docdir := $(docdir)/postgresql
|
|
+endif
|
|
+endif
|
|
|
|
##########################################################################
|
|
#
|
|
diff --git a/src/Makefile.shlib b/src/Makefile.shlib
|
|
index f94d59d..b8af31b 100644
|
|
--- a/src/Makefile.shlib
|
|
+++ b/src/Makefile.shlib
|
|
@@ -219,6 +219,12 @@ ifeq ($(PORTNAME), win32)
|
|
haslibarule = yes
|
|
endif
|
|
|
|
+ifeq ($(PORTNAME), haiku)
|
|
+ ifdef SO_MAJOR_VERSION
|
|
+ shlib = lib$(NAME)$(DLSUFFIX)
|
|
+ endif
|
|
+ LINK.shared = $(CC) -shared
|
|
+endif
|
|
|
|
# If the shared library doesn't have an export file, mark all symbols not
|
|
# explicitly exported using PGDLLEXPORT as hidden. We can't pass these flags
|
|
@@ -272,6 +278,7 @@ $(stlib): $(shlib)
|
|
endif # aix
|
|
|
|
ifeq (,$(filter cygwin win32,$(PORTNAME)))
|
|
+ifneq ($(PORTNAME), haiku)
|
|
|
|
# Normal case
|
|
$(shlib): $(OBJS) | $(SHLIB_PREREQS)
|
|
@@ -305,6 +312,14 @@ $(exports_file): $(SHLIB_EXPORTS)
|
|
endif
|
|
endif
|
|
|
|
+else # PORTNAME == haiku
|
|
+
|
|
+# Haiku case
|
|
+$(shlib): $(OBJS)
|
|
+ $(LINK.shared) $(LDFLAGS_SL) -o $@ $(OBJS) $(SHLIB_LINK)
|
|
+
|
|
+endif # PORTNAME == haiku
|
|
+
|
|
else # PORTNAME == cygwin || PORTNAME == win32
|
|
|
|
ifeq ($(PORTNAME), cygwin)
|
|
diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
|
|
index 4947388..61c8e4a 100644
|
|
--- a/src/backend/catalog/dependency.c
|
|
+++ b/src/backend/catalog/dependency.c
|
|
@@ -1299,7 +1299,7 @@ DropObjectById(const ObjectAddress *object)
|
|
* *depRel is the already-open pg_depend relation.
|
|
*/
|
|
static void
|
|
-deleteOneObject(const ObjectAddress *object, Relation *depRel, int flags)
|
|
+deleteOneObject(const ObjectAddress *object, Relation *depRel, int32 flags)
|
|
{
|
|
ScanKeyData key[3];
|
|
int nkeys;
|
|
diff --git a/src/backend/executor/nodeMergeAppend.c b/src/backend/executor/nodeMergeAppend.c
|
|
index 21b5726..653ae98 100644
|
|
--- a/src/backend/executor/nodeMergeAppend.c
|
|
+++ b/src/backend/executor/nodeMergeAppend.c
|
|
@@ -52,7 +52,7 @@
|
|
typedef int32 SlotNumber;
|
|
|
|
static TupleTableSlot *ExecMergeAppend(PlanState *pstate);
|
|
-static int heap_compare_slots(Datum a, Datum b, void *arg);
|
|
+static int32 heap_compare_slots(Datum a, Datum b, void *arg);
|
|
|
|
|
|
/* ----------------------------------------------------------------
|
|
diff --git a/src/backend/main/main.c b/src/backend/main/main.c
|
|
index 84d65aa..8a47589 100644
|
|
--- a/src/backend/main/main.c
|
|
+++ b/src/backend/main/main.c
|
|
@@ -387,7 +387,7 @@ help(const char *progname)
|
|
static void
|
|
check_root(const char *progname)
|
|
{
|
|
-#ifndef WIN32
|
|
+#if !defined(WIN32) && !defined(__HAIKU__)
|
|
if (geteuid() == 0)
|
|
{
|
|
write_stderr("\"root\" execution of the PostgreSQL server is not permitted.\n"
|
|
@@ -411,7 +411,10 @@ check_root(const char *progname)
|
|
progname);
|
|
exit(1);
|
|
}
|
|
-#else /* WIN32 */
|
|
+#elif defined(__HAIKU__)
|
|
+ {
|
|
+ }
|
|
+#else /* WIN32 or HAIKU */
|
|
if (pgwin32_is_admin())
|
|
{
|
|
write_stderr("Execution of PostgreSQL by a user with administrative permissions is not\n"
|
|
@@ -421,7 +424,7 @@ check_root(const char *progname)
|
|
"more information on how to properly start the server.\n");
|
|
exit(1);
|
|
}
|
|
-#endif /* WIN32 */
|
|
+#endif /* WIN32 or HAIKU */
|
|
}
|
|
|
|
/*
|
|
diff --git a/src/backend/port/Makefile b/src/backend/port/Makefile
|
|
index 2d00b4f..f67d1d9 100644
|
|
--- a/src/backend/port/Makefile
|
|
+++ b/src/backend/port/Makefile
|
|
@@ -31,6 +31,10 @@ ifeq ($(PORTNAME), win32)
|
|
SUBDIRS += win32
|
|
endif
|
|
|
|
+ifeq ($(PORTNAME), haiku)
|
|
+SUBDIRS += haiku
|
|
+endif
|
|
+
|
|
include $(top_srcdir)/src/backend/common.mk
|
|
|
|
tas.o: tas.s
|
|
diff --git a/src/backend/port/dynloader/haiku.c b/src/backend/port/dynloader/haiku.c
|
|
new file mode 100644
|
|
index 0000000..db24966
|
|
--- /dev/null
|
|
+++ b/src/backend/port/dynloader/haiku.c
|
|
@@ -0,0 +1,6 @@
|
|
+/* src/backend/port/dynloader/haiku.c */
|
|
+
|
|
+/* Dummy file used for nothing at this point
|
|
+ *
|
|
+ * see haiku.h
|
|
+ */
|
|
diff --git a/src/backend/port/dynloader/haiku.h b/src/backend/port/dynloader/haiku.h
|
|
new file mode 100644
|
|
index 0000000..61ffb51
|
|
--- /dev/null
|
|
+++ b/src/backend/port/dynloader/haiku.h
|
|
@@ -0,0 +1,33 @@
|
|
+/*-------------------------------------------------------------------------
|
|
+ *
|
|
+ * haiku.h
|
|
+ * port-specific prototypes for Haiku
|
|
+ *
|
|
+ *
|
|
+ * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
|
|
+ * Portions Copyright (c) 1994, Regents of the University of California
|
|
+ *
|
|
+ * src/backend/port/dynloader/haiku.h
|
|
+ *
|
|
+ *-------------------------------------------------------------------------
|
|
+ */
|
|
+#ifndef PORT_PROTOS_H
|
|
+#define PORT_PROTOS_H
|
|
+
|
|
+#include <dlfcn.h>
|
|
+#include "utils/dynamic_loader.h" /* pgrminclude ignore */
|
|
+
|
|
+/*
|
|
+ * Dynamic Loader on Haiku.
|
|
+ *
|
|
+ * 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_NOW | RTLD_GLOBAL)
|
|
+#define pg_dlsym dlsym
|
|
+#define pg_dlclose dlclose
|
|
+#define pg_dlerror dlerror
|
|
+
|
|
+#endif /* PORT_PROTOS_H */
|
|
diff --git a/src/backend/port/haiku/Makefile b/src/backend/port/haiku/Makefile
|
|
new file mode 100644
|
|
index 0000000..f0664c0
|
|
--- /dev/null
|
|
+++ b/src/backend/port/haiku/Makefile
|
|
@@ -0,0 +1,14 @@
|
|
+#-------------------------------------------------------------------------
|
|
+#
|
|
+# Makefile--
|
|
+# Makefile for port/haiku
|
|
+#
|
|
+#-------------------------------------------------------------------------
|
|
+
|
|
+subdir = src/backend/port/haiku
|
|
+top_builddir = ../../../..
|
|
+include $(top_builddir)/src/Makefile.global
|
|
+
|
|
+OBJS = shm.o
|
|
+
|
|
+include $(top_srcdir)/src/backend/common.mk
|
|
diff --git a/src/backend/port/haiku/shm.c b/src/backend/port/haiku/shm.c
|
|
new file mode 100644
|
|
index 0000000..55a9dc7
|
|
--- /dev/null
|
|
+++ b/src/backend/port/haiku/shm.c
|
|
@@ -0,0 +1,144 @@
|
|
+/*-------------------------------------------------------------------------
|
|
+ *
|
|
+ * shm.c
|
|
+ * Haiku System V Shared Memory Emulation
|
|
+ *
|
|
+ * Copyright (c) 1999-2001, Cyril VELTER
|
|
+ *
|
|
+ *-------------------------------------------------------------------------
|
|
+ */
|
|
+
|
|
+#include <OS.h>
|
|
+#include "postgres.h"
|
|
+#include <errno.h>
|
|
+#include <sys/ipc.h>
|
|
+
|
|
+/* Emulating SYS shared memory with beos areas. WARNING : fork clone
|
|
+areas in copy on write mode */
|
|
+
|
|
+/* Detach from a shared mem area based on its address */
|
|
+int
|
|
+shmdt(char *shmaddr)
|
|
+{
|
|
+ /* Find area id for this address */
|
|
+ area_id s;
|
|
+
|
|
+ s = area_for(shmaddr);
|
|
+
|
|
+ /* Delete area */
|
|
+ return delete_area(s);
|
|
+}
|
|
+
|
|
+/* Attach to an existing area */
|
|
+int *
|
|
+shmat(int memId, int m1, int m2)
|
|
+{
|
|
+ /* Get our team id */
|
|
+ thread_info thinfo;
|
|
+ team_info teinfo;
|
|
+ area_info ainfo;
|
|
+
|
|
+ get_thread_info(find_thread(NULL), &thinfo);
|
|
+ get_team_info(thinfo.team, &teinfo);
|
|
+
|
|
+ /* Get area teamid */
|
|
+ if (get_area_info(memId, &ainfo) != B_OK)
|
|
+ printf("AREA %d Invalide\n", memId);
|
|
+
|
|
+ if (ainfo.team == teinfo.team)
|
|
+ {
|
|
+ /*
|
|
+ * the area is already in our address space, just return the address
|
|
+ */
|
|
+ return (int *) ainfo.address;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ /*
|
|
+ * the area is not in our address space, clone it before and return
|
|
+ * the address
|
|
+ */
|
|
+ area_id narea;
|
|
+
|
|
+ narea = clone_area(ainfo.name, &(ainfo.address), B_CLONE_ADDRESS, B_READ_AREA | B_WRITE_AREA, memId);
|
|
+ get_area_info(narea, &ainfo);
|
|
+ return (int *) ainfo.address;
|
|
+ }
|
|
+}
|
|
+
|
|
+/* Control a shared mem area */
|
|
+int
|
|
+shmctl(int shmid, int flag, struct shmid_ds * dummy)
|
|
+{
|
|
+ if (flag == IPC_RMID)
|
|
+ {
|
|
+ /* Delete the area */
|
|
+ delete_area(shmid);
|
|
+ return 0;
|
|
+ }
|
|
+ if (flag == IPC_STAT)
|
|
+ {
|
|
+ /* Find any SYSV area with the shmid in its name */
|
|
+
|
|
+ area_info inf;
|
|
+ team_info infteam;
|
|
+ int32 cookteam = 0;
|
|
+ char name[50];
|
|
+
|
|
+ sprintf(name, "SYSV_IPC %d", shmid);
|
|
+
|
|
+ dummy->shm_nattch = 0;
|
|
+
|
|
+ while (get_next_team_info(&cookteam, &infteam) == B_OK)
|
|
+ {
|
|
+ int32 cook = 0;
|
|
+
|
|
+ while (get_next_area_info(infteam.team, &cook, &inf) == B_OK)
|
|
+ {
|
|
+ if (strcmp(name, inf.name) == 0)
|
|
+ dummy->shm_nattch++;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ errno = 0;
|
|
+ return 0;
|
|
+ }
|
|
+ errno = EINVAL;
|
|
+ return -1;
|
|
+}
|
|
+
|
|
+/* Get an area based on the IPC key */
|
|
+int
|
|
+shmget(int memKey, int size, int flag)
|
|
+{
|
|
+ char nom[50];
|
|
+ void *Address;
|
|
+ area_id parea;
|
|
+ area_id original;
|
|
+ area_id clone;
|
|
+
|
|
+ /* Area name */
|
|
+ sprintf(nom, "SYSV_IPC_SHM : %d", memKey);
|
|
+
|
|
+ /* Find area */
|
|
+ parea = find_area(nom);
|
|
+
|
|
+ /* area exist, just return its id */
|
|
+ if (parea != B_NAME_NOT_FOUND)
|
|
+ return parea;
|
|
+
|
|
+ /* area does not exist and no creation is requested : error */
|
|
+ if (flag == 0)
|
|
+ return -1;
|
|
+
|
|
+ /*
|
|
+ * area does not exist and its creation is requested, create it (be sure
|
|
+ * to have a 4ko multiple size
|
|
+ */
|
|
+ original = create_area(nom, &Address, B_ANY_ADDRESS, ((size / 4096) + 1) * 4096, B_NO_LOCK, B_READ_AREA | B_WRITE_AREA);
|
|
+
|
|
+ clone = clone_area(nom, &Address, B_CLONE_ADDRESS, B_READ_AREA | B_WRITE_AREA, original);
|
|
+
|
|
+ return original;
|
|
+
|
|
+}
|
|
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
|
|
index 73d6a61..4aa25eb 100644
|
|
--- a/src/backend/tcop/postgres.c
|
|
+++ b/src/backend/tcop/postgres.c
|
|
@@ -5091,7 +5091,7 @@ ShowUsage(const char *title)
|
|
(long) user.tv_usec,
|
|
(long) sys.tv_sec,
|
|
(long) sys.tv_usec);
|
|
-#ifndef WIN32
|
|
+#if !defined(WIN32) && !defined(__HAIKU__)
|
|
|
|
/*
|
|
* The following rusage fields are not defined by POSIX, but they're
|
|
diff --git a/src/backend/tsearch/ts_parse.c b/src/backend/tsearch/ts_parse.c
|
|
index c347129..d6b6fbc 100644
|
|
--- a/src/backend/tsearch/ts_parse.c
|
|
+++ b/src/backend/tsearch/ts_parse.c
|
|
@@ -352,7 +352,7 @@ LexizeExec(LexizeData *ld, ParsedLex **correspondLexem)
|
|
* prs will be filled in.
|
|
*/
|
|
void
|
|
-parsetext(Oid cfgId, ParsedText *prs, char *buf, int buflen)
|
|
+parsetext(Oid cfgId, ParsedText *prs, char *buf, int32 buflen)
|
|
{
|
|
int type,
|
|
lenlemm = 0; /* silence compiler warning */
|
|
@@ -537,7 +537,7 @@ addHLParsedLex(HeadlineParsedText *prs, TSQuery query, ParsedLex *lexs, TSLexeme
|
|
}
|
|
|
|
void
|
|
-hlparsetext(Oid cfgId, HeadlineParsedText *prs, TSQuery query, char *buf, int buflen)
|
|
+hlparsetext(Oid cfgId, HeadlineParsedText *prs, TSQuery query, char *buf, int32 buflen)
|
|
{
|
|
int type,
|
|
lenlemm = 0; /* silence compiler warning */
|
|
diff --git a/src/backend/utils/adt/tsquery_cleanup.c b/src/backend/utils/adt/tsquery_cleanup.c
|
|
index dc31665..eb8f463 100644
|
|
--- a/src/backend/utils/adt/tsquery_cleanup.c
|
|
+++ b/src/backend/utils/adt/tsquery_cleanup.c
|
|
@@ -187,7 +187,7 @@ clean_NOT_intree(NODE *node)
|
|
}
|
|
|
|
QueryItem *
|
|
-clean_NOT(QueryItem *ptr, int *len)
|
|
+clean_NOT(QueryItem *ptr, int32 *len)
|
|
{
|
|
NODE *root = maketree(ptr);
|
|
|
|
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
|
|
index 3dbade0..e5e6af3 100644
|
|
--- a/src/bin/initdb/initdb.c
|
|
+++ b/src/bin/initdb/initdb.c
|
|
@@ -809,7 +809,7 @@ get_id(void)
|
|
{
|
|
const char *username;
|
|
|
|
-#ifndef WIN32
|
|
+#if !defined(WIN32) && !defined(__HAIKU__)
|
|
if (geteuid() == 0) /* 0 is root's uid */
|
|
{
|
|
pg_log_error("cannot be run as root");
|
|
diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c
|
|
index 1465b19..1a65c8b 100644
|
|
--- a/src/bin/pg_ctl/pg_ctl.c
|
|
+++ b/src/bin/pg_ctl/pg_ctl.c
|
|
@@ -2244,7 +2244,7 @@ main(int argc, char **argv)
|
|
/*
|
|
* Disallow running as root, to forestall any possible security holes.
|
|
*/
|
|
-#ifndef WIN32
|
|
+#if !defined(WIN32) && !defined(__HAIKU__)
|
|
if (geteuid() == 0)
|
|
{
|
|
write_stderr(_("%s: cannot be run as root\n"
|
|
diff --git a/src/include/c.h b/src/include/c.h
|
|
index a7258cc..47d5599 100644
|
|
--- a/src/include/c.h
|
|
+++ b/src/include/c.h
|
|
@@ -55,6 +55,11 @@
|
|
#include "pg_config_manual.h" /* must be after pg_config.h */
|
|
#include "pg_config_os.h" /* must be before any system header files */
|
|
|
|
+#if defined(__HAIKU__)
|
|
+// Haiku defines int (int8, int64, etc) types in SupportDefs.h
|
|
+#include <SupportDefs.h>
|
|
+#endif
|
|
+
|
|
/* System header files that should be available everywhere in Postgres */
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
diff --git a/src/include/port/haiku.h b/src/include/port/haiku.h
|
|
new file mode 100644
|
|
index 0000000..772a3fe
|
|
--- /dev/null
|
|
+++ b/src/include/port/haiku.h
|
|
@@ -0,0 +1,16 @@
|
|
+/* src/include/port/haiku.h */
|
|
+
|
|
+/* Haiku doesn't have all the required getrusage fields */
|
|
+//#undef HAVE_GETRUSAGE
|
|
+
|
|
+/* Haiku doesn't implement shared memory as needed*/
|
|
+struct shmid_ds
|
|
+{
|
|
+ int dummy;
|
|
+ int shm_nattch;
|
|
+};
|
|
+
|
|
+int shmdt(char *shmaddr);
|
|
+int *shmat(int memId, int m1, int m2);
|
|
+int shmctl(int shmid, int flag, struct shmid_ds * dummy);
|
|
+int shmget(int memKey, int size, int flag);
|
|
diff --git a/src/include/storage/dsm_impl.h b/src/include/storage/dsm_impl.h
|
|
index daf07bd..60ecf2e 100644
|
|
--- a/src/include/storage/dsm_impl.h
|
|
+++ b/src/include/storage/dsm_impl.h
|
|
@@ -31,10 +31,12 @@
|
|
#define USE_DSM_POSIX
|
|
#define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_POSIX
|
|
#endif
|
|
+#ifndef __HAIKU__
|
|
#define USE_DSM_SYSV
|
|
#ifndef DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE
|
|
#define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_SYSV
|
|
#endif
|
|
+#endif
|
|
#define USE_DSM_MMAP
|
|
#endif
|
|
|
|
diff --git a/src/makefiles/Makefile.haiku b/src/makefiles/Makefile.haiku
|
|
new file mode 100644
|
|
index 0000000..249d6c3
|
|
--- /dev/null
|
|
+++ b/src/makefiles/Makefile.haiku
|
|
@@ -0,0 +1,7 @@
|
|
+AROPT = crs
|
|
+
|
|
+DLSUFFIX = .so
|
|
+
|
|
+# Rule for building a shared library from a single .o file
|
|
+%.so: %.o
|
|
+ $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_SL) -shared -o $@ $<
|
|
diff --git a/src/template/haiku b/src/template/haiku
|
|
new file mode 100644
|
|
index 0000000..e69de29
|
|
--
|
|
2.50.1
|
|
|
|
|
|
From 695f1d11255ebafa6d14ead86d2c0fd002af154a Mon Sep 17 00:00:00 2001
|
|
From: begasus <begasus@gmail.com>
|
|
Date: Mon, 26 Dec 2022 17:35:12 +0100
|
|
Subject: adjust autoconf required version
|
|
|
|
|
|
diff --git a/configure.ac b/configure.ac
|
|
index ca1e3d6..59cc28c 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -19,7 +19,7 @@ m4_pattern_forbid(^PGAC_)dnl to catch undefined macros
|
|
|
|
AC_INIT([PostgreSQL], [16.10], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/])
|
|
|
|
-m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required.
|
|
+m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.71], [], [m4_fatal([Autoconf version 2.69 is required.
|
|
Untested combinations of 'autoconf' and PostgreSQL versions are not
|
|
recommended. You can remove the check from 'configure.ac' but it is then
|
|
your responsibility whether the result works or not.])])
|
|
--
|
|
2.50.1
|
|
|
|
|
|
From 248c7108341e063eed1c10dad3b23764eae87d4d Mon Sep 17 00:00:00 2001
|
|
From: Schrijvers Luc <begasus@gmail.com>
|
|
Date: Fri, 30 Aug 2024 17:54:01 +0200
|
|
Subject: Fix 32bit build
|
|
|
|
|
|
diff --git a/src/include/c.h b/src/include/c.h
|
|
index 47d5599..5d03ebe 100644
|
|
--- a/src/include/c.h
|
|
+++ b/src/include/c.h
|
|
@@ -477,6 +477,9 @@ typedef char *Pointer;
|
|
* used for numerical computations and the
|
|
* frontend/backend protocol.
|
|
*/
|
|
+#ifdef __HAIKU__
|
|
+#include <SupportDefs.h>
|
|
+#else
|
|
#ifndef HAVE_INT8
|
|
typedef signed char int8; /* == 8 bits */
|
|
typedef signed short int16; /* == 16 bits */
|
|
@@ -494,7 +497,7 @@ typedef unsigned char uint8; /* == 8 bits */
|
|
typedef unsigned short uint16; /* == 16 bits */
|
|
typedef unsigned int uint32; /* == 32 bits */
|
|
#endif /* not HAVE_UINT8 */
|
|
-
|
|
+#endif
|
|
/*
|
|
* bitsN
|
|
* Unit of bitwise operation, AT LEAST N BITS IN SIZE.
|
|
--
|
|
2.50.1
|
|
|
|
|
|
From a6bed08d630682e0c97e3d95ae1a68951cecaebf Mon Sep 17 00:00:00 2001
|
|
From: Luc Schrijvers <begasus@gmail.com>
|
|
Date: Sun, 31 Aug 2025 08:59:11 +0200
|
|
Subject: Disable #include <sys/shm.h>
|
|
|
|
|
|
diff --git a/src/backend/port/sysv_shmem.c b/src/backend/port/sysv_shmem.c
|
|
index eaba244..7e0fd71 100644
|
|
--- a/src/backend/port/sysv_shmem.c
|
|
+++ b/src/backend/port/sysv_shmem.c
|
|
@@ -24,7 +24,9 @@
|
|
#include <sys/file.h>
|
|
#include <sys/ipc.h>
|
|
#include <sys/mman.h>
|
|
+#ifndef __HAIKU__
|
|
#include <sys/shm.h>
|
|
+#endif
|
|
#include <sys/stat.h>
|
|
|
|
#include "miscadmin.h"
|
|
diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c
|
|
index 0ac0035..6bdd42d 100644
|
|
--- a/src/backend/storage/ipc/dsm_impl.c
|
|
+++ b/src/backend/storage/ipc/dsm_impl.c
|
|
@@ -54,7 +54,9 @@
|
|
#ifndef WIN32
|
|
#include <sys/mman.h>
|
|
#include <sys/ipc.h>
|
|
+#ifndef __HAIKU__
|
|
#include <sys/shm.h>
|
|
+#endif
|
|
#include <sys/stat.h>
|
|
#endif
|
|
|
|
--
|
|
2.50.1
|
|
|
|
|
|
From a2daae78bcf41114edd67aafc34b38be2ca9185c Mon Sep 17 00:00:00 2001
|
|
From: Luc Schrijvers <begasus@gmail.com>
|
|
Date: Sun, 31 Aug 2025 09:02:48 +0200
|
|
Subject: Fix(?) for fdatasync
|
|
|
|
|
|
diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c
|
|
index ee91bb7..1421be6 100644
|
|
--- a/src/backend/storage/file/fd.c
|
|
+++ b/src/backend/storage/file/fd.c
|
|
@@ -459,7 +459,7 @@ pg_fdatasync(int fd)
|
|
return 0;
|
|
|
|
retry:
|
|
- rc = fdatasync(fd);
|
|
+ rc = fsync(fd);
|
|
|
|
if (rc == -1 && errno == EINTR)
|
|
goto retry;
|
|
diff --git a/src/bin/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c
|
|
index 435df8d..eb81094 100644
|
|
--- a/src/bin/pg_test_fsync/pg_test_fsync.c
|
|
+++ b/src/bin/pg_test_fsync/pg_test_fsync.c
|
|
@@ -328,7 +328,7 @@ test_sync(int writes_per_op)
|
|
/*
|
|
* Test fdatasync if available
|
|
*/
|
|
- printf(LABEL_FORMAT, "fdatasync");
|
|
+ printf(LABEL_FORMAT, "fsync");
|
|
fflush(stdout);
|
|
|
|
if ((tmpfile = open(filename, O_RDWR | PG_BINARY, 0)) == -1)
|
|
@@ -342,7 +342,7 @@ test_sync(int writes_per_op)
|
|
XLOG_BLCKSZ,
|
|
writes * XLOG_BLCKSZ) != XLOG_BLCKSZ)
|
|
die("write failed");
|
|
- fdatasync(tmpfile);
|
|
+ fsync(tmpfile);
|
|
}
|
|
STOP_TIMER;
|
|
close(tmpfile);
|
|
--
|
|
2.50.1
|
|
|