FoBiS.py, Fortran Building System for poor people
A KISS tool for automatic building modern Fortran projects.
GNU Make, CMake, SCons & Co. are fantastic tools, even too much for poor-fortran-people.
However, the support for modern Fortran project is still poor: in particular, it is quite difficult (and boring) to track the inter-module-dependency hierarchy of project using many module files.
Modern Fortran programs can take great advantage of using modules (e.g. encapsulation), however their compilations can quickly become a nightmare as the number of modules grows. As a consequence, an automatic build system able to track (on the fly) any changes on the inter-module-dependency hierarchy can save the life of poor-fortran-people.
Why not use an auto-make-like tool?
There are a lot of alternatives for deal with inter-module-dependency hierarchy, but they can be viewed as a pre-processor for the actual building system (such as auto-make tools or even the Fortran compiler itself that, in most cases, can generate a dependency list of a processed file), thus they introduce another level of complexity... but poor-fortran-people always love the KISS (Keep It Simple, Stupid) things!
FoBiS.py is designed to do just one thing: build a modern Fortran program without boring you to specify a particular compilation hierarchy.
OK, what can FoBiS.py do? We are poor-fortran-people, we do not understand you...
Let us consider the following project tree
└── src ├── cumbersome.f90 └── nested-1 ├── first_dep.f90 └── nested-2 └── second_dep.inc
The main program contained into
cumbersome.f90 depends on
first_dep.f90 via the use statement
use NesteD_1, thus it actually depends on the module
nested_1. This module depends on
second_dep.inc via the include statement
include 'second_dep.inc'. Note that the dependency files are stored in a cumbersome nested tree. Write a makefile for this very simple example could waste many minutes... when the modules number increases the time wasted blows up!
It would be very nice to have a tool that automatically track the actual dependency-hierarchy and build the project on the fly, without the necessity to track the dependency-hierarchy changes. FoBiS.py just makes this... and few more things!
Suppose your goal is to build some (all) of the main programs contained into the project tree. In this case FoBiS.py can save your life: just type
in the root of your project and FoBis.py will build all the main programs nested into the current root directory. Obviously, FoBiS.py will not (re-)compile unnecessary objects if they are up-to-date (like the "magic" of a makefile).
FoBiS.py has many (ok... some) others interesting features: if I have convinced you, please read the following.
Go to Top
- ⚡ Automatic parsing of files for dependency-hierarchy creation in case of use and include statements;
- ⚡ automatic building of all programs found into the root directory parsed or only a specific selected target;
- avoid unnecessary re-compilation (algorithm based on file-timestamp value);
- simple command line interface (CLI);
- friendly support for external libraries linking:
- direct linking with full libraries paths;
- relative linking via extending linker search paths;
- support for widely used compilers:
- GNU Fortran Compiler;
- Intel Fortran Compiler Classic (ifort);
- Intel Fortran Compiler (ifx);
- g95 Fortran Compiler;
- IBM XL Fortran Compiler;
- NAG Fortran Compiler;
- PGI Fortran Compiler;
- custom compiler support;
- ⚡ configuration-files-free;
- ... but also configuration-file driven building for complex buildings;
- ⚡ parallel compiling enabled by means of concurrent
- ⚡ support submodules;
- advanced automatic (re-)building algorithms:
- ⚡ automatic (re-)building when compiling flags change with respect the previous building;
- ⚡ automatic (re-)building when linked library change;
- ⚡ automatic building of projects upon which the actual project depends;
- ⚡ advanced automatic micro-atomic introspective unittest support by means of doctests;
- ⚡ generation of GNU Make makefile with rules fully supporting dependency-hierarchy for make-irreducible users;
- well integrate with a flexible pythonic pre-processor, PreForM.py.
Go to Top
Here is a non-comprehensive list of the main topics
|Manual Install||Getting Started|
|PyPi Install||A Taste of FoBiS.py|
|fobos: the FoBiS.py makefile|
|FoBiS.py in action|
Go to Top
FoBiS.py is an open source project, it is distributed under the GPL v3 license. A copy of the license should be distributed within FoBiS.py. Anyone interested to use, develop or to contribute to FoBiS.py is welcome. Take a look at the contributing guidelines for starting to contribute to the project.
Go to Top