SchOS/ports/kilo/Makefile
Nexoniarz 26bca020b6 licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0
Nexoniarz is the sole author and SchOS was never published under
Apache-2.0, so this is a straight relicence. LICENSE is the FSF GPLv2 text,
every first-party SPDX header moves to GPL-2.0-or-later, and NOTICE,
README.md, docs/licensing.md and the site say so. projects/schfs-linux
follows the rest of the tree.

The GPL gives copyleft: a fork has to ship its source. It also lifts the
old "Linux drivers, never" rule, since GPL-2.0-only code combines with
GPL-2.0-or-later. "Or later" leaves room for GPLv3, but one binary still
has to pick one version, so docs/licensing.md now keeps Apache-2.0 and
GPLv3 code out of the kernel to keep Linux code possible there. BSD
4-clause code goes from "avoid" to "no", because the advertising clause
is GPL-incompatible.

LDLS still ships no .ko. That boundary is now project policy rather than
a legal requirement, and ldls.md, devices.md and licensing.md section 6
say so. refmod declares license=GPL, and ldls-check passes (27 checks).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:48:45 +02:00

84 lines
3.4 KiB
Makefile

# SPDX-License-Identifier: GPL-2.0-or-later
# kilo — BSD-2-Clause: https://github.com/antirez/kilo
#
# SchOS's text editor, installed as sysroot/bin/kilo with `edit` beside it.
#
# It is here because the alternative every small system reaches for is vi, and
# vi is a program you have to be taught before you can use it to fix the file
# that is stopping the machine booting. kilo is the other kind: the arrow keys
# move the cursor, typing inserts, Ctrl-S saves, Ctrl-Q quits, Ctrl-F finds,
# and the bottom line says so while you work. Nobody has to be told any of it.
#
# The whole editor is one 1,300-line C file with no dependencies beyond libc --
# termios and TIOCGWINSZ, both of which SchOS already has because zsh needs
# them. That, and licensing at the time, is why it was chosen over nano: nano
# is GPLv3 and wants ncurses at runtime, and SchOS was then Apache-2.0. Under
# GPL-2.0-or-later nano is possible, but kilo already does the job.
#
# What it does not do: no undo, no multiple buffers, no configuration, no
# mouse, no UTF-8 beyond passing bytes through. It edits one file.
include ../mk/port.mk
# Pinned to a commit rather than a release, because kilo has never had one --
# it was written as the worked example for a tutorial and has been finished
# ever since. A commit is at least an exact thing to name.
#
# The checksum is of GitHub's generated archive. Those are reproducible for a
# given commit, but they are generated rather than uploaded, so if this ever
# fails to verify check that upstream still has the commit before assuming the
# tarball was tampered with.
KILO_COMMIT := 323d93b29bd89a2cb446de90c4ed4fea1764176e
KILO_URL := https://github.com/antirez/kilo/archive/$(KILO_COMMIT).tar.gz
KILO_SHA256 := 79e62c23fdf369fa0cbbeaab9fd8ae2848dcc0156faf6efc89ea274528b39723
TARBALL := $(DISTDIR)/kilo-$(KILO_COMMIT).tar.gz
CFLAGS := -static -Os -D__SCHOS__ -I$(MUSL)/include $(CFLAGS_BT) \
-D_BSD_SOURCE -std=c99 -Wall
LDFLAGS := -static -L$(MUSL)/lib -lc
$(TARBALL): | $(DISTDIR)
curl -fsSL -o $@ $(KILO_URL)
sh $(SHA256CHECK) "$(KILO_SHA256)" "$@"
download: $(TARBALL)
$(SRCDIR): $(TARBALL)
mkdir -p $(PORTDIR)
rm -rf $(PORTDIR)/kilo-$(KILO_COMMIT)
tar -xzf $< -C $(PORTDIR)
mv $(PORTDIR)/kilo-$(KILO_COMMIT) $@
# One file, so its own Makefile is not worth invoking -- it hardcodes flags
# that assume a hosted glibc and would link against the build host's libc.
$(BUILDDIR)/kilo: | $(SRCDIR)
mkdir -p $(BUILDDIR)
$(CC) $(CFLAGS) -o $@ $(SRCDIR)/kilo.c $(LDFLAGS)
build: $(BUILDDIR)/kilo
# `edit` as well as `kilo`.
#
# Two real copies rather than a link, for the reason ports/toybox/Makefile
# gives at length: mkschfs deduplicates by content, so the image holds one copy
# with two names either way, and this needs nothing from the host filesystem.
#
# The second name is not decoration. Somebody who has just arrived at a SchOS
# prompt with a file to fix will type `edit`; they will not guess `kilo`.
$(PORTDIR)/.installed: $(BUILDDIR)/kilo | $(SYSROOT)/bin
cp $(BUILDDIR)/kilo $(SYSROOT)/bin/kilo
cp $(BUILDDIR)/kilo $(SYSROOT)/bin/edit
chmod 755 $(SYSROOT)/bin/kilo $(SYSROOT)/bin/edit
@mkdir -p $(SYSROOT)/usr/share/licenses/kilo
cp $(SRCDIR)/LICENSE $(SYSROOT)/usr/share/licenses/kilo/LICENSE
@touch $@
@echo "kilo: installed as /bin/kilo and /bin/edit"
install: $(PORTDIR)/.installed
clean:
rm -rf $(BUILDDIR) $(PORTDIR)/.installed
distclean: clean
rm -rf $(PORTDIR)