From 909c51973363acebf7a33a46a77663cdb64e25a4 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 18 Jan 1999 12:43:55 +0000 Subject: [PATCH] Add missing Windows files. --- src/backend/port/dynloader/win.c | 4 ++ src/backend/port/dynloader/win.h | 34 ++++++++++ src/include/port/win.h | 7 +++ src/makefiles/Makefile.win | 15 +++++ src/template/cygwin32 | 11 ++++ src/utils/dllinit.c | 105 +++++++++++++++++++++++++++++++ 6 files changed, 176 insertions(+) create mode 100644 src/backend/port/dynloader/win.c create mode 100644 src/backend/port/dynloader/win.h create mode 100644 src/include/port/win.h create mode 100644 src/makefiles/Makefile.win create mode 100644 src/template/cygwin32 create mode 100644 src/utils/dllinit.c diff --git a/src/backend/port/dynloader/win.c b/src/backend/port/dynloader/win.c new file mode 100644 index 0000000000..62469cbb71 --- /dev/null +++ b/src/backend/port/dynloader/win.c @@ -0,0 +1,4 @@ +/* Dummy file used for nothing at this point + * + * see win.h + */ diff --git a/src/backend/port/dynloader/win.h b/src/backend/port/dynloader/win.h new file mode 100644 index 0000000000..e7215e5271 --- /dev/null +++ b/src/backend/port/dynloader/win.h @@ -0,0 +1,34 @@ +/*------------------------------------------------------------------------- + * + * win.h-- + * port-specific prototypes for Intel x86/Window NT + * + * + * Copyright (c) 1994, Regents of the University of California + * + * win.h,v 1.2 1995/03/17 06:40:18 andrew Exp + * + *------------------------------------------------------------------------- + */ +#ifndef PORT_PROTOS_H +#define PORT_PROTOS_H + +#include +#include "fmgr.h" /* for func_ptr */ +#include "utils/dynamic_loader.h" + + /* dynloader.c */ +/* + * Dynamic Loader on Intel x86/Windows NT + * + * 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,1) +#define pg_dlsym dlsym +#define pg_dlclose dlclose +#define pg_dlerror dlerror + +#endif /* PORT_PROTOS_H */ diff --git a/src/include/port/win.h b/src/include/port/win.h new file mode 100644 index 0000000000..7892f92424 --- /dev/null +++ b/src/include/port/win.h @@ -0,0 +1,7 @@ +#define JMP_BUF +#define HAS_TEST_AND_SET +typedef unsigned char slock_t; + +#ifndef O_DIROPEN +#define O_DIROPEN 0x100000 /* should be in sys/fcntl.h */ +#endif diff --git a/src/makefiles/Makefile.win b/src/makefiles/Makefile.win new file mode 100644 index 0000000000..44b1369aa8 --- /dev/null +++ b/src/makefiles/Makefile.win @@ -0,0 +1,15 @@ +CFLAGS+= -I/usr/local/include +LDFLAGS+= -g +DLLTOOL= dlltool +DLLWRAP= dllwrap +DLLLIBS=-L/usr/local/lib -L$(LIBDIR) -L$(SRCDIR)/backend -lpostgres -lcygipc -lcygwin -lcrypt -lkernel32 +X=.exe +MK_NO_LORDER=true +MAKE_DLL=true +#MAKE_DLL=false +SHLIB_LINK=$(DLLLIBS) + +%.dll: %.o + $(DLLTOOL) --export-all --output-def $*.def $< + $(DLLWRAP) -o $@ --def $*.def $< $(SRCDIR)/utils/dllinit.o $(DLLLIBS) + rm -f $*.def diff --git a/src/template/cygwin32 b/src/template/cygwin32 new file mode 100644 index 0000000000..4e64378295 --- /dev/null +++ b/src/template/cygwin32 @@ -0,0 +1,11 @@ +AROPT:crs +CFLAGS:-O2 -g +SHARED_LIB: +ALL: +SRCH_INC:/usr/local/include +SRCH_LIB:/usr/local/lib +USE_LOCALE:no +DLSUFFIX:.dll +YFLAGS:-d -L /sw/cygwin-b20/share/ +YACC: +LIBS:-lcygipc diff --git a/src/utils/dllinit.c b/src/utils/dllinit.c new file mode 100644 index 0000000000..76a20abdeb --- /dev/null +++ b/src/utils/dllinit.c @@ -0,0 +1,105 @@ +/* dllinit.c -- Portable DLL initialization. + Copyright (C) 1998 Free Software Foundation, Inc. + Contributed by Mumit Khan (khan@xraylith.wisc.edu). + + I've used DllMain as the DLL "main" since that's the most common + usage. MSVC and Mingw32 both default to DllMain as the standard + callback from the linker entry point. Cygwin32 b19+ uses essentially + the same, albeit slightly differently implemented, scheme. Please + see DECLARE_CYGWIN_DLL macro in for more + info on how Cygwin32 uses the callback function. + + The real entry point is typically always defined by the runtime + library, and usually never overridden by (casual) user. What you can + override however is the callback routine that the entry point calls, + and this file provides such a callback function, DllMain. + + Mingw32: The default entry point for mingw32 is DllMainCRTStartup + which is defined in libmingw32.a This in turn calls DllMain which is + defined here. If not defined, there is a stub in libmingw32.a which + does nothing. + + Cygwin32: The default entry point for cygwin32 b19 or newer is + __cygwin32_dll_entry which is defined in libcygwin.a. This in turn + calls the routine you supply to the DECLARE_CYGWIN_DLL (see below) + and, for this example, I've chose DllMain to be consistent with all + the other platforms. + + MSVC: MSVC runtime calls DllMain, just like Mingw32. + + Summary: If you need to do anything special in DllMain, just add it + here. Otherwise, the default setup should be just fine for 99%+ of + the time. I strongly suggest that you *not* change the entry point, + but rather change DllMain as appropriate. + + */ + + +#define WIN32_LEAN_AND_MEAN +#include +#undef WIN32_LEAN_AND_MEAN +#include + +BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, + LPVOID reserved /* Not used. */ ); + +#ifdef __CYGWIN32__ + +#include +DECLARE_CYGWIN_DLL( DllMain ); +/* save hInstance from DllMain */ +HINSTANCE __hDllInstance_base; + +#endif /* __CYGWIN32__ */ + +struct _reent *_impure_ptr; + +extern struct _reent *__imp_reent_data; + +/* + *---------------------------------------------------------------------- + * + * DllMain -- + * + * This routine is called by the Mingw32, Cygwin32 or VC++ C run + * time library init code, or the Borland DllEntryPoint routine. It + * is responsible for initializing various dynamically loaded + * libraries. + * + * Results: + * TRUE on sucess, FALSE on failure. + * + * Side effects: + * + *---------------------------------------------------------------------- + */ +BOOL APIENTRY +DllMain ( + HINSTANCE hInst /* Library instance handle. */ , + DWORD reason /* Reason this function is being called. */ , + LPVOID reserved /* Not used. */ ) +{ + +#ifdef __CYGWIN32__ + __hDllInstance_base = hInst; +#endif /* __CYGWIN32__ */ + + _impure_ptr = __imp_reent_data; + + switch (reason) + { + case DLL_PROCESS_ATTACH: + break; + + case DLL_PROCESS_DETACH: + break; + + case DLL_THREAD_ATTACH: + break; + + case DLL_THREAD_DETACH: + break; + } + return TRUE; +} + -- GitLab