From c253ec3a9c45cfce3661f38bc2f5156d4bdd7969 Mon Sep 17 00:00:00 2001 From: "Ondrej Zajicek (work)" Date: Tue, 9 May 2017 13:44:02 +0200 Subject: Some more autoconf cleanups Replace integer type width detection with C99 fixed-width types. Also remove some unused or obsolete code. Thanks to Ruben Kerkhof for the patchset. --- sysdep/config.h | 22 ++++++++++++---------- sysdep/linux/sysio.h | 10 ---------- sysdep/unix/log.c | 8 ++++---- 3 files changed, 16 insertions(+), 24 deletions(-) (limited to 'sysdep') diff --git a/sysdep/config.h b/sysdep/config.h index 84085f9c..e529cd86 100644 --- a/sysdep/config.h +++ b/sysdep/config.h @@ -24,16 +24,18 @@ #include "sysdep/paths.h" /* Types */ -typedef signed INTEGER_8 s8; -typedef unsigned INTEGER_8 u8; -typedef INTEGER_16 s16; -typedef unsigned INTEGER_16 u16; -typedef INTEGER_32 s32; -typedef unsigned INTEGER_32 u32; -typedef INTEGER_64 s64; -typedef unsigned INTEGER_64 u64; -typedef u8 byte; -typedef u16 word; + +#include +typedef int8_t s8; +typedef uint8_t u8; +typedef int16_t s16; +typedef uint16_t u16; +typedef int32_t s32; +typedef uint32_t u32; +typedef int64_t s64; +typedef uint64_t u64; +typedef uint8_t byte; +typedef uint16_t word; typedef unsigned int uint; #endif diff --git a/sysdep/linux/sysio.h b/sysdep/linux/sysio.h index 58644417..b1cc25dc 100644 --- a/sysdep/linux/sysio.h +++ b/sysdep/linux/sysio.h @@ -7,16 +7,6 @@ */ -#ifndef HAVE_STRUCT_IP_MREQN -/* Several versions of glibc don't define this structure, so we have to do it ourselves */ -struct ip_mreqn -{ - struct in_addr imr_multiaddr; /* IP multicast address of group */ - struct in_addr imr_address; /* local IP address of interface */ - int imr_ifindex; /* Interface index */ -}; -#endif - #ifndef IP_MINTTL #define IP_MINTTL 21 #endif diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c index b89e6b7a..88a7188c 100644 --- a/sysdep/unix/log.c +++ b/sysdep/unix/log.c @@ -56,7 +56,7 @@ static int main_thread_self(void) { return 1; } #endif -#ifdef HAVE_SYSLOG +#ifdef HAVE_SYSLOG_H #include static int syslog_priorities[] = { @@ -127,7 +127,7 @@ log_commit(int class, buffer *buf) fputc('\n', l->fh); fflush(l->fh); } -#ifdef HAVE_SYSLOG +#ifdef HAVE_SYSLOG_H else syslog(syslog_priorities[class], "%s", buf->start); #endif @@ -262,7 +262,7 @@ default_log_list(int debug, int init, char **syslog_name) init_list(&init_log_list); *syslog_name = NULL; -#ifdef HAVE_SYSLOG +#ifdef HAVE_SYSLOG_H if (!debug) { static struct log_config lc_syslog = { .mask = ~0 }; @@ -287,7 +287,7 @@ log_switch(int debug, list *l, char *new_syslog_name) current_log_list = l; -#ifdef HAVE_SYSLOG +#ifdef HAVE_SYSLOG_H if (current_syslog_name && new_syslog_name && !strcmp(current_syslog_name, new_syslog_name)) return; -- cgit v1.2.3 From e40542ef3a415d163a5ff5fee26c888fead79fa6 Mon Sep 17 00:00:00 2001 From: "Ondrej Zajicek (work)" Date: Tue, 9 May 2017 16:46:41 +0200 Subject: Minor autoconf cleanup and documentation update --- INSTALL | 12 +++++++++++- configure.ac | 20 +------------------- sysdep/unix/io.c | 2 +- 3 files changed, 13 insertions(+), 21 deletions(-) (limited to 'sysdep') diff --git a/INSTALL b/INSTALL index 38784fe6..a0b107ef 100644 --- a/INSTALL +++ b/INSTALL @@ -9,13 +9,23 @@ Default location for configuration file is /usr/local/etc/bird.conf and for control socket is /usr/local/var/run/bird.ctl . You can change that by --sysconfdir and --localstatedir configure options. +To compile current development BIRD source code from Git repository, you +also need Git (to download the source code) and Autoconf (to generate +the configure script and associated files using 'autoreconf' tool): + +$ git clone git://git.nic.cz/bird.git +$ cd bird +$ autoreconf + +Then continue as in usual installation above. + Requirements ============ For compiling BIRD you need these programs and libraries: - - GNU C Compiler + - GNU C Compiler (or LLVM Clang) - GNU Make - GNU Bison - GNU M4 diff --git a/configure.ac b/configure.ac index 2180bcdf..ca8d7690 100644 --- a/configure.ac +++ b/configure.ac @@ -241,25 +241,7 @@ case $sysdesc in esac AC_CHECK_HEADERS_ONCE([alloca.h syslog.h]) - -AC_MSG_CHECKING(whether 'struct sockaddr' has sa_len) -AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM( - [[ - #include - #include - ]], - [[ - static struct sockaddr sa; - int i = sizeof(sa.sa_len); - ]] - )], - [ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_SIN_LEN,,sin_len) - ], - [AC_MSG_RESULT(no)] -) +AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [], [#include ]) AC_C_BIGENDIAN( [AC_DEFINE([CPU_BIG_ENDIAN], [1], [Define to 1 if cpu is big endian])], diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index 8773f4c4..561d4dea 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -516,7 +516,7 @@ static inline void sockaddr_fill4(struct sockaddr_in *sa, ip_addr a, uint port) { memset(sa, 0, sizeof(struct sockaddr_in)); -#ifdef HAVE_SIN_LEN +#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN sa->sin_len = sizeof(struct sockaddr_in); #endif sa->sin_family = AF_INET; -- cgit v1.2.3 From b845ea097c285f17641d60df3dea4d3e820a1475 Mon Sep 17 00:00:00 2001 From: "Ondrej Zajicek (work)" Date: Thu, 11 May 2017 01:29:39 +0200 Subject: Remove autoconf macros for time_t and alignment Replaced by constant compile-time expressions. CPU_STRUCT_ALIGN is not really correct, but is consistent with the old behavior. --- aclocal.m4 | 88 ----------------------------------------------------- configure.ac | 3 -- lib/birdlib.h | 3 ++ sysdep/unix/timer.h | 16 +++++----- 4 files changed, 10 insertions(+), 100 deletions(-) (limited to 'sysdep') diff --git a/aclocal.m4 b/aclocal.m4 index c4475160..365bfa81 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,94 +1,6 @@ dnl ** Additional Autoconf tests for BIRD configure script dnl ** (c) 1999 Martin Mares -AC_DEFUN([BIRD_CHECK_STRUCT_ALIGN], -[ - AC_CACHE_CHECK( - [usual alignment of structures], - [bird_cv_c_struct_align], - [ - AC_TRY_RUN( - [ - #include - - struct { char x; long int y; } ary[2]; - - int main(void) - { - FILE *f = fopen("conftestresult", "w"); - if (!f) - return 10; - fprintf(f, "%d", sizeof(ary)/2); - fclose(f); - exit(0); - } - ], - [bird_cv_c_struct_align=$(cat conftestresult)], - [ - AC_MSG_RESULT([test program failed]) - AC_MSG_ERROR([Cannot determine structure alignment]) - ], - [bird_cv_c_struct_align=16] - ) - ] - ) - - AC_DEFINE_UNQUOTED([CPU_STRUCT_ALIGN], - [$bird_cv_c_struct_align], - [Usual alignment of structures] - ) -]) - -AC_DEFUN([BIRD_CHECK_TIME_T], -[ - AC_CACHE_CHECK( - [characteristics of time_t], - [bird_cv_type_time_t], - [ - AC_TRY_RUN( - [ - #include - #include - #include - - int main(void) - { - FILE *f = fopen("conftestresult", "w"); - if (!f) - return 10; - fprintf(f, "%d-bit ", sizeof(time_t)*CHAR_BIT); - if ((time_t) -1 > 0) - fprintf(f, "un"); - fprintf(f, "signed"); - fclose(f); - exit(0); - } - ], - [bird_cv_type_time_t=$(cat conftestresult)], - [ - AC_MSG_RESULT([test program failed]) - AC_MSG_ERROR([Cannot determine time_t size and signedness.]) - ], - [bird_cv_type_time_t="32-bit signed"] - ) - ] - ) - - case "$bird_cv_type_time_t" in - *64-bit*) - AC_DEFINE([TIME_T_IS_64BIT], [1], [Define to 1 if time_t is 64 bit]) - ;; - esac - - case "$bird_cv_type_time_t" in - *unsigned*) - ;; - *) - AC_DEFINE([TIME_T_IS_SIGNED], [1], [Define to 1 if time_t is signed]) - ;; - esac -]) - AC_DEFUN([BIRD_CHECK_PTHREADS], [ bird_tmp_cflags="$CFLAGS" diff --git a/configure.ac b/configure.ac index aac5679c..7910c196 100644 --- a/configure.ac +++ b/configure.ac @@ -320,9 +320,6 @@ AC_C_BIGENDIAN( [AC_MSG_ERROR([Cannot determine CPU endianity.])] ) -BIRD_CHECK_STRUCT_ALIGN -BIRD_CHECK_TIME_T - if test "$enable_debug" = yes ; then AC_DEFINE([DEBUGGING], [1], [Define to 1 if debugging is enabled]) if test "$enable_memcheck" = yes ; then diff --git a/lib/birdlib.h b/lib/birdlib.h index 37337078..d21cdf1f 100644 --- a/lib/birdlib.h +++ b/lib/birdlib.h @@ -14,9 +14,12 @@ /* Ugly structure offset handling macros */ +struct align_probe { char x; long int y; }; + #define OFFSETOF(s, i) ((size_t) &((s *)0)->i) #define SKIP_BACK(s, i, p) ((s *)((char *)p - OFFSETOF(s, i))) #define BIRD_ALIGN(s, a) (((s)+a-1)&~(a-1)) +#define CPU_STRUCT_ALIGN (sizeof(struct align_probe)) /* Utility macros */ diff --git a/sysdep/unix/timer.h b/sysdep/unix/timer.h index 99d43932..ae5a27e8 100644 --- a/sysdep/unix/timer.h +++ b/sysdep/unix/timer.h @@ -77,14 +77,12 @@ bird_clock_t tm_parse_datetime(char *); /* Convert date to bird_clock_t */ void tm_format_datetime(char *x, struct timeformat *fmt_spec, bird_clock_t t); -#ifdef TIME_T_IS_64BIT -#define TIME_INFINITY 0x7fffffffffffffff -#else -#ifdef TIME_T_IS_SIGNED -#define TIME_INFINITY 0x7fffffff -#else -#define TIME_INFINITY 0xffffffff -#endif -#endif +#define TIME_T_IS_64BIT (sizeof(time_t) == 8) +#define TIME_T_IS_SIGNED ((time_t) -1 < 0) + +#define TIME_INFINITY \ + ((time_t) (TIME_T_IS_SIGNED ? \ + (TIME_T_IS_64BIT ? 0x7fffffffffffffff : 0x7fffffff): \ + (TIME_T_IS_64BIT ? 0xffffffffffffffff : 0xffffffff))) #endif -- cgit v1.2.3