From b89aa87280767f47381b8a612f73f1d0fe682e2e Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Tue, 7 May 2013 03:55:29 +0100 Subject: Clean up cross-platform compatibility. - Move compatibility macros to a new header file. - Sort system include files in alphabetical order. - Clean up signal handling (thanks to Adam). --- include/compat.h | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/inspircd.h | 75 ++++++++++--------------------------------- 2 files changed, 109 insertions(+), 59 deletions(-) create mode 100644 include/compat.h (limited to 'include') diff --git a/include/compat.h b/include/compat.h new file mode 100644 index 000000000..d3d554b18 --- /dev/null +++ b/include/compat.h @@ -0,0 +1,93 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2013 Peter Powell + * Copyright (C) 2008 Thomas Stagner + * Copyright (C) 2007 Robin Burchell + * + * This file is part of InspIRCd. InspIRCd 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, version 2. + * + * 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, see . + */ + + +#pragma once + +/** + * Some implementations of the C++11 standard library are incomplete so we use + * the implementation of the same types from C++ Technical Report 1 instead. + */ +#if defined _LIBCPP_VERSION || defined _WIN32 +# define TR1NS std +# include +#else +# define TR1NS std::tr1 +# include +#endif + +/** + * This macro enables the compile-time checking of printf format strings. This + * makes the compiler show a warning if the format of a printf arguments are + * incorrect. + */ +#if defined __clang__ || defined __GNUC__ +# define CUSTOM_PRINTF(stringpos, firstpos) __attribute__((format(printf, stringpos, firstpos))) +#else +# pragma message ("Warning! CUSTOM_PRINTF() does not work on your compiler!") +# define CUSTOM_PRINTF(stringpos, firstpos) +#endif + +/** + * These macros enable the use of the C++11 override control keywords in + * compilers which support them. + */ +#if defined __clang__ +# if __has_feature(cxx_override_control) +# define HAS_CXX11_FINAL_OVERRIDE +# endif +#elif (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) +# define HAS_CXX11_FINAL_OVERRIDE +#elif _MSC_VER >= 1700 +# define HAS_CXX11_FINAL_OVERRIDE +#endif + +#if defined HAS_CXX11_FINAL_OVERRIDE +# define CXX11_FINAL final +# define CXX11_OVERRIDE override +#else +# define CXX11_FINAL +# define CXX11_OVERRIDE +#endif + +/** + * This macro allows methods to be marked as deprecated. To use this, wrap the + * method declaration in the header file with the macro. + */ +#if defined __clang__ || defined __GNUC__ +# define DEPRECATED_METHOD(function) function __attribute__((deprecated)) +#elif defined _MSC_VER +# define DEPRECATED_METHOD(function) __declspec(deprecated) function +#else +# pragma message ("Warning! DEPRECATED_METHOD() does not work on your compiler!") +# define DEPRECATED_METHOD(function) function +#endif + +/** + * Windows is very different to UNIX so we have to wrap certain features in + * order to build on Windows correctly. + */ +#if defined _WIN32 +# include "inspircd_win32wrapper.h" +#else +# include +# define DllExport +# define CoreExport +#endif diff --git a/include/inspircd.h b/include/inspircd.h index bc0b9cd1b..b0cd8f675 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -25,69 +25,31 @@ #pragma once -#define _FILE_OFFSET_BITS 64 -#ifndef _LARGEFILE_SOURCE -#define _LARGEFILE_SOURCE -#endif - -#ifndef _WIN32 -#define DllExport -#define CoreExport -#else -#include "inspircd_win32wrapper.h" -/** Windows defines these already */ -#undef ERROR -#endif - -#ifdef __GNUC__ -#define CUSTOM_PRINTF(STRING, FIRST) __attribute__((format(printf, STRING, FIRST))) -#else -#define CUSTOM_PRINTF(STRING, FIRST) -#endif - -#if defined __clang__ || defined __GNUC__ -# define DEPRECATED_METHOD(function) function __attribute__((deprecated)) -#elif defined _MSC_VER -# define DEPRECATED_METHOD(function) __declspec(deprecated) function -#else -# pragma message ("Warning! DEPRECATED_METHOD() does not work on your compiler!") -# define DEPRECATED_METHOD(function) function -#endif - -// Required system headers. -#include -#include -#include -#include -#include #include +#include +#include +#include #include -#ifndef _WIN32 -#include -#endif +#include +#include -#if defined _LIBCPP_VERSION || defined _WIN32 -# define TR1NS std -# include -#else -# define TR1NS std::tr1 -# include -#endif -#include -#include -#include -#include +#include +#include #include +#include #include -#include #include -#include -#include "config.h" +#include +#include +#include + +#include "compat.h" #include "typedefs.h" -#include "consolecolors.h" CoreExport extern InspIRCd* ServerInstance; +#include "config.h" +#include "consolecolors.h" #include "caller.h" #include "cull_list.h" #include "extensible.h" @@ -112,11 +74,6 @@ CoreExport extern InspIRCd* ServerInstance; #include "inspstring.h" #include "protocol.h" -#ifndef PATH_MAX -#warning Potentially broken system, PATH_MAX undefined -#define PATH_MAX 4096 -#endif - /** * Used to define the maximum number of parameters a command may have. */ @@ -454,7 +411,7 @@ class CoreExport InspIRCd /** Set to the current signal recieved */ - int s_signal; + static sig_atomic_t s_signal; /** Protocol interface, overridden by server protocol modules */ -- cgit v1.3.1-10-gc9f91