---
name: "bfort"
section: "1"
platform: "linux"
package: "sowing"
version: "1.1.26.12-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/bfort"
---

# bfort(1)

program to extract short definitions for a Fortran to C interface

## NAME

bfort -  program to extract short definitions for a Fortran to C interface

## INPUT

- **filenames**

  \- Names the files from which lint definitions are to be extracted

- **-nomsgs**

  \- Do not generate messages for routines that can not be converted to Fortran.

- **-nofort**

  \- Generate messages for all routines/macros without a Fortran counterpart.

- **-dir name**

  \- Directory for output file

- **-I name**

  \- file that contains common includes

- **-mapptr**

  \- translate pointers to integer indices

- **-ptrprefix**

  \- prefix for names of functions to convert to/from pointers (default is \_\_).  The macro that selects the form based on the pointer size can be changed with -ptr64.

- **-anyname**

  \- Generate a single Fortran wrapper that works for almost all systems, by adding C preprocessor names (see below).  These names can be changed with -fcaps, -fuscore, and -fduscore.

- **-ferr**

  \- Fortran versions return the value of the routine as the last argument (an integer).  This is used in MPI and is a not uncommon approach for handling error returns.

- **-shortargname**

  \- Use short (single character) argument names instead of the name in the C definition.

- **-fstring**

  \- Enable handling of Fortran character parameters, using the most common call interface.  This is the default unless the environment variable BFORT\_STRINGHANDLING is set to IGNORE.

- **-fnostring**

  \- Disable handling of Fortran character parameters.  Routines with  *char* arguments in C will not have interface routines generated for them.

- **-fstring**

  \- asis - No special processing for string arguments.  Provided for backward compatiblity to older versions of bfort that did not handle strings

- **-mpi**

  \- Handle MPI types (some things are pointers by definition)

- **-no\_pmpi**

  \- Do not generate PMPI names

- **-pmpi name**

  \- Change macro used to select MPI profiling version

- **-noprofile**

  \- Turn off the generation of the profiling version

- **-mnative**

  \- Multiple indirects are native datatypes (no coercion)

- **-voidisptr**

  \- Consider "void \*" as a pointer to a structure.

- **-nodebug**

  \- Do not add

  ```
  #ifndef DEBUG_ALL
  #define DEBUG_ALL
  #endif
  ```

  to the wrapper file.

- **-anyname**

  \- Generate a single wrapper that can handle the three most common cases: trailing underscore, no underscore, and all caps.  The choice is based on whether

  ```
  FORTRANCAPS:       Names are uppercase, no trailing underscore
  FORTRANUNDERSCORE: Names are lowercase, trailing underscore
  are defined.
  FORTRANDOUBLEUNDERSCORE: Names are lowercase, with TWO trailing
  ```

  underscores.  This is needed when some versions of "f2c" are used to generate C for Fortran routines.  Note that f2c uses two underscores ONLY when the name already contains an underscore (at least on the FreeBSD system that I use that uses f2c). To handle this case, the generated code contains the second underscore only when the name already contains one.

  If -mapptr is also chosen, then

  ```
  POINTER_64_BITS
  ```

  will also be used to determine if pointers are to long to fit in a 32-bit Fortran integer.  Routines that destroy a pointer will need to manually insert a call to \_\_RmPointer.  The routines for managing the pointers are in ptrcvt.c

  In addition, if -mpi is used and -no\_pmpi is not, the MPI profiling names are also generated, surrounded by MPI\_BUILD\_PROFILING.

## NOTE

We really need a way to specify a general type as a pointer, so that it will be handled as a pointer.  The -mpi option is a kludge for a pressing need.  Eventually should provide a "-ptr name" option and keep in a search space when looking for known types.

## AUTHOR

Bill Gropp

## LOCATION

bfort.c
