• Stars
    star
    130
  • Rank 271,108 (Top 6 %)
  • Language
    Python
  • Created over 10 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

FoBiS.py, Fortran projects Building System for poor people

FoBiS.py Latest Version GitHub tag

License

FoBiS.py, Fortran Building System for poor people

A KISS tool for automatic building modern Fortran projects.

Status

Build Status Coverage Status Code Health

Issues

GitHub issues Ready in backlog In Progress Open bugs

Python support Supported Python versions

Why?

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

FoBiS.py build

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

Main features

  • ⚑ 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 multiprocessing jobs;
  • ⚑ 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;
  • easy-extensible;
  • well integrate with a flexible pythonic pre-processor, PreForM.py.

Go to Top

Documentation

FoBiS.py documentations are hosted on GitHub. The wiki and the README are the main documentation resources. Other sources of documentation are the examples.

Here is a non-comprehensive list of the main topics

Install Usage
Manual Install Getting Started
PyPi Install A Taste of FoBiS.py
Uncommon usage
fobos: the FoBiS.py makefile
FoBiS.py in action

Go to Top

Copyrights

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

A screencast of a very cumbersome example

Screencast

More Repositories

1

FLAP

Fortran command Line Arguments Parser for poor people
Fortran
141
star
2

VTKFortran

pure Fortran VTK (XML) API
Fortran
137
star
3

OFF

OFF, Open source Finite volume Fluid dynamics code
Fortran
126
star
4

StringiFor

Strings Fortran Manipulator with steroids
Fortran
83
star
5

MaTiSSe

Markdown To Impressive Scientific Slides
Python
45
star
6

PENF

Portability Environment for Fortran poor people
Fortran
38
star
7

FACE

Fortran Ansi Colors (and Styles) Environment
Fortran
37
star
8

FiNeR

Fortran INI ParseR and generator
Fortran
36
star
9

forbear

Fortran (progress) B(e)ar envinronment
Fortran
36
star
10

zen-of-fortran

an opinionated coding guidelines for Fortran poor people
31
star
11

VecFor

Vector algebra class for Fortran poor people
Fortran
29
star
12

FURY

Fortran Units (environment) for Reliable phYsical math
Fortran
29
star
13

PreForM

PreForM.py, Preprocessor for Fortran poor Men
Python
24
star
14

zen-of-fortran-talk

a path to discover Modern Fortran, a poor, informal talk for newbies Fortraners
Fortran
19
star
15

ZOO

ZOO, Zaghi fOrtran cOllection, where my wild Fortran pets will survive
Fortran
19
star
16

BeFoR64

BeFoR64, Base64 encoding/decoding library for FoRtran poor men
Fortran
18
star
17

FITTER

Fortran tIc Toc Timer
Fortran
14
star
18

FOSSIL

FOSSIL, FOrtran Stereo (si) Litography parser
Fortran
14
star
19

HASTY

HASh Table fortran container exploting coarraY
Fortran
13
star
20

DEFY

DEmystify Fortran mYths
Fortran
12
star
21

fmake

Small script for easy creation of makefile for Fortran (standard 90 or higher) projects
Racket
11
star
22

FLOw

Fortran fLuid Object
Fortran
11
star
23

FORESEER

FOrtran RiEmann SolveErs EnviRonment
Fortran
10
star
24

MORTIF

MORTon Indexer (Z-order) Fortran environment
Fortran
10
star
25

FriVolous

Finite Volume block-structured Fortran abstract class
Fortran
8
star
26

FUNDAL

Fortran UNified Device Acceleration Library
Fortran
8
star
27

leaks_hunter

hunter of Fortran Compilers memory leaks
Fortran
7
star
28

single-linked-list

Fortran
7
star
29

forget

FORtran Git Template
Fortran
6
star
30

dotfiles

my dotfiles...me!
Perl
5
star
31

dmoz-fortran-archive

an unofficial of DMOZ Fortran archive
HTML
5
star
32

Shu-Osher-shock-tube-problem

Regression-test results of Shu-Osher shock tube problem
Fortran
4
star
33

NTNU-BTs-CNR-INSEAN

CNR-INSEAN CFD simulations of NTNU Blind Tests, Horizontal Axis Wind Turbines experiments
Shell
3
star
34

DCS

Driven-Cavity Simulator
Fortran
3
star
35

cfdshipiowa_gridgen_to_xnavis

a Fortran Environment to handle CFDShip-Iowa Gridgen files and optionally emit Xnavis ones
Fortran
3
star
36

LoadBalance

Load balancing for Xnavis code
Fortran
1
star
37

ATENA-talk-2016-03-09

a talk for ATENA workshop
CSS
1
star