! JSON-Fortran preprocessor macros. ! ! License ! JSON-Fortran is released under a BSD-style license. ! See the [LICENSE](https://github.com/jacobwilliams/json-fortran/blob/master/LICENSE) ! file for details. !********************************************************* ! File encoding preprocessor macro. ! #if defined __GFORTRAN__ && defined USE_UCS4 ! gfortran compiler AND UCS4 support requested, & silence redefine warning: ! Make sure we output files with utf-8 encoding too #define FILE_ENCODING ,encoding='UTF-8' #else ! don't ask for utf-8 file encoding unless using UCS4 ! this may let us use unformatted stream io to read in files more quickly ! even with unicode support turned on `inquire( ... encoding=FL_ENCODING)` ! may be able to detect json files in which each character is exactly one ! byte #define FILE_ENCODING #endif !********************************************************* !********************************************************* ! This C preprocessor macro will take a procedure name as an ! input, and output either that same procedure name if the ! code is compiled without USE_UCS4 being defined or it will ! expand the procedure name to the original procedure name, ! followed by a comma and then the original procedure name ! with 'wrap_' prepended to it. This is suitable for creating ! overloaded interfaces that will accept UCS4 character actual ! arguments as well as DEFAULT/ASCII character arguments, ! based on whether or not ISO 10646 is supported and requested. ! # ifdef USE_UCS4 # ifdef __GFORTRAN__ ! gfortran uses cpp in old-school compatibility mode so ! the # stringify and ## concatenate operators don't work ! but we can use C/C++ style comment to ensure PROCEDURE is ! correctly tokenized and prepended with 'wrap_' when the ! macro is expanded # define MAYBEWRAP(PROCEDURE) PROCEDURE , wrap_/**/PROCEDURE # endif ! ifdef __INTEL_COMPILER ! Intel's fpp does support the more contemporary ## concatenation ! operator, but doesn't treat the C/C++ comments the same way. ! If you use the gfortran approach and pass the -noB switch to ! fpp, the macro will expand, but with a space between wrap_ and ! whatever PROCEDURE expands to ! Intel doesn't support ISO 10646 yet, but this is here to ! ease the transition once they do. ! define MAYBEWRAP(PROCEDURE) PROCEDURE , wrap_##PROCEDURE ! endif # else # define MAYBEWRAP(PROCEDURE) PROCEDURE # endif !*********************************************************