@ -866,17 +866,18 @@ The most useful contributions right now would be to provide new service configur
<aname="build.zsh"></a>
### [Build.zsh][build.zsh]: makefile creation. <side-note>*for mere mortals*</side-note>
A `Makefile` is very useful to share your project, <u>whatever your project is</u>, no matter if it is an application, a library, the language used, etc.
A `Makefile` is very useful to share your project, <u>whatever your project is</u>.
No matter if it is an application or a library, whatever the language used, etc.
Build.zsh creates a makefile from a simple declarative configuration file.
A `Makefile` should:
- **compile and link the application**
- **handle dependencies** and **rebuild only updated parts of the application** *for incremental builds*
- **allow users to rebuid any part of your project independently**
- **handle dependencies** and **rebuild only the updated parts of the application** *for incremental builds*
- **allow users to rebuild any part of the project independently**
- **install the application**<br/>
The default installation root directory is `/usr/local` but you should be able to change that easily (with an environment variable or through configuration).
The default installation root directory is `/usr/local` but it can be changed easily (with an environment variable or through configuration).
- **create a tarball of the project**<br/>
This tarball includes your application, its man-pages, the Makefile to build it, etc.
This tarball includes the application, its man-pages, the Makefile to build it, etc.
- **have a `make help`** *everybody needs help*
- *(BONUS)* have colors. I like colors.
@ -893,7 +894,7 @@ $ ls Makefile # tadaaaaa you made a Makefile
Makefile
```
You can invoke your newly created Makefile with `make help` to know what can it do for you.
You can invoke your newly created Makefile with `make help` to know what it can do for you.
For example, it can create a tarball with `make dist`.
**How-to make a `project.zsh` for `build.zsh`**
@ -903,26 +904,26 @@ For example, it can create a tarball with `make dist`.
package=my-application # Name of your package.
version=2.18.3 # Version of the package (will follow the application version, probably).
# targets = all the applications we want to compile in the project
# targets = all the applications to compile in the project.
targets=(my-application)
# Then, we tell the language of these applications.
# The language of these applications is then specified.
# Here, my-application is coded in Crystal.
# build.zsh comes with a number of back-ends: https://git.baguette.netlib.re/Baguette/build.zsh/src/branch/master/build
# `build.zsh` comes with a number of back-ends: https://git.baguette.netlib.re/Baguette/build.zsh/src/branch/master/build
type[my-application]=crystal
# sources are the sources of the application
# The sources of the application.
sources[my-application]=src/main.cr
# The application depends on a number of files.
# Each modification of one of these files = we have to re-compile.
# The application depends on a certain number of files.
# `make` will re-compile "my-application" if one of these files is modified.
depends[my-application]="$(find src -type f | grep -v main.cr)"
# Finally, we want to know what are the files we want in the tarball (made though `make dist`).
# Here, we want to provide in our tarball:
# Finally, the list of the files to be included in the tarball (made through `make dist`).