diff --git a/dev-db/postgresql/patches/postgresql-9.6.10.patchset b/dev-db/postgresql/patches/postgresql-9.6.10.patchset new file mode 100644 index 000000000..3045a0c2d --- /dev/null +++ b/dev-db/postgresql/patches/postgresql-9.6.10.patchset @@ -0,0 +1,596 @@ +From 39165b3289ee980fae34fdceb29ce7079b910184 Mon Sep 17 00:00:00 2001 +From: Augustin Cavalier +Date: Sat, 22 Sep 2018 18:58:00 -0400 +Subject: [PATCH] Changes to make Postgresql run on Haiku. + +Adapted from Mark Hellegers' 9.3.5 patch. +--- + configure | 15 ++- + configure.in | 8 +- + src/Makefile.global.in | 14 +++ + src/Makefile.shlib | 15 +++ + src/backend/catalog/dependency.c | 2 +- + src/backend/executor/nodeMergeAppend.c | 2 +- + src/backend/port/Makefile | 3 + + src/backend/port/dynloader/haiku.c | 6 + + src/backend/port/dynloader/haiku.h | 33 ++++++ + src/backend/port/haiku/Makefile | 14 +++ + src/backend/port/haiku/shm.c | 146 ++++++++++++++++++++++++ + src/backend/tcop/postgres.c | 2 +- + src/backend/tsearch/ts_parse.c | 4 +- + src/backend/utils/adt/tsquery_cleanup.c | 2 +- + src/bin/pg_dump/parallel.c | 1 + + src/include/c.h | 6 + + src/include/pg_config_manual.h | 2 +- + src/include/port/haiku.h | 17 +++ + src/makefiles/Makefile.haiku | 7 ++ + src/template/haiku | 0 + 20 files changed, 289 insertions(+), 10 deletions(-) + create mode 100644 src/backend/port/dynloader/haiku.c + create mode 100644 src/backend/port/dynloader/haiku.h + create mode 100644 src/backend/port/haiku/Makefile + create mode 100644 src/backend/port/haiku/shm.c + create mode 100644 src/include/port/haiku.h + create mode 100644 src/makefiles/Makefile.haiku + create mode 100644 src/template/haiku + +diff --git a/configure b/configure +index d7d5bf0..4acd56c 100755 +--- a/configure ++++ b/configure +@@ -2863,6 +2863,7 @@ case $host_os in + dragonfly*) template=netbsd ;; + freebsd*) template=freebsd ;; + hpux*) template=hpux ;; ++ haiku*) template=haiku ;; + linux*|gnu*|k*bsd*-gnu) + template=linux ;; + mingw*) template=win32 ;; +@@ -8767,7 +8768,7 @@ return socket (); + return 0; + } + _ACEOF +-for ac_lib in '' socket ws2_32; do ++for ac_lib in '' socket ws2_32 network; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -14406,6 +14407,9 @@ _ACEOF + # Some platforms predefine the types int8, int16, etc. Only check + # a (hopefully) representative subset. + ac_fn_c_check_type "$LINENO" "int8" "ac_cv_type_int8" "#include ++#ifdef __HAIKU__ ++#include ++#endif + " + if test "x$ac_cv_type_int8" = xyes; then : + +@@ -14416,6 +14420,9 @@ _ACEOF + + fi + ac_fn_c_check_type "$LINENO" "uint8" "ac_cv_type_uint8" "#include ++#ifdef __HAIKU__ ++#include ++#endif + " + if test "x$ac_cv_type_uint8" = xyes; then : + +@@ -14426,6 +14433,9 @@ _ACEOF + + fi + ac_fn_c_check_type "$LINENO" "int64" "ac_cv_type_int64" "#include ++#ifdef __HAIKU__ ++#include ++#endif + " + if test "x$ac_cv_type_int64" = xyes; then : + +@@ -14436,6 +14446,9 @@ _ACEOF + + fi + ac_fn_c_check_type "$LINENO" "uint64" "ac_cv_type_uint64" "#include ++#ifdef __HAIKU__ ++#include ++#endif + " + if test "x$ac_cv_type_uint64" = xyes; then : + +diff --git a/configure.in b/configure.in +index 11c09bc..e1abf23 100644 +--- a/configure.in ++++ b/configure.in +@@ -64,6 +64,7 @@ case $host_os in + dragonfly*) template=netbsd ;; + freebsd*) template=freebsd ;; + hpux*) template=hpux ;; ++ haiku*) template=haiku ;; + linux*|gnu*|k*bsd*-gnu) + template=linux ;; + mingw*) template=win32 ;; +@@ -1058,7 +1059,7 @@ AC_SUBST(PTHREAD_LIBS) + AC_CHECK_LIB(m, main) + AC_SEARCH_LIBS(setproctitle, util) + AC_SEARCH_LIBS(dlopen, dl) +-AC_SEARCH_LIBS(socket, [socket ws2_32]) ++AC_SEARCH_LIBS(socket, [socket ws2_32 network]) + AC_SEARCH_LIBS(shl_load, dld) + # We only use libld in port/dynloader/aix.c + case $host_os in +@@ -1880,7 +1881,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 ]) ++[#include ++#ifdef __HAIKU__ ++#include ++#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 c93b3cc..162a586 100644 +--- a/src/Makefile.global.in ++++ b/src/Makefile.global.in +@@ -629,6 +629,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 8292a6d..2a0bf49 100644 +--- a/src/Makefile.shlib ++++ b/src/Makefile.shlib +@@ -281,6 +281,12 @@ ifeq ($(PORTNAME), win32) + haslibarule = yes + endif + ++ifeq ($(PORTNAME), haiku) ++ ifdef SO_MAJOR_VERSION ++ shlib = lib$(NAME)$(DLSUFFIX) ++ endif ++ LINK.shared = $(CC) -shared ++endif + + + ## +@@ -309,6 +315,7 @@ endif #haslibarule + + + ifeq (,$(filter cygwin win32,$(PORTNAME))) ++ifneq ($(PORTNAME), haiku) + ifneq ($(PORTNAME), aix) + + # Normal case +@@ -359,6 +366,14 @@ $(shlib): $(OBJS) | $(SHLIB_PREREQS) + + endif # PORTNAME == aix + ++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 8e9f101..8b8f0b2 100644 +--- a/src/backend/catalog/dependency.c ++++ b/src/backend/catalog/dependency.c +@@ -1026,7 +1026,7 @@ reportDependentObjects(const ObjectAddresses *targetObjects, + * *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 e271927..cf771c4 100644 +--- a/src/backend/executor/nodeMergeAppend.c ++++ b/src/backend/executor/nodeMergeAppend.c +@@ -50,7 +50,7 @@ + */ + typedef int32 SlotNumber; + +-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/port/Makefile b/src/backend/port/Makefile +index 89549d0..d2a1769 100644 +--- a/src/backend/port/Makefile ++++ b/src/backend/port/Makefile +@@ -29,6 +29,9 @@ endif + ifeq ($(PORTNAME), win32) + SUBDIRS += win32 + endif ++ifeq ($(PORTNAME), haiku) ++SUBDIRS += haiku ++endif + + include $(top_srcdir)/src/backend/common.mk + +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 ++#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..68bcb9f +--- /dev/null ++++ b/src/backend/port/haiku/shm.c +@@ -0,0 +1,146 @@ ++/*------------------------------------------------------------------------- ++ * ++ * shm.c ++ * Haiku System V Shared Memory Emulation ++ * ++ * Copyright (c) 1999-2001, Cyril VELTER ++ * ++ *------------------------------------------------------------------------- ++ */ ++ ++#include ++#include "postgres.h" ++#include ++#include ++ ++/* 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++; ++ dummy->shm_segsz = inf.ram_size; ++ } ++ } ++ } ++ ++ 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 6bd289a..fd7eb88 100644 +--- a/src/backend/tcop/postgres.c ++++ b/src/backend/tcop/postgres.c +@@ -4426,7 +4426,7 @@ ShowUsage(const char *title) + (long) user.tv_usec, + (long) sys.tv_sec, + (long) sys.tv_usec); +-#if defined(HAVE_GETRUSAGE) ++#if defined(HAVE_GETRUSAGE) && !defined(__HAIKU__) + appendStringInfo(&str, + "!\t%ld/%ld [%ld/%ld] filesystem blocks in/out\n", + r.ru_inblock - Save_r.ru_inblock, +diff --git a/src/backend/tsearch/ts_parse.c b/src/backend/tsearch/ts_parse.c +index 6c034b2..032aa90 100644 +--- a/src/backend/tsearch/ts_parse.c ++++ b/src/backend/tsearch/ts_parse.c +@@ -355,7 +355,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; +@@ -530,7 +530,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; +diff --git a/src/backend/utils/adt/tsquery_cleanup.c b/src/backend/utils/adt/tsquery_cleanup.c +index c10c7ef..6fbe49d 100644 +--- a/src/backend/utils/adt/tsquery_cleanup.c ++++ b/src/backend/utils/adt/tsquery_cleanup.c +@@ -186,7 +186,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/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c +index bfd023f..b147c73 100644 +--- a/src/bin/pg_dump/parallel.c ++++ b/src/bin/pg_dump/parallel.c +@@ -70,6 +70,7 @@ + #ifndef WIN32 + #include + #include ++#include + #include "signal.h" + #include + #include +diff --git a/src/include/c.h b/src/include/c.h +index 8633657..a775f43 100644 +--- a/src/include/c.h ++++ b/src/include/c.h +@@ -66,12 +66,18 @@ + #include "pg_config_os.h" /* must be before any system header files */ + #endif + ++#if defined(__HAIKU__) ++// Haiku defines int (int8, int64, etc) types in SupportDefs.h ++#include ++#endif ++ + #if _MSC_VER >= 1400 || defined(HAVE_CRTDEFS_H) + #define errcode __msvc_errcode + #include + #undef errcode + #endif + ++ + /* + * We have to include stdlib.h here because it defines many of these macros + * on some platforms, and we only want our definitions used if stdlib.h doesn't +diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h +index 96885bb..a368aad 100644 +--- a/src/include/pg_config_manual.h ++++ b/src/include/pg_config_manual.h +@@ -124,7 +124,7 @@ + /* + * Define this if your operating system supports link() + */ +-#if !defined(WIN32) && !defined(__CYGWIN__) ++#if !defined(WIN32) && !defined(__CYGWIN__) && !defined(__HAIKU__) + #define HAVE_WORKING_LINK 1 + #endif + +diff --git a/src/include/port/haiku.h b/src/include/port/haiku.h +new file mode 100644 +index 0000000..5190de2 +--- /dev/null ++++ b/src/include/port/haiku.h +@@ -0,0 +1,17 @@ ++/* 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 shm_segsz; ++}; ++ ++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/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.19.0 + diff --git a/dev-db/postgresql/postgresql-9.6.10.recipe b/dev-db/postgresql/postgresql-9.6.10.recipe new file mode 100644 index 000000000..ad3b0cb13 --- /dev/null +++ b/dev-db/postgresql/postgresql-9.6.10.recipe @@ -0,0 +1,160 @@ +SUMMARY="A powerful object-relational database system" +DESCRIPTION="PostgreSQL has more than 15 years of active development and a \ +proven architecture that has earned it a strong reputation for reliability, \ +data integrity, and correctness. + +* It runs on all major operating systems, including Linux, UNIX (AIX, BSD, \ +HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64), and Windows. +* It is fully ACID compliant, has full support for foreign keys, joins, \ +views, triggers, and stored procedures (in multiple languages). +* It includes most SQL:2008 data types, including INTEGER, NUMERIC, BOOLEAN, \ +CHAR, VARCHAR, DATE, INTERVAL, and TIMESTAMP. +* It supports storage of binary large objects, including pictures, sounds, or \ +video. +* It has native programming interfaces for C/C++, Java, .Net, Perl, Python, \ +Ruby, Tcl, ODBC, among others, and exceptional documentation." +HOMEPAGE="https://www.postgresql.org/" +COPYRIGHT="1996-2017 PostgreSQL Global Development Group" +LICENSE="PostgreSQL" +REVISION="1" +SOURCE_URI="https://ftp.postgresql.org/pub/source/v$portVersion/postgresql-$portVersion.tar.bz2" +CHECKSUM_SHA256="8615acc56646401f0ede97a767dfd27ce07a8ae9c952afdb57163b7234fe8426" +SOURCE_DIR="postgresql-$portVersion" +PATCHES="postgresql-$portVersion.patchset" + +ARCHITECTURES="x86_gcc2 ?x86 ?x86_64" +SECONDARY_ARCHITECTURES="x86_gcc2 x86" + +PROVIDES=" + postgresql$secondaryArchSuffix = $portVersion compat >= 9 + cmd:psql$secondaryArchSuffix = $portVersion compat >= 9 + lib:libecpg$secondaryArchSuffix = $portVersion compat >= 9 + lib:libecpg_compat$secondaryArchSuffix = $portVersion compat >= 9 + lib:libpgtypes$secondaryArchSuffix = $portVersion compat >= 9 + lib:libpq$secondaryArchSuffix = $portVersion compat >= 9 + " +REQUIRES=" + haiku$secondaryArchSuffix + lib:libreadline$secondaryArchSuffix + lib:libz$secondaryArchSuffix + " + +PROVIDES_server=" + cmd:clusterdb$secondaryArchSuffix = $portVersion compat >= 9 + cmd:createdb$secondaryArchSuffix = $portVersion compat >= 9 + cmd:createlang$secondaryArchSuffix = $portVersion compat >= 9 + cmd:createuser$secondaryArchSuffix = $portVersion compat >= 9 + cmd:dropdb$secondaryArchSuffix = $portVersion compat >= 9 + cmd:droplang$secondaryArchSuffix = $portVersion compat >= 9 + cmd:dropuser$secondaryArchSuffix = $portVersion compat >= 9 + cmd:ecpg$secondaryArchSuffix = $portVersion compat >= 9 + cmd:initdb$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_archivecleanup$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_basebackup$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_config$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_controldata$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_ctl$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_dump$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_dumpall$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_isready$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_receivexlog$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_resetxlog$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_recvlogical$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_restore$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_rewind$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_test_fsync$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_test_timing$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_upgrade$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pg_xlogdump$secondaryArchSuffix = $portVersion compat >= 9 + cmd:pgbench$secondaryArchSuffix = $portVersion compat >= 9 + cmd:postgres$secondaryArchSuffix = $portVersion compat >= 9 + cmd:postmaster$secondaryArchSuffix = $portVersion compat >= 9 + cmd:reindexdb$secondaryArchSuffix = $portVersion compat >= 9 + cmd:vacuumdb$secondaryArchSuffix = $portVersion compat >= 9 + " +REQUIRES_server=" + haiku$secondaryArchSuffix + postgresql${secondaryArchSuffix} == $portVersion base + lib:libz$secondaryArchSuffix + " + +PROVIDES_devel=" + postgresql${secondaryArchSuffix}_devel = $portVersion + devel:libecpg$secondaryArchSuffix = $portVersion + devel:libecpg_compat$secondaryArchSuffix = $portVersion + devel:libpgcommon$secondaryArchSuffix = $portVersion + devel:libpgport$secondaryArchSuffix = $portVersion + devel:libpgtypes$secondaryArchSuffix = $portVersion + devel:libpq$secondaryArchSuffix = $portVersion + " +REQUIRES_devel=" + postgresql${secondaryArchSuffix} == $portVersion base + postgresql${secondaryArchSuffix}_server == $portVersion + " + +# don't allow two postgres servers of the same major version +# to be installed simultaneously. +if [ -n "$secondaryArchSuffix" ]; then + CONFLICTS_server=" + postgresql_server + " +fi + +BUILD_REQUIRES=" + haiku${secondaryArchSuffix}_devel + devel:libreadline$secondaryArchSuffix + devel:libz$secondaryArchSuffix + " +BUILD_PREREQUIRES=" + cmd:aclocal + cmd:awk + cmd:bison + cmd:flex + cmd:gcc$secondaryArchSuffix + cmd:ld$secondaryArchSuffix + cmd:make + cmd:pkg_config$secondaryArchSuffix + " + +BUILD() +{ + CFLAGS=-D_BSD_SOURCE runConfigure ./configure + make $jobArgs +} + +INSTALL() +{ + make install + + prepareInstalledDevelLibs \ + libpgport \ + libpgcommon \ + libecpg \ + libpgtypes \ + libpq \ + libecpg_compat + fixPkgconfig + + mkdir -p $developLibDir/postgresql/pgxs + mv $libDir/postgresql/pgxs $developLibDir/postgresql/ + + # we want to keep the psql command in the base package + mv $binDir/psql psql_tmp + + # all other commands go in the server package + packageEntries server \ + $binDir \ + $libDir/postgresql \ + $dataDir + + mkdir -p $binDir + mv psql_tmp $binDir/psql + + packageEntries devel \ + $developDir +} + +TEST() +{ + make check +}