summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Sago <ogham@bsago.me>2020-10-10 00:47:17 +0100
committerBenjamin Sago <ogham@bsago.me>2020-10-10 00:57:04 +0100
commit0550faec05e8131ee8d6e6d438c680264598503a (patch)
treeec09f386b20c8baf6d781034961d35ff7e23b20c
parente95eb5e9fc50bb162cdd48187f731bd0f6ca8015 (diff)
Replace Makefile with a developmental Justfile
This commit deletes the Makefile, which contained targets to build exa and install it on the local machine, and replaces it with a Justfile, which only contains command to build and test exa. My reasoning for doing this is as follows: • exa is increasingly being installed through package managers, rather than built and tested locally, so users are avoiding using the Makefile at all. • It was a pain to keep up with the correct paths for installing the binary, man pages, and completions, which can vary between OSes. By removing them, the code in this repository need only concern itself with building exa and putting its files in the 'target' directory, simplifying things. • just is much simpler than make conceptually, which is why I prefer it. It just runs commands, rather than being a complete build system, which we already use Cargo for. • just has features built-in, such as listing tasks, that we've had to create make targets for. • exa only needed a Makefile at all because it pre-dates Cargo! • Other Rust projects seem to be getting along perfectly fine without one. If I've missed some important reason that makes it worth keeping the Makefile around then please let me know.
-rw-r--r--Cargo.toml2
-rw-r--r--Justfile26
-rw-r--r--Makefile86
-rw-r--r--Vagrantfile12
4 files changed, 39 insertions, 87 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 61c1b54..2432144 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,7 +14,7 @@ readme = "README.md"
categories = ["command-line-utilities"]
keywords = ["ls", "files", "command-line"]
license = "MIT"
-exclude = ["/devtools/*", "/Makefile", "/Vagrantfile", "/screenshots.png"]
+exclude = ["/devtools/*", "/Justfile", "/Vagrantfile", "/screenshots.png"]
[[bin]]
diff --git a/Justfile b/Justfile
new file mode 100644
index 0000000..c07aaea
--- /dev/null
+++ b/Justfile
@@ -0,0 +1,26 @@
+all: build test
+all-release: build-release test-release
+
+
+# compiles the exa binary
+@build:
+ cargo build
+
+# compiles the exa binary (in release mode)
+@build-release:
+ cargo build --release --verbose
+
+
+# runs unit tests
+@test:
+ cargo test --all -- --quiet
+
+# runs unit tests (in release mode)
+@test-release:
+ cargo test --release --all --verbose
+
+
+# prints versions of the necessary build tools
+@versions:
+ rustc --version
+ cargo --version
diff --git a/Makefile b/Makefile
deleted file mode 100644
index b9abb50..0000000
--- a/Makefile
+++ /dev/null
@@ -1,86 +0,0 @@
-DESTDIR =
-PREFIX = /usr/local
-
-override define compdir
-ifndef $(1)
-$(1) := $$(or $$(shell pkg-config --variable=completionsdir $(2) 2>/dev/null),$(3))
-endif
-endef
-
-$(eval $(call compdir,BASHDIR,bash-completion,$(PREFIX)/etc/bash_completion.d))
-$(eval $(call compdir,ZSHDIR,zsh,/usr/share/zsh/vendor_completions.d))
-$(eval $(call compdir,FISHDIR,fish,$(PREFIX)/share/fish/vendor_completions.d))
-
-FEATURES ?= default
-CARGO_OPTS := --no-default-features --features "$(FEATURES)"
-
-all: target/release/exa
-build: target/release/exa
-
-target/release/exa:
- cargo build --release $(CARGO_OPTS)
-
-install: install-exa install-man
-
-install-exa: target/release/exa
- install -m755 -- target/release/exa "$(DESTDIR)$(PREFIX)/bin/"
-
-install-man:
- install -dm755 -- "$(DESTDIR)$(PREFIX)/bin/" "$(DESTDIR)$(PREFIX)/share/man/man1/"
- install -m644 -- contrib/man/exa.1 "$(DESTDIR)$(PREFIX)/share/man/man1/"
-
-install-bash-completions:
- install -m644 -- contrib/completions.bash "$(DESTDIR)$(BASHDIR)/exa"
-
-install-zsh-completions:
- install -m644 -- contrib/completions.zsh "$(DESTDIR)$(ZSHDIR)/_exa"
-
-install-fish-completions:
- install -m644 -- contrib/completions.fish "$(DESTDIR)$(FISHDIR)/exa.fish"
-
-test: target/release/exa
- cargo test --release $(CARGO_OPTS)
-
-check: test
-
-uninstall:
- -rm -f -- "$(DESTDIR)$(PREFIX)/share/man/man1/exa.1"
- -rm -f -- "$(DESTDIR)$(PREFIX)/bin/exa"
- -rm -f -- "$(DESTDIR)$(BASHDIR)/exa"
- -rm -f -- "$(DESTDIR)$(ZSHDIR)/_exa"
- -rm -f -- "$(DESTDIR)$(FISHDIR)/exa.fish"
-
-clean:
- cargo clean
-
-preview-man:
- man contrib/man/exa.1
-
-help:
- @echo 'Available make targets:'
- @echo ' all - build exa (default)'
- @echo ' build - build exa'
- @echo ' clean - run `cargo clean`'
- @echo ' install - build and install exa and manpage'
- @echo ' install-exa - build and install exa'
- @echo ' install-man - install the manpage'
- @echo ' test - run `cargo test`'
- @echo ' uninstall - uninstall fish, manpage, and completions'
- @echo ' preview-man - preview the manpage without installing'
- @echo ' help - print this help'
- @echo
- @echo ' install-bash-completions - install bash completions into $$BASHDIR'
- @echo ' install-zsh-completions - install zsh completions into $$ZSHDIR'
- @echo ' install-fish-completions - install fish completions into $$FISHDIR'
- @echo
- @echo 'Variables:'
- @echo ' DESTDIR - A path that'\''s prepended to installation paths (default: "")'
- @echo ' PREFIX - The installation prefix for everything except zsh completions (default: /usr/local)'
- @echo ' BASHDIR - The directory to install bash completions in (default: $$PREFIX/etc/bash_completion.d)'
- @echo ' ZSHDIR - The directory to install zsh completions in (default: /usr/share/zsh/vendor-completions)'
- @echo ' FISHDIR - The directory to install fish completions in (default: $$PREFIX/share/fish/vendor_completions.d)'
- @echo ' FEATURES - The cargo feature flags to use. Set to an empty string to disable git support'
-
-.PHONY: all build target/release/exa install-exa install-man preview-man \
- install-bash-completions install-zsh-completions install-fish-completions \
- clean uninstall help
diff --git a/Vagrantfile b/Vagrantfile
index 4d27762..9da4b2e 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -59,6 +59,18 @@ Vagrant.configure(2) do |config|
EOF
+ # Install Just, the command runner.
+ config.vm.provision :shell, privileged: true, inline: <<-EOF
+ if hash just &>/dev/null; then
+ echo "just is already installed"
+ else
+ wget "https://github.com/casey/just/releases/download/v0.8.0/just-v0.8.0-x86_64-unknown-linux-musl.tar.gz"
+ tar -xf "just-v0.8.0-x86_64-unknown-linux-musl.tar.gz"
+ cp just /usr/local/bin
+ fi
+ EOF
+
+
# Use a different ‘target’ directory on the VM than on the host.
# By default it just uses the one in /vagrant/target, which can
# cause problems if it has different permissions than the other