From aa51adcfc9a79c606aa4435dc64dd5f160efbde1 Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 20 Sep 2026 20:58:10 +0000 Subject: Start working on migrating to autoconf/automake instead of cmake FossilOrigin-Name: d870487495106763d2a4e416f1ddbf4c795081a6b77100d34063591e385692e0 --- src/Makefile.am | 4 ++++ src/bin/Makefile.am | 8 ++++++++ src/include/Makefile.am | 2 ++ src/include/aplwc_macros.h | 2 ++ src/lib/Makefile.am | 13 +++++++++++++ src/tools/Makefile.am | 10 ++++++++++ src/tools/genboot.c | 25 +++++++++++++++++++++++++ 7 files changed, 64 insertions(+) create mode 100644 src/Makefile.am create mode 100644 src/bin/Makefile.am create mode 100644 src/include/Makefile.am create mode 100644 src/lib/Makefile.am create mode 100644 src/tools/Makefile.am create mode 100644 src/tools/genboot.c (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..1e7e4e2 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,4 @@ +include src/bin/Makefile.am +include src/include/Makefile.am +include src/lib/Makefile.am +include src/tools/Makefile.am diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am new file mode 100644 index 0000000..bc25fbb --- /dev/null +++ b/src/bin/Makefile.am @@ -0,0 +1,8 @@ +bin_PROGRAMS += aplwc + +aplwc_SOURCES = \ + src/bin/aplwc_repl.h \ + src/bin/main.c \ + src/bin/util.c + +aplwc_LDADD = libaplwc.a diff --git a/src/include/Makefile.am b/src/include/Makefile.am new file mode 100644 index 0000000..3f082fb --- /dev/null +++ b/src/include/Makefile.am @@ -0,0 +1,2 @@ +include_HEADERS += src/include/aplwc.h +noinst_HEADERS += src/include/aplwc_macros.h diff --git a/src/include/aplwc_macros.h b/src/include/aplwc_macros.h index 80ada28..3c8aa6b 100644 --- a/src/include/aplwc_macros.h +++ b/src/include/aplwc_macros.h @@ -20,6 +20,8 @@ #ifndef APLWC_MACROS_H #define APLWC_MACROS_H +#include + #define UNUSED_PARAMETER(arg) ((void)arg) #define NELEM(x) (sizeof(x)/sizeof(x[0])) diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am new file mode 100644 index 0000000..c95fe1c --- /dev/null +++ b/src/lib/Makefile.am @@ -0,0 +1,13 @@ +lib_LIBRARIES += libaplwc.a + +libaplwc_a_SOURCES = \ + src/lib/aplwc_internal.h \ + src/lib/eval.c \ + src/lib/main.c \ + src/lib/memory.c \ + src/lib/module.c \ + src/lib/string.c \ + src/lib/symtab.c \ + src/lib/syntax.c + +EXTRA_DIST += src/lib/boot.aplwc diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am new file mode 100644 index 0000000..b1079e7 --- /dev/null +++ b/src/tools/Makefile.am @@ -0,0 +1,10 @@ +noinst_PROGRAMS += genboot + +genboot_SOURCES = src/tools/genboot.c + +BUILT_SOURCES += $(top_builddir)/generated/boot.h +CLEANFILES += $(top_builddir)/generated/boot.h + +$(top_builddir)/generated/boot.h: genboot src/lib/boot.aplwc + $(MKDIR_P) $(top_builddir)/generated + ./genboot $(top_srcdir)/src/lib/boot.aplwc > $@ diff --git a/src/tools/genboot.c b/src/tools/genboot.c new file mode 100644 index 0000000..6f2e408 --- /dev/null +++ b/src/tools/genboot.c @@ -0,0 +1,25 @@ +#include +#include + +int +main(int argc, char *argv[]) +{ + assert(argc == 2); + FILE *f = fopen(argv[1], "r"); + assert(f != NULL); + + printf("unsigned char boot_src[] = { "); + + int c; + int s = 0; + while((c = fgetc(f)) != EOF){ + if(s++ > 0) + printf(", "); + printf("0x%02x", c); + } + + printf(" };\n"); + printf("unsigned int boot_src_len = %d;\n", s); + + return 0; +} -- cgit v1.2.3 From ea381bac43f3ce78be5fa3ea10810810670dfb89 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 22 Sep 2026 18:26:55 +0000 Subject: Check for flexible array member support via autoconf FossilOrigin-Name: 4d8f080ee14f63ea5cb2c0aa87be1519e7b74e3c42de2370e90ae1e1f9268cd0 --- src/lib/aplwc_internal.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lib/aplwc_internal.h b/src/lib/aplwc_internal.h index 328b5de..8c13dfe 100644 --- a/src/lib/aplwc_internal.h +++ b/src/lib/aplwc_internal.h @@ -67,7 +67,7 @@ struct aplwc_line { struct string { size_t bytes; size_t chars; - uint8_t utf8[1]; + uint8_t utf8[FLEXIBLE_ARRAY_MEMBER]; }; enum token_tag { @@ -100,7 +100,7 @@ struct token { struct token_list { struct string *text; size_t length; - struct token tokens[1]; + struct token tokens[FLEXIBLE_ARRAY_MEMBER]; }; enum value_tag { -- cgit v1.2.3 From 949896e24ef16d703ee07fb3e489f2a986050d5b Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 22 Sep 2026 19:18:35 +0000 Subject: Final changes to be able to switch over to an autotools based setup FossilOrigin-Name: 6a01b406226d3f60ea7d86fc177296f8e0a6c1e0816264bac807e30d78edbf21 --- src/lib/memory.c | 46 +++++++++++++++++++++++++--------------------- src/lib/module.c | 1 + src/lib/syntax.c | 1 + src/tools/genboot.c | 8 +++++--- 4 files changed, 32 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/lib/memory.c b/src/lib/memory.c index 051acba..a8317c7 100644 --- a/src/lib/memory.c +++ b/src/lib/memory.c @@ -41,7 +41,9 @@ struct chunk { unsigned int last:1; }; +#if APLWC_BUILD_TYPE_DEBUG static void debug_check_mem(struct aplwc *); +#endif /* APLWC_BUILD_TYPE_DEBUG */ void memory_init(struct aplwc *aplwc) @@ -436,27 +438,6 @@ compact(struct aplwc *aplwc) } } -static void -debug_check_mem(struct aplwc *aplwc) -{ - uint64_t size; - struct chunk *c, *prev; - - size = 0; - prev = NULL; - for(c = (struct chunk *)aplwc->data; c; prev = c, c = next(c)){ - assert(((uint8_t*)c) < (aplwc->data+aplwc->size)); - assert((c->size % ALIGNMENT) == 0); - assert(c->stack == NULL); - size += c->size; - assert((c->last == 0) != (size == aplwc->size)); - if(c->tag == CHUNK_TAG_FREE) - assert((prev == NULL) || (prev->tag != CHUNK_TAG_FREE)); - } - - assert(size == aplwc->size); -} - static void * alloc(struct aplwc *aplwc, size_t size, enum chunk_tag tag) { @@ -653,3 +634,26 @@ valid_ref(struct aplwc_ref *ref) { return (ref->aplwc != NULL) && (ref->ptr != NULL); } + +#if APLWC_BUILD_TYPE_DEBUG +static void +debug_check_mem(struct aplwc *aplwc) +{ + uint64_t size; + struct chunk *c, *prev; + + size = 0; + prev = NULL; + for(c = (struct chunk *)aplwc->data; c; prev = c, c = next(c)){ + assert(((uint8_t*)c) < (aplwc->data+aplwc->size)); + assert((c->size % ALIGNMENT) == 0); + assert(c->stack == NULL); + size += c->size; + assert((c->last == 0) != (size == aplwc->size)); + if(c->tag == CHUNK_TAG_FREE) + assert((prev == NULL) || (prev->tag != CHUNK_TAG_FREE)); + } + + assert(size == aplwc->size); +} +#endif /* APLWC_BUILD_TYPE_DEBUG */ diff --git a/src/lib/module.c b/src/lib/module.c index 2ef5ba3..aaa9634 100644 --- a/src/lib/module.c +++ b/src/lib/module.c @@ -67,6 +67,7 @@ read_keyword_decl(struct aplwc *aplwc, struct aplwc_module *module, size_t offse max = module->tokens->length - offset - 1; + len = -1; assert(t(0).tag == TOKEN_TAG_KEYWORD); switch(t(0).data.keyword){ case KW_MODULE: diff --git a/src/lib/syntax.c b/src/lib/syntax.c index 4850b1a..1740a4e 100644 --- a/src/lib/syntax.c +++ b/src/lib/syntax.c @@ -425,6 +425,7 @@ scan_string(struct aplwc *aplwc, struct string *text, int oneline) MEMPTR(0, text); tokens = NULL; + n = 0; if((rc = check(aplwc, text, &n)) != APLWC_OK) goto end; diff --git a/src/tools/genboot.c b/src/tools/genboot.c index 6f2e408..e89b3aa 100644 --- a/src/tools/genboot.c +++ b/src/tools/genboot.c @@ -4,14 +4,16 @@ int main(int argc, char *argv[]) { + FILE *f; + int c, s; + assert(argc == 2); - FILE *f = fopen(argv[1], "r"); + f = fopen(argv[1], "r"); assert(f != NULL); printf("unsigned char boot_src[] = { "); - int c; - int s = 0; + s = 0; while((c = fgetc(f)) != EOF){ if(s++ > 0) printf(", "); -- cgit v1.2.3