z/OS: Updated portability notes

Updated:
    builds/zos/README.md: Updated with portability notes resulting
       from building zeromq/libzmq/master as of 2014-07-23 on z/OS
       UNIX System Services.

       Current z/OS UNIX status: all expected tests pass, except
       "test_proxy", which hangs and times out.
This commit is contained in:
Ewen McNeill 2014-07-24 14:48:49 +12:00
parent f1cd2055de
commit 326dec067f

View File

@ -12,6 +12,8 @@ Tested build combinations:
* ZeroMQ 4.0.4, using IBM XL C/C++ compiler, as XPLINK in LP64 mode
* ZeroMQ 4.1-git, using IBM XL C/C++ compiler, as XPLINK in ILP32 mode
Other combinations are likely to work, possibly with minor changes,
but have not been tested. Both static library and DLL modes have been
tested.
@ -201,9 +203,18 @@ pass. There are two tests that are expected to fail:
programs -- most programs use threads or fork without exec, but
not both.
These two "expected to fail" tests are listed as XFAIL_TESTS, and
0. `test_diffserv`: tests ability to set IP_TOS ([IP Type of
Service](http://en.wikipedia.org/wiki/Type_of_service), or
[DiffServ](http://en.wikipedia.org/wiki/Differentiated_Services_Code_Point))
values on sockets. While z/OS UNIX System Services has the
preprocessor defines required, it appears not to support the
required functionality (call fails with "EDC8109I Protocol not
available.")
These three "expected to fail" tests are listed as XFAIL_TESTS, and
`runtests` will still consider the test run successful when they fail
as expected.
as expected. (`builds/zos/runtests` will automatically skip these
"expected to fail" tests if running "all" tests.)
In addition `test_security_curve` does not do any meaningful testing,
as a result of the CURVE support not being compiled in; it requires
@ -212,6 +223,13 @@ ported to z/OS UNIX System Services yet.
Multicast (via `libpgm`) is also not ported or compiled in.
[TIPC](http://hintjens.com/blog:70), a cluster IPC protocol,
is only supported on Linux, so it is not compiled into the z/OS
UNIX System Services port -- and the tests are automatically skipped
if running "all" tests. (However they are not listed in XFAIL_TESTS
because without the TIPC support there is no point in even running
them, and it would be non-trivial to track them by hand.)
## ZeroMQ on z/OS UNIX System Services: Library portability notes
@ -278,6 +296,18 @@ which is done in the `cxxall` script. (The "3" value exposes later
pthreads functionality like `pthread_atfork`, although ZeroMQ does not
currently use all these features.)
If compiling on a *recent* version of z/OS UNIX System Services it
may be worth compiling with:
_UNIX03_THREADS=1
which enables a later version of the threading support, potentially
including `pthread_getschedparam` and pthread_setschedparam`; at
present in the z/OS UNIX System Services port these functions are
hidden and never called. (See [IBM z/OS pthread.h
documentation](http://pic.dhe.ibm.com/infocenter/zos/v1r11/index.jsp?topic=/com.ibm.zos.r11.bpxbd00/pthrdh.htm)
for details on the differences.)
## `platform.hpp` on z/OS UNIX System Services
@ -286,6 +316,11 @@ pre-built `platform.hpp` file. (By default `src/platform.hpp` is
dynamically generated as a result of running the `./configure` script.)
The master version of this is in `builds/zos/platform.hpp`.
Beware that this file contains the version number for libzmq (usually
included during the configure phase). If taking the `platform.hpp` from
an older version to use on a newer libzmq be sure to update the version
information near the top of the file.
The pre-built file is used because z/OS does not have the GNU auto tools
(`automake`, `autoconf`, `libtool`, etc) installed, and particularly the
libtool replacement does not work properly with the IBM XL C/C++
@ -317,18 +352,20 @@ syntax):
* set `CPPFLAGS` to for the feature macros required, eg:
setenv CPPFLAGS "-D_XOPEN_SOURCE_EXTENDED=1 -D_OPEN_THREADS=3 -D_OPEN_SYS_SOCK_IPV6"
setenv CPPFLAGS "-D_XOPEN_SOURCE_EXTENDED=1 -D_OPEN_THREADS=3 -D_OPEN_SYS_SOCK_IPV6 -DZMQ_HAVE_ZOS"
* set `CXXFLAGS` to enable XPLINK:
setenv CXXFLAGS "-Wc,xplink -Wl,xplink -+"
* run configure script with `--disable-eventfd` (`sys/eventfd.h` does
not exist, but the test for its existance has a false positive on
z/OS UNIX System Services, apparently due to the way the `c++`
compiler wrapper passes errors back from the IBM XL C/C++ compiler), viz:
not exist, but the test for its existance has a false positive on
z/OS UNIX System Services, apparently due to the way the `c++`
compiler wrapper passes errors back from the IBM XL C/C++ compiler),
and with `--with-poller=poll` because `poll` is the most advanced
of the file descriptor status tests available on z/OS. That is:
./configure --disable-eventfd
./configure --disable-eventfd --with-poller=poll
All going well several Makefiles, and `src/platform.hpp` should be
produced. Two additional changes are required to `src/platform.hpp`