Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

FAQ_QNX4

Blame
  • FAQ_QNX4 7.69 KiB
    PostgreSQL on QNX 4
    --------------------
    last updated:           $Date: 2004/03/23 01:23:47 $
    
    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, do not set "listen_addresses" to empty in your
    postgresql.conf file.  In fact, it's advisable to explicitly set
    "listen_addresses" 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);