Merge pull request #912 from rgrinberg/migration-manual

Add migration page to manual
This commit is contained in:
Rudi Grinberg 2018-06-25 15:59:25 +06:30 committed by GitHub
commit f7a4e517fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 187 additions and 115 deletions

View File

@ -1,116 +1,4 @@
Migrating from Jbuilder to Dune
===============================
jbuilder has been renamed to dune. Refer to the manual for details of the
migration:
Dune was initially called Jbuilder. Up to mid-2018, the package was
still called `jbuilder` which only installed a `jbuilder` binary. This
document explain how the migration to Dune will happen.
Timeline
--------
The general idea is that the migration is gradual and existing
Jbuilder projects don't need to be updated all at once. We encourage
users to switch their development repositories and continue their
usual release cycle. There is no need to re-release existing packages
just to switch to Dune immediately.
The plan is as follow:
### July 2018: release of Dune 1.0.0
First release of the opam package `dune`. The `jbuilder` package
becomes a transitional package that depends on `dune`.
The `dune` package installs two binaries: `dune` and `jbuilder`. These
two binaries are exactly the same and they work on both Jbuilder and
Dune projects. Additionally they recognize both Jbuilder and Dune
configuration files. The new Dune configuration files are described
later in this document.
### January 2019: deprecation of Jbuilder
At this point, the `jbuilder` binary emits a warning on every startup
inviting users to switch to `dune`. When encountering `jbuild` or
other Jbuilder configuration files, both binaries emit a warning. The
rest is unchanged.
During this period, it makes sense for projects to do new releases
just to switch to Dune if none of their existing releases is using
Dune.
### July 2019: support for Jbuilder is dropped
`jbuilder` is now a dummy executable that always exit with an error
message on startup. `dune` no longer reads `jbuild` or other Jbuidler
configuration files but still prints a warning when encountering
them.
At this point, a conflict with newer versions of `dune` will be added
to all opam packages that rely on the `jbuilder` binary or Jbuilder
configuration files.
### January 2020: the jbuilder binary goes away
The `dune` package no longer installs a `jbuilder` binary. The rest is
unchanged.
### Distant future
Once we are sure there are no more `jbuild` files out there, Dune will
completely ignore `jbuild` and other Jbuilder configuration files.
New configuration files
-----------------------
Until July 2019, `dune` will still read `jbuild` and other Jbuilder
configuration files. There is no change in these files.
However, based on the experience acquired since the first release of
Jbuilder, we made a few changes in the configuration files read by
Dune. The most notable ones are the following:
- `jbuild` files are renamed simply `dune`
- projects now have a `dune-project` file at their root
- `jbuild-ignore` files are replaced by `ignored_subdirs` stanzas in
`dune` files
- `jbuild-workspace` are replaced by `dune-workspace` files
- `jbuild-workspace<suffix>` files no longer mean anything
Following are detailed explanation of the differences between the
Jbuilder configuration files and the Dune ones.
### dune-project files
These are a new kind of file. With Jbuilder, projects used to be
identified by the presence of at least one `<package>.opam` file in a
directory. This will still be supported until July 2019, however as
Jbuilder evolved it became clear that we needed project files, so Dune
introduces `dune-project` files to mark the root of projects.
Eventually, we are hoping that Dune will generate opam files. So users
will only have to write a `dune-project` file.
The purpose of this file is to:
- delimit projects in larger workspaces
- set a few project-wide parameters, such as the name, the version of
the Dune language in use or specification of extra features
(plugins) used in the project
Eventually, for users who wish to do so it should be possible to
centralize all the configuration of a project in this file.
### dune files
These are the same as `jbuild` files.
### dune-workspace
These are the same as `jbuild-workspace` files.
When looking for the root of the workspace, Jbuilder also looks for
files whose name start with `jbuild-workspace`, such as
`jbuild-workspace.in`. This rule will be kept until July 2019, however
it is not preserved for `dune-workspace` files. I.e. a
`dune-workspace.in` file means nothing.
This rule was only useful when we didn't have project files.
[manual](http://dune.readthedocs.io/en/latest/migration.html).

View File

@ -142,6 +142,13 @@ Support
If you have questions about jbuilder, you can send an email to
ocaml-core@googlegroups.com or [open a ticket on github][issues].
Migration from jbuilder
-----------------------
Migration from jbuilder to dune is described in the
[manual](http://dune.readthedocs.io/en/latest/migration.html).
Status
------

View File

@ -22,3 +22,4 @@ Welcome to jbuilder's documentation!
menhir
faq
known-issues
migration

View File

@ -1071,8 +1071,12 @@ syntax:
``(alias src/runtest)``, ``(alias src/foo/bar/runtest)``, ...
- ``(glob_files <glob>)``: depend on all files matched by ``<glob>``, see the
:ref:`glob <glob>` for details
.. _source_tree:
- ``(source_tree <dir>)``: depend on all source files in the subtree with root
``<dir>``
- ``(universe)``: depend on everything in the universe. This is for
cases where dependencies are too hard to specify. Note that Jbuilder
will not be able to cache the result of actions that depend on the

172
doc/migration.rst Normal file
View File

@ -0,0 +1,172 @@
*********
Migration
*********
Dune was initially called Jbuilder. Up to mid-2018, the package was still called
`jbuilder` which only installed a `jbuilder` binary. This document explain how
the migration to Dune will happen.
Timeline
========
The general idea is that the migration is gradual and existing
Jbuilder projects don't need to be updated all at once. We encourage
users to switch their development repositories and continue their
usual release cycle. There is no need to re-release existing packages
just to switch to Dune immediately.
The plan is as follows:
July 2018: release of Dune 1.0.0
--------------------------------
First release of the opam package `dune`. The `jbuilder` package
becomes a transitional package that depends on `dune`.
The `dune` package installs two binaries: `dune` and `jbuilder`. These
two binaries are exactly the same and they work on both Jbuilder and
Dune projects. Additionally they recognize both Jbuilder and Dune
configuration files. The new Dune configuration files are described
later in this document.
January 2019: deprecation of Jbuilder
-------------------------------------
At this point, the `jbuilder` binary emits a warning on every startup
inviting users to switch to `dune`. When encountering `jbuild` or
other Jbuilder configuration files, both binaries emit a warning. The
rest is unchanged.
During this period, it makes sense for projects to do new releases
just to switch to Dune if none of their existing releases is using
Dune.
July 2019: support for Jbuilder is dropped
------------------------------------------
`jbuilder` is now a dummy executable that always exit with an error
message on startup. `dune` no longer reads `jbuild` or other Jbuidler
configuration files but still prints a warning when encountering
them.
At this point, a conflict with newer versions of `dune` will be added
to all opam packages that rely on the `jbuilder` binary or Jbuilder
configuration files.
January 2020: the jbuilder binary goes away
-------------------------------------------
The `dune` package no longer installs a `jbuilder` binary. The rest is
unchanged.
Distant future
--------------
Once we are sure there are no more `jbuild` files out there, Dune will
completely ignore `jbuild` and other Jbuilder configuration files.
Check List
==========
This section is a concise list of migration tasks that will be required to
transition from jbuilder to dune.
New configuration files
-----------------------
Until July 2019, `dune` will still read `jbuild` and other Jbuilder
configuration files. There is no change in these files.
However, based on the experience acquired since the first release of
Jbuilder, we made a few changes in the configuration files read by
Dune. The most notable ones are the following:
- `jbuild` files are renamed simply `dune`
- projects now have a `dune-project` file at their root
- `jbuild-ignore` files are replaced by `ignored_subdirs` stanzas in
`dune` files
- `jbuild-workspace` are replaced by `dune-workspace` files
- `jbuild-workspace<suffix>` files no longer mean anything
Following are detailed explanation of the differences between the
Jbuilder configuration files and the Dune ones.
dune-project files
------------------
These are a new kind of file. With Jbuilder, projects used to be
identified by the presence of at least one `<package>.opam` file in a
directory. This will still be supported until July 2019, however as
Jbuilder evolved it became clear that we needed project files, so Dune
introduces `dune-project` files to mark the root of projects.
Eventually, we are hoping that Dune will generate opam files. So users
will only have to write a `dune-project` file.
The purpose of this file is to:
- delimit projects in larger workspaces
- set a few project-wide parameters, such as the name, the version of the Dune
language in use or specification of extra features (plugins) used in the
project
Eventually, for users who wish to do so it should be possible to
centralize all the configuration of a project in this file.
dune files
----------
These are the same as `jbuild` files.
dune-workspace
--------------
These are the same as `jbuild-workspace` files.
When looking for the root of the workspace, Jbuilder also looks for
files whose name start with `jbuild-workspace`, such as
`jbuild-workspace.in`. This rule will be kept until July 2019, however
it is not preserved for `dune-workspace` files. I.e. a
`dune-workspace.in` file means nothing.
This rule was only useful when we didn't have project files.
Variable Syntax
---------------
``${foo} and $(foo)`` are no longer valid variable syntax in dune files.
Variables are defined as ``%{foo}``. This change is done to simplify
interoperability with bash commands which also use teh ``${foo}`` syntax.
``(files_recursively_in ..)`` is removed
----------------------------------------
The ``files_recursively_in`` dependency specification is invalid in dune files.
A :ref:`source_tree <source_tree>` stanza has been introduced to reflect the
actual function of this stanza.
Escape Sequences
----------------
Invalid escape sequences of the form ``\x`` where ``x`` is a character other
than ``[0-9]``, ``x``, ``n``, ``r``, ``t``, ``b`` are not allowed in dune files.
Comments Syntax
---------------
Block comments of the form ``#| ... |#`` and comments of the form ``#;`` are not
supported in dune files.
Renamed Variables
-----------------
The following table consists of variables than have been renamed in dune:
======== ===========
Jbuild Dune
======== ===========
``${@}`` ``%{targets}``
``${^}`` ``%{deps}``
``${<}`` ``%{deps[0]}``
======== ===========