From 69b627758b0c5e78cfa982861fab45b871b73b37 Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Wed, 7 May 2014 15:52:41 +0000 Subject: autoconf version diff --git a/configure.in b/configure.in index 61484df..66e501c 100644 --- a/configure.in +++ b/configure.in @@ -19,10 +19,10 @@ m4_pattern_forbid(^PGAC_)dnl to catch undefined macros AC_INIT([PostgreSQL], [9.3.4], [pgsql-bugs@postgresql.org]) -m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.63], [], [m4_fatal([Autoconf version 2.63 is required. -Untested combinations of 'autoconf' and PostgreSQL versions are not -recommended. You can remove the check from 'configure.in' but it is then -your responsibility whether the result works or not.])]) +dnl m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.63], [], [m4_fatal([Autoconf version 2.63 is required. +dnl Untested combinations of 'autoconf' and PostgreSQL versions are not +dnl recommended. You can remove the check from 'configure.in' but it is then +dnl your responsibility whether the result works or not.])]) AC_COPYRIGHT([Copyright (c) 1996-2013, PostgreSQL Global Development Group]) AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c]) AC_CONFIG_AUX_DIR(config) -- 1.8.3.4 From a2440b0d15d9da3359c0bfba6bdf9160a35a2ab7 Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Wed, 7 May 2014 16:03:31 +0000 Subject: haiku support diff --git a/configure.in b/configure.in index 66e501c..3072dbc 100644 --- a/configure.in +++ b/configure.in @@ -59,6 +59,7 @@ case $host_os in darwin*) template=darwin ;; dragonfly*) template=netbsd ;; freebsd*) template=freebsd ;; + haiku*) template=haiku ;; hpux*) template=hpux ;; irix*) template=irix ;; linux*|gnu*|k*bsd*-gnu) @@ -873,7 +874,7 @@ fi AC_CHECK_LIB(m, main) AC_SEARCH_LIBS(setproctitle, util) AC_SEARCH_LIBS(dlopen, dl) -AC_SEARCH_LIBS(socket, [socket wsock32]) +AC_SEARCH_LIBS(socket, [socket wsock32 network]) AC_SEARCH_LIBS(shl_load, dld) # We only use libld in port/dynloader/aix.c case $host_os in @@ -887,7 +888,7 @@ AC_SEARCH_LIBS(crypt, crypt) AC_SEARCH_LIBS(fdatasync, [rt posix4]) # Required for thread_test.c on Solaris 2.5: # Other ports use it too (HP-UX) so test unconditionally -AC_SEARCH_LIBS(gethostbyname_r, nsl) +AC_SEARCH_LIBS(gethostbyname_r, [nsl network]) # Cygwin: AC_SEARCH_LIBS(shmget, cygipc) diff --git a/src/backend/port/dynloader/haiku.c b/src/backend/port/dynloader/haiku.c new file mode 100644 index 0000000..c99b717 --- /dev/null +++ b/src/backend/port/dynloader/haiku.c @@ -0,0 +1,133 @@ +/*------------------------------------------------------------------------- + * + * linux.c + * Dynamic Loader for Postgres for Linux, generated from those for + * Ultrix. + * + * You need to install the dld library on your Linux system! + * + * Portions Copyright (c) 1996-2013, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * src/backend/port/dynloader/haiku.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#ifdef HAVE_DLD_H +#include +#endif + +#include "dynloader.h" +#include "miscadmin.h" + + +#ifndef HAVE_DLOPEN + +void * +pg_dlopen(char *filename) +{ +#ifndef HAVE_DLD_H + elog(ERROR, "dynamic load not supported"); + return NULL; +#else + static int dl_initialized = 0; + + /* + * initializes the dynamic loader with the executable's pathname. (only + * needs to do this the first time pg_dlopen is called.) + */ + if (!dl_initialized) + { + if (dld_init(dld_find_executable(my_exec_path))) + return NULL; + + /* + * if there are undefined symbols, we want dl to search from the + * following libraries also. + */ + dl_initialized = 1; + } + + /* + * link the file, then check for undefined symbols! + */ + if (dld_link(filename)) + return NULL; + + /* + * If undefined symbols: try to link with the C and math libraries! This + * could be smarter, if the dynamic linker was able to handle shared libs! + */ + if (dld_undefined_sym_count > 0) + { + if (dld_link("/usr/lib/libc.a")) + { + elog(WARNING, "could not link C library"); + return NULL; + } + if (dld_undefined_sym_count > 0) + { + if (dld_link("/usr/lib/libm.a")) + { + elog(WARNING, "could not link math library"); + return NULL; + } + if (dld_undefined_sym_count > 0) + { + int count = dld_undefined_sym_count; + char **list = dld_list_undefined_sym(); + + /* list the undefined symbols, if any */ + do + { + elog(WARNING, "\"%s\" is undefined", *list); + list++; + count--; + } while (count > 0); + + dld_unlink_by_file(filename, 1); + return NULL; + } + } + } + + return (void *) strdup(filename); +#endif +} + +PGFunction +pg_dlsym(void *handle, char *funcname) +{ +#ifndef HAVE_DLD_H + return NULL; +#else + return (PGFunction) dld_get_func((funcname)); +#endif +} + +void +pg_dlclose(void *handle) +{ +#ifndef HAVE_DLD_H +#else + dld_unlink_by_file(handle, 1); + free(handle); +#endif +} + +char * +pg_dlerror(void) +{ +#ifndef HAVE_DLD_H + return "dynaloader unspported"; +#else + return dld_strerror(dld_errno); +#endif +} + +#endif /* !HAVE_DLOPEN */ diff --git a/src/backend/port/dynloader/haiku.h b/src/backend/port/dynloader/haiku.h new file mode 100644 index 0000000..974cf4a --- /dev/null +++ b/src/backend/port/dynloader/haiku.h @@ -0,0 +1,44 @@ +/*------------------------------------------------------------------------- + * + * linux.h + * Port-specific prototypes for Linux + * + * + * Portions Copyright (c) 1996-2013, 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 "utils/dynamic_loader.h" /* pgrminclude ignore */ +#ifdef HAVE_DLOPEN +#include +#endif + + +#ifdef HAVE_DLOPEN + +/* + * 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) dlopen((f), RTLD_NOW | RTLD_GLOBAL) +#define pg_dlsym dlsym +#define pg_dlclose dlclose +#define pg_dlerror dlerror +#endif /* HAVE_DLOPEN */ + +#endif /* PORT_PROTOS_H */ diff --git a/src/include/port/haiku.h b/src/include/port/haiku.h new file mode 100644 index 0000000..beabea1 --- /dev/null +++ b/src/include/port/haiku.h @@ -0,0 +1 @@ +/* src/include/port/haiku.h */ diff --git a/src/makefiles/Makefile.haiku b/src/makefiles/Makefile.haiku new file mode 100644 index 0000000..53780c1 --- /dev/null +++ b/src/makefiles/Makefile.haiku @@ -0,0 +1,12 @@ +AROPT = cr +export_dynamic = -Wl,-E +# Use --enable-new-dtags to generate DT_RUNPATH instead of DT_RPATH. +# This allows LD_LIBRARY_PATH to still work when needed. +rpath = -Wl,-rpath,'$(rpathdir)',--enable-new-dtags +DLSUFFIX = .so + +CFLAGS_SL = -fpic + +# 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..fd1e3dc --- /dev/null +++ b/src/template/haiku @@ -0,0 +1,2 @@ +# src/template/haiku + -- 1.8.3.4