Skip to content

GSoC 2021 Project ideas

Laurence Kedward edited this page Feb 10, 2021 · 41 revisions

Fortran Standard Library (stdlib)

Strings

Related issues:

Prior work:

WIP:

Mentors: Brad Richardson (@everythingfunctional)

Containers

Potential related issues:

Mentors: Arjen Markus (@arjenmarkus)

OS integration: filesystem

Cross-platform solution for file system operations.

Related issues:

  • stdlib#201: File system operations
  • stdlib#220: API for file system operations, directory manipulation

WIP implementation:

OS integration: subprocesses

Cross-platform solution to abstract POSIX and Windows API for creating subprocesses.

Related issues:

Discourse thread:

Fortran Package Manager (fpm)

Local package registry

Provide the infrastructure to support a (local) package registry with fpm for managing dependencies.

  • define the manifest syntax to use dependencies from a registry
  • implement support for looking up and loading a (local) registry
  • allow fpm to manage a local registry by fetching it from a remote registry

Related issues:

  • fpm#321: Implement support for a local registry
  • fpm#35: Full package registry

Mentors: Laurence Kedward (@lkedward)

Version constraint resolution

Aim of this project is to implement version constraint resolution in the dependency tree of an fpm project.

Libraries:

  • libsolv: interface via iso_c_binding as separate fpm package

Different version matching syntax available:

Handling compiler arguments

Add support for custom compile profiles. Define manifest syntax for declaring different build profiles (potentially for different compilers). Compiler arguments divided in project-wide compile arguments, inherited link arguments and global compile arguments (maybe more variants needed?).

Related issues:

  • fpm#112: Thread about managing flags
  • fpm#223: Compiler support and recognizion
  • fpm#350: Proposal for manifest syntax

Mentors: Laurence Kedward (@lkedward), Ondrej Certik (@certik), Brad Richardson (@everythingfunctional)

Preprocessor support

Support for preprocessors which are not built-in to the compiler should be provided by fpm. A manifest syntax should be developed and implemented as additional (optional) step in the fpm build backend.

The package manifest preferably allows to:

  • quickly select established preprocessors (fypp, fpp, ...)
  • define preprocessor variables in a preprocessor independent way
  • define a custom preprocessor
  • select the file suffixes to be preprocessed

Selection of preprocessing should happen on per project basis, i.e. multiple preprocessors might be required. The preprocessor is usually external to fpm and fpm must be able to report useful errors for missing preprocessors.

Related issues:

  • fpm#78: support for third-party preprocessors (e.g. fypp)
  • fpm#308: Fortran-based smart code generation in fpm

Mentors: Laurence Kedward (@lkedward)

Extended Testing Support

Aim of this project is it to create a manifest specification to provide defaults to executable targets in fpm projects. Information can be passed as environment variables, command line arguments or as runner.

  • programs should have a way to find resources of which the relative position within the project source directory is known
  • the current binary directory to access other targets within a project
  • default runners like mpirun/cafrun or scripts from test frameworks should be usable to launch programs
  • a general syntax to define environment variables and command line arguments should be defined

Some features should be implemented directly in fpm, while more elaborated functionality could be implemented in a separate fpm package as offical fortran-lang fpm package.

Mentors: Sebastian Ehlert (@awvwgk), Brad Richardson (@everythingfunctional)

Related issues:

Related discussions:

  • fpm#328: Example which requires external data

Source Code Distribution with Foreign Build Systems

Aim of this project is to enable fpm to create source code distributions of itself that can be bootstrapped without fpm.

  • allow fpm to generate source code distributions with non-fpm build systems
  • generated source code distribution should allow to build fpm project without fpm, git or internet access
  • potential third-party build systems are CMake and meson
  • allows easier distribution and packaging of fpm via various packaging ecosystems

Mentors: Sebastian Ehlert (@awvwgk)

Related issues:

  • fpm#69: Have CMake and Make backends
  • fpm#70: Have a Conda backend

Standard Conformance Suite

Aim is to provide an fpm package or a functionality in fpm to check for standard conformance of a compiler.

Prior work:

Mentors: Damian Rouson (@rouson), Arjen Markus (@arjenmarkus)

Maintenance of the FORD project

  • check and organize the issue tracker
  • sort and review pull request
  • ping pull request authors and merge patches

Mentors: Brad Richardson (@everythingfunctional)

Use fpm package manifest as project file

  • extract meta data from fpm.toml file instead of FORD project file

Mentors: Sebastian Ehlert (@awvwgk)