Fix overlinking in base aka import pkgconf
Baptiste Daroussin
bapt at FreeBSD.org
Fri Dec 14 23:54:24 UTC 2012
Hi,
Some of our binary are overlinked, the way we handle the linking doesn't help
for that.
On proposition could be to use pkgconf https://github.com/pkgconf/pkgconf which
is BSD license pkg-config implementation 100% compatible with pkg-config.
What I propose is to create a new PCADD variable for the Makefiles.
PCADD will invoke pkgconf to gather the libraries and the cflags for a given
project.
The second thing would be to create .pc files for all of our libraries.
for example:
usr.bin/fstat dynamic build is overlinked
With the following simple patch we can solve the problem:
Index: Makefile
===================================================================
--- Makefile (revision 243899)
+++ Makefile (working copy)
@@ -5,7 +5,7 @@
SRCS= fstat.c fuser.c main.c
LINKS= ${BINDIR}/fstat ${BINDIR}/fuser
DPADD= ${LIBKVM} ${LIBUTIL} ${LIBPROCSTAT}
-LDADD= -lkvm -lutil -lprocstat
+PCADD= procstat
MAN1= fuser.1 fstat.1
This requires the following .pc files quick and dirty ones:
- util.pc:
prefix=/usr
libdir=${prefix}/lib
includedir=${prefix}/include
Name: util
Libs: -L${libdir} -lutil
Cflags: -I${includedir}
- kvm.pc:
prefix=/usr
libdir=${prefix}/lib
includedir=${prefix}/include
Name: kvm
Libs: -L${libdir} -lkvm
Cflags: -I${includedir}
- procstat.pc:
prefix=/usr
libdir=${prefix}/lib
includedir=${prefix}/include
Name: procstat
Requires.private: kvm util
Libs: -L${libdir} -lprocstat
Cflags: -I${includedir}
The quick and dirty patch for our framework is:
Index: bsd.prog.mk
===================================================================
--- bsd.prog.mk (revision 243899)
+++ bsd.prog.mk (working copy)
@@ -36,6 +36,18 @@
LDFLAGS+= -static
.endif
+.if defined(PCADD)
+PCFLAGS!= ${PKGCONF} --cflags ${PCADD}
+.if defined(NO_SHARED) && (${NO_SHARED} != "no" && ${NO_SHARED} != "NO")
+PCLIBS!= ${PKGCONF} --libs --static ${PCADD}
+.else
+PCLIBS!= ${PKGCONF} --libs ${PCADD}
+.endif
+CFLAGS+= ${PCFLAGS}
+CXXFLAGS+= ${PCFLAGS}
+LDADD+= ${PCLIBS}
+.endif
+
.if defined(PROG_CXX)
PROG= ${PROG_CXX}
.endif
Index: sys.mk
===================================================================
--- sys.mk (revision 243899)
+++ sys.mk (working copy)
@@ -137,6 +137,8 @@
PC ?= pc
PFLAGS ?=
+PKGCONF ?= pkgconf
+
RC ?= f77
RFLAGS ?=
Of course a lot of work is needed to get something really well integrated but
I wanted feedback first before working on anything like this :)
regards,
Bapt
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20121215/405e9fcf/attachment.sig>
More information about the freebsd-hackers
mailing list