mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			231 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| PostgreSQL on QNX 4
 | |
| --------------------
 | |
| last updated:           $Date: 2002/07/09 04:47:07 $
 | |
| 
 | |
| current maintainer:     Bernd Tegge (tegge@repas-aeg.de)
 | |
| original author:        Andreas Kardos (kardos@repas-aeg.de)
 | |
| 
 | |
| This port is an important step because PostgreSQL is still the only free
 | |
| relational database with full SQL and ODBC support available for QNX 4.
 | |
| The only commercial databases available are Empress RDBMS and Velocis
 | |
| Database Server (not supported for Digital Unix).
 | |
| 
 | |
| The most effort required the emulation of System V semaphore sets,
 | |
| shared memory and IPC and of some IEEE floating-point functionality.
 | |
| 
 | |
| It is recommended to use the GNU C compiler instead of the Watcom compiler
 | |
| because the Watcom compiler doesn't support a int8 datatype (long or
 | |
| long long int) and it does not have a C++ frontend. The only advantage
 | |
| using Watcom C would be support of Tk and pgaccess.
 | |
| 
 | |
| QNX 4 does not offer native support of shared libraries. Therefore the related
 | |
| functionality cannot be used. Shared library support could probably be
 | |
| implemented in future.
 | |
| 
 | |
| QNX 4 does not support UNIX domain sockets. Clients must use TCP/IP
 | |
| sockets. Therefore you either have to set "tcpip_socket = true" in
 | |
| your postgresql.conf or to start postmaster with the -i option.
 | |
| Furthermore it's advisable to set to set the PGHOST or SOCK environment
 | |
| variable for postmaster in an environment using native QNX networking.
 | |
| Otherwise the postmaster might not use the IP-Address you think it does :-)
 | |
| 
 | |
| Prerequisites:
 | |
| --------------
 | |
| 
 | |
| The following prerequisites have been used:
 | |
| 
 | |
| QNX standard:
 | |
| QNX 4.25, Watcom C 10.6, GNU make
 | |
| 
 | |
| Available from http://www.teaser.fr/~jcmichot/
 | |
| flex-2.5.4a.tar.gz (flex)
 | |
| egcs-112-qnx4-r20.tar[.gz] (GNU C)
 | |
| 
 | |
| Available from ftp://ftp.visi.com/users/hawkeyd/qnx/
 | |
| bison-1.2.5.tar.gz
 | |
| 
 | |
| Available from http://quics.qnx.com/cgi-bin/dir_find.cgi?/usr/free/
 | |
| perl 5.004_04
 | |
| 
 | |
| from ftp://ftp.freesoftware.com/pub/infozip/zlib/
 | |
| zlib 1.1.3
 | |
| 
 | |
| tcl8.0.3.tar.Z (Tcl)
 | |
| 
 | |
| In order to achieve meaningful results for the regression tests, you need
 | |
| a different shell. The standard QNX shell is quite broken with regard to
 | |
| scripting (even QSSL suggested to use pdksh or bash). Both are available
 | |
| in source and binaries at
 | |
| http://quics.qnx.com/cgi-bin/dir_find.cgi?/usr/free/
 | |
| 
 | |
| flex can be built without any problems using the Watcom or GNU C compilers.
 | |
| 
 | |
| The current version of bison (1.2.8 at the time of this writing) does not
 | |
| build cleanly on QNX4 with gcc installed, but you can download src and
 | |
| binary of a previous version from the above mentioned ftp site.
 | |
| 
 | |
| download source
 | |
| GNU C can be installed by
 | |
| /etc/install -u egcs112-qnx4-r20.tar[.gz]
 | |
| 
 | |
| Although Tcl can be built after some slight code changes using the Watcom
 | |
| compiler, the GNU C compiler should be used instead. Otherwise it would be
 | |
| impossible to link postgres built with GNU C together with libtcl8.0.a built
 | |
| with the Watcom compiler. However, if you are going to build a Watcom version
 | |
| you must build the tcl and tk libraries with Watcom too.
 | |
| 
 | |
| To make unix/tclUnixTest.c compilable uncomment
 | |
| #include <sys/resource.h>
 | |
| in it or
 | |
| touch /usr/include/sys/resource.h
 | |
| In unix/Makefile.in replace
 | |
| 	( echo cd $(TOP_DIR)/tests\; source all ) | ./tcltest
 | |
| by
 | |
| 	( echo cd ../tests\; source all ) | ./tcltest
 | |
| After that Tcl can be built and tested as stated in README.
 | |
| 
 | |
| Tk cannot be built with GNU C due to the lack of a stack version of the
 | |
| X11 library. With the Watcom compiler Tk could be built but this is not useful
 | |
| because of the link problems mentioned above.
 | |
| 
 | |
| Therefore the Tk interface and the pgaccess tool cannot be supported for a GNU C
 | |
| version of PostgreSQL on QNX 4.
 | |
| 
 | |
| PostgreSQL:
 | |
| -----------
 | |
| 
 | |
| On QNX 4 some headers are not in the directories expected. To avoid
 | |
| modifications of the code the following links should be made:
 | |
| 
 | |
| ln -s /usr/local/bin/perl /usr/local/bin/perl5
 | |
| ln -s /usr/include/errno.h /usr/include/sys/errno.h
 | |
| ln -s /usr/include/ioctl.h /usr/include/sys/ioctl.h
 | |
| ln -s /usr/src/pgsql/src/backend/port/qnx4/ipc.h /usr/include/sys/ipc.h
 | |
| ln -s /usr/src/pgsql/src/backend/port/qnx4/sem.h /usr/include/sys/sem.h
 | |
| ln -s /usr/src/pgsql/src/backend/port/qnx4/shm.h /usr/include/sys/shm.h
 | |
| 
 | |
| For ecgs-2.91.60 the file
 | |
| /usr/local/lib/gcc-lib/i386-pc-qnx4/egcs-2.91.66/include/g++/stl_alloc.h
 | |
| had to be patched (extern "C++" { ... } // extern "C++").
 | |
| See attached patch.
 | |
| 
 | |
| If all prerequisites are available postgres can be built and installed by
 | |
| cd pgsql/src
 | |
| ./configure --with-tcl --without-tk --with-perl
 | |
| gmake > make.log 2>&1
 | |
| gmake install > make.install.log 2>&1
 | |
| su
 | |
| cd interfaces/perl5
 | |
| gmake install
 | |
| exit
 | |
| 
 | |
| All other steps can be carried out as stated in the INSTALL file.
 | |
| 
 | |
| Make problems:
 | |
| --------------
 | |
| 
 | |
| Sometimes the Watcom library manager wlib crashes with SIGSEGV on some
 | |
| object files. This is a general problem and not PostgreSQL related.
 | |
| Currently bootstrap.o causes such a crash. The workaround is not to include
 | |
| the object file into the SUBSYS.o but link it directly. For further information
 | |
| see backend/Makefile and backend/bootstrap/Makefile.
 | |
| libpgsql.a currently cannot be generated because of the same problem. But this
 | |
| doesn't matter since shared libraries are not supported.
 | |
| (The Makefiles are already changed to ignore this, you don't have to
 | |
| do anything)
 | |
| 
 | |
| Regression tests:
 | |
| -----------------
 | |
| please don't use the QNX shell for the parallel regression tests. Download
 | |
| bash from quics.qnx.com and run 'make SHELL=/usr/local/bin/bash check'
 | |
| instead.
 | |
| 
 | |
| The majority of regression tests succeeded. The following tests failed:
 | |
| 
 | |
| geometry:
 | |
| Some slight deviation in the last digit and "0" instead of "-0".
 | |
| Can be ignored.
 | |
| 
 | |
| timestamp, tinterval, abstime, horology:
 | |
| Differences for years before the UNIX epoch. The QNX library probably treats
 | |
| time_t as unsigned -> dates before 1970 get moved into the far future.
 | |
| Can be ignored.
 | |
| 
 | |
| create_function_1, create_function_2, create_type, create_operator,
 | |
| create_view, select_views, triggers, misc, plpgsql:
 | |
| Error messages due to the lack of shared library support.
 | |
| 
 | |
| rules, select_views:
 | |
| looks like it fails because it depends on tables created by previously
 | |
| failing tests.
 | |
| 
 | |
| alter_table:
 | |
| An expected failure message contains one blank more than expected.
 | |
| Possibly a faulty output file.
 | |
| 
 | |
| int8, subselect, union
 | |
| fails for Watcom version because of lacking int8 support.
 | |
| 
 | |
| The current state of this port should be sufficient for lot of applications.
 | |
| 
 | |
| 
 | |
| Have fun!
 | |
| 
 | |
| Andreas Kardos
 | |
| 2000-04-04
 | |
| 
 | |
| Bernd Tegge
 | |
| tegge@repas-aeg.de
 | |
| 2001-12-10
 | |
| 
 | |
| ---------------------------------------------------------------------------
 | |
| 
 | |
| *** ./stl_alloc.h.orig	Sat Feb 28 05:17:28 1998
 | |
| --- ./stl_alloc.h	Tue Nov 23 04:14:09 1999
 | |
| ***************
 | |
| *** 120,125 ****
 | |
| --- 120,126 ----
 | |
|   #pragma set woff 1174
 | |
|   #endif
 | |
|   
 | |
| + extern "C++" {
 | |
|   // Malloc-based allocator.  Typically slower than default alloc below.
 | |
|   // Typically thread-safe and more storage efficient.
 | |
|   #ifdef __STL_STATIC_TEMPLATE_MEMBER_BUG
 | |
| ***************
 | |
| *** 682,687 ****
 | |
| --- 683,689 ----
 | |
|   # endif
 | |
|   
 | |
|   #endif /* ! __USE_MALLOC */
 | |
| + } // extern "C++"
 | |
|   
 | |
|   #if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
 | |
|   #pragma reset woff 1174
 | |
| 
 | |
| 
 | |
| Patch required to build with gcc:
 | |
| 
 | |
| *** /usr/src/postgresql-7.2b3/src/backend/port/qnx4/sem.h       Thu Nov  8 21:37:52 2001
 | |
| --- src/backend/port/qnx4/sem.h Mon Dec 10 13:22:18 2001
 | |
| ***************
 | |
| *** 55,60 ****
 | |
| --- 55,71 ----
 | |
|         ushort_t        sem_num;                /* semaphore #                  */
 | |
|         short           sem_op;                 /* semaphore operation          */
 | |
|         short           sem_flg;                /* operation flags              */
 | |
| + };
 | |
| +
 | |
| + /*
 | |
| +  * command union for semctl.
 | |
| +  */
 | |
| +
 | |
| + union semun {
 | |
| +   int val;                    /* value for SETVAL */
 | |
| +   struct semid_ds *buf;       /* buffer for IPC_STAT, IPC_SET */
 | |
| +   unsigned short int *array;  /* array for GETALL, SETALL */
 | |
| +   struct seminfo *__buf;      /* buffer for IPC_INFO */
 | |
|   };
 | |
| 
 | |
|   extern int    semctl(int semid, int semnum, int cmd, /* ... */ union semun arg);
 |