10 releases
0.1.0-alpha9 | Mar 11, 2021 |
---|---|
0.1.0-alpha8 | Feb 5, 2021 |
0.0.0 | Jan 28, 2021 |
#28 in #makefile
27 downloads per month
31KB
692 lines
Epine
Epine is a powerful Makefile generator using the Lua programming language for its configuration.
Goals
- Generating a single Makefile
- Scaling up as well as scaling down
- Allowing anyone to share their Epine modules and helper libraries
Non-goals
- Replacing
make
- Replacing a package manager
Installation
Install the latest release of Epine with Cargo:
cargo install epine
If you don't have Cargo/Rust installed, you can get it on rustup.rs.
Hello, Epine!
Go in the folder of your choice, where you want your Makefile to be generated.
mkdir hello-epine
cd hello-epine
In this new folder, create a new file named Epine.lua
:
return {
action "hello" {
echo("hello!");
};
}
To (re)generate the Makefile, simply run epine
, without any argument.
epine
Epine will run the Lua code contained in the Epine.lua
file and generate a
Makefile according to what this file returns to it.
hello:
@echo hello!
.PHONY: hello
Using remote modules
The way the generated Makefile is described is very close to what ends up being generated. If it was just that, Epine would just be a very annoying way to write your Makefiles... in Lua.
This is why Epine has the ability to download and load Lua modules from GitHub repositories. This makes it really easy to reuse and share helper functions and libraries. For now, only GitHub is supported, but I would love to see Epine support many more sources in the future; contributions are welcome!
Here's an example showing how simple the generation of a Makefile can become:
-- the `tek` module, which was made for students at Epitech, takes care of
-- generating many rules automatically, like "all", "clean", "fclean", etc...
-- it also generates the proper rules to build and run unit tests!
local tek = require "@nasso/epine-tek/v0.1.0-alpha"
-- project metadata (its name, and the targets built by the "all" target)
tek:project "libmy" {"libmy.a", "hello"}
-- a C static library!
tek:static "libmy.a" {
language = "C";
}
-- a C binary using the library!
tek:binary "hello" {
language = "C";
prerequisites = {"libmy.a"};
srcs = {"main.c"};
libs = {"my"};
}
-- return the Makefile description to Epine for generation
return tek:make()
This simple script, which is only 12 lines of code, generates a clean, human-readable, and fully functional Makefile! Of course, this is only a mere example of what Epine is capable of.
Because it's all Lua anyway, you can imagine any sort of API to describe your project, and you can share it with anyone!
Status
Epine is still a very young project. The main reason I built it was because I didn't want to copy-paste my Makefiles between the different school projects I had to build during my first years as an Epitech student.
License
Epine is licensed under the terms of both the MIT license and the Apache License (Version 2.0), at your choice.
See LICENSE-MIT and LICENSE-APACHE-2.0 files for the full texts.
Dependencies
~10–24MB
~389K SLoC