Add pgevent, with docs explaining out to install it on Win32.
authorBruce Momjian <bruce@momjian.us>
Sun, 20 Jun 2004 01:32:49 +0000 (01:32 +0000)
committerBruce Momjian <bruce@momjian.us>
Sun, 20 Jun 2004 01:32:49 +0000 (01:32 +0000)
doc/src/sgml/installation.sgml
src/bin/Makefile
src/bin/pgevent/MSG00001.bin [new file with mode: 0644]
src/bin/pgevent/Makefile [new file with mode: 0644]
src/bin/pgevent/README [new file with mode: 0644]
src/bin/pgevent/pgevent.c [new file with mode: 0644]
src/bin/pgevent/pgevent.def [new file with mode: 0644]
src/bin/pgevent/pgmsgevent.h [new file with mode: 0644]
src/bin/pgevent/pgmsgevent.mc [new file with mode: 0644]
src/bin/pgevent/pgmsgevent.rc [new file with mode: 0644]

index ac29ccdb16bc9b66d432b723e8d895fa95e41645..aa4a7661ba501344ca901694527db6ad5f6a9465 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.202 2004/05/23 15:13:43 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.203 2004/06/20 01:32:46 momjian Exp $ -->
 
 <chapter id="installation">
  <title><![%standalone-include[<productname>PostgreSQL</>]]>
@@ -1072,6 +1072,19 @@ All of PostgreSQL is successfully made. Ready to install.
   </step>
   </procedure>
 
+  <formalpara>
+   <title>Registering <application>eventlog</> on <systemitem 
+   class="osname">Windows</>:</title>
+   <para>
+    To register a <systemitem class="osname">Windows</> <application>eventlog</>
+    library with the operating system, issue this command after installation:
+<screen>
+<userinput>regsvr32 <replaceable>pgsql_library_directory</>/pgevent.dll</>
+</screen>
+    This creates registry entries used by the event viewer.
+   </para>
+  </formalpara>
+
   <formalpara>
    <title>Uninstallation:</title>
    <para>
index 46e12216c4a05c807831a551389c3ee32af5bae0..994601a51e2d43fe17642b04d7295596dcf9fe81 100644 (file)
@@ -5,7 +5,7 @@
 # Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
 # Portions Copyright (c) 1994, Regents of the University of California
 #
-# $PostgreSQL: pgsql/src/bin/Makefile,v 1.44 2004/06/18 21:24:05 tgl Exp $
+# $PostgreSQL: pgsql/src/bin/Makefile,v 1.45 2004/06/20 01:32:47 momjian Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -15,6 +15,9 @@ include $(top_builddir)/src/Makefile.global
 
 DIRS := initdb ipcclean pg_ctl pg_dump \
        psql scripts pg_config pg_controldata pg_resetxlog
+ifeq ($(PORTNAME), win32)
+DIRS+=pgevent
+endif
 
 all install installdirs uninstall depend distprep:
        @for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
