Separate building stift from installing it (don't copy into ~/.local/bin when building) #2

Open
opened 2026-10-18 04:36:29 +02:00 by dxtr · 0 comments
Owner

Problem

Building stift from a clone and installing it are a single action.
sbcl --script install.lisp (install.lisp):

  1. builds bin/stift with asdf:make in a child SBCL, then
  2. copies the executable into ~/.local/bin (or XDG_BIN_HOME, or a directory
    named on the command line) via install-file.

There is no way to build from a clone without also copying the result into a
PATH directory. (The stift build command itself only writes bin/stift —
the coupling lives in the bootstrap script.)

Building should not copy the executable into ~/.local/bin. Building and
installing should be separate, so one can build bin/stift — to test it, to
rebuild in place, or in CI — without touching the user's bin directory.

Possible directions

  • Make install.lisp build-only by default and install only when asked
    (e.g. a --install [DIR] flag); or
  • split the bootstrap into a build step and a separate install step; or
  • keep install.lisp as the one-shot installer but add a documented build-only
    path.

The clone already rebuilds with stift build once stift is installed; the gap
is the first build, before stift exists, which today forces an install. Exact
shape to be decided here.

Impact

  • install.lisp and the README "Installing" section.
  • Tests: tests/install-test.lisp drives install.lisp end to end;
    tests/build-test.lisp covers stift build.
## Problem Building stift from a clone and installing it are a single action. `sbcl --script install.lisp` (`install.lisp`): 1. builds `bin/stift` with `asdf:make` in a child SBCL, then 2. copies the executable into `~/.local/bin` (or `XDG_BIN_HOME`, or a directory named on the command line) via `install-file`. There is no way to build from a clone without also copying the result into a `PATH` directory. (The `stift build` command itself only writes `bin/stift` — the coupling lives in the bootstrap script.) Building should not copy the executable into `~/.local/bin`. Building and installing should be separate, so one can build `bin/stift` — to test it, to rebuild in place, or in CI — without touching the user's bin directory. ## Possible directions - Make `install.lisp` build-only by default and install only when asked (e.g. a `--install [DIR]` flag); or - split the bootstrap into a build step and a separate install step; or - keep `install.lisp` as the one-shot installer but add a documented build-only path. The clone already rebuilds with `stift build` once stift is installed; the gap is the first build, before stift exists, which today forces an install. Exact shape to be decided here. ## Impact - `install.lisp` and the README "Installing" section. - Tests: `tests/install-test.lisp` drives `install.lisp` end to end; `tests/build-test.lisp` covers `stift build`.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
dxtr/stift#2
No description provided.