From a9b098dab8e0e8fdf596a539b867fd1ffebdbeba Mon Sep 17 00:00:00 2001 From: schnetter Date: Thu, 10 May 2007 19:19:35 +0000 Subject: Provide macros for stringification and string concatenation git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/Fortran/trunk@35 51d2df92-0e4f-0410-a727-bd43d766d6b6 --- configuration.ccl | 6 ++++-- fortran.sh | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ interface.ccl | 2 ++ src/fortran.h | 23 +++++++++++++++++++++++ 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 fortran.sh create mode 100644 src/fortran.h diff --git a/configuration.ccl b/configuration.ccl index 508357c..bde52b6 100644 --- a/configuration.ccl +++ b/configuration.ccl @@ -3,6 +3,8 @@ PROVIDES Fortran { - SCRIPT - LANG + SCRIPT fortran.sh + LANG sh } + +REQUIRES Fortran diff --git a/fortran.sh b/fortran.sh new file mode 100644 index 0000000..acebc9f --- /dev/null +++ b/fortran.sh @@ -0,0 +1,54 @@ +#! /bin/sh +# $Header$ + +# Try to use ## for token concatenation. +# If this works, we likely have an ANSI cpp. + +rm config.tmp config.out 2> /dev/null + +if test -z "${FPP}"; then + # FPP is not defined; try to guess which fpp will be chosen later + FPP=cpp +fi + +cat > config.tmp < config.out +grep 'helloworld' config.out > /dev/null 2> /dev/null +# grep returns 0 for success, non-zero for failure +cpp_ansi=$? +rm config.tmp config.out 2> /dev/null + +cat > config.tmp < config.out +grep 'helloworld' config.out > /dev/null 2> /dev/null +# grep returns 0 for success, non-zero for failure +cpp_traditional=$? +rm config.tmp config.out 2> /dev/null + + + +if test ${cpp_ansi} = 0; then + echo 'BEGIN MESSAGE' + echo 'Found an ANSI-like Fortran cpp' + echo 'END MESSAGE' + echo 'BEGIN DEFINE' + echo 'FORTRAN_CPP_ANSI 1' + echo 'END DEFINE' +elif test ${cpp_traditional} = 0; then + echo 'BEGIN MESSAGE' + echo 'Found a traditional Fortran cpp' + echo 'END MESSAGE' + echo 'BEGIN DEFINE' + echo 'FORTRAN_CPP_ANSI 0' + echo 'END DEFINE' +else + echo 'BEGIN ERROR' + echo 'No Fortran preprocessor defined' + echo 'END ERROR' +fi diff --git a/interface.ccl b/interface.ccl index 2d41c41..c4dde52 100644 --- a/interface.ccl +++ b/interface.ccl @@ -2,3 +2,5 @@ # $Header$ IMPLEMENTS: Fortran + +INCLUDES SOURCE: fortran.h IN fortran.h diff --git a/src/fortran.h b/src/fortran.h new file mode 100644 index 0000000..65442c8 --- /dev/null +++ b/src/fortran.h @@ -0,0 +1,23 @@ +/* $Header$ */ + +#ifndef FORTRAN_H +#define FORTRAN_H + +#include "cctk.h" + +#if FORTRAN_CPP_ANSI +/* For an ANSI-like cpp */ + +#define CONCAT(a,b) a##b +#define STRINGIFY(a) STRINGIFY_(a) +#define STRINGIFY_(a) #a + +#else +/* For a traditional cpp */ + +#define CONCAT(a,b) a/**/b +#define STRINGIFY(a) "a" + +#endif + +#endif /* #ifdef FORTRAN_H */ -- cgit v1.2.3