diff --git a/src/bin/pgevent/MSG00001.bin b/src/bin/pgevent/MSG00001.bin
new file mode 100644 (file)
index 0000000..30682fb
Binary files /dev/null and b/src/bin/pgevent/MSG00001.bin differ
diff --git a/src/bin/pgevent/Makefile b/src/bin/pgevent/Makefile
new file mode 100644 (file)
index 0000000..ce7e5a6
--- /dev/null
@@ -0,0 +1,38 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/pgevent
+#
+# Copyright (c) 1996-2004, PostgreSQL Global Development Group
+#
+#-------------------------------------------------------------------------
+
+subdir = src/bin/pgevent
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+OBJS=pgevent.o pgmsgevent.o
+NAME=pgevent.dll
+
+all: $(NAME)
+
+install: all install-lib
+
+pgevent.dll: $(OBJS) pgevent.def
+       dllwrap --def pgevent.def -o $(NAME) $(OBJS)
+       
+pgmsgevent.o: pgmsgevent.rc
+       windres pgmsgevent.rc -o pgmsgevent.o
+
+all-lib: $(NAME)
+
+install-lib: $(NAME)
+       $(INSTALL_STLIB) $< $(DESTDIR)$(libdir)/$<
+       
+uninstall-lib:
+       rm -f $(DESTDIR)$(libdir)/$(NAME)
+
+clean:
+       rm -f $(OBJS) $(NAME)
+
+clean-lib:
+       rm -f $(NAME)
diff --git a/src/bin/pgevent/README b/src/bin/pgevent/README
new file mode 100644 (file)
index 0000000..d13f3cc
--- /dev/null
@@ -0,0 +1,18 @@
+The files attached with this mail have to be stored in pgevent directory.
+MSG000001.bin is a bin files, result of Microsoft MC compiler. MC compiler
+can be downloaded for free with MS Core SDK but it is not included with MSYS
+tools and I didn't find a alternative way to compile MC file.
+
+To summarize MC pgmsgevent.mc command generates pgmsgevent.h
+pgmsgevent.rc and MSG00001.bin files.  In MC file, we declare a string
+with %s format, so we can write anything we want in the future without
+need to change the definition of this string.
+
+To finish, because DllUnregisterServer and DllRegisterServer are system
+defined entry point, we need to export these two functions with their names
+without "decoration", so we cannot uses auto generated .def files without
+handy modifications.
+
+Laurent Ballester
+
+
diff --git a/src/bin/pgevent/pgevent.c b/src/bin/pgevent/pgevent.c
new file mode 100644 (file)
index 0000000..71d08b6
--- /dev/null
@@ -0,0 +1,114 @@
+/*-------------------------------------------------------------------------
+ *
+ * pgevent.c
+ *             Defines the entry point for pgevent dll.
+ *      The DLL defines event source for backend
+ *
+ *
+ * IDENTIFICATION
+ *       $PostgreSQL: pgsql/src/bin/pgevent/pgevent.c,v 1.1 2004/06/20 01:32:49 momjian Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+#include "windows.h"
+#include "olectl.h"
+#include "string.h"
+
+/* Global variables */
+HANDLE g_module = NULL;                                        /* hModule of DLL */
+
+/* Prototypes */
+STDAPI DllRegisterServer(void) ;
+STDAPI DllUnregisterServer(void);
+BOOL WINAPI DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved );
+
+/*
+ * DllRegisterServer --- Instructs DLL to create its registry entries 
+ */
+
+STDAPI DllRegisterServer(void) 
+{
+    HKEY key; 
+    DWORD data; 
+    char buffer[_MAX_PATH]; 
+
+    /* Set the name of DLL full path name. */
+       if (!GetModuleFileName((HMODULE)g_module, buffer, sizeof(buffer)))
+       {
+               MessageBox(NULL, "Could not retrieve DLL filename", "PostgreSQL error", MB_OK|MB_ICONSTOP); 
+               return SELFREG_E_TYPELIB; 
+       }
+
+    /* Add PostgreSQL source name as a subkey under the Application 
+          key in the EventLog registry key. */
+    if ( RegCreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\PostgreSQL", &key) ) 
+       {
+        MessageBox(NULL, "Could not create the registry key.", "PostgreSQL error", MB_OK|MB_ICONSTOP); 
+               return SELFREG_E_TYPELIB; 
+       }
+
+     /* Add the name to the EventMessageFile subkey. */
+       if (RegSetValueEx(key,                          
+                       "EventMessageFile",                     
+                       0,                                                      
+                       REG_EXPAND_SZ,            
+                       (LPBYTE) buffer,        
+            strlen(buffer) + 1))
+       {
+        MessageBox(NULL, "Could not set the event message file.", "PostgreSQL error", MB_OK|MB_ICONSTOP); 
+               return SELFREG_E_TYPELIB; 
+       }
+    /* Set the supported event types in the TypesSupported subkey. */
+    data = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE; 
+    if (RegSetValueEx(key,      
+            "TypesSupported",  
+            0,                 
+            REG_DWORD,         
+            (LPBYTE) &data,  
+            sizeof(DWORD)))    
+       {
+        MessageBox(NULL, "Could not set the supported types.", "PostgreSQL error", MB_OK|MB_ICONSTOP); 
+               return SELFREG_E_TYPELIB; 
+       }
+    RegCloseKey(key); 
+       return S_OK;
+}
+
+/*
+ * DllUnregisterServer --- Instructs DLL to remove only those entries created through DllRegisterServer
+ */
+
+STDAPI DllUnregisterServer(void)
+{
+       /* Remove PostgreSQL source name as a subkey under the Application 
+          key in the EventLog registry key. */
+       if ( RegDeleteKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\PostgreSQL") )
+       {
+               MessageBox(NULL, "Could not delete the registry key.", "PostgreSQL error", MB_OK|MB_ICONSTOP); 
+               return SELFREG_E_TYPELIB; 
+       }
+       return S_OK;
+}
+
+/*
+ * DllMain --- is an optional entry point into a DLL.
+ */
+
+BOOL WINAPI DllMain( HANDLE hModule, 
+                     DWORD  ul_reason_for_call, 
+                     LPVOID lpReserved
+                                       )
+{
+       if ( ul_reason_for_call == DLL_PROCESS_ATTACH ) 
+       {
+               g_module = hModule;
+       }
+    return TRUE;
+}
+
diff --git a/src/bin/pgevent/pgevent.def b/src/bin/pgevent/pgevent.def
new file mode 100644 (file)
index 0000000..8ec1cbd
--- /dev/null
@@ -0,0 +1,4 @@
+; dlltool --output-def pgevent.def pgevent.o pgmsgevent.o
+EXPORTS
+       DllUnregisterServer=DllUnregisterServer@0 @ 1; 
+       DllRegisterServer=DllRegisterServer@0 @ 2; 
diff --git a/src/bin/pgevent/pgmsgevent.h b/src/bin/pgevent/pgmsgevent.h
new file mode 100644 (file)
index 0000000..3931e05
--- /dev/null
@@ -0,0 +1,45 @@
+//
+//  Values are 32 bit values layed out as follows:
+//
+//   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
+//   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+//  +---+-+-+-----------------------+-------------------------------+
+//  |Sev|C|R|     Facility          |               Code            |
+//  +---+-+-+-----------------------+-------------------------------+
+//
+//  where
+//
+//      Sev - is the severity code
+//
+//          00 - Success
+//          01 - Informational
+//          10 - Warning
+//          11 - Error
+//
+//      C - is the Customer code flag
+//
+//      R - is a reserved bit
+//
+//      Facility - is the facility code
+//
+//      Code - is the facility's status code
+//
+//
+// Define the facility codes
+//
+
+
+//
+// Define the severity codes
+//
+
+
+//
+// MessageId: PGWIN32_EVENTLOG_MSG
+//
+// MessageText:
+//
+//  %1.
+//
+#define PGWIN32_EVENTLOG_MSG             0x00000000L
+
diff --git a/src/bin/pgevent/pgmsgevent.mc b/src/bin/pgevent/pgmsgevent.mc
new file mode 100644 (file)
index 0000000..b5aa370
--- /dev/null
@@ -0,0 +1,5 @@
+MessageId=0
+SymbolicName=PGWIN32_EVENTLOG_MSG
+Language=English
+%1.
+.
diff --git a/src/bin/pgevent/pgmsgevent.rc b/src/bin/pgevent/pgmsgevent.rc
new file mode 100644 (file)
index 0000000..0885a89
--- /dev/null
@@ -0,0 +1,2 @@
+LANGUAGE 0x9,0x1
+1 11 MSG00001.bin