libgpg-error: Replace syscfg

Jörg Krause joerg.krause at
Sun Mar 20 23:06:31 CET 2016


the current mechanism to figure out platform specific properties when
cross-compiling brings a lot of maintenance burden to package
management systems. For example Buildroot manages the build of a
package and its dependencies in terms of other packages, available
architecuteres, toolchains, etc.

The current mechanism of running gen-posix-lock-obj on a remote target
for unsupported architectures is not suitable for building libgpg-error 
with Buildroot. 

Furthermore, we have to add a dependency of the architecture to the
package libgpg-error to disallow building on non-supported platforms.
The drawback is that many packages depends directly or indirectly on
libgpg-error, so that this dependency has to be propageted recursively.
AFAIK, libgpg-error has no limitations to not run on a target not
specified on syscfg.

I had a look on gen-posix-lock-obj and I am quite sure the logic can be
put into gpg-error.h itself. All necessary information are available at
compile time. This way, there would be no need for syscfg and gen-
posix-lock-obj anymore!

I used a simplified test main to cross-compile for ARM with musl libc:

#include <stdio.h>
#include <pthread.h>
#include <config.h>

typedef struct
  long _vers;
  union {
    volatile char _priv[SIZEOF_PTHREAD_MUTEX_T];
    long _x_align;
    long *_xp_align;
  } u;
} gpgrt_lock_t;

#define GPGRT_LOCK_DEFINE(name) \
  static gpgrt_lock_t name  = { LOCK_ABI_VERSION,

GPGRT_LOCK_DEFINE (simple_lock);

int main() {
  int i;
  gpgrt_lock_t *p;

  p = &simple_lock;

  for (i=0; i < SIZEOF_PTHREAD_MUTEX_T; i++)
      if (i && !(i % 8))
        putchar ('\n');
      printf ("%u", p->u._priv[i]);
      if (i < SIZEOF_PTHREAD_MUTEX_T - 1)
        putchar (',');
  putchar ('\n');

I'm quite sure syscfg and gen-posix-lock-obj can be replaced, but maybe
I missed something important here.

Best regards
Jörg Krause

More information about the Gnupg-devel mailing list