I managed to compile Subversion 1.4.0 for IBM z/OS 1.6. I attach my
notes below. There are few patches needed to make subversion compile
but extra care should be if they are ever deemed to be applied to the
subversion code base.
Disclaimer: I am no mainframe expert so the approach taken here could
be totally wrong but it works for me and we have been using Subversion
in z/OS successfully for couple of weeks so far.
The approach taken here is somewhat orthogonal to one taken by the
AS/400 port. I decided to keep everything internally in ASCII and rely
on the AUTOCVT ASCII->EBCDIC conversion functions when needed.
Building Subversion 1.4.0 for z/OS
==================================
cd $HOME
zcat subversion-1.4.0.tar.gz | pax -ofrom=ISO8859-1,to=IBM-1047 -rv
zcat subversion-deps-1.4.0.tar.gz | pax -ofrom=ISO8859-1,to=IBM-1047 -rv
export _C89_CCMODE=1
export _C89_OPTIONS="-Wc,ascii,xplink,nocsect,langlvl(extended) -Wl,xplink"
export CC=c89
export LD=c89
export _CXX_CXXSUFFIX=cc
export MAKE=gmake
export CPPFLAGS="-D_ALL_SOURCE -I$HOME/subversion-1.4.0/zlib"
export LDFLAGS="-L$HOME/subversion-1.4.0/zlib"
# currently we use Gnu cpp for deps, but these flags might do the job with c89
#export MKDEP=c89
#export MKDEP_FLAGS=-EC
#export _C89_ELINES=1
Build zlib
----------
export CPPFLAGS="-DSTDC"
apply zconf.h.in.patch
bash configure
gmake
Build subversion
----------------
export CPPFLAGS="-D_ALL_SOURCE -I$HOME/subversion-1.4.0/zlib"
apply apr-uri.patch
apply neon-socket.patch
apply svn-create-ascii.patch
apply svn-ensure-ascii.patch
bash configure
gmake
Known Issues
------------
(Some of the notes below might be specific to our development
environment only but I attach them all here anyway.)
- Configuration of apr and apr-util may fail or produce empty
Makefiles to some subdirectories. This might be because of the
open file limit that is set to 400. I have no idea how to increase
the limit. Workaround: run configure in apr/ and apr-util/
directories again. (You can get the original configure invocation
arguments from corresponding configure.log files.)
- The port converts everything output with svn_cmdline_printf() to EBCDIC.
- The port writes every file in ASCII/UTF-8 and sets the encoding attribute
CCSID to 819 with __chattr(). That is, if you want to add a new file
to the repository, you have to make it in ASCII format and use
chtag -tc ISO8859-1 foo.c
before adding/importing the file(s). Maybe svn add could
convert EBCDIC to ASCII and set the file attributes automatically?
- Binary files CCSID has to be manually switched to 1047 and the text
flag has to be toggled off. Currently patched SVN toggles the text
flag on and sets CCSID to 819 for every file that SVN accesses.
Thus, binary files have to be chtag(3) every time they are updated.
Maybe SVN should set the CCSID only for newly created files?
- svn blame and svn cat do no ASCII->EBCDIC conversion
Workaround: svn blame foo.c | iconv -f ISO8859-1 -t IBM-1047
One way to fix this would be to modify svn_stream_write() in
libsvn_subr/stream.c but this might break something else using
svn_stream_write() that depends on not doing the conversion.
(Not sure why blame-cmd.c:blame_receiver() uses svn_stream_printf()
instead of svn_cmdline_printf()?)
- Non-ASCII characters may be a problem: subversion uses internally
UTF-8 and the auto-conversion doesn't seem to support UTF-8 at all?
- I don't have access to python on z/OS, cannot gmake check.
Patches
-------
- zconf.h.in.patch: zlib cannot have unistd.h included in zconf.h because
otherwise libsvn_delta/svndiff.c compilation fails on some redefinition
error of getopt(). (This is caused by the fact that apr/apr-util
redefines long and some other C basic types and c89 cannot grok this.)
- apr-uri.patch: without this patch uri_delims.h will be generated in ASCII.
This patch cannot be applied in other platforms! The proper
way would be to do the conversion conditionally only when building on
z/OS.
- neon-socket.patch: in z/OS poll.h is in /usr/include, not in
/usr/include/sys/
- svn-create-ascii.patch: this will set CCSID to 819 (ASCII) on each file
that is created by Subversion.
- svn-ensure-ascii.patch: this will set AUTOCVT on for each stream
that is written through svn_cmdline_fputs(). This patch is needed if
the ssh client toggles auto-conversion off which is propagated to
subversion's stdout/stderr stream.
--
Timo Lilja
"It's a 106 miles to Chicago. We've got a full tank of gas,
half a pack of cigarettes, it's dark, and we're wearing sunglasses."
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org
Received on Thu Nov 2 14:37:06 2006