Module B0_srcs

Select source files.

This module provides a type to select source files for build units in B0 files. To support generated source files, selections can depend on the build.

In a nutshell the declaration:

let srcs = [ `D "src-exe"; `D_rec "src"; `X "src/"; `X "src/not"]

instructs to:

The prefix relation for exclusions respects path segments boundaries. In the example any file whose path matches src/, src/*, src/not and src/not/* is excluded from the selection. But for example src/not.c is not.

The relative order of selections and exclusions doesn't matter, the semantics is to perform all the directory selections and then apply the exclusions. Exclusions affect only directory selections, not file `F and fiber `Fiber selections.

When a directory is selected via `D or `D_rec, all its files are, modulo exclusions. It is expected that build units themselves filter the final result by file extension or additional mechanisms. Consult the documentation of build units for more information.

Source selection

type fpath = string

The type for file paths. Must be convertible with B00_std.Fpath.of_string. We do not use B00_std.Fpath directly to allow for a lighter syntax in B0 files.

Important. Use only "/" as the directory separator even on Windows® platforms. Don't be upset the UI gives them back to you using the local platform separator.

val fpath : B00_std.Fpath.t -> fpath

fpath is B00_std.Fpath.to_string. If you prefer to specify your paths the clean way. TODO remove ?

type sel = [
| `D of fpath
| `D_rec of fpath
| `X of fpath
| `F of fpath
| `Fiber of B0_build.t -> B00_std.Fpath.Set.t B00.Memo.fiber

The type for file selectors.

  • `F f unconditionaly selects the file f. f must exist and be a file.
  • `D d selects the files of directory d modulo `X exclusions. d must exist and be a directory. dotfile paths are ignored.
  • `D_rec d selects the files of the file hierarchy rooted at d modulo `X exclusions. d must exist and be a directory. dotfile paths are ignored.
  • `X x removes from directory selections any file whose path segments are prefixed by x, respecting segment boundaries. A potential trailing directory separators in x is removed.
  • `Fiber f uses the given fiber during the build to determine a set of files unconditionally added to the selection.
type t = sel list

The type for source selection.

val select : B0_build.t -> t -> B00.Memo.fiber

select b sels selects in b the sources specified by sels and returns them mapped by their file extension (not multiple file extension). Each file is guaranteed to appear only once in the map.

Any relative path of srcs is made absolute to the current build unit with B0_build.Unit.root_dir.

Important. All files in the map that were selected via `F, `D and `D_rec are automatically made ready in the build. For those selected via `Fiber readyness determination is left to the fiber and the mechanisms it invokes.