Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: GnuPG: devel

libksba-1.0.5 and FreeBSD 5.0 IA32: how to make the build succeed

 

 

GnuPG devel RSS feed   Index | Next | Previous | View Threaded


beebe at math

Jan 13, 2009, 4:38 PM

Post #1 of 2 (636 views)
Permalink
libksba-1.0.5 and FreeBSD 5.0 IA32: how to make the build succeed

A build of libksba-1.0.5 on FreeBSD 5.0 IA32 failed with

gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I/usr/local/include \
-Wall -Wcast-align -Wshadow -Wstrict-prototypes -Wpointer-arith \
-MT putc_unlocked.o -MD -MP -MF .deps/putc_unlocked.Tpo -c -o \
putc_unlocked.o putc_unlocked.c
putc_unlocked.c:28: error: redefinition of '__sputc'
/usr/local/lib/gcc/i386-unknown-freebsd5.0/3.4.3/include/stdio.h:405: error:
previous definition of '__sputc' was here

Examination of <stdio.h> turned up these blocks:

#if __POSIX_VISIBLE >= 199506
int ftrylockfile(FILE *);
void flockfile(FILE *);
void funlockfile(FILE *);

/*
* These are normally used through macros as defined below, but POSIX
* requires functions as well.
*/
int getc_unlocked(FILE *);
int getchar_unlocked(void);
int putc_unlocked(int, FILE *);
int putchar_unlocked(int);
#endif
#if __POSIX_VISIBLE >= 199506
#define getc_unlocked(fp) __sgetc(fp)
#define putc_unlocked(x, fp) __sputc(x, fp)

#define getchar_unlocked() getc_unlocked(stdin)
#define putchar_unlocked(x) putc_unlocked(x, stdout)
#endif

I therefore made the following change to the source code of
libassuan-1.0.5:

% diff -c ./src/putc_unlocked.c.org ./src/putc_unlocked.c
*** ./src/putc_unlocked.c.org Thu Aug 23 23:29:48 2007
--- ./src/putc_unlocked.c Tue Jan 13 17:29:01 2009
***************
*** 23,30 ****
--- 23,32 ----

#include <stdio.h>

+ #if !defined(putc_unlocked)
int
putc_unlocked (int c, FILE *stream)
{
return putc (c, stream);
}
+ #endif

I restarted the build, which was successful, and all tests passed, so
I installed the library.

I suspect the correct way to fix this is not to supply a private
definition of putc_unlocked() if there is already a working definition
in <stdio.h>, which is likely to be the case on pretty much all Unix
platforms, because they support POSIX specs. A configure-time test
can likely do this nicely. The function in src/putc_unlocked.c could
then be bracketed with

#if !defined(HAVE_PUTC_UNLOCKED)
...
#endif

I note this requirement in the POSIX Standard (IEEE Std 1003.1-2001):

15969 Versions of the functions getc( ), getchar( ), putc( ), and putchar( ) respectively named
15970 getc_unlocked ( ), getchar_unlocked( ), putc_unlocked( ), and putchar_unlocked( ) shall be provided
15971 which are functionally equivalent to the original versions, with the exception that they are not
15972 required to be implemented in a thread-safe manner. They may only safely be used within a
15973 scope protected by flockfile ( ) (or ftrylockfile ( )) and funlockfile ( ). These functions may safely be
15974 used in a multi-threaded program if and only if they are called while the invoking thread owns
15975 the (FILE *) object, as is the case after a successful call to the flockfile ( ) or ftrylockfile ( ) functions.

Thus, any change in this area needs to think carefully about
thread ramifications.

-------------------------------------------------------------------------------
- Nelson H. F. Beebe Tel: +1 801 581 5254 -
- University of Utah FAX: +1 801 581 4148 -
- Department of Mathematics, 110 LCB Internet e-mail: beebe [at] math -
- 155 S 1400 E RM 233 beebe [at] acm beebe [at] computer -
- Salt Lake City, UT 84112-0090, USA URL: http://www.math.utah.edu/~beebe/ -
-------------------------------------------------------------------------------

_______________________________________________
Gnupg-devel mailing list
Gnupg-devel [at] gnupg
http://lists.gnupg.org/mailman/listinfo/gnupg-devel


umq.461 at gmail

Jan 13, 2009, 10:59 PM

Post #2 of 2 (586 views)
Permalink
Re: libksba-1.0.5 and FreeBSD 5.0 IA32: how to make the build succeed [In reply to]

Hi,

On Wed, Jan 14, 2009 at 9:38 AM, Nelson H. F. Beebe <beebe [at] math> wrote:
> A build of libksba-1.0.5 on FreeBSD 5.0 IA32 failed with
>
> gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I/usr/local/include \
> -Wall -Wcast-align -Wshadow -Wstrict-prototypes -Wpointer-arith \
> -MT putc_unlocked.o -MD -MP -MF .deps/putc_unlocked.Tpo -c -o \
> putc_unlocked.o putc_unlocked.c
> putc_unlocked.c:28: error: redefinition of '__sputc'
> /usr/local/lib/gcc/i386-unknown-freebsd5.0/3.4.3/include/stdio.h:405: error:
> previous definition of '__sputc' was here

I tried to reproduce the error under FreeBSD/i386 5.5-RELEASE, which was the
last FreeBSD 5.x release (and ended its life ages ago).
And built successfully without any error.

FreeeBSD 5.0 is way too old and known to be pretty unstable,
I do not think it is libassuan's problem (nor libksba).

# A web search engine tought me that the problem was discussed some
years ago, btw.
# http://lists.gnupg.org/pipermail/gpa-dev/2004-April/001878.html

Regards,

--
Hirohisa Yamaguchi
umq.461 [at] gmail

_______________________________________________
Gnupg-devel mailing list
Gnupg-devel [at] gnupg
http://lists.gnupg.org/mailman/listinfo/gnupg-devel

GnuPG devel RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.