X-Git-Url: https://git.distorted.org.uk/~mdw/anag/blobdiff_plain/94ed9b3061c85d2dcee290c0e207a5c7fc7c8371..7c2b74abc8bbc3b009a233b65d4f8aa23219892d:/anag.h diff --git a/anag.h b/anag.h index f9eb5a3..6763d0f 100644 --- a/anag.h +++ b/anag.h @@ -1,13 +1,11 @@ /* -*-c-*- * - * $Id$ - * * External definitions for Anag * * (c) 2001 Mark Wooding */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of Anag: a simple wordgame helper. * @@ -15,12 +13,12 @@ * 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. - * + * * Anag 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 Anag; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. @@ -46,6 +44,36 @@ #include #include +/*----- Preliminaries -----------------------------------------------------*/ + +#if defined(__GNUC__) +# define GCC_VERSION_P(maj, min) \ + (__GNUC__ > (maj) || (__GNUC__ == (maj) && __GNUC_MINOR__ >= (min))) +#else +# define GCC_VERSION_P(maj, min) 0 +#endif + +#ifdef __clang__ +# define CLANG_VERSION_P(maj, min) \ + (__clang_major__ > (maj) || (__clang_major__ == (maj) && \ + __clang_minor__ >= (min))) +#else +# define CLANG_VERSION_P(maj, min) 0 +#endif + +#if GCC_VERSION_P(2, 5) || CLANG_VERSION_P(3, 3) +# define NORETURN __attribute__((noreturn)) +# define PRINTF_LIKE(fix, aix) __attribute__((format(printf, fix, aix))) +#endif + +#ifndef NORETURN +# define NORETURN +#endif + +#ifndef PRINTF_LIKE +# define PRINTF_LIKE +#endif + /*----- Data structures ---------------------------------------------------*/ typedef struct node { @@ -67,8 +95,12 @@ extern node *subgram(const char *const */*av*/); extern node *wildcard(const char *const */*av*/); extern node *trackword(const char *const */*av*/); extern node *mono(const char *const */*av*/); -extern node *regexp(const char *const */*av*/); -extern node *pcrenode(const char *const */*av*/); +#ifdef HAVE_REGCOMP + extern node *regexp(const char *const */*av*/); +#endif +#ifdef HAVE_PCRE + extern node *pcrenode(const char *const */*av*/); +#endif extern node *longest(const char *const */*av*/); extern node *shortest(const char *const */*av*/); @@ -116,7 +148,7 @@ extern int pquis(FILE */*fp*/, const char */*p*/); * Use: Reports an error and exits. */ -extern void die(const char */*f*/, ...); +extern PRINTF_LIKE(1, 2) NORETURN void die(const char */*f*/, ...); /*----- Memory allocation -------------------------------------------------*/