Fixup fromcvs/togit conversion
[minix-pkgsrc.git] / mk / check / check-shlibs.mk
blobe9531eaf57cfbccb464a1f77c8cb6feb1b043830
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
4 # at run-time.
6 # User-settable variables:
8 # CHECK_SHLIBS
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.
18 # Default value: yes
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"
26 CHECK_SHLIBS?= yes
27 .endif
28 CHECK_SHLIBS?= 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"; \
37 done)
39 .if !empty(CHECK_SHLIBS:M[Yy][Ee][Ss]) && \
40 !empty(CHECK_SHLIBS_SUPPORTED:M[Yy][Ee][Ss])
41 privileged-install-hook: _check-shlibs
42 .endif
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}
53 . endif
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}
59 ${RUN} \
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}
65 .else
66 . if ${_USE_DESTDIR} != "no"
67 _check-shlibs: error-check .PHONY
68 @${WARNING_MSG} "Skipping missing run-time search-path check in DESTDIR mode."
69 . else
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}
73 ${RUN} \
74 exec 1>${ERROR_DIR}/${.TARGET}; \
75 case ${LDD:Q}"" in \
76 "") ldd=`${TYPE} ldd 2>/dev/null | ${AWK} '{ print $$NF }'` ;; \
77 *) ldd=${LDD:Q} ;; \
78 esac; \
79 ${TEST} -x "$$ldd" || exit 0; \
80 cd ${DESTDIR}${PREFIX}; \
81 ${_CHECK_SHLIBS_FILELIST_CMD} | \
82 ${EGREP} -h ${_CHECK_SHLIBS_ERE:Q} | \
83 while read file; do \
84 err=`$$ldd $$file 2>&1 | ${GREP} "not found" || ${TRUE}`; \
85 ${TEST} -z "$$err" || ${ECHO} "${DESTDIR}${PREFIX}/$$file: $$err"; \
86 done
87 ${RUN} \
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; \
95 . endif
96 .endif