From 513c13ac31d6d02ff7ef5af7b176800595ff6531 Mon Sep 17 00:00:00 2001 From: Richard PALO Date: Sat, 27 Feb 2016 12:01:35 +0100 Subject: support elfdump in check-shlibs-elf.mk diff --git a/mk/check/check-shlibs-elf.awk b/mk/check/check-shlibs-elf.awk index ad6d2f9..0ab3e8e 100644 --- a/mk/check/check-shlibs-elf.awk +++ b/mk/check/check-shlibs-elf.awk @@ -102,20 +102,30 @@ function check_pkg(DSO, pkg, found) { } function checkshlib(DSO, needed, rpath, found, dso_rpath, got_rpath, nrpath) { - cmd = readelf " -Wd " shquote(DSO) " 2> /dev/null" + if (elfdump != "") + cmd = elfdump " -d " shquote(DSO) " 2> /dev/null" + else + cmd = readelf " -Wd " shquote(DSO) " 2> /dev/null" + got_rpath = 0 while ((cmd | getline) > 0) { - if ($2 == "(RPATH)" || $2 == "(RUNPATH)") { - sub("^[[:space:]]*0[xX][[:xdigit:]]+[[:space:]]+\\(RU?N?PATH\\)[[:space:]]+Library ru?n?path: \\[", "") - dso_rpath = substr($0, 1, length($0) - 1) + if (!got_rpath && $2 ~ "RU?N?PATH") { + if (NF == 5) #readelf has paths enclosed in [] + gsub("^[[:space:]]*0[xX][[:xdigit:]]+[[:space:]]+\\(RU?N?PATH\\)[[:space:]]+Library ru?n?path: \\[|\\]", "") + else # NF == 4 elfdump doesn't + sub("^[[:space:]]*\\[[[:digit:]]+\\][[:space:]]+RU?N?PATH[[:space:]]+0[xX][[:xdigit:]]+[[:space:]]+","") + dso_rpath = $0 if (length(system_rpath) > 0) nrpath = split(dso_rpath ":" system_rpath, rpath, ":") else nrpath = split(dso_rpath, rpath, ":") got_rpath = 1 } - if ($2 == "(NEEDED)") { - sub("^[[:space:]]*0[xX][[:xdigit:]]+[[:space:]]+\\(NEEDED\\)[[:space:]]+Shared library: \\[", "") - needed[substr($0, 1, length($0) - 1)] = "" + if ($2 ~ "NEEDED") { + if (NF == 5) # readelf + gsub("^[[:space:]]*0[xX][[:xdigit:]]+[[:space:]]+\\(NEEDED\\)[[:space:]]+Shared library: \\[|\\]", "") + else # NF == 4 elfdump + sub("^[[:space:]]*\\[[[:digit:]]+\\][[:space:]]+NEEDED[[:space:]]+0[xX][[:xdigit:]]+[[:space:]]+","") + needed[$0] = "" } } if (!got_rpath) @@ -166,11 +176,12 @@ BEGIN { cross_destdir = ENVIRON["CROSS_DESTDIR"] destdir = ENVIRON["DESTDIR"] readelf = ENVIRON["READELF"] + elfdump = ENVIRON["ELFDUMP"] wrkdir = ENVIRON["WRKDIR"] extradirs = ENVIRON["CHECK_WRKREF_EXTRA_DIRS"] pkg_info_cmd = ENVIRON["PKG_INFO_CMD"] depends_file = ENVIRON["DEPENDS_FILE"] - if (readelf == "") + if (readelf == "" && elfdump == "") readelf = "readelf" } diff --git a/mk/check/check-shlibs.mk b/mk/check/check-shlibs.mk index 68431fd..50d7424 100644 --- a/mk/check/check-shlibs.mk +++ b/mk/check/check-shlibs.mk @@ -53,10 +53,14 @@ privileged-install-hook: _check-shlibs .if ${_USE_CHECK_SHLIBS_NATIVE} == "yes" CHECK_SHLIBS_NATIVE_ENV= . if ${OBJECT_FMT} == "ELF" -USE_TOOLS+= readelf +. if !empty(TOOLS_PLATFORM.elfdump:U) +CHECK_SHLIBS_NATIVE_ENV+= ELFDUMP=${TOOLS_PLATFORM.elfdump:Q} +. endif +. if !empty(TOOLS_PLATFORM.readelf:U) +CHECK_SHLIBS_NATIVE_ENV+= READELF=${TOOLS_PLATFORM.readelf:Q} +. endif CHECK_SHLIBS_NATIVE= ${PKGSRCDIR}/mk/check/check-shlibs-elf.awk CHECK_SHLIBS_NATIVE_ENV+= PLATFORM_RPATH=${_OPSYS_SYSTEM_RPATH:Q} -CHECK_SHLIBS_NATIVE_ENV+= READELF=${TOOLS_PATH.readelf:Q} . elif ${OBJECT_FMT} == "Mach-O" CHECK_SHLIBS_NATIVE= ${PKGSRCDIR}/mk/check/check-shlibs-macho.awk . endif diff --git a/mk/tools/tools.SunOS.mk b/mk/tools/tools.SunOS.mk index cb813b6..f42ed28 100644 --- a/mk/tools/tools.SunOS.mk +++ b/mk/tools/tools.SunOS.mk @@ -34,6 +34,11 @@ TOOLS_PLATFORM.cut?= /usr/bin/cut TOOLS_PLATFORM.date?= /usr/xpg4/bin/date TOOLS_PLATFORM.dirname?= /usr/bin/dirname TOOLS_PLATFORM.echo?= echo # shell builtin +.if exists(/usr/bin/elfdump) +TOOLS_PLATFORM.elfdump?= /usr/bin/elfdump +.elif exists(/usr/ccs/bin/elfdump) +TOOLS_PLATFORM.elfdump?= /usr/ccs/bin/elfdump +.endif TOOLS_PLATFORM.grep?= /usr/xpg4/bin/grep TOOLS_PLATFORM.egrep?= /usr/xpg4/bin/grep -E TOOLS_PLATFORM.fgrep?= /usr/xpg4/bin/grep -F