From: Omar Polo Subject: Re: portable: building template/ as subproject To: Omar Polo Cc: gameoftrees@openbsd.org Date: Fri, 06 Jan 2023 11:45:47 +0100 On 2023/01/06 11:27:55 +0100, Omar Polo wrote: > template is only needed at compile-time to generate sources, much like > yacc, and so may causes issues with cross-compiling (for example void > linux builds packages for some arches this way.) > > This moves the template/ as subproject. A subproject means that it > has its own (small) configure.ac, but is still hooked in the top-level > Makefile.am and partecipate in the various build phases as normal > (build, clean, dist, ...). The ad-hoc configure.ac however makes it > possible to further customize parts of the build that would be > difficult, if not impossible, using automake alone. the fact that it has its own configure doesn't mean the building is different. The top-level configure automatically calls the sub-configure passing the args, it's completely transparent for users. > On a similar note, I think we may consider the same approach for > gotwebd too. It could provide a way to re-build the libexec helpers > with different flags (e.g. -static) and install them in a separate > directory (chroot_DIR?) Well, something to think on at least :) > > The following diff survived several `make distclean && ./configure && > make` and also a build from a distribution tarball. slighly better diff. I've tested it with musl which have err(3) in built-in. updated diff should fix also for who lacks it. diff refs/remotes/origin/linux refs/heads/linux commit - 171ba12ab63aed9e931bbea0d93d1755d4848e1b commit + 48c012b39ca70e4daeaf5269c63b5931c99be262 blob - /dev/null blob + cb22b6f52cad3fa05f5724b548c6977192539497 (mode 644) --- /dev/null +++ compat/err.c @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include +#include +#include + +static void vwarn_impl(const char*, va_list); +static void vwarnx_impl(const char*, va_list); + +static void +vwarn_impl(const char *fmt, va_list ap) +{ + fprintf(stderr, "%s: ", getprogname()); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ": %s\n", strerror(errno)); +} + +static void +vwarnx_impl(const char *fmt, va_list ap) +{ + fprintf(stderr, "%s: ", getprogname()); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); +} + +void +err(int ret, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vwarn_impl(fmt, ap); + va_end(ap); + exit(ret); +} + +void +errx(int ret, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vwarnx_impl(fmt, ap); + va_end(ap); + exit(ret); +} + +void +warn(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vwarn_impl(fmt, ap); + va_end(ap); +} + +void +warnx(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vwarnx_impl(fmt, ap); + va_end(ap); +} blob - 5cbed704667c0074ac83e8335515f5a52f564c63 blob + fc6aa5bb292d5c65b34f1f624f92a5b7a13ee5ad --- configure.ac +++ configure.ac @@ -15,6 +15,8 @@ AC_CANONICAL_HOST AC_USE_SYSTEM_EXTENSIONS AC_CANONICAL_HOST +AC_CONFIG_SUBDIRS([template]) + # When CFLAGS isn't set at this stage and gcc is detected by the macro below, # autoconf will automatically use CFLAGS="-O2 -g". Prevent that by using an # empty default. @@ -685,7 +687,6 @@ AC_CONFIG_FILES([Makefile got/Makefile gotadmin/Makefile gotwebd/Makefile - template/Makefile tog/Makefile Makefile.common:Makefile.common.in]) AC_OUTPUT blob - 3044a18a6e2658e4cdeacda423f6eba7db986eba blob + 7326e919140a80d6c9be0dd108007b438baf0915 --- template/Makefile.am +++ template/Makefile.am @@ -1,13 +1,7 @@ noinst_PROGRAMS = template -include $(top_builddir)/Makefile.common - template_SOURCES = template.c \ - parse.y + parse.y \ + got_compat.h -template_DEPENDENCIES = $(top_builddir)/compat/libopenbsd-compat.a - -LDADD = -L$(top_builddir)/compat -lopenbsd-compat -lpthread -lm -if HOST_FREEBSD -LDADD += -lmd -endif +LDADD = $(LIBOBJS) blob - /dev/null blob + 2a53fd48a7cfe237a85e23235ab7739c274645d0 (mode 644) --- /dev/null +++ template/configure.ac @@ -0,0 +1,26 @@ +AC_INIT([template], 0.1, [op@openbsd.org]) +AC_CONFIG_LIBOBJ_DIR(../compat) +AM_INIT_AUTOMAKE([-Wall foreign subdir-objects]) + +AC_ARG_VAR(HOSTCC, [The C compiler on the host.]) +AC_ARG_VAR(HOSTCFLAGS, [CFLAGS for the host compiler]) + +test -n "$HOSTCC" && export CC="$HOSTCC" +test -n "$HOSTCFLAGS" && export CFLAGS="$HOSTCFLAGS" + +AC_PROG_CC +AC_PROG_YACC + +AC_REPLACE_FUNCS([ + asprintf \ + err \ + getprogname \ + reallocarray \ +]) + +AC_CHECK_DECL([TAILQ_REMOVE], [], + [AC_MSG_ERROR("*** sys/queue.h is missing key defines ***")], + [#include ]) + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT blob - /dev/null blob + facdad892db998b365c3fa62cacadbda3d5f3f6d (mode 644) --- /dev/null +++ template/got_compat.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2022 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef COMPAT_H +#define COMPAT_H + +#ifndef __OpenBSD__ +#define pledge(s, p) (0) +#define unveil(s, p) (0) +#endif + +#ifndef __dead +#define __dead __attribute__((__noreturn__)) +#endif + +#ifndef HAVE_ASPRINTF +int asprintf(char **, const char *, ...); +#endif + +#ifndef HAVE_ERR +__dead void err(int, const char *, ...); +__dead void errx(int, const char *, ...); +void warn(const char *, ...); +void warnx(const char *, ...); +#else +# include +#endif + +#ifndef HAVE_GETPROGNAME +const char *getprogname(void); +#endif + +#ifndef HAVE_REALLOCARRAY +void *reallocarray(void *, size_t, size_t); +#endif + +#endif blob - 0c5031c03e0b09bc23862db57030475dcd114da4 blob + 5ef632aa276741156a37a4dee515535102bad542 --- template/template.c +++ template/template.c @@ -14,7 +14,6 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include #include #include #include