Skip to main content

Fortran package manager

Project description

Fortran Package Manager

Fortran Package Manager (fpm) is a package manager and build system for Fortran. Its key goal is to improve the user experience of Fortran programmers. It does so by making it easier to build your Fortran program or library, run the executables, tests, and examples, and distribute it as a dependency to other Fortran projects. Fpm's user interface is modeled after Rust's Cargo, so if you're familiar with that tool, you will feel at home with fpm. Fpm's long term vision is to nurture and grow the ecosystem of modern Fortran applications and libraries.

Fpm is an early prototype and is evolving rapidly. You can use it to build and package your Fortran projects, as well as to use existing fpm packages as dependencies. Fpm's behavior and user interface may change as it evolves, however as fpm matures and we enter production, we will aim to stay backwards compatible. Please follow the issues to contribute and/or stay up to date with the development. Before opening a bug report or a feature suggestion, please read our Contributor Guide. You can also discuss your ideas and queries with the community in fpm discussions, or more broadly on Fortran-Lang Discourse.

Fortran Package Manager is not to be confused with Jordan Sissel's fpm, a more general, non-Fortran related package manager.

Getting started

Setting up fpm

Binary download

Binaries for the latest stable release are available to download for Windows, MacOS, and Linux.

Note: On Linux and MacOS, you will need to enable executable permission before you can use the binary.

e.g. $ chmod u+x fpm-0.6.0-linux-x86_64

The binaries at the current tag are updated automatically to always provide the current git version from the default branch.

Conda

Fpm is available on conda-forge, to add conda-forge to your channels use:

conda config --add channels conda-forge

Fpm can be installed with:

conda create -n fpm fpm
conda activate fpm

The conda package manager can be installed from miniforge or from miniconda.

MSYS2

Fpm is available as MinGW package in the MSYS2 package manager, which supports parallelization of the target compilation. To install fpm with pacman use

pacman -S mingw-w64-x86_64-fpm

Afterwards fpm will be available for usage. Currently i686, x86_64 and ucrt-x86_64 are supported MinGW architectures for fpm. For more details check the package information here.

Spack

Fpm is available with spack in its develop version. To install fpm from spack use

spack install fpm

You can add +openmp to enable parallelization of the target compilation in fpm. To use fpm in your environment load it with

spack load fpm

For more details check the package information here.

Homebrew

The Fortran Package Manager (fpm) is available for the Homebrew package manager via an additional tap. To install fpm via brew, include the new tap and install using

brew tap fortran-lang/fortran
brew install fpm

Binary distributions are available for MacOS 11 (Catalina) and 12 (Big Sur) for x86_64 architectures. For other platforms fpm will be built locally from source automatically.

Fpm should be available and functional after those steps. For more details checkout the tap here.

Github Actions

To setup fpm within Github actions for automated testing, you can use the fortran-lang/setup-fpm action.

Bootstrapping on other platforms

For other platforms and architectures have a look at the bootstrapping instructions.

Creating a new project

Creating a new fpm project is as simple as running the command fpm new project_name. This will create a new folder in your current directory with the following contents and initialized as a git repository.

  • fpm.toml – with your project’s name and some default standard meta-data
  • README.md – with your project’s name
  • .gitignore
  • src/project_name.f90 – with a simple hello world subroutine
  • app/main.f90 (if --app flag used) – a program that calls the subroutine
  • test/main.f90 (if --test flag used) – an empty test program

Building your Fortran project with fpm

fpm understands the basic commands:

  • fpm build – build your library, executables and tests
  • fpm run – run executables
  • fpm test – run tests
  • fpm install - installs the executables locally

The command fpm run can optionally accept the name of the specific executable to run, as can fpm test; like fpm run specific_executable. Command line arguments can also be passed to the executable(s) or test(s) with the option -- some arguments.

See additional instructions in the Packaging guide or the manifest reference.

Bootstrapping instructions

This guide explains the process of building fpm on a platform for the first time. To build fpm without a prior fpm version a single source file version is available at each release.

To build manually using the single source distribution, run the following code (from within the current directory)

mkdir _tmp
curl -LJ https://github.com/fortran-lang/fpm/releases/download/current/fpm.F90 > _tmp/fpm.F90
gfortran -J _tmp _tmp/fpm.F90 -o _tmp/fpm
_tmp/fpm install --flag "-g -fbacktrace -O3"
rm -r _tmp

To automatically bootstrap using this appoach run the install script

./install.sh

The table below lists the environment variables that control fpm's choice of compilers, compiler flags, archiver locations, and link flags, each of which can be overridden by passing fpm flags also shown in the table.

