summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/mpv/.gitignore1
-rw-r--r--media/mpv/file2string.awk23
-rw-r--r--media/mpv/file2string.c34
-rw-r--r--media/mpv/gen.rc10
4 files changed, 43 insertions, 25 deletions
diff --git a/media/mpv/.gitignore b/media/mpv/.gitignore
new file mode 100644
index 00000000..012dc66e
--- /dev/null
+++ b/media/mpv/.gitignore
@@ -0,0 +1 @@
+/tools.ninja
diff --git a/media/mpv/file2string.awk b/media/mpv/file2string.awk
deleted file mode 100644
index 113d1729..00000000
--- a/media/mpv/file2string.awk
+++ /dev/null
@@ -1,23 +0,0 @@
-BEGIN {
- for (n = 0; n < 256; ++n)
- ord[sprintf("%c", n)] = n
-}
-
-FNR == 1 {
- print "/* Generated from " FILENAME " */"
-}
-
-{
- printf "\""
- s = $0
- while (length(s) > 0) {
- i = match(s, "[^][A-Za-z0-9!#%&'()*+,./:;<=>^_{|}~ -]")
- if (i == 0) {
- printf "%s", s
- break
- }
- printf "%s\\%03o", substr(s, 1, i-1), ord[substr(s, i, 1)]
- s = substr(s, i+1)
- }
- printf "\\012\"\n"
-}
diff --git a/media/mpv/file2string.c b/media/mpv/file2string.c
new file mode 100644
index 00000000..84f31ce1
--- /dev/null
+++ b/media/mpv/file2string.c
@@ -0,0 +1,34 @@
+#include <errno.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+static const char safe[] =
+ "][ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#%&'()*+,./:;<=>^_{|}~ -";
+
+int main(int argc, char *argv[]) {
+ FILE *f;
+ char *line = NULL, *s;
+ size_t size = 0;
+ ssize_t n;
+
+ f = fopen(argv[1], "r");
+ if (!f) {
+ fprintf(stderr, "fopen %s: %s\n", argv[1], strerror(errno));
+ return 1;
+ }
+
+ printf("/* Generated from %s */\n", argv[1]);
+ while ((n = getline(&line, &size, f)) >= 0) {
+ printf("\"");
+ for (s = line; s < line + n; ++s) {
+ if (memchr(safe, *s, sizeof(safe) - 1))
+ fputc(*s, stdout);
+ else
+ printf("\\%03hho", *s);
+ }
+ printf("\"\n");
+ }
+
+ return 0;
+}
diff --git a/media/mpv/gen.rc b/media/mpv/gen.rc
index 2fa8982c..24140adc 100644
--- a/media/mpv/gen.rc
+++ b/media/mpv/gen.rc
@@ -38,9 +38,15 @@ deps=(\
rule versionhdr 'sh $srcdir/version.sh --cwd=$srcdir --versionh=$out'
build '$outdir'/version.h versionhdr '|' '$srcdir'/version.sh
+{
+ include 'toolchain/$host_toolchain.ninja'
+ exe file2string '$dir'/file2string.c
+} | sub tools.ninja
+
+rule file2string '$outdir/file2string $in >$out.tmp && mv $out.tmp $out'
+
fn file2string {
- build '$outdir'/$1 awk '$srcdir'/$2 '|' '$dir'/file2string.awk ; with\
- expr '-f $dir/file2string.awk'
+ build '$outdir'/$1 file2string '$srcdir'/$2 '|' '$outdir'/file2string
deps=($deps '$outdir'/$1)
}