M README.md +871 -1
@@ 1,1 1,871 @@
-[](https://builds.sr.ht/~mmatalka/pds?)
+-[](https://builds.sr.ht/~mmatalka/pds?)
+
+# Table of Contents
+
+1. [About](#org4d407a9)
+ 1. [Why Does This Exist?](#orgf2359bb)
+2. [Parallelism](#org8802aa0)
+3. [Content Hash Based Builds](#org1910cf1)
+4. [Terminology](#org6d61324)
+5. [Projects](#orgac41c0a)
+ 1. [Ocaml](#org764fbf3)
+ 2. [Third-party](#orgeb67f29)
+6. [Dependencies](#orgbfc8789)
+7. [Configuration](#org0d142cb)
+ 1. [Configuration Variables For Projects](#org3e4424f)
+ 2. [Configuration Variables For Tests](#orgc22df3d)
+ 3. [Outputting the configuration](#orgd51a282)
+8. [Produced Files](#org531c6d6)
+9. [Documentation](#orga80a0b5)
+10. [Selectors](#org1380185)
+11. [Changelog](#org4d29c9b)
+ 1. [1.0.0](#org9e91524)
+ 2. [1.1.0](#orgb820221)
+ 3. [2.0.0](#orgc62cbaa)
+ 4. [3.0.0](#org84e93aa)
+ 5. [3.0.1](#org094f8fc)
+ 6. [3.0.2](#org32f6532)
+ 7. [3.0.3](#org1840326)
+ 8. [3.0.4](#org92f6fe6)
+ 9. [3.1.0](#org59d8cf0)
+ 10. [3.1.1](#orgf69fc75)
+ 11. [4.11](#org93a61f8)
+ 12. [4.12](#org88484a8)
+ 13. [4.13](#org5e6c3d1)
+ 14. [5.14](#org015dacc)
+ 15. [5.15](#orgdd7d38b)
+ 16. [5.16](#orgf4d3fe6)
+ 17. [5.17 (bug release)](#orgba9ee52)
+ 18. [5.18](#org47f8132)
+ 19. [5.19](#org55822ce)
+ 20. [6.20](#org00d0582)
+ 21. [5.21](#org992589e)
+ 22. [5.22](#org2a7a6fd)
+ 23. [5.23](#org862685f)
+ 24. [5.24](#orgb4ddbc1)
+ 25. [5.25](#orgaf4b17a)
+ 26. [5.26 (bug release)](#org2faefce)
+ 27. [5.27](#org7cf7066)
+ 28. [5.28](#orgb8e749f)
+ 29. [5.29](#org6b3e578)
+ 30. [6.43](#org682ad5f)
+ 31. [6.44](#orgfdbaa88)
+
+
+<a id="org4d407a9"></a>
+
+# About
+
+pds is a build system for Ocaml that is meant to make it easy to build a project
+that follows a particular layout by generating a makefile for the project. The
+input to pds is a config file, `pds.conf`, and a directory structure, which is
+always the current working directory, and the output is the build description.
+
+The directory layout looks like:
+
+ .
+ /src
+ /proj1
+ /proj2
+ /proj3
+ /tests
+ /test1/test.ml
+ /test2/test.ml
+
+The `pds.conf` for this project might look like:
+
+ [src.proj1]
+ type = "exec"
+ deps = [ "core", "proj2", "proj3" ]
+ install = true
+ install_cmd = "cp -vf proj1.native $(PREFIX)/bin/proj1"
+ remove_cmd = "rm -v $(PREFIX)/bin/proj1"
+
+ [src.proj2]
+ deps = [ "proj3" ]
+ install = false
+
+ [src.proj3]
+ deps = [ "str" ]
+ install = false
+
+ [tests.test1]
+ deps = [ "proj2" ]
+
+ [tests.test2]
+ deps = [ "proj1" ]
+
+Finally, by using the standard `Makefile` definition below, `make test` will
+compile all the code and run the tests. `make install` will install proj1. And
+`make remove` will remove it.
+
+ all:
+ pds
+ $(MAKE) -f pds.mk all
+
+ %:
+ pds
+ $(MAKE) -f pds.mk $*
+
+pds supports multiple types of builds, at this time `release`, `debug`,
+`profile`, and `docs`. The `release` build must always exist and is what
+running `make` with no target will execute. The `debug` and `profile` builds
+will inherit all configuration from the release build and options can be
+overridden. pds also supports tests, and the existing test targets are: `test`,
+`test-debug`, and `test-profile`, which run tests for the respective builds.
+
+pds builds into the `build` directory and each build type is a sub-directory in
+the `build` directory, for example `build/release`, `build/docs`, or
+`build/test-release`.
+
+
+<a id="orgf2359bb"></a>
+
+## Why Does This Exist?
+
+Ocaml has multiple build systems, so it is probably confusing and frustrating to
+learn that another one has been created. In the author's experience, many of
+the Ocaml build tools are more complicated than the value they add. pds is
+meant to be simple but play nice with other tools. If you've felt frustrated by
+the existing tooling, then pds might work well for you. If you are happy with
+the existing tooling then you should be able to safely ignore pds because it
+meant to be non-intrusive.
+
+
+<a id="org8802aa0"></a>
+
+# Parallelism
+
+pds supports parallel builds. The amount of parallelism is specified with the
+`-j` option in `make`. A repository with multiple projects in it will
+parallelize the build across those projects. That is, if there is `proj1` and
+`proj2` that do not depend on each other, they will be built in parallel.
+Inside of an Ocaml project, if every `.ml` file in the project has an associated
+`.mli` file, the project will be built in parallel. If there is any `.ml` file
+that does not have a `.mli` file, the project will be built in serial. The
+reason for this is when compiling a `.ml` file that does not have a `.mli` file,
+both `ocamlc` and `ocamlopt` generate a `.cmi` file even if the `.cmi` file
+already exists. With a parallel build, the byte code and native code builds
+will be executed in parallel. If the project is built in parallel, the
+generation of the `.cmi` file can overlap, generating compiler errors. This is
+the source of the `units Foo and Bar make inconsistent assumptions about Baz`
+error.
+
+
+<a id="org1910cf1"></a>
+
+# Content Hash Based Builds
+
+pds does some trickery to build changes only if the contents have changed and
+not based on timestamp.
+
+To accomplish this, pds stores all input files and a hash in a sqlite database
+and consults this on each run. If the hash of a file is the same but its
+timestamp has changed, pds sets the timestamp to the value in the database.
+This tricks Make into only building things that have actually changed.
+
+If the hashes do not match, pds sets the timestamp to that of the current time
+and stores that value in the database.
+
+The hash stored for every file is both the hash of the file as well as the hash
+of the build configuration, this ensure that if a pds configuration has changed
+that causes a rebuild.
+
+
+<a id="org6d61324"></a>
+
+# Terminology
+
+- Project - The name of a directory in the `src` directory. This corresponds to
+ an entry in the `src` table in the pds configuration file.
+- Build - A kind of build, for example `release`, `debug`, `profile` or `docs`.
+- Project type - The type of project it is, either `ocaml` or `third-party`.
+- Project target type - The type of output the project has, either `exec` or
+ `library`, this applies only to ocaml projects..
+
+
+<a id="orgac41c0a"></a>
+
+# Projects
+
+Projects are divided up between Ocaml projects, which pds knows how to generate
+a `Makefile` for and a third-party project, which pds does not generate a
+`Makefile` for but are expected to have one that corresponds to the pds
+interface, which is `release`, `debug`, `profile`, `install`, `remove`, `docs`,
+and `clean`.
+
+
+<a id="org764fbf3"></a>
+
+## Ocaml
+
+Ocaml projects can be either executables or libraries. The name of the output
+is derived from the project name with a suffix added depending on the type. In
+the case of a library, a `META` file compatible with `ocamlfind` will be
+generated.
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">Project Type</th>
+<th scope="col" class="org-left">Suffix</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">Library</td>
+<td class="org-left">cma</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Library</td>
+<td class="org-left">cmxa</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Executable</td>
+<td class="org-left">byte</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Executable</td>
+<td class="org-left">native</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="orgeb67f29"></a>
+
+## Third-party
+
+Third party projects do not have a `Makefile` generated by pds but are expected
+to have one which corresponds to the pds interface.
+
+
+<a id="orgbfc8789"></a>
+
+# Dependencies
+
+The configuration file input to pds specifies dependencies, if any, for each
+project. If a dependency has the same name as a project in the `src` directory
+then it is considered an internal dependency and an internal dependency will be
+compiled before its dependent project and the emitted output will be specified
+as a dependency in the dependents `Makefile`.
+
+
+<a id="org0d142cb"></a>
+
+# Configuration
+
+A configuration file is required for all projects. A configuration file path
+can be given explicitly or pds will search for `pds.conf` in the current working
+directory. `pds.conf` is a [toml](https://github.com/toml-lang/toml) file. All directories in the `src` directory
+must be in the configuration file. pds will error if that is not the case. The
+only required attribute for each project is `install`, which specifies if it
+will be installed or not. In the case of an `exec` project, the `install_cmd`
+and `remove_cmd` are required.
+
+Projects and tests can have some configuration values overridden by specific
+build types, the options and precedence is given in the respective sections
+below.
+
+An example of building the example directory structure.
+
+- `proj3` requires no special dependencies or settings and projects are assumed
+ to be `library`.
+- The global `release` build specifies a project should be compiled with
+ `-noassert`.
+- The global `debug` build specifies that a project should be compiled with
+ `-g`.
+- The project `proj2` overrides the global compiler options for `release` and
+ `debug` and compiles with `-safe-string`.
+- The debug build options completely override the release build options.
+- Libraries have a default `ocamlfind` install directory, however, commands need
+ to have their installation command specified.
+
+ [global.release]
+ extra_compiler_opts = "-noassert"
+
+ [global.debug]
+ extra_compiler_opts = "-g"
+
+ [src.proj1]
+ deps = ["async", "proj2", "proj3"]
+ type = "exec"
+ install = true
+ install_cmd = "cp proj1.native $(PREFIX)/bin/proj1"
+ remove_cmd = "rm $(PREFIX)/bin/proj1"
+
+ [src.proj2]
+ install = false
+ deps = ["core", "async"]
+ type = "library"
+ extra_compiler_opts = "-safe-string -noassert"
+ debug = { extra_compiler_opts = "-safe-string -g" }
+
+ [src.proj3]
+ install = false
+
+
+<a id="org3e4424f"></a>
+
+## Configuration Variables For Projects
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">Name</th>
+<th scope="col" class="org-left">Type</th>
+<th scope="col" class="org-left">Default</th>
+<th scope="col" class="org-left">Description</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">deps</td>
+<td class="org-left">string list</td>
+<td class="org-left">[]</td>
+<td class="org-left">List of dependencies both within the project and external</td>
+</tr>
+
+
+<tr>
+<td class="org-left">type</td>
+<td class="org-left">string</td>
+<td class="org-left">"library"</td>
+<td class="org-left">exec, library - Whether the ocaml project is an executbale or library</td>
+</tr>
+
+
+<tr>
+<td class="org-left">install</td>
+<td class="org-left">bool</td>
+<td class="org-left"> </td>
+<td class="org-left">Whether the built artifacts should be installed</td>
+</tr>
+
+
+<tr>
+<td class="org-left">install<sub>cmd</sub></td>
+<td class="org-left">string</td>
+<td class="org-left"> </td>
+<td class="org-left">If the type is exec, specify the command to be used to install it</td>
+</tr>
+
+
+<tr>
+<td class="org-left">remove<sub>cmd</sub></td>
+<td class="org-left">string</td>
+<td class="org-left"> </td>
+<td class="org-left">If the typs is exec, specify the command to be used to remove it</td>
+</tr>
+
+
+<tr>
+<td class="org-left">project<sub>type</sub></td>
+<td class="org-left">string</td>
+<td class="org-left">"ocaml"</td>
+<td class="org-left">third-party or ocaml - defaults to ocaml</td>
+</tr>
+
+
+<tr>
+<td class="org-left">extra<sub>compiler</sub><sub>opts</sub></td>
+<td class="org-left">string</td>
+<td class="org-left">""</td>
+<td class="org-left">Extra options to give to the ocaml compiler</td>
+</tr>
+
+
+<tr>
+<td class="org-left">extra<sub>ocamldep</sub><sub>opts</sub></td>
+<td class="org-left">string</td>
+<td class="org-left">""</td>
+<td class="org-left">Extra options to give ot ocamldep</td>
+</tr>
+
+
+<tr>
+<td class="org-left">extra<sub>makefile</sub><sub>lines</sub></td>
+<td class="org-left">string list</td>
+<td class="org-left">[]</td>
+<td class="org-left">Extra lines to add to the generated Makefile</td>
+</tr>
+
+
+<tr>
+<td class="org-left">compile<sub>deps</sub></td>
+<td class="org-left">string list</td>
+<td class="org-left">[]</td>
+<td class="org-left">List of builds that need to be built prior to this build but are not automatically linked against</td>
+</tr>
+
+
+<tr>
+<td class="org-left">meta<sub>linkopts</sub></td>
+<td class="org-left">string</td>
+<td class="org-left">""</td>
+<td class="org-left">Link options to go into the META file.</td>
+</tr>
+
+
+<tr>
+<td class="org-left">build</td>
+<td class="org-left">bool</td>
+<td class="org-left">true</td>
+<td class="org-left">Whether or not to build the project or test</td>
+</tr>
+</tbody>
+</table>
+
+The following values can be overridden:
+
+- `extra_compiler_opts`
+- `extra_ocamldep_opts`
+- `deps` - Note that this has no entry in `global`.
+- `compile_deps` - Note that this one has no entry in `global`.
+
+The precedence ordering is given below. Selectors are discussed later in the
+document.
+
+For `release` builds:
+
+1. `src.<project>.selector.<selector>.<option>`
+2. `src.<project>.<option>`
+3. `global.release.<option>`
+
+For all other builds:
+
+1. `src.<project>.selector.<selector>.<build_type>.<option>`
+2. `src.<project>.selector.<selector>.<option>`
+3. `src.<project>.<build_type>.<option>`
+4. `global.<build_type>.<option>`
+5. `src.<project>.<option>`
+
+The same precedence applies to test builds.
+
+
+<a id="orgc22df3d"></a>
+
+## Configuration Variables For Tests
+
+Tests only support specifying the `deps` and `extra_compiler_opts`
+configuration. The `deps` option cannot be specified in the `global` section.
+
+The precedence ordering is given below. Note that `release` builds are unique
+in that they search the third precedence first then the second.
+
+1. `tests.<project>.<build_type>.<option>`
+2. `global.test-<build_type>.<option>`
+3. `tests.<project>.<option>`
+
+
+<a id="orgd51a282"></a>
+
+## Outputting the configuration
+
+This feature is not experimental and will likely change.
+
+`pds` can output the configuration in a tab delimited format, like a CSV. The
+output looks like the following:
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">Column</th>
+<th scope="col" class="org-left">Description</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">Source Type</td>
+<td class="org-left">"src" or "test", the type of build it is</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Name</td>
+<td class="org-left">The name of the build, "src.<name>" or "test.<name>"</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Build Type</td>
+<td class="org-left">"exec" or "library", empty for test</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Project Type</td>
+<td class="org-left">"ocaml" or "third-party", empty for a test</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Deps</td>
+<td class="org-left">Comma separated list of dependencies</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="org531c6d6"></a>
+
+# Produced Files
+
+pds will produce files when it is executed as well as when the build is
+performed. This is a list of files that will be produced and can be safely
+ignored in the form of a `.gitignore`.
+
+ build/
+ pds.mk
+ Ocamlrules.mk.in
+
+
+<a id="orga80a0b5"></a>
+
+# Documentation
+
+pds can generate HTML documentation using `ocamldoc`. The `docs` make target is
+automatically generated and third-party libraries are expected to implement a
+`docs` target. The docs are put into the `builds/docs/<project>` of the root
+directory of the repository. By default, only `mli` files are included in
+documentation, however this can be modified by setting the `DOCS_FILES` variable
+using the `extra_makefile_lines` configuration setting. Different options can
+also be set for `ocamldoc` by modifying the `OCAMLDOC_OPTS` variable through
+`extra_makefile_lines`.
+
+
+<a id="org1380185"></a>
+
+# Selectors
+
+Some builds need to be parameterized over the environment it's being compiled
+in. This is accomplished through selectors. A selector is a program which
+outputs a single line that matches the regex `[a-zA-Z0-9_-]+`, any trailing
+white space will be removed. The value of the line will then be used to look up
+values in `src.<project>.selector.<line>.<variable>`. For any selection not in
+`src.<project>.selector.<line>` the value at the top-level of a project
+definition is used. The empty string is a special selector which utilizes the
+default project values.
+
+The only override supported by selectors is setting the variable. It is not
+possible to unset a variable in a selector.
+
+Take the case where a project should use different dependencies if it is
+executed in environment `A` vs environment `B`. The selector program,
+`is_a_or_b` will return the line `A` or `B` depending on the system.
+
+ [global]
+ selector = ["is_a_or_b"]
+
+ [src.foo]
+ deps = ["dep1", "dep2"]
+
+ [src.foo.selector.A]
+ deps = ["dep1", "dep2", "dep3"]
+
+ [src.foo.selector.B]
+ deps = ["dep1, "dep2", "dep4"]
+
+ [src.bar]
+ deps = ["depX", "depY" ]
+
+ [src.bar.selector.A]
+ deps = ["dep1", "dep2", "dep3"]
+
+Any variable that applies to a project can be set in a selector.
+
+The order of precedence is that the selector for the build type is first
+checked, then the selector for a release.
+
+
+<a id="org4d29c9b"></a>
+
+# Changelog
+
+
+<a id="org9e91524"></a>
+
+## 1.0.0
+
+- Build makefiles of Ocaml projects.
+- Add support for third-party projects.
+- Support running tests.
+
+
+<a id="orgb820221"></a>
+
+## 1.1.0
+
+- Add support for compile deps. These are internal dependencies that are not an
+ ocamlfind dependency but need to be build before building the project. This
+ is useful if a tool needs to be built that will be used to compile a project.
+
+
+<a id="orgc62cbaa"></a>
+
+## 2.0.0
+
+- Remove globals section. This can become confusing when for some configuration
+ variables as it's unclear where their values come from.
+- Fill out the documentation more.
+
+
+<a id="org84e93aa"></a>
+
+## 3.0.0
+
+- Add remove support. This was previously outside of pds but now pds itself
+ understands both installing and uninstalling projects.
+
+
+<a id="org094f8fc"></a>
+
+## 3.0.1
+
+- Remove pds from the package dependencies, this was previously done by hand
+ after using hll to make the package.
+
+
+<a id="org32f6532"></a>
+
+## 3.0.2
+
+- Expand the hll config to pass opam-linter.
+
+
+<a id="org1840326"></a>
+
+## 3.0.3
+
+- Add crunch dependency to hll.
+- Specify which version of ocaml pds works with.
+
+
+<a id="org92f6fe6"></a>
+
+## 3.0.4
+
+- Add more documentation.
+- Remove examples.
+
+
+<a id="org59d8cf0"></a>
+
+## 3.1.0
+
+- Add initial ocamldocs support.
+- Install `.cmi` files.
+
+
+<a id="orgf69fc75"></a>
+
+## 3.1.1
+
+- Fix a bug in generating docs when the project has no dependencies.
+
+
+<a id="org93a61f8"></a>
+
+## 4.11
+
+- Switch to monotonic versioning.
+- Add support for formatted output, a simple tab separated representation of a
+ `pds.conf`.
+- Rename the `docs` target to `doc` because this conflicts with the directory
+ name of the output.
+
+
+<a id="org88484a8"></a>
+
+## 4.12
+
+- Include tests directories in formatted output.
+
+
+<a id="org5e6c3d1"></a>
+
+## 4.13
+
+- Make a better error message for the install key, which is required.
+
+
+<a id="org015dacc"></a>
+
+## 5.14
+
+- Rework builds to use the build output directory rather than building in the
+ same directory as the source files. This allows multiple build types to
+ coexist, such as release and debug.
+- Remove PACK support. Building PACKs is no longer supported.
+
+
+<a id="orgdd7d38b"></a>
+
+## 5.15
+
+- Fix formatted output for third-party projects.
+- Add a changelog and back fill it.
+
+
+<a id="orgf4d3fe6"></a>
+
+## 5.16
+
+- Fix bug in cleanup logic which concatenated multiple deps
+
+
+<a id="orgba9ee52"></a>
+
+## 5.17 (bug release)
+
+- Fix a build race condition during parallel builds. When a .cmi is generated
+ from a .ml, in a parallel build it is possible that the build of the .cmo and
+ .cmx will execute in parallel and both will generate a .cmi which will step on
+ each other. Now, for files that will generate a .cmi, the .cmi is generated
+ first then the .cmo and .cmx are generated.
+
+
+<a id="org47f8132"></a>
+
+## 5.18
+
+- 5.17 was a bug release, its solution made builds that could not be installed.
+- This solves the problem 5.17 intended to solve by making ocaml builds that
+ have any `.ml` files without a complimentary `.mli` file now build in serial.
+ This is because building the byte-code for `.ml` files with no `.mli` file can
+ overlap with each other generating the `.cmi` file which creates a race
+ condition where the `.cmi` is in an invalid state when a later step is using
+ it. This solves it by serializing the build for those cases.
+
+
+<a id="org55822ce"></a>
+
+## 5.19
+
+- Fix bug where it was only installing `.cmi` files for `.mli` files. Not it
+ installs `.cmi` files for all `.ml` files.
+
+
+<a id="org00d0582"></a>
+
+## 6.20
+
+- Removed the `-custom` option from default byte code builds.
+
+
+<a id="org992589e"></a>
+
+## 5.21
+
+- Undo the change in `6.20`. Instead, split out the linker options and allow
+ them to be overridden.
+
+
+<a id="org2a7a6fd"></a>
+
+## 5.22
+
+- Support `extra_makefile_lines` in tests.
+- Tests compile with `OCAML*_LINK_OPTS` just like regular builds.
+
+
+<a id="org862685f"></a>
+
+## 5.23
+
+- Fix typo in PARALLEL
+
+
+<a id="orgb4ddbc1"></a>
+
+## 5.24
+
+- Build cmti files and install them for every library.
+
+
+<a id="orgaf4b17a"></a>
+
+## 5.25
+
+- Support adding linkopts to the META file.
+
+
+<a id="org2faefce"></a>
+
+## 5.26 (bug release)
+
+- Support selectors.
+- Add some tests.
+
+
+<a id="org7cf7066"></a>
+
+## 5.27
+
+- Fix bug in section name for the selector.
+
+
+<a id="orgb8e749f"></a>
+
+## 5.28
+
+- Fix lookup order. This is a long-standing bug where selectors and globals
+ were not properly looked up.
+
+
+<a id="org6b3e578"></a>
+
+## 5.29
+
+- Support rebuilding when pds.conf changes.
+- Remove support for specifying pds.conf (backwards breaking but it never
+ worked).
+
+
+<a id="org682ad5f"></a>
+
+## 6.43
+
+- Move to content based hashing.
+
+
+<a id="orgfdbaa88"></a>
+
+## 6.44
+
+- Fix install directive
+
M README.org +4 -0
@@ 418,3 418,7 @@ checked, then the selector for a release
- Support rebuilding when pds.conf changes.
- Remove support for specifying pds.conf (backwards breaking but it never
worked).
+** 6.43
+- Move to content based hashing.
+** 6.44
+- Fix install directive
M build/debug/pds/Makefile +0 -2
@@ 35,6 35,4 @@ profile: all
include ../../../Ocamlrules.mk.in
-$(native_cmx) $(byte_cmo) $(neutral_cmi): ../../../pds.conf
-
-include .d
M build/debug/pds_template/Makefile +0 -2
@@ 37,6 37,4 @@ include $(SRC_DIR)/pds_template.mk
include ../../../Ocamlrules.mk.in
-$(native_cmx) $(byte_cmo) $(neutral_cmi): ../../../pds.conf
-
-include .d
M build/debug/snabela/Makefile +0 -2
@@ 35,6 35,4 @@ profile: all
include ../../../Ocamlrules.mk.in
-$(native_cmx) $(byte_cmo) $(neutral_cmi): ../../../pds.conf
-
-include .d
M build/profile/pds/Makefile +0 -2
@@ 35,6 35,4 @@ profile: all
include ../../../Ocamlrules.mk.in
-$(native_cmx) $(byte_cmo) $(neutral_cmi): ../../../pds.conf
-
-include .d
M build/profile/pds_template/Makefile +0 -2
@@ 37,6 37,4 @@ include $(SRC_DIR)/pds_template.mk
include ../../../Ocamlrules.mk.in
-$(native_cmx) $(byte_cmo) $(neutral_cmi): ../../../pds.conf
-
-include .d
M build/profile/snabela/Makefile +0 -2
@@ 35,6 35,4 @@ profile: all
include ../../../Ocamlrules.mk.in
-$(native_cmx) $(byte_cmo) $(neutral_cmi): ../../../pds.conf
-
-include .d
M build/release/pds/Makefile +0 -2
@@ 35,6 35,4 @@ profile: all
include ../../../Ocamlrules.mk.in
-$(native_cmx) $(byte_cmo) $(neutral_cmi): ../../../pds.conf
-
-include .d
M build/release/pds_template/Makefile +0 -2
@@ 37,6 37,4 @@ include $(SRC_DIR)/pds_template.mk
include ../../../Ocamlrules.mk.in
-$(native_cmx) $(byte_cmo) $(neutral_cmi): ../../../pds.conf
-
-include .d
M build/release/snabela/Makefile +0 -2
@@ 35,6 35,4 @@ profile: all
include ../../../Ocamlrules.mk.in
-$(native_cmx) $(byte_cmo) $(neutral_cmi): ../../../pds.conf
-
-include .d
M files/pds.mk.tmpl +2 -0
@@ 43,6 43,8 @@type@_
@/tests-@
@/builds-@
+install: $(projects_install)
+
docs: $(projects_docs)
remove: $(projects_remove)
M hll.conf +1 -1
@@ 1,4 1,4 @@
-pds = { major_version = 5 }
+pds = { major_version = 6 }
desc = "A tool to build Makefiles for Ocaml projects."
maintainer = "orbitz@gmail.com"
M hll.pins +1 -1
@@ 1,5 1,5 @@
ocaml >= "4.12.0"
toml >= "6"
cmdliner >= "1.3.0"
-containers >= "3.12.0"
+containers >= "3.12"
process >= "0.2.1"
M pds.mk +2 -0
@@ 71,6 71,8 @@ profile_snabela:
test-profile: $(tests_profile)
+install: $(projects_install)
+
docs: $(projects_docs)
remove: $(projects_remove)