Updated readme with new instructions and conventions.
This commit is contained in:
parent
f46fcaf6d3
commit
ab6ef7da13
1 changed files with 82 additions and 25 deletions
107
readme.markdown
107
readme.markdown
|
|
@ -1,54 +1,111 @@
|
|||
# Babel
|
||||
Babel is a work in progress *package manager* for Nimrod.
|
||||
Babel is a *beta*-grade *package manager* for the Nimrod programming language.
|
||||
|
||||
## Compiling babel
|
||||
You will need the latest Nimrod compiler from github to compile babel.
|
||||
You will need the latest Nimrod compiler from github to compile babel (version 0.9.2 may work).
|
||||
|
||||
Compiling it is as simple as ``nimrod c babel``.
|
||||
Compiling it is as simple as ``nimrod c -d:release babel``.
|
||||
|
||||
## Babel's folder structure
|
||||
Babel stores everything that has been installed in ~/.babel on Unix systems and
|
||||
in your $home/.babel on Windows. Libraries are stored in $babelDir/libs.
|
||||
in your $home/.babel on Windows. Libraries are stored in $babelDir/libs, and
|
||||
binaries are stored in $babelDir/bin.
|
||||
|
||||
## Libraries
|
||||
## Packages
|
||||
|
||||
By convention, if you have a single file with the same filename as your package
|
||||
name, then you can include it in the same directory as the .babel file.
|
||||
However, if you have other public modules whose names are quite common,
|
||||
they should be included in a separate directory by the name of "PackageName", so
|
||||
as to not pollute the namespace. This will mean that your main file can be
|
||||
imported by simply writing ``import PackageName`` and all other public modules
|
||||
can be imported by writing ``import PackageName/module``. This structure can be
|
||||
seen being used by [jester](https://github.com/dom96/jester).
|
||||
Babel works on git repositories as its primary source of packages. Its list of
|
||||
packages is stored in a JSON file which is freely accessible in the
|
||||
[nimrod-code/packages repository](https://github.com/nimrod-code/packages).
|
||||
This JSON file provides babel with the required Git URL to clone the package
|
||||
and install it. Installation and build instructions are contained inside a
|
||||
ini-style file with the ``.babel`` file extension. The babel file shares
|
||||
the package's name.
|
||||
|
||||
All private modules should be placed, by convention, in
|
||||
a ``private`` folder, these are modules which
|
||||
the user of your library should not be importing.
|
||||
### Libraries
|
||||
|
||||
When babel installs a library it will copy all the files that it downloaded
|
||||
into ``$babelDir/libs/pkgname-ver``. It's up to the package creator to make sure
|
||||
that the package directory layout is correct, this is so that users of the
|
||||
package can correctly import the package.
|
||||
|
||||
By convention, it is suggested that the layout be as follows. The directory
|
||||
layout is determined by the nature of your package, that is, whether your
|
||||
package exposes only one module or multiple modules.
|
||||
|
||||
If your package exposes only a single module, then that module should be
|
||||
present in the root directory (the directory with the babel file) of your git
|
||||
repository, it is recommended that in this case you name that module whatever
|
||||
your package's name is. A good example of this is the
|
||||
[jester](https://github.com/dom96/jester) package which exposes the ``jester``
|
||||
module. In this case the jester package is imported with ``import jester``.
|
||||
|
||||
If your package exposes multiple modules then the modules should be in a
|
||||
``PackageName`` directory. This will allow for a certain measure of isolation
|
||||
from other packages which expose modules with the same names. In this case
|
||||
the package's modules will be imported with ``import PackageName/module``.
|
||||
|
||||
You are free to combine the two approaches described.
|
||||
|
||||
In regards to modules which you do **not** wish to be exposed. You should place
|
||||
them in a ``PackageName/private`` directory. Your modules may then import these
|
||||
private modules with ``import PackageName/private/module``. This directory
|
||||
structure may be enforced in the future.
|
||||
|
||||
All files and folders in the directory of where the .babel file resides will be
|
||||
copied as-is, you can however skip some directories or files in your by setting
|
||||
copied as-is, you can however skip some directories or files by setting
|
||||
the 'SkipDirs' or 'SkipFiles' options in your .babel file.
|
||||
|
||||
## Example .babel file
|
||||
#### Example library .babel file
|
||||
|
||||
```ini
|
||||
; Example babel file
|
||||
[Package]
|
||||
name = "ProjectName"
|
||||
version = "0.1.0"
|
||||
author = "Dominik Picheta"
|
||||
description = """Example .babel file."""
|
||||
author = "Your Name"
|
||||
description = "Example .babel file."
|
||||
license = "MIT"
|
||||
|
||||
SkipDirs = "SomeDir" ; ./ProjectName/SomeDir will be skipped.
|
||||
SkipFiles = "file.txt,file2.txt" ; ./ProjectName/{file.txt, file2.txt} will be skipped.
|
||||
SkipDirs = "SomeDir" ; ./SomeDir will not be installed
|
||||
SkipFiles = "file.txt,file2.txt" ; ./{file.txt, file2.txt} will not be installed
|
||||
|
||||
[Deps]
|
||||
Requires: "nimrod >= 0.8.0"
|
||||
Requires: "nimrod >= 0.9.2"
|
||||
```
|
||||
|
||||
All the fields (except ``SkipDirs`` and ``SkipFiles``) under ``[Package]`` are
|
||||
required.
|
||||
required. ``[Deps]`` may be ommitted.
|
||||
|
||||
### Binary packages
|
||||
|
||||
These are application packages which require building prior to installation.
|
||||
A package is automatically a binary package as soon as it sets at least one
|
||||
``bin`` value, like so:
|
||||
|
||||
```ini
|
||||
bin = "main"
|
||||
```
|
||||
|
||||
In this case when ``babel install`` is invoked, babel will build the ``main.nim``
|
||||
file and subsequently copy it into ``$babelDir/bin/``.
|
||||
|
||||
Dependencies are automatically installed before building.
|
||||
|
||||
## Dependencies
|
||||
|
||||
Dependencies are specified under the ``[Deps]`` section in a babel file.
|
||||
The ``requires`` key is used to specify them. For example:
|
||||
|
||||
```ini
|
||||
[Deps]
|
||||
Requires: "nimrod >= 0.9.2, jester > 0.1 & <= 0.5"
|
||||
```
|
||||
|
||||
Dependency lists support version ranges. These versions may either be a concrete
|
||||
version like ``0.1``, or they may contain any of the less-than (``<``),
|
||||
greater-than (``>``), less-than-or-equal-to (``<=``) and greater-than-or-equal-to
|
||||
(``>=``). Two version ranges may be combined using the ``&`` operator for example:
|
||||
``> 0.2 & < 1.0`` which will install a package with the version greater than 0.2
|
||||
and less than 1.0.
|
||||
|
||||
## Submitting your package to the package list.
|
||||
Babel's packages list is stored on github and everyone is encouraged to add
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue