1 # $NetBSD: check-shlibs.mk,v 1.21 2012/07/02 14:53:13 joerg Exp $
3 # This file verifies that all libraries used by the package can be found
6 # User-settable variables:
9 # Whether the check should be enabled or not.
11 # Default value: "yes" for PKG_DEVELOPERs, "no" otherwise.
13 # Package-settable variables:
15 # CHECK_SHLIBS_SUPPORTED
16 # Whether the check should be enabled for this package or not.
21 _VARGROUPS
+= check-shlibs
22 _USER_VARS.check-shlibs
= CHECK_SHLIBS
23 _PKG_VARS.check-shlibs
= CHECK_SHLIBS_SUPPORTED
25 .if defined
(PKG_DEVELOPER
) && ${PKG_DEVELOPER} != "no"
29 CHECK_SHLIBS_SUPPORTED?
= yes
31 # All binaries and shared libraries.
32 _CHECK_SHLIBS_ERE
= (bin
/|sbin
/|libexec
/|\.so
$$|lib
/lib.
*\.so|lib
/lib.
*\.dylib|lib
/lib.
*\.sl
)
34 _CHECK_SHLIBS_FILELIST_CMD?
= ${SED} -e
'/^@/d' ${PLIST} | \
35 (while read file
; do \
36 ${TEST} -h
"$$file" ||
${ECHO} "$$file"; \
39 .if
!empty
(CHECK_SHLIBS
:M
[Yy
][Ee
][Ss
]) && \
40 !empty
(CHECK_SHLIBS_SUPPORTED
:M
[Yy
][Ee
][Ss
])
41 privileged-install-hook
: _check-shlibs
44 .if
!empty
(USE_CHECK_SHLIBS_ELF
:M
[yY
][eE
][sS
])
45 CHECK_SHLIBS_ELF
= ${PKGSRCDIR}/mk
/check/check-shlibs-elf.awk
46 CHECK_SHLIBS_ELF_ENV
= PLATFORM_RPATH
=${_OPSYS_SYSTEM_RPATH
:Q
}
47 CHECK_SHLIBS_ELF_ENV
+= READELF
=${TOOLS_PATH.readelf
:Q
}
48 CHECK_SHLIBS_ELF_ENV
+= CROSS_DESTDIR
=${_CROSS_DESTDIR
:Q
}
49 CHECK_SHLIBS_ELF_ENV
+= PKG_INFO_CMD
=${PKG_INFO
:Q
}
50 CHECK_SHLIBS_ELF_ENV
+= DEPENDS_FILE
=${_RRDEPENDS_FILE
:Q
}
51 . if
${_USE_DESTDIR} != "no"
52 CHECK_SHLIBS_ELF_ENV
+= DESTDIR
=${DESTDIR
:Q
}
54 CHECK_SHLIBS_ELF_ENV
+= WRKDIR
=${WRKDIR
:Q
}
56 _check-shlibs
: error-check .PHONY
57 @
${STEP_MSG} "Checking for missing run-time search paths in ${PKGNAME}"
58 ${RUN} rm -f
${ERROR_DIR}/${.TARGET
}
60 cd
${DESTDIR
:Q
}${PREFIX
:Q
}; \
61 ${_CHECK_SHLIBS_FILELIST_CMD} | \
62 ${EGREP} -h
${_CHECK_SHLIBS_ERE
:Q
} | \
63 ${PKGSRC_SETENV} ${CHECK_SHLIBS_ELF_ENV} ${AWK} -f
${CHECK_SHLIBS_ELF} > ${ERROR_DIR}/${.TARGET
}
66 . if
${_USE_DESTDIR} != "no"
67 _check-shlibs
: error-check .PHONY
68 @
${WARNING_MSG} "Skipping missing run-time search-path check in DESTDIR mode."
70 _check-shlibs
: error-check .PHONY
71 @
${STEP_MSG} "Checking for missing run-time search paths in ${PKGNAME}"
72 ${RUN} rm -f
${ERROR_DIR}/${.TARGET
}
74 exec
1>${ERROR_DIR}/${.TARGET
}; \
76 "") ldd
=`${TYPE} ldd 2>/dev/null | ${AWK} '{ print $$NF }'` ;; \
79 ${TEST} -x
"$$ldd" || exit
0; \
80 cd
${DESTDIR}${PREFIX}; \
81 ${_CHECK_SHLIBS_FILELIST_CMD} | \
82 ${EGREP} -h
${_CHECK_SHLIBS_ERE
:Q
} | \
84 err
=`$$ldd $$file 2>&1 | ${GREP} "not found" || ${TRUE}`; \
85 ${TEST} -z
"$$err" ||
${ECHO} "${DESTDIR}${PREFIX}/$$file: $$err"; \
88 exec
1>>${ERROR_DIR}/${.TARGET
}; \
89 if
${_NONZERO_FILESIZE_P} ${ERROR_DIR}/${.TARGET
}; then \
90 ${ECHO} "*** The programs/libs shown above will not find the listed"; \
91 ${ECHO} " shared libraries at runtime."; \
92 ${ECHO} " Please fix the package (add -Wl,-R.../lib in the right places)!"; \
93 ${SHCOMMENT} Might not error-out for non-pkg-developers
; \