Environment Variable Defines Overridden by
FPM_FC Fortran compiler path --compiler
FPM_CC C compiler path --c-compiler
FPM_FFLAGS Fortran compiler flags --flag
FPM_CFLAGS C compiler flags --c-flag
FPM_AR Archiver path --archiver
FPM_LDFLAGS Link flags --link-flag

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fpm-0.7.0.tar.gz (427.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

fpm-0.7.0-py3-none-win_amd64.whl (449.8 kB view details)

Uploaded Python 3Windows x86-64

fpm-0.7.0-py3-none-musllinux_1_1_x86_64.whl (1.2 MB view details)

Uploaded Python 3musllinux: musl 1.1+ x86-64

fpm-0.7.0-py3-none-musllinux_1_1_i686.whl (1.3 MB view details)

Uploaded Python 3musllinux: musl 1.1+ i686

fpm-0.7.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

fpm-0.7.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl (1.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

fpm-0.7.0-py3-none-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

fpm-0.7.0-py3-none-macosx_10_9_x86_64.whl (1.8 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file fpm-0.7.0.tar.gz.

File metadata

  • Download URL: fpm-0.7.0.tar.gz
  • Upload date:
  • Size: 427.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for fpm-0.7.0.tar.gz
Algorithm Hash digest
SHA256 f4f01a1dc4f3527693467f34d1f28f4c315ac3eb16abc35c3f5697e65be955a2
MD5 59a896f89fae2b349b6292ba3a6cff25
BLAKE2b-256 b0ee35f756e895e972731c7a88f0fff771607bb53f0d3a46c4c8bec0a4bea9a4

See more details on using hashes here.

File details

Details for the file fpm-0.7.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: fpm-0.7.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 449.8 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for fpm-0.7.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 7af363d2cd067cc650a066e8493c689f28716050d5f11fe84e6299c7029d28e4
MD5 796c4a4fb1e623f8b3940a6f1899e476
BLAKE2b-256 bab5845b00fd454edca2a88ed290033b9a1b6789d1311c3787a3c0d8d99d5e0b

See more details on using hashes here.

File details

Details for the file fpm-0.7.0-py3-none-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: fpm-0.7.0-py3-none-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for fpm-0.7.0-py3-none-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 87e4a3e9790d3e8a999ca78ec7c80c601beb29f689369eab8e927045d18eac0d
MD5 c6b2fb6560aca68e036f0a4fe45ee532
BLAKE2b-256 0eb8aae629d634e455bd2a40ada628952f3c21dff2393fdb3b382afe99f6d93a

See more details on using hashes here.

File details

Details for the file fpm-0.7.0-py3-none-musllinux_1_1_i686.whl.

File metadata

  • Download URL: fpm-0.7.0-py3-none-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: Python 3, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for fpm-0.7.0-py3-none-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 59f1040d498250368d1102c6ea756c7a46c1e30ac8d045bf502c98fd1c756f5f
MD5 67d7f481e341043e6580df9a8821d055
BLAKE2b-256 e5156a10a2031e23ffacf4ebc3cb09f03e08b7e3e0fd227d37e9a0f0fea2a25a

See more details on using hashes here.

File details

Details for the file fpm-0.7.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for fpm-0.7.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 3e21ae43f08b6ea20456668d2cea0d111bb43f705defc6e3bb87595fd4576e3f
MD5 522f3f2e760c73bd0de2ebbd05f9a2ca
BLAKE2b-256 2023f9a2e1b315724ae54fd682eaf814650e4340bf6c3a035207bf8f9d7d7d36

See more details on using hashes here.

File details

Details for the file fpm-0.7.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl.

File metadata

File hashes

Hashes for fpm-0.7.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl
Algorithm Hash digest
SHA256 d0441d1585fb8245ffc886cdb14e08d9fdef42ec4b942cc5951e03cd82c0209f
MD5 935bd732a0b4848bb01af97bce76500f
BLAKE2b-256 78ebb987e85b82c224abced5ad42865be1807c777f80815535e24430b53de498

See more details on using hashes here.

File details

Details for the file fpm-0.7.0-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: fpm-0.7.0-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for fpm-0.7.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5ad601b063356abce7ccd4296d3ba8564d369a8439fa62f08f087f8b6d7fef04
MD5 baf8b23e4ee8093efa7cb0deaf530b9b
BLAKE2b-256 e2b46ce580f3682a86cc329f78552f9b2e0f9e82f3bf7711fecf489b26ec58d4

See more details on using hashes here.

File details

Details for the file fpm-0.7.0-py3-none-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: fpm-0.7.0-py3-none-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: Python 3, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for fpm-0.7.0-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2ed780a3c9765cf0ded871b52827c54c17508b62dfb3c679b00bbc6410f03673
MD5 36268531e79fc8952b0c63f8bfa600af
BLAKE2b-256 c813ade2f611ba461dddde9e37c9dcb807b28a830e43f29ce5b746357ae0f67e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page