Adding support for z/OS in gnupg and related libraries

Werner Koch wk at gnupg.org
Wed Aug 5 15:52:05 CEST 2009


On Mon,  3 Aug 2009 19:58, amul.shah at fnis.com said:

> [amul:2] We are using both libgcrypt and gpg.  Ideally I would have
> compiled gpg 2.x, but we have had better success on various platforms
> (AIX, Solaris, HPUX) with 1.4.x.  We had issues compiling some of the
> libraries needed for the 2.x version.

GnuPG-2 requires a more modern Unix that GnuPG-1.  That is not to say
that Solaris, AIX and HPUX aren't modern Unices.  There are just some
little things which need to be adjusted and we usually don't have such a
system for tests.

> [amul:2] IMHO, after the port we just went through, it's best to compile
> Unix applications as ASCII and let z/OS do its conversion magic. 
> Working with Unicode adds another layer of complexity.

There must have been a reason that IBM added that magic ASCII support ;-).

> [amul:2] sorry, USS means "Unix System Services", one of the names the
> POSIX environment goes by.  See the following link for more information.
> http://www-03.ibm.com/servers/eserver/zseries/zos/unix/

Right.  It is 10 years since I last worked a bit on a MVS and the USS
(not sure whether it was already called this back then).

> [amul:2] I spent some time with libtool, but I didn't write down what I
> tried.  I'll get back to you with some more information.

Libtool is a nasty beast but it has the advantage that if you get it
right for your platform all software can take advantage of it.

> [amul:2] configure.ac is my area of inexperience.

Just ask me or let me know what you need.

> [amul:2] xlc supports "-I", but it picks up those options _after_ its
> default search path.  Confused me to no end when I was trying to
> compile.  There are xlc configuration options that you can customize
> (like having a .bashrc, but for xlc) to fix this.

I feared that.  What about mangling the vac.cfg and passing a new one
via -F to xlc.  It might be possible to extract the -I option from that
file build a new one and pass the extracted -I option on the command
line after our own -I.  It might fail if one of the system include files
requires the system memory.h - bad.  I think I once had a simialr
problem with OS/2.

So what about changing all

  #include "memory.h"

to 

  #include "../include/memory.h

we might then need to change the name of the include directory as well.
Would that work?  

Looking closer at it, this is a problem of gpg 1.4 and not one of
libgcrypt.  The strange thing is that libgcrypt includes a memory.h but
does not provide one - thus the system memory.h is used.  Must be a
leftover from an earlier version.

I will fix that in libgcrypt 1.5.

> [amul:2] so something like an alias that is a nop on other platforms
> would do the trick.

Something like this (see the FIXME):

===================================================================
--- defs.inc    (revision 5106)
+++ defs.inc    (working copy)
@@ -112,6 +112,16 @@
 #    cleanup_files="$cleanup_files $*"
 #}
 
+
+# Special fucntion for zOS.
+my_chtag () {
+  #FIXME: Is there an envvar to test for the OS or do we 
+  #       need to resort to a configure test
+  #if test "$FOO" = "bar"; then
+  #   chtag -tc ISO8859-1 $1
+  #fi
+}
+
 have_pubkey_algo () {
   if  ../g10/gpg --homedir .  --version | grep "Pubkey:.*$1" >/dev/null
   then
Index: conventional-mdc.test
===================================================================
--- conventional-mdc.test       (revision 5106)
+++ conventional-mdc.test       (working copy)
@@ -9,6 +9,7 @@
     # *BSD's dd can't cope with a count of 0
     if test "$i" = "0"; then
         : >z
+        my_chtag z
     else
         dd if=data-80000 of=z bs=1 count=$i 2>/dev/null
     fi

================================

>>> +#include "platform_pragma.h"
>>>  #include <config.h>
>>>     
>>
>> This platform_pragma.h file should be included by config.h  so that
>> there is no need to chnage all source files.  config.h is created by
>> configure.
>>   
>
> [amul:2] I'll move that to confih.h.

That's done in configure.ac by adding a line to 

AH_TOP([
#ifndef GNUPG_CONFIG_H_INCLUDED
#define GNUPG_CONFIG_H_INCLUDED
])

or using AH_VERBATIM.  Easy.

>> This is done using a CLEAN target in Makefile.am
>>   
>
> [amul:2] Ok, I'll take a look at the Makefile.am.

You would add something like:

CLEANFILES = prepared.stamp x y yy z out err  $(DATA_FILES) \
	     plain-1 plain-2 plain-3 trustdb.gpg *.lock .\#lk* \
	     *.test.log gpg_dearmor gpg.conf \
	     pubring.gpg secring.gpg pubring.pkr secring.skr
DISTCLEANFILES = pubring.gpg~ random_seed

there is also a MOSTLEANFILES target.


>> assignments to the FSF.  We should discuss the terms off-list.
>>   
>
> [amul:2] sure, we can do that.  I thought saying that the code is GPL is
> good enough.

The GNU project requires copyright assignments or dislaimers for all
core software.  Without that legal BS I may not include changes into
the package (you may distrubute your own of course, but then you have
the burden of maintaining it).  Let's take this off-list.

> [amul:2] The below project right?
> http://www.gnu.org/software/gettext/
>
> [amul:2] I'll make sure I send that project a patch.

Right.  It may take a while for a new release.  In the meantime we can
apply the patches to the copy in GnuPG.

> [amul:2] Thanks.  For future reference, here's the link.  I should have
> thought about that.
> http://www.gnu.org/prep/standards/html_node/Formatting.html

It is not a hard rule anyway and all authors have different tastes.  I
just make sure that some basic formatting is right.

>> This is better handled using a configure test. 
>>   
>
> [amul:2] How would that work?

--- configure.ac        (revision 1400)
+++ configure.ac        (working copy)
@@ -571,7 +571,7 @@
 ##################################
 
 AC_HEADER_STDC
-AC_CHECK_HEADERS(unistd.h sys/select.h)
+AC_CHECK_HEADERS(unistd.h sys/select.h sys/msg.h)
 
 ##########################################
 #### Checks for typedefs, structures, ####

--- src/ath.h   (revision 1400)
+++ src/ath.h   (working copy)
@@ -32,6 +32,9 @@
 #  include <sys/time.h>
 # endif
 # include <sys/types.h>
+# ifdef HAVE_SYS_MSG_H
+#  include <sys/msg.h>  /* (e.g. for zOS) */
+# endif
 # include <sys/socket.h>
 #endif /* !_WIN32 */
 #include <gpg-error.h>


Already commited.



Shalom-Salam,

   Werner

-- 
Die Gedanken sind frei.  Auschnahme regelt ein Bundeschgesetz.




More information about the Gnupg-devel mailing list