gnwiii at gmail.com
2006-Aug-21 16:14 UTC
problem building openssh-4.3p2 on Fedora Core 5 using gcc -std=c99
This problem actually came up with pdftex-1.40, which now uses the openbsd-compat code. I routinely build pdftex with c99 to reduce reliance on old gcc extensions, in the hope that things will be more consistent across linux and unix. I think the problem is that the way configure checks for strsep leaves things open for a #def'd version to conflict with the replacement version. I'm willing to accept the view that gcc -std=c99 shouldn't #def strsep, but a google search indicates this is a common problem that is usually handled by #define HAVE_STRSEP, so it seems wisest to adjust configure to deal with this case. [gwhite at fc5 test]$ zcat ~/Desktop/openssh-4.3p2.tar.gz | pax -r [gwhite at fc5 test]$ cd openssh-4.3p2/ [gwhite at fc5 openssh-4.3p2]$ uname -r 2.6.17-1.2174_FC5 [gwhite at fc5 openssh-4.3p2]$ gcc --version gcc (GCC) 4.1.1 20060525 (Red Hat 4.1.1-1) [gwhite at fc5 openssh-4.3p2]$ CFLAGS='-std=c99 -O2' ./configure [...] checking whether strsep is declared... no [...] OpenSSH has been configured with the following options: User binaries: /usr/local/bin System binaries: /usr/local/sbin Configuration files: /usr/local/etc Askpass program: /usr/local/libexec/ssh-askpass Manual pages: /usr/local/man/manX PID file: /var/run Privilege separation chroot path: /var/empty sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin Manpage format: doc PAM support: no KerberosV support: no Smartcard support: no S/KEY support: no TCP Wrappers support: no MD5 password support: no libedit support: no IP address in $DISPLAY hack: no Translate v4 in v6 hack: yes BSD Auth support: no Random number source: OpenSSL internal ONLY Host: i686-pc-linux-gnu Compiler: gcc Compiler flags: -std=c99 -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wno-pointer-sign Preprocessor flags: Linker flags: Libraries: -lresolv -lcrypto -lutil -lz -lnsl -lcrypt [gwhite at fc5 openssh-4.3p2]$ grep -i strsep config.h /* Define to 1 if you have the `strsep' function. */ /* #undef HAVE_STRSEP */ [gwhite at fc5 openssh-4.3p2]$ cd openbsd-compat [gwhite at fc5 openbsd-compat]$ make strsep.o gcc -std=c99 -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wno-pointer-sign -I. -I.. -I. -I./.. -DHAVE_CONFIG_H -c strsep.c In file included from ../includes.h:209, from strsep.c:34: ../openbsd-compat/openbsd-compat.h:112: error: expected identifier or '(' before '__extension__' ../openbsd-compat/openbsd-compat.h:112: error: expected identifier or '(' before ')' token In file included from ../openbsd-compat/openbsd-compat.h:181, from ../includes.h:209, from strsep.c:34: ../openbsd-compat/fake-rfc2553.h:130: error: redefinition of 'struct addrinfo' strsep.c:53: error: expected identifier or '(' before '__extension__' strsep.c:53: error: expected identifier or '(' before ')' token make: *** [strsep.o] Error 1 Lines 111-113 of openbsd-compat/openbsd-compat.h: #ifndef HAVE_STRSEP char *strsep(char **stringp, const char *delim); #endif -- George N. White III <aa056 at chebucto.ns.ca> Head of St. Margarets Bay, Nova Scotia