From: Alyssa Ross <hi@alyssa.is>
To: Demi Marie Obenour <demiobenour@gmail.com>
Cc: Spectrum OS Development <devel@spectrum-os.org>
Subject: Re: [PATCH 2/4] Generate makefile file lists from a script
Date: Tue, 09 Sep 2025 16:51:26 +0200 [thread overview]
Message-ID: <87plbz8ys1.fsf@alyssa.is> (raw)
In-Reply-To: <7f53e052-a686-4745-aecb-5f98e38f0142@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3881 bytes --]
Demi Marie Obenour <demiobenour@gmail.com> writes:
>>> -$(dest): ../../scripts/make-erofs.sh $(PACKAGES_FILE) $(addprefix image/,$(FILES)) $(BUILD_FILES) build/empty build/fifo
>>> +$(dest): ../../scripts/make-erofs.sh $(PACKAGES_FILE) $(addprefix image/,$(FILES)) $(BUILD_FILES) build/empty build/fifo file-list.mk
>>
>> Given that we don't include Makefile as a dependency, it probably
>> doesn't make sense to depend on other included Makefile fragments
>> either?
>
> If the user regenerates the file lists, it is more convenient for
> them to not need to call 'make clean', and having the dependency is
> harmless.
I just feel a bit weird about it. It would of course be nice if
changing the make rules didn't require a make clean, but to actually get
that behaviour we'd need to add a dependency on Makefile to every single
rule (or this functionality would have to be built in to make, which
would make more sense…). I worry that having it so that /sometimes/ you
don't have to run make clean after changing the make rules makes things
more confusing, because then you have to understand when…
Open to being told I'm putting theory ahead of practicality here, though.
>>> diff --git a/scripts/genfiles.awk b/scripts/genfiles.awk
>>> new file mode 100755
>>> index 0000000000000000000000000000000000000000..62863e78f157f1d9a0f6dbdb0f4380db9c9d48cb
>>> --- /dev/null
>>> +++ b/scripts/genfiles.awk
>>> @@ -0,0 +1,115 @@
>>> +#!/usr/bin/env -S LC_ALL=C LANGUAGE=C awk -E
>>> +# SPDX-License-Identifier: EUPL-1.2+
>>> +# SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
>>> +function check_status(status) {
>>> + if (status < 0) {
>>> + printf "FATAL: getline: %s\n", status > "/dev/stderr";
>>> + exit 1;
>>> + }
>>> + return status;
>>> +}
>>> +
>>> +function check_close(value, status) {
>>> + status = check_status(close(value));
>>> + if (status != 0) {
>>> + printf "FATAL: command exited with status %d\n", status > "/dev/stderr";
>>> + exit status;
>>> + }
>>> +}
>>> +
>>> +function shell_quote(command) {
>>> + gsub(/'/, "'\\\\&'", command);
>>> + return ("'" command "'");
>>> +}
>>> +
>>> +function get(command, line, path, array_index, inode_type, mode, modes, symlink_count, symlinks, file_count, files, rc_count, rc_files, is_license, is_rc) {
>>> + file_count = 0;
>>> + symlink_count = 0;
>>> + rc_count = 0;
>>> + modes["120000"] = "symlink";
>>> + modes["040644"] = "directory";
>>> + modes["040755"] = "directory";
>>> + modes["100644"] = "regular";
>>> + modes["100755"] = "regular";
>>> + print "# SPDX-License-Identifier: CC0-1.0";
>>> + print "# SPDX-FileCopyRightText: Not Copyrightable (machine-written)";
>>> + print "# Generated by scripts/genfile.awk, DO NOT EDIT!";
>>> + while (check_status(command | getline line)) {
>>> + if (line !~ /^[0-7]{6}\t/) {
>>> + # this is a git bug
>>> + print "FATAL: git ls-files output didn't start with a valid mode" > "/dev/stderr";
>>> + exit 1;
>>> + }
>>> + path = substr(line, 8);
>>> + if (path !~ /^[ -~]+$/) {
>>> + # also a git bug
>>> + print "FATAL: git ls-files didn't quote properly" > "/dev/stderr";
>>> + exit 1;
>>> + }
>>> + if (path ~ /^\/|((^|\/)\.{0,2}($|\/))/) {
>>> + # also a git bug
>>> + printf "FATAL: git ls-files output non-canonical path '%s'\n", path > "/dev/stderr";
>>> + exit 1;
>>> + }
>>> + if (path !~ /^[[:alnum:]_.+@/-]+$/) {
>>> + printf "FATAL: filename '%s' has forbidden characters\n", path > "/dev/stderr";
>>> + exit 1;
>>> + }
>>
>> I feel like this could be a lot nicer if we ran git ls-files outside
>> awk, and could then use its nice top-level matching syntax?
>
> That would work, but would need a wrapper script.
That's fine. Make a scripts/genfiles.sh that runs scripts/genfiles.awk.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]
next prev parent reply other threads:[~2025-09-09 14:51 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-04 1:56 [PATCH 0/4] Generate file lists from a script Demi Marie Obenour
2025-09-04 1:56 ` [PATCH 1/4] Move all files for the image into a subdirectory Demi Marie Obenour
2025-09-04 1:56 ` [PATCH 2/4] Generate makefile file lists from a script Demi Marie Obenour
2025-09-08 9:59 ` Alyssa Ross
2025-09-08 18:45 ` Demi Marie Obenour
2025-09-09 14:51 ` Alyssa Ross [this message]
2025-09-04 1:56 ` [PATCH 3/4] Common make rules for building erofs images Demi Marie Obenour
2025-09-08 10:01 ` Alyssa Ross
2025-09-08 18:53 ` Demi Marie Obenour
2025-09-09 14:56 ` Alyssa Ross
2025-09-04 1:56 ` [PATCH 4/4] Use /etc/s6-rc/compiled for compiled s6-rc directory Demi Marie Obenour
2025-09-10 5:29 ` [PATCH v2 0/3] Generate file lists from a script Demi Marie Obenour
2025-09-10 5:29 ` [PATCH v2 1/3] Move all files for the image into a subdirectory Demi Marie Obenour
2025-09-10 18:58 ` Alyssa Ross
2025-09-11 12:21 ` Demi Marie Obenour
2025-09-10 5:29 ` [PATCH v2 2/3] Generate makefile file lists from a script Demi Marie Obenour
2025-09-10 5:29 ` [PATCH v2 3/3] Common make rules for building erofs images Demi Marie Obenour
2025-09-11 12:47 ` [PATCH v3 0/4] Generate file lists from a script Demi Marie Obenour
2025-09-11 12:47 ` [PATCH v3 1/4] Do not ignore errors from tar Demi Marie Obenour
2025-09-17 11:48 ` Alyssa Ross
2025-09-18 2:45 ` Demi Marie Obenour
2025-09-19 7:46 ` Alyssa Ross
2025-09-30 12:59 ` Alyssa Ross
2025-09-19 7:55 ` Alyssa Ross
2025-09-19 19:03 ` Demi Marie Obenour
2025-09-11 12:47 ` [PATCH v3 2/4] Move all files for the image into a subdirectory Demi Marie Obenour
2025-09-17 12:30 ` Alyssa Ross
2025-09-17 12:39 ` Alyssa Ross
2025-09-17 13:03 ` Alyssa Ross
2025-09-11 12:47 ` [PATCH v3 3/4] Generate makefile file lists from a script Demi Marie Obenour
2025-09-11 12:47 ` [PATCH v3 4/4] Common make rules for building erofs images Demi Marie Obenour
2025-09-21 2:23 ` [PATCH v3] Generate file lists from a script Demi Marie Obenour
2025-09-21 8:47 ` Alyssa Ross
2025-09-21 16:51 ` Demi Marie Obenour
2025-09-21 17:07 ` Alyssa Ross
2025-09-21 17:24 ` [PATCH v4] " Demi Marie Obenour
2025-09-25 11:22 ` Alyssa Ross
2025-09-26 16:31 ` [PATCH v5] " Demi Marie Obenour
2025-09-27 8:19 ` Alyssa Ross
2025-09-27 8:42 ` Demi Marie Obenour
2025-09-27 16:22 ` [PATCH v6] " Demi Marie Obenour
2025-09-29 8:12 ` Alyssa Ross
2025-09-29 17:20 ` Demi Marie Obenour
2025-09-29 17:18 ` [PATCH v7] " Demi Marie Obenour
2025-10-01 9:20 ` Alyssa Ross
2025-10-01 9:24 ` Demi Marie Obenour
2025-10-01 9:35 ` Alyssa Ross
2025-10-01 18:30 ` [PATCH v8] " Demi Marie Obenour
2025-10-02 9:46 ` Alyssa Ross
2025-10-02 17:37 ` [PATCH v9] " Demi Marie Obenour
2025-10-03 9:04 ` Alyssa Ross
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87plbz8ys1.fsf@alyssa.is \
--to=hi@alyssa.is \
--cc=demiobenour@gmail.com \
--cc=devel@spectrum-os.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://spectrum-os.org/git/crosvm
https://spectrum-os.org/git/doc
https://spectrum-os.org/git/mktuntap
https://spectrum-os.org/git/nixpkgs
https://spectrum-os.org/git/spectrum
https://spectrum-os.org/git/ucspi-vsock
https://spectrum-os.org/git/www
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).