125 lines
3.3 KiB
Markdown
125 lines
3.3 KiB
Markdown
|
||
# build.zsh
|
||
|
||
A zsh-powered tool that writes plain, simple Makefiles.
|
||
|
||
## CLI usage
|
||
|
||
```
|
||
usage: ./build.zsh [OPTIONS]
|
||
|
||
Options:
|
||
-h, --help Print this help message.
|
||
-c, --colors Use colors in your Makefiles
|
||
(relies on zsh/colors and your current $TERM)
|
||
-g, --gnu Sell your soul for gmake-dependent features.
|
||
```
|
||
|
||
You should REALLY use `-c`, at least because the Makefiles look cooler.
|
||
|
||
## Generating a Makefile
|
||
|
||
```sh
|
||
$ ls project.zsh
|
||
project.zsh
|
||
$ build.zsh
|
||
Generating Makefiles...
|
||
$
|
||
```
|
||
|
||
## Installation with pre-built Makefile
|
||
|
||
Running `make help` gives the following output for `build.zsh`.
|
||
|
||
```
|
||
:: build_zsh-0.2.1
|
||
|
||
Generic targets:
|
||
- help Prints this help message.
|
||
- all Builds all targets.
|
||
- dist Creates tarballs of the files of the project.
|
||
- install Installs the project.
|
||
- clean Removes compiled files.
|
||
- uninstall Deinstalls the project.
|
||
|
||
CLI-modifiable variables:
|
||
- CC cc
|
||
- CFLAGS
|
||
- LDFLAGS
|
||
- DESTDIR
|
||
- PREFIX /usr/local
|
||
- BINDIR /usr/local/bin
|
||
- LIBDIR /usr/local/lib
|
||
- SHAREDIR /usr/local/share
|
||
- INCLUDEDIR /usr/local/include
|
||
|
||
Project targets:
|
||
- build.zsh script
|
||
- build/binary.zsh script
|
||
- build/crystal.zsh script
|
||
- build/library.zsh script
|
||
- build/moon.zsh script
|
||
- build/ofile.zsh script
|
||
- build/script.zsh script
|
||
- build/sharedlib.zsh script
|
||
- build/staticlib.zsh script
|
||
|
||
Makefile options:
|
||
- gnu: false
|
||
- colors: false
|
||
|
||
Rebuild the Makefile with:
|
||
zsh ./build.zsh
|
||
```
|
||
|
||
A similar output is shown for any project having a Makefile that was generated with `build.zsh`.
|
||
|
||
The help message is updated when variables are defined from the command line.
|
||
For example, running `make PREFIX=/opt/foo help` will show that most of the directory variables have changed.
|
||
`make help` is a great tool to check you’re configuring your build just right before spending ours compiling or installing your software!
|
||
|
||
The traditionnal `make && make install` still apply to softwares configured with `build.zsh`.
|
||
Actually, you could call it `build.zsh && make && make install`.
|
||
|
||
build.zsh uses itself to generate its Makefile.
|
||
If you wanna install it, you should know how to at this point. :)
|
||
|
||
## Project configuration
|
||
|
||
### Example: build.zsh
|
||
|
||
```zsh
|
||
package=build_zsh # Name of the package.
|
||
version=0.2.1 # Version of the package.
|
||
|
||
targets=(build.zsh) # The things to build or install.
|
||
type[build.zsh]=script # How they’re built.
|
||
|
||
# Using a for loop to add more targets.
|
||
# In this example, we’re registering scripts for installation.
|
||
for i in build/*.zsh; do
|
||
targets+=($i)
|
||
type[$i]=script
|
||
|
||
# Installation in a non-default directory.
|
||
install[$i]='$(SHAREDIR)/build.zsh'
|
||
|
||
# Targets marked as “auto” won’t appear in `make help`.
|
||
auto[$i]=true
|
||
done
|
||
|
||
# Files to add to tarballs through `make dist`.
|
||
dist=(build.zsh.in build/*.zsh project.zsh Makefile)
|
||
```
|
||
|
||
Running `build.zsh` will generate a new Makefile. :)
|
||
|
||
Don’t hesitate to add `-c` and `-g` to improve the Makefile’s appearance.
|
||
|
||
## Debug
|
||
|
||
If your build.zsh-generated Makefile is buggy, you can run `make` with the `Q=` variable to show everything that’s happening.
|
||
|
||
Example: `make Q= build`.
|
||
|