From f015ed90ef10b6441ebea1eeea6b674292b2a409 Mon Sep 17 00:00:00 2001 From: deischen Date: Thu, 16 Mar 2006 15:12:26 +0000 Subject: Teach bsd.lib.mk to auto generate a version map file based on a set of symbol definitions (VERSION_DEF) and symbol mappings (SYMBOL_MAPS). Add an awk script to generate the version map. Suggested by: ru Helped by: ru Reviewed by: ru --- share/mk/bsd.lib.mk | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'share/mk/bsd.lib.mk') diff --git a/share/mk/bsd.lib.mk b/share/mk/bsd.lib.mk index c60c133..02f1d46 100644 --- a/share/mk/bsd.lib.mk +++ b/share/mk/bsd.lib.mk @@ -99,6 +99,46 @@ PO_FLAG=-pg all: objwarn +# Generate the version map given the version definitions +# and symbol maps. +.if !empty(VERSION_DEF) && !empty(SYMBOL_MAPS) +# Find the awk script that generates the version map. +VERSION_GEN?= version_gen.awk +VERSION_MAP?= Version.map + +# Compute the make's -m path. +_mpath= +_oarg= +.for _arg in ${.MAKEFLAGS} +.if ${_oarg} == "-m" +_mpath+= ${_arg} +.endif +_oarg= ${_arg} +.endfor +_mpath+= /usr/share/mk + +# Look up ${VERSION_GEN} in ${_mpath}. +_vgen= +.for path in ${_mpath} +.if empty(_vgen) +.if exists(${path}/${VERSION_GEN}) +_vgen= ${path}/${VERSION_GEN} +.endif +.endif +.endfor + +${VERSION_MAP}: + awk -v vfile=${VERSION_DEF} -f ${_vgen} ${SYMBOL_MAPS} \ + > ${.TARGET} +.endif # !empty(VERSION_DEF) && !empty(SYMBOL_MAPS) + +# Allow librararies to specify their own version map or have it +# automatically generated (see above). +.if !empty(VERSION_MAP) +${SHLIB_NAME}: ${VERSION_MAP} +LDFLAGS+= -Wl,--version-script=${VERSION_MAP} +.endif + .if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) OBJS+= ${SRCS:N*.h:R:S/$/.o/} .endif -- cgit v1.1