From: Guus Sliepen Date: Wed, 1 May 2013 10:20:06 +0000 (+0200) Subject: Use conditional compilation for device.c. X-Git-Tag: import-tinc-1.1~160 X-Git-Url: https://git.meshlink.io/?a=commitdiff_plain;h=e70b5b5bd77bb66e8dd324c17d86d9bff151aa82;p=meshlink Use conditional compilation for device.c. This requires the automake option "subdir-objects" to be enabled, and it becomes more critical to specify the exact path to local header files. --- diff --git a/configure.ac b/configure.ac index ae2117b1..a988154c 100644 --- a/configure.ac +++ b/configure.ac @@ -27,45 +27,45 @@ AC_CANONICAL_HOST case $host_os in *linux*) + linux=true AC_DEFINE(HAVE_LINUX, 1, [Linux]) - [ rm -f src/device.c; ln -sf linux/device.c src/device.c ] ;; *freebsd*) + bsd=true AC_DEFINE(HAVE_FREEBSD, 1, [FreeBSD]) - [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ] ;; *darwin*) + bsd=true AC_DEFINE(HAVE_DARWIN, 1, [Darwin (MacOS/X)]) - [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ] ;; *solaris*) + solaris=true AC_DEFINE(HAVE_SOLARIS, 1, [Solaris/SunOS]) - [ rm -f src/device.c; ln -sf solaris/device.c src/device.c ] ;; *openbsd*) + bsd=true AC_DEFINE(HAVE_OPENBSD, 1, [OpenBSD]) - [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ] ;; *netbsd*) + bsd=true AC_DEFINE(HAVE_NETBSD, 1, [NetBSD]) - [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ] ;; *dragonfly*) + bsd=true AC_DEFINE(HAVE_DRAGONFLY, 1, [DragonFly]) - [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ] ;; *bsd*) + bsd=true AC_MSG_WARN("Unknown BSD variant, tinc might not compile or work!") AC_DEFINE(HAVE_BSD, 1, [Unknown BSD variant]) - [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ] ;; *cygwin*) + cygwin=true AC_DEFINE(HAVE_CYGWIN, 1, [Cygwin]) - [ rm -f src/device.c; ln -sf cygwin/device.c src/device.c ] ;; *mingw*) + mingw=true AC_DEFINE(HAVE_MINGW, 1, [MinGW]) - [ rm -f src/device.c; cp -f src/mingw/device.c src/device.c ] LIBS="$LIBS -lws2_32 -lgdi32 -lcrypt32" ;; *) @@ -114,6 +114,11 @@ AC_ARG_WITH(windows2000, ] ) +AM_CONDITIONAL(LINUX, test "$linux" = true) +AM_CONDITIONAL(BSD, test "$bsd" = true) +AM_CONDITIONAL(SOLARIS, test "$solaris" = true) +AM_CONDITIONAL(MINGW, test "$mingw" = true) +AM_CONDITIONAL(CYGWIN, test "$cygwin" = true) AM_CONDITIONAL(UML, test "$uml" = true) AM_CONDITIONAL(VDE, test "$vde" = true) AM_CONDITIONAL(TUNEMU, test "$tunemu" = true) @@ -133,13 +138,13 @@ dnl We do this in multiple stages, because unlike Linux all the other operating AC_HEADER_STDC AC_CHECK_HEADERS([stdbool.h syslog.h sys/file.h sys/ioctl.h sys/mman.h sys/param.h sys/resource.h sys/socket.h sys/time.h sys/uio.h sys/un.h sys/wait.h netdb.h arpa/inet.h dirent.h]) AC_CHECK_HEADERS([net/if.h net/if_types.h linux/if_tun.h net/if_tun.h net/tun/if_tun.h net/if_tap.h net/tap/if_tap.h net/ethernet.h net/if_arp.h netinet/in_systm.h netinet/in.h netinet/in6.h time.h netpacket/packet.h], - [], [], [#include "have.h"] + [], [], [#include "src/have.h"] ) AC_CHECK_HEADERS([netinet/if_ether.h netinet/ip.h netinet/ip6.h], - [], [], [#include "have.h"] + [], [], [#include "src/have.h"] ) AC_CHECK_HEADERS([netinet/tcp.h netinet/ip_icmp.h netinet/icmp6.h], - [], [], [#include "have.h"] + [], [], [#include "src/have.h"] ) dnl Checks for typedefs, structures, and compiler characteristics. @@ -153,13 +158,13 @@ AC_STRUCT_TM tinc_ATTRIBUTE(__malloc__) AC_CHECK_TYPES([socklen_t, struct ether_header, struct arphdr, struct ether_arp, struct in_addr, struct addrinfo, struct ip, struct icmp, struct in6_addr, struct sockaddr_in6, struct ip6_hdr, struct icmp6_hdr, struct nd_neighbor_solicit, struct nd_opt_hdr], , , - [#include "have.h"] + [#include "src/have.h"] ) dnl Checks for library functions. AC_TYPE_SIGNAL AC_CHECK_FUNCS([asprintf daemon fchmod flock ftime fork get_current_dir_name gettimeofday mlockall putenv random select strdup strerror strsignal strtol system time usleep unsetenv vsyslog writev], - [], [], [#include "have.h"] + [], [], [#include "src/have.h"] ) dnl Support for SunOS @@ -172,7 +177,7 @@ AC_CHECK_FUNC(gethostbyname, [], [ ]) AC_CHECK_DECLS([freeaddrinfo, gai_strerror, getaddrinfo, getnameinfo], - [], [], [#include "have.h"] + [], [], [#include "src/have.h"] ) AC_CACHE_SAVE diff --git a/have.h b/have.h deleted file mode 100644 index 6d65bcd3..00000000 --- a/have.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - have.h -- include headers which are known to exist - Copyright (C) 1998-2005 Ivo Timmermans - 2003-2012 Guus Sliepen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#ifndef __TINC_HAVE_H__ -#define __TINC_HAVE_H__ - -#ifdef HAVE_MINGW -#ifdef WITH_WINDOWS2000 -#define WINVER Windows2000 -#else -#define WINVER WindowsXP -#endif -#define WIN32_LEAN_AND_MEAN -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_MINGW -#include -#include -#include -#include -#endif - -#ifdef HAVE_STDBOOL_H -#include -#endif - -#ifdef HAVE_TERMIOS_H -#include -#endif - -#ifdef HAVE_INTTYPES_H -#include -#endif - -/* Include system specific headers */ - -#ifdef HAVE_SYSLOG_H -#include -#endif - -#ifdef HAVE_SYS_TIME_H -#include -#endif - -#ifdef HAVE_TIME_H -#include -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#ifdef HAVE_SYS_STAT_H -#include -#endif - -#ifdef HAVE_SYS_FILE_H -#include -#endif - -#ifdef HAVE_SYS_WAIT_H -#include -#endif - -#ifdef HAVE_SYS_IOCTL_H -#include -#endif - -#ifdef HAVE_SYS_PARAM_H -#include -#endif - -#ifdef HAVE_SYS_RESOURCE_H -#include -#endif - -#ifdef HAVE_SYS_UIO_H -#include -#endif - -#ifdef HAVE_SYS_UN_H -#include -#endif - -#ifdef HAVE_DIRENT_H -#include -#endif - -/* SunOS really wants sys/socket.h BEFORE net/if.h, - and FreeBSD wants these lines below the rest. */ - -#ifdef HAVE_NETDB_H -#include -#endif - -#ifdef HAVE_SYS_SOCKET_H -#include -#endif - -#ifdef HAVE_NET_IF_H -#include -#endif - -#ifdef HAVE_NET_IF_TYPES_H -#include -#endif - -#ifdef HAVE_NET_IF_TUN_H -#include -#endif - -#ifdef HAVE_NET_TUN_IF_TUN_H -#include -#endif - -#ifdef HAVE_NET_IF_TAP_H -#include -#endif - -#ifdef HAVE_NET_TAP_IF_TAP_H -#include -#endif - -#ifdef HAVE_NETINET_IN_SYSTM_H -#include -#endif - -#ifdef HAVE_NETINET_IN_H -#include -#endif - -#ifdef HAVE_ARPA_INET_H -#include -#endif - -#ifdef HAVE_NETINET_IP_H -#include -#endif - -#ifdef HAVE_NETINET_TCP_H -#include -#endif - -#ifdef HAVE_NETINET_IN6_H -#include -#endif - -#ifdef HAVE_NETINET_IP6_H -#include -#endif - -#ifdef HAVE_NET_ETHERNET_H -#include -#endif - -#ifdef HAVE_NET_IF_ARP_H -#include -#endif - -#ifdef HAVE_NETINET_IP_ICMP_H -#include -#endif - -#ifdef HAVE_NETINET_ICMP6_H -#include -#endif - -#ifdef HAVE_NETINET_IF_ETHER_H -#include -#endif - -#ifdef HAVE_MINGW -#define SLASH "\\" -#else -#define SLASH "/" -#endif - -#endif /* __TINC_SYSTEM_H__ */ diff --git a/src/Makefile.am b/src/Makefile.am index c073eecf..c1f51f10 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,7 +10,29 @@ tincd_SOURCES = \ net_socket.c netutl.c node.c process.c protocol.c protocol_auth.c protocol_edge.c protocol_misc.c \ protocol_key.c protocol_subnet.c route.c sptps.c subnet.c subnet_parse.c event.c tincd.c \ dummy_device.c raw_socket_device.c multicast_device.c names.c + +## Conditionally compile device drivers +if LINUX +tincd_SOURCES += linux/device.c +endif + +if BSD +tincd_SOURCES += bsd/device.c +endif + +if SOLARIS +tincd_SOURCES += solaris/device.c +endif + +if MINGW +tincd_SOURCES += mingw/device.c +endif + +if CYGWIN +tincd_SOURCES += cygwin/device.c +endif + if UML tincd_SOURCES += uml_device.c endif @@ -20,7 +42,7 @@ tincd_SOURCES += vde_device.c endif nodist_tincd_SOURCES = \ - device.c cipher.c crypto.c ecdh.c ecdsa.c digest.c prf.c rsa.c + cipher.c crypto.c ecdh.c ecdsa.c digest.c prf.c rsa.c tinc_SOURCES = \ utils.c getopt.c getopt1.c dropin.c \ @@ -41,7 +63,7 @@ tinc_LDADD = $(READLINE_LIBS) $(CURSES_LIBS) DEFAULT_INCLUDES = -INCLUDES = @INCLUDES@ -I$(top_builddir) +INCLUDES = @INCLUDES@ noinst_HEADERS = \ xalloc.h utils.h getopt.h list.h splay_tree.h dropin.h fake-getaddrinfo.h fake-getnameinfo.h fake-gai-errnos.h ipv6.h ipv4.h ethernet.h \ diff --git a/src/bsd/device.c b/src/bsd/device.c index 9bf0cd52..e083519d 100644 --- a/src/bsd/device.c +++ b/src/bsd/device.c @@ -19,16 +19,16 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "system.h" - -#include "conf.h" -#include "device.h" -#include "logger.h" -#include "names.h" -#include "net.h" -#include "route.h" -#include "utils.h" -#include "xalloc.h" +#include "../system.h" + +#include "../conf.h" +#include "../device.h" +#include "../logger.h" +#include "../names.h" +#include "../net.h" +#include "../route.h" +#include "../utils.h" +#include "../xalloc.h" #ifdef ENABLE_TUNEMU #include "bsd/tunemu.h" diff --git a/src/cygwin/device.c b/src/cygwin/device.c index b050140e..f4dcae4b 100644 --- a/src/cygwin/device.c +++ b/src/cygwin/device.c @@ -18,21 +18,21 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "system.h" +#include "../system.h" #include #include -#include "conf.h" -#include "device.h" -#include "logger.h" -#include "names.h" -#include "net.h" -#include "route.h" -#include "utils.h" -#include "xalloc.h" +#include "../conf.h" +#include "../device.h" +#include "../logger.h" +#include "../names.h" +#include "../net.h" +#include "../route.h" +#include "../utils.h" +#include "../xalloc.h" -#include "mingw/common.h" +#include "../mingw/common.h" int device_fd = -1; static HANDLE device_handle = INVALID_HANDLE_VALUE; diff --git a/src/getopt.c b/src/getopt.c index a6782ed6..d63887e5 100644 --- a/src/getopt.c +++ b/src/getopt.c @@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #endif #ifdef HAVE_CONFIG_H -#include +#include "../config.h" #endif #if !defined (__STDC__) || !__STDC__ diff --git a/src/getopt1.c b/src/getopt1.c index 86545f2e..19605a58 100644 --- a/src/getopt1.c +++ b/src/getopt1.c @@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #ifdef HAVE_CONFIG_H -#include +#include "../config.h" #endif #include "getopt.h" diff --git a/src/graph.c b/src/graph.c index 45063795..302056a3 100644 --- a/src/graph.c +++ b/src/graph.c @@ -44,7 +44,6 @@ #include "system.h" -#include "config.h" #include "connection.h" #include "device.h" #include "edge.h" diff --git a/src/have.h b/src/have.h new file mode 100644 index 00000000..6d65bcd3 --- /dev/null +++ b/src/have.h @@ -0,0 +1,205 @@ +/* + have.h -- include headers which are known to exist + Copyright (C) 1998-2005 Ivo Timmermans + 2003-2012 Guus Sliepen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef __TINC_HAVE_H__ +#define __TINC_HAVE_H__ + +#ifdef HAVE_MINGW +#ifdef WITH_WINDOWS2000 +#define WINVER Windows2000 +#else +#define WINVER WindowsXP +#endif +#define WIN32_LEAN_AND_MEAN +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_MINGW +#include +#include +#include +#include +#endif + +#ifdef HAVE_STDBOOL_H +#include +#endif + +#ifdef HAVE_TERMIOS_H +#include +#endif + +#ifdef HAVE_INTTYPES_H +#include +#endif + +/* Include system specific headers */ + +#ifdef HAVE_SYSLOG_H +#include +#endif + +#ifdef HAVE_SYS_TIME_H +#include +#endif + +#ifdef HAVE_TIME_H +#include +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +#ifdef HAVE_SYS_STAT_H +#include +#endif + +#ifdef HAVE_SYS_FILE_H +#include +#endif + +#ifdef HAVE_SYS_WAIT_H +#include +#endif + +#ifdef HAVE_SYS_IOCTL_H +#include +#endif + +#ifdef HAVE_SYS_PARAM_H +#include +#endif + +#ifdef HAVE_SYS_RESOURCE_H +#include +#endif + +#ifdef HAVE_SYS_UIO_H +#include +#endif + +#ifdef HAVE_SYS_UN_H +#include +#endif + +#ifdef HAVE_DIRENT_H +#include +#endif + +/* SunOS really wants sys/socket.h BEFORE net/if.h, + and FreeBSD wants these lines below the rest. */ + +#ifdef HAVE_NETDB_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#ifdef HAVE_NET_IF_H +#include +#endif + +#ifdef HAVE_NET_IF_TYPES_H +#include +#endif + +#ifdef HAVE_NET_IF_TUN_H +#include +#endif + +#ifdef HAVE_NET_TUN_IF_TUN_H +#include +#endif + +#ifdef HAVE_NET_IF_TAP_H +#include +#endif + +#ifdef HAVE_NET_TAP_IF_TAP_H +#include +#endif + +#ifdef HAVE_NETINET_IN_SYSTM_H +#include +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifdef HAVE_NETINET_IP_H +#include +#endif + +#ifdef HAVE_NETINET_TCP_H +#include +#endif + +#ifdef HAVE_NETINET_IN6_H +#include +#endif + +#ifdef HAVE_NETINET_IP6_H +#include +#endif + +#ifdef HAVE_NET_ETHERNET_H +#include +#endif + +#ifdef HAVE_NET_IF_ARP_H +#include +#endif + +#ifdef HAVE_NETINET_IP_ICMP_H +#include +#endif + +#ifdef HAVE_NETINET_ICMP6_H +#include +#endif + +#ifdef HAVE_NETINET_IF_ETHER_H +#include +#endif + +#ifdef HAVE_MINGW +#define SLASH "\\" +#else +#define SLASH "/" +#endif + +#endif /* __TINC_SYSTEM_H__ */ diff --git a/src/linux/device.c b/src/linux/device.c index e262c6a5..3b3b439d 100644 --- a/src/linux/device.c +++ b/src/linux/device.c @@ -18,20 +18,20 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "system.h" +#include "../system.h" #include #define DEFAULT_DEVICE "/dev/net/tun" -#include "conf.h" -#include "device.h" -#include "logger.h" -#include "names.h" -#include "net.h" -#include "route.h" -#include "utils.h" -#include "xalloc.h" -#include "device.h" +#include "../conf.h" +#include "../device.h" +#include "../logger.h" +#include "../names.h" +#include "../net.h" +#include "../route.h" +#include "../utils.h" +#include "../xalloc.h" +#include "../device.h" typedef enum device_type_t { DEVICE_TYPE_TUN, diff --git a/src/mingw/device.c b/src/mingw/device.c index ac83d8c3..abe544ee 100644 --- a/src/mingw/device.c +++ b/src/mingw/device.c @@ -18,21 +18,21 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "system.h" +#include "../system.h" #include #include -#include "conf.h" -#include "device.h" -#include "logger.h" -#include "names.h" -#include "net.h" -#include "route.h" -#include "utils.h" -#include "xalloc.h" +#include "../conf.h" +#include "../device.h" +#include "../logger.h" +#include "../names.h" +#include "../net.h" +#include "../route.h" +#include "../utils.h" +#include "../xalloc.h" -#include "mingw/common.h" +#include "common.h" int device_fd = -1; static HANDLE device_handle = INVALID_HANDLE_VALUE; diff --git a/src/solaris/device.c b/src/solaris/device.c index c8c5cbf8..21ce73fa 100644 --- a/src/solaris/device.c +++ b/src/solaris/device.c @@ -19,19 +19,19 @@ */ -#include "system.h" +#include "../system.h" #include #include #include -#include "conf.h" -#include "device.h" -#include "logger.h" -#include "names.h" -#include "net.h" -#include "utils.h" -#include "xalloc.h" +#include "../conf.h" +#include "../device.h" +#include "../logger.h" +#include "../names.h" +#include "../net.h" +#include "../utils.h" +#include "../xalloc.h" #define DEFAULT_DEVICE "/dev/tun" diff --git a/src/system.h b/src/system.h new file mode 100644 index 00000000..09638dce --- /dev/null +++ b/src/system.h @@ -0,0 +1,46 @@ +/* + system.h -- system headers + Copyright (C) 1998-2005 Ivo Timmermans + 2003-2009 Guus Sliepen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef __TINC_SYSTEM_H__ +#define __TINC_SYSTEM_H__ + +#include "../config.h" + +#include "have.h" + +#ifndef HAVE_STDBOOL_H +typedef int bool; +#define true 1 +#define false 0 +#endif + +#ifndef HAVE_STRSIGNAL +# define strsignal(p) "" +#endif + +/* Other functions */ + +#include "dropin.h" + +#ifndef HAVE_SOCKLEN_T +typedef int socklen_t; +#endif + +#endif /* __TINC_SYSTEM_H__ */ diff --git a/system.h b/system.h deleted file mode 100644 index c6886222..00000000 --- a/system.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - system.h -- system headers - Copyright (C) 1998-2005 Ivo Timmermans - 2003-2009 Guus Sliepen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#ifndef __TINC_SYSTEM_H__ -#define __TINC_SYSTEM_H__ - -#include "config.h" - -#include "have.h" - -#ifndef HAVE_STDBOOL_H -typedef int bool; -#define true 1 -#define false 0 -#endif - -#ifndef HAVE_STRSIGNAL -# define strsignal(p) "" -#endif - -/* Other functions */ - -#include "src/dropin.h" - -#ifndef HAVE_SOCKLEN_T -typedef int socklen_t; -#endif - -#endif /* __TINC_SYSTEM_H__ */