#----------------------------------------------------------------
# QNX hints
#
-# These hints were written for QNX4, but are in the process
-# of being extended to encompass Neutrino as well.
+# Most of the hints in this file are for QNX4, which needed
+# more help. The QNX6 hints are located toward the bottom.
#
-# As of perl5.004_04, all tests pass under:
-# QNX 4.23A
+# perl-5.7.3 passes all tests under QNX4.24G
# Watcom 10.6 with Beta/970211.wcc.update.tar.F
# socket3r.lib Nov21 1996.
-# perl-5.6.1 runs well on QNX4 with a few known test failures
-# perl-5.6.0 ships with QNX RTP (Neutrino) but the build is
-# not yet straightforward.
+# perl-5.7.3 fails 2 known tests under QNX6.1.0
#
-# As with many unix ports, this one depends on a few "standard"
+# perl-5.10.0-tobe compiles with Watcom C 10.6
+# and QNX 4.25 patch G w/TCPSDK installed
+# Some tests still fail, mostly to do with dynamic/static
+# or unsupported features in QNX.
+#
+## As with many unix ports, this one depends on a few "standard"
# unix utilities which are not necessarily standard for QNX4.
#
# /bin/sh This is used heavily by Configure and then by
# Outstanding Issues for QNX4:
# There is no support for dynamically linked libraries in
# QNX4.
+#
+# If you wish to compile with the Socket extension, you need
+# to have the TCP/IP toolkit, and you need to make sure that
+# -lsocket locates the correct copy of socket3r.lib. Beware
+# that the Watcom compiler ships with a stub version of
+# socket3r.lib which has very little functionality. Also
+# beware the order in which wlink searches directories for
+# libraries. You may have /usr/lib/socket3r.lib pointing to
+# the correct library, but wlink may pick up
+# /usr/watcom/10.6/usr/lib/socket3r.lib instead. Make sure
+# they both point to the correct library, that is,
+# /usr/tcptk/current/usr/lib/socket3r.lib.
#
-# ext/Cwd/Cwd.t will complain if `pwd` and cwd don't give
+# dist/Cwd/Cwd.t will complain if `pwd` and cwd don't give
# the same results. cwd calls `fullpath -t`, so if you
# cd `fullpath -t` before running the test, it will
# pass.
# PATH. The PATH test is triggered because cwd calls
# `fullpath -t`.
#
-# lib/ExtUtils.t: If you follow these hints and include
-# -w4 in your ccflags, this test will complain about
-# extra .err files appearing in its test directory.
-#
-# ext/IO/lib/IO/t/io_sock.t Still investigating
-# ext/POSIX/sigaction.t Still investigating
+# ext/IO/lib/IO/t/io_sock.t: Subtest 14 is skipped due to
+# the fact that the functionality to read back the non-blocking
+# status of a socket is not implemented in QNX's TCP/IP. This
+# has been reported to QNX and it may work with later versions
+# of TCP/IP.
#
# Older issues:
# lib/posix.t test failed on test 17 because acos(1) != 0.
# lib/io_udp.t test hangs because of a bug in getsockname().
# Fixed in latest BETA socket3r.lib
#----------------------------------------------------------------
+# Outstanding Issues for QNX6:
+# The following tests are still failing as of 5.7.3:
+#
+# op/sprintf.........................FAILED at test 91
+# lib/Benchmark......................FAILED at test 26
+#
+# This is due to a bug in the C library's printf routine.
+# printf("'%e'", 0. ) produces '0.000000e+0', but ANSI requires
+# '0.000000e+00'. QNX has acknowledged the bug and it should be
+# fixed in 6.2.0.
+#
+#----------------------------------------------------------------
# These hints were submitted by:
# Norton T. Allen
# Harvard University Atmospheric Research Project
# making an unnecessary distinction between AT-qnx and PCI-qnx,
# for example. I will use uname's architecture for Neutrino.
#----------------------------------------------------------------
-set X `uname -a`
+set X `$run uname -a`
shift
[ "$1" != "QNX" ] && echo "uname doesn't look like QNX!"
case $4 in
/usr/local/bin or some other suitable location.
EOF
fi
+
+ # includes a matherr() to silence noise from watcom libc
+ archobjs="qnx.o"
+ test -f qnx.c || cp qnx/qnx.c .
+
+else
+ # $^O eq nto
+
+ ccflags="$ccflags -U__STRICT_ANSI__"
+
+ # Options required to get dynamic linking to work
+ lddlflags="$lddlflags -shared"
+ ccdlflags="$ccdlflags -Wl,-E"
+
+ case "$usecrosscompile" in
+ define)
+ # TODO this else should probably be an elif on $2 including
+ # "Blackberry" or similar
+
+ # Configure detects these, but they won't link for some reason:
+ d_eaccess="$undef"
+ d_dirfd="$undef"
+ d_getspnam="$undef"
+ d_setlinebuf="$undef"
+
+ # Default to USE_SHELL_ALWAYS -- like with Android, Blackberry's
+ # shell has several commands built-in, and this works around the
+ # issue.
+ d_useshellcmds='define'
+
+ # By this point, targetarch will be:
+ # For x86 builds, 'ntox86' or 'i486-pc-nto-qnx8.0.0-gcc'
+ # For arm builds, 'ntoarmv7' 'arm-unknown-nto-qnx8.0.0eabi'
+ # This will change those to plain x86 and armle-v7, respectively.
+ case "`$run uname -m`" in
+ *x86*) targetarch=x86;;
+ *) targetarch=armle-v7;;
+ esac
+
+ libc="$QNX_TARGET/$targetarch/lib/libc.so"
+
+ ldflags="$ldflags -L${QNX_TARGET}/$targetarch/lib -L${QNX_TARGET}/$targetarch/usr/lib -L${QNX_TARGET}/$targetarch/lib/gcc/4.6.3"
+
+ ldflags="$ldflags -lc -lm -lsocket"
+ lddlflags="$lddlflags -lc -lm -lsocket "
+ libpth="$libpth /proc/boot"
+ targetenv="export LC_ALL=C; $targetenv"
+ ;;
+ *)
+ # Somewhere in the build, something tries to throw a gcc
+ # option to $cc if it knows it invokes gcc. Our cc doesn't
+ # recognize that option, so we're better off setting cc=gcc.
+ # Of course, only do this when not cross-compiling, for
+ # obvious reasons.
+ cc='gcc'
+ ;;
+ esac
+
+ # gcc uses $QNX_TARGET/usr/include as the include directory.
+ usrinc="$QNX_TARGET/usr/include"
+
+ # If we use perl's malloc, it dies with an invalid sbrk.
+ # This is probably worth tracking down someday.
+ usemymalloc='false'
+
+ libswanted=`echo " $libswanted "| sed 's/ malloc / /'`
+
+ # Some routines are only in our static libc.
+ # eg crypt() getlogin() getlogin_r()
+ usenm=false
fi