|
| 1 | +# This Makefile offers simpler frontend to the different tools for common development tasks. |
| 2 | +# You'll see that all of the commands are prepended by `opam exec -- ...` to run use the |
| 3 | +# tools installed in your Opam switch without having to run `eval $(opam env)` |
| 4 | +.DEFAULT_GOAL := all |
| 5 | + |
| 6 | +ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) |
| 7 | +$(eval $(ARGS):;@:) |
| 8 | + |
| 9 | +.PHONY: all |
| 10 | +all: |
| 11 | + opam exec -- dune build --root . @install |
| 12 | + |
| 13 | +.PHONY: deps |
| 14 | +deps: ## Install development dependencies |
| 15 | + opam install -y dune-release ocamlformat utop ocaml-lsp-server |
| 16 | + opam install --deps-only --with-test --with-doc -y . |
| 17 | + |
| 18 | +.PHONY: create_switch |
| 19 | +create_switch: ## Create an opam switch without any dependency |
| 20 | + opam switch create . --no-install |
| 21 | + |
| 22 | +.PHONY: switch |
| 23 | +switch: ## Create an opam switch and install development dependencies |
| 24 | + opam install . --deps-only --with-doc --with-test |
| 25 | + opam install -y dune-release ocamlformat utop ocaml-lsp-server |
| 26 | + |
| 27 | +.PHONY: lock |
| 28 | +lock: ## Generate a lock file |
| 29 | + opam lock -y . |
| 30 | + |
| 31 | +.PHONY: build |
| 32 | +build: ## Build the project, including non installable libraries and executables |
| 33 | + opam exec -- dune build --root . |
| 34 | + |
| 35 | +.PHONY: install |
| 36 | +install: all ## Install the packages on the system |
| 37 | + opam exec -- dune install --root . |
| 38 | + |
| 39 | +.PHONY: start |
| 40 | +start: all ## Run the produced executable |
| 41 | + opam exec -- dune exec --root . bin/main.exe $(ARGS) |
| 42 | + |
| 43 | +.PHONY: test |
| 44 | +test: ## Run the unit tests |
| 45 | + opam exec -- dune runtest --root . |
| 46 | + |
| 47 | +.PHONY: clean |
| 48 | +clean: ## Clean build artifacts and other generated files |
| 49 | + opam exec -- dune clean --root . |
| 50 | + |
| 51 | +.PHONY: doc |
| 52 | +doc: ## Generate odoc documentation |
| 53 | + opam exec -- dune build --root . @doc |
| 54 | + |
| 55 | +.PHONY: servedoc |
| 56 | +servedoc: doc ## Open odoc documentation with default web browser |
| 57 | + open _build/default/_doc/_html/index.html |
| 58 | + |
| 59 | +.PHONY: fmt |
| 60 | +fmt: ## Format the codebase with ocamlformat |
| 61 | + opam exec -- dune build --root . --auto-promote @fmt |
| 62 | + |
| 63 | +.PHONY: watch |
| 64 | +watch: ## Watch for the filesystem and rebuild on every change |
| 65 | + opam exec -- dune build --root . --watch |
| 66 | + |
| 67 | +.PHONY: utop |
| 68 | +utop: ## Run a REPL and link with the project's libraries |
| 69 | + opam exec -- dune utop --root . lib -- -implicit-bindings |
| 70 | + |
| 71 | +.PHONY: release |
| 72 | +release: all ## Run the release script |
| 73 | + opam exec -- dune-release tag |
| 74 | + opam exec -- dune-release distrib |
| 75 | + opam exec -- dune-release publish distrib -y |
| 76 | + opam exec -- dune-release opam pkg |
| 77 | + opam exec -- dune-release opam submit --no-auto-open -y |
0 commit comments