From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED autolearn=no autolearn_force=no version=3.4.4 Received: (qmail 22789 invoked from network); 25 Sep 2021 08:58:52 -0000 Received: from bsd.lv (HELO mandoc.bsd.lv) (66.111.2.12) by inbox.vuxu.org with ESMTPUTF8; 25 Sep 2021 08:58:52 -0000 Received: from fantadrom.bsd.lv (localhost [127.0.0.1]) by mandoc.bsd.lv (OpenSMTPD) with ESMTP id cc656bbd for ; Sat, 25 Sep 2021 03:58:49 -0500 (EST) Received: from magnesium.8pit.net (magnesium.8pit.net [45.76.88.171]) by mandoc.bsd.lv (OpenSMTPD) with ESMTP id 0640ac8c for ; Sat, 25 Sep 2021 03:58:48 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=opensmtpd; bh=dJLV42JFcq KnNdrNqODs3xZ2iPUxdnzkduicjS8oJHQ=; h=from:subject:to:date; d=soeren-tempel.net; b=DQ+4/RWy58o4vJkvUUnSaFiRd+Tg/qBc8GlK6rWFMYXZ9Ps 7XFVGrjSljXyVhawXlVGW7sIfv6p+NgA9rsstdC+k2EvrjChbEDZ6W8545kAIFqB+y8nzp 6yIICx1adH9PJAHf5He5p8PKZrECiiMDXYs/X2MNkiR8iUVk6G6dvk= Received: from localhost (p200300f5ff094b00224256403b760017.dip0.t-ipconnect.de [2003:f5:ff09:4b00:2242:5640:3b76:17]) by magnesium.8pit.net (OpenSMTPD) with ESMTPSA id 151823c1 (TLSv1.3:AEAD-AES256-GCM-SHA384:256:YES) for ; Sat, 25 Sep 2021 10:58:46 +0200 (CEST) Date: Sat, 25 Sep 2021 10:58:40 +0200 To: tech@mandoc.bsd.lv Subject: [PATCH] Optionally allow building libmandoc as a shared library From: =?UTF-8?Q?S=C3=B6ren?= Tempel Message-Id: <2L1YC2WD8JUE5.3QGU3CQ10EGCD@8pit.net> X-Mailinglist: mandoc-tech Reply-To: tech@mandoc.bsd.lv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, While upgrading the Alpine mandoc aport to 1.14.6, I encountered a patch we are applying for mandoc which allows building libmandoc as a shared library. Alpine is also targeting constrained embedded systems and thus tries to reduce packages sizes whenever feasible. Building libmandoc as a shared library allows reducing the size of mandoc quite a bit as mandoc ships five binaries (mandoc, man.cgi, mandocd, catman, and demandoc) which use this library. At Alpine, we only package mandoc and demandoc and even which just two of the five binaries using a shared library reduces the package size by roughly 50% from 520 KiB to 1104 KiB. I cleaned up our patch a bit and made shared/static linking of libmandoc configurable via a STATIC_LIB configuration variable which is can be set in configure.local. By default, static linking continues to be used. STATIC_LIB!=3D1 implies dynamic linking, causes the code to be compiled with -fPIC, and forces INSTALL_LIBMANDOC=3D1. I understand that package sizes are not a priority in the common case, and that static linking is probably fine in most cases, but since the patch is relatively non-invasive I wanted to suggest it for upstream inclusion. No hard feelings if you are not interested in this patch, we can just continue applying it downstream in that case. On a side note, the patch links dynamically by just passing $(LIBMANDOC) (i.e. libmandoc.so) to the linker, this seems to work with GCC 10.X though using `-L. -lmandoc` instead might be more portable and will also work with libmandoc.a. Greetings, S=C3=B6ren diff -upr a/Makefile b/Makefile --- a/Makefile 2021-09-23 20:03:23.000000000 +0200 +++ b/Makefile 2021-09-24 16:42:21.890918029 +0200 @@ -392,7 +392,7 @@ distclean: clean rm -f Makefile.local config.h config.h.old config.log config.log.old =20 clean: - rm -f libmandoc.a $(LIBMANDOC_OBJS) $(ALL_COBJS) + rm -f $(LIBMANDOC) $(LIBMANDOC_OBJS) $(ALL_COBJS) rm -f mandoc man $(MAIN_OBJS) rm -f man.cgi $(CGI_OBJS) rm -f mandocd catman catman.o $(MANDOCD_OBJS) @@ -432,11 +432,11 @@ base-install: mandoc demandoc soelim $(INSTALL_MAN) makewhatis.8 \ $(DESTDIR)$(MANDIR)/man8/$(BINM_MAKEWHATIS).8 =20 -lib-install: libmandoc.a +lib-install: $(LIBMANDOC) mkdir -p $(DESTDIR)$(LIBDIR) mkdir -p $(DESTDIR)$(INCLUDEDIR) mkdir -p $(DESTDIR)$(MANDIR)/man3 - $(INSTALL_LIB) libmandoc.a $(DESTDIR)$(LIBDIR) + $(INSTALL_LIB) $(LIBMANDOC) $(DESTDIR)$(LIBDIR) $(INSTALL_LIB) eqn.h man.h mandoc.h mandoc_aux.h mandoc_parse.h \ mdoc.h roff.h tbl.h $(DESTDIR)$(INCLUDEDIR) $(INSTALL_MAN) mandoc.3 mandoc_escape.3 mandoc_malloc.3 \ @@ -514,24 +514,26 @@ Makefile.local config.h: configure $(TES =20 libmandoc.a: $(MANDOC_COBJS) $(LIBMANDOC_OBJS) $(AR) rs $@ $(MANDOC_COBJS) $(LIBMANDOC_OBJS) +libmandoc.so: $(MANDOC_COBJS) $(LIBMANDOC_OBJS) + $(CC) $(LDFLAGS) -shared -o $@ $(MANDOC_COBJS) $(LIBMANDOC_OBJS) $(LDADD)= =20 -mandoc: $(MAIN_OBJS) libmandoc.a - $(CC) -o $@ $(LDFLAGS) $(MAIN_OBJS) libmandoc.a $(LDADD) +mandoc: $(MAIN_OBJS) $(LIBMANDOC) + $(CC) -o $@ $(LDFLAGS) $(MAIN_OBJS) $(LIBMANDOC) $(LDADD) =20 man: mandoc $(LN) mandoc man =20 -man.cgi: $(CGI_OBJS) libmandoc.a - $(CC) $(STATIC) -o $@ $(LDFLAGS) $(CGI_OBJS) libmandoc.a $(LDADD) +man.cgi: $(CGI_OBJS) $(LIBMANDOC) + $(CC) $(STATIC) -o $@ $(LDFLAGS) $(CGI_OBJS) $(LIBMANDOC) $(LDADD) =20 -mandocd: $(MANDOCD_OBJS) libmandoc.a - $(CC) -o $@ $(LDFLAGS) $(MANDOCD_OBJS) libmandoc.a $(LDADD) +mandocd: $(MANDOCD_OBJS) $(LIBMANDOC) + $(CC) -o $@ $(LDFLAGS) $(MANDOCD_OBJS) $(LIBMANDOC) $(LDADD) =20 -catman: catman.o libmandoc.a - $(CC) -o $@ $(LDFLAGS) catman.o libmandoc.a $(LDADD) +catman: catman.o $(LIBMANDOC) + $(CC) -o $@ $(LDFLAGS) catman.o $(LIBMANDOC) $(LDADD) =20 -demandoc: $(DEMANDOC_OBJS) libmandoc.a - $(CC) -o $@ $(LDFLAGS) $(DEMANDOC_OBJS) libmandoc.a $(LDADD) +demandoc: $(DEMANDOC_OBJS) $(LIBMANDOC) + $(CC) -o $@ $(LDFLAGS) $(DEMANDOC_OBJS) $(LIBMANDOC) $(LDADD) =20 soelim: $(SOELIM_COBJS) soelim.o $(CC) -o $@ $(LDFLAGS) $(SOELIM_COBJS) soelim.o diff -upr a/configure b/configure --- a/configure 2021-09-23 20:03:23.000000000 +0200 +++ b/configure 2021-09-24 17:29:03.942587555 +0200 @@ -51,10 +51,12 @@ LD_NANOSLEEP=3D LD_OHASH=3D LD_RECVMSG=3D STATIC=3D +STATIC_LIB=3D1 =20 BUILD_CGI=3D0 BUILD_CATMAN=3D0 INSTALL_LIBMANDOC=3D0 +LIBMANDOC=3D =20 HAVE_ATTRIBUTE=3D HAVE_CMSG=3D @@ -276,6 +278,14 @@ elif [ ${HAVE_WFLAG} -eq 0 ]; then else CFLAGS=3D"${DEFCFLAGS}" fi +if [ "${STATIC_LIB}" -eq 1 ]; then + LIBMANDOC=3Dlibmandoc.a +else + CFLAGS=3D"${CFLAGS} -fPIC" + INSTALL_LIBMANDOC=3D1 + LIBMANDOC=3Dlibmandoc.so +=09 +fi echo "selected CFLAGS=3D\"${CFLAGS}\"" 1>&2 echo "selected CFLAGS=3D\"${CFLAGS}\"" 1>&3 echo 1>&3 @@ -649,6 +659,7 @@ SBINDIR =3D ${SBINDIR} BIN_FROM_SBIN =3D ${BIN_FROM_SBIN} INCLUDEDIR =3D ${INCLUDEDIR} LIBDIR =3D ${LIBDIR} +LIBMANDOC =3D ${LIBMANDOC} MANDIR =3D ${MANDIR} WWWPREFIX =3D ${WWWPREFIX} HTDOCDIR =3D ${HTDOCDIR} -- To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv