View | Details | Raw Unified | Return to bug 195203 | Differences between
and this patch

Collapse All | Expand All

(-)Mk/bsd.port.mk (-1 / +9 lines)
Lines 4848-4853 Link Here
4848
		${PKG_QUERY} "\"%n\": {origin: %o, version: \"%v\"}" " " ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,:C,${PORTSDIR}/,,} 2>/dev/null || : ; \
4848
		${PKG_QUERY} "\"%n\": {origin: %o, version: \"%v\"}" " " ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,:C,${PORTSDIR}/,,} 2>/dev/null || : ; \
4849
	fi
4849
	fi
4850
4850
4851
ACTUAL-PACKAGE-DEPENDS-NAMES?= \
4852
	if [ "${_LIB_RUN_DEPENDS}" != "  " ]; then \
4853
		${PKG_QUERY} "%n-%v" " " ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,:C,${PORTSDIR}/,,} 2>/dev/null || : ; \
4854
	fi
4855
4851
create-manifest:
4856
create-manifest:
4852
	@${MKDIR} ${METADIR}; \
4857
	@${MKDIR} ${METADIR}; \
4853
	(\
4858
	(\
Lines 4919-4924 Link Here
4919
actual-package-depends:
4924
actual-package-depends:
4920
	@${ACTUAL-PACKAGE-DEPENDS}
4925
	@${ACTUAL-PACKAGE-DEPENDS}
4921
4926
4927
actual-package-depends-names:
4928
	@${ACTUAL-PACKAGE-DEPENDS-NAMES}
4929
4922
# Build packages for port and dependencies
4930
# Build packages for port and dependencies
4923
4931
4924
package-recursive: package
4932
package-recursive: package
Lines 5298-5304 Link Here
5298
.if !target(stage-qa)
5306
.if !target(stage-qa)
5299
stage-qa:
5307
stage-qa:
5300
	@${ECHO_MSG} "====> Running Q/A tests (stage-qa)"
5308
	@${ECHO_MSG} "====> Running Q/A tests (stage-qa)"
5301
	@${SETENV} ${QA_ENV} ${SH} ${SCRIPTSDIR}/qa.sh
5309
	@${SETENV} ${QA_ENV} ${SH} ${SCRIPTSDIR}/qa.sh "${PKGBASE}-${PKGVERSION}" "`${ACTUAL-PACKAGE-DEPENDS-NAMES}`"
5302
.endif
5310
.endif
5303
5311
5304
# Fake installation of package so that user can pkg delete it later.
5312
# Fake installation of package so that user can pkg delete it later.
(-)Mk/Scripts/qa.sh (-1 / +95 lines)
Lines 7-12 Link Here
7
	exit 1
7
	exit 1
8
fi
8
fi
9
9
10
usage () {
11
	echo "usage: $0 pkg-name pkg-deps"
12
	exit 1
13
}
14
15
[ "$#" -eq 2 ] || usage
16
17
PKG_NAME=$1
18
PKG_DEPS=$2
19
10
LF=$(printf '\nX')
20
LF=$(printf '\nX')
11
LF=${LF%X}
21
LF=${LF%X}
12
22
Lines 18-23 Link Here
18
	echo "Error: $@" >&2
28
	echo "Error: $@" >&2
19
}
29
}
20
30
31
listcontains() {
32
	local str lst elt
33
	str=$1
34
	lst=$2
35
36
	for elt in ${lst} ; do
37
		if [ ${elt} = ${str} ] ; then
38
			return 0
39
		fi
40
	done
41
	return 1
42
}
43
21
shebangonefile() {
44
shebangonefile() {
22
	local f interp rc
45
	local f interp rc
23
46
Lines 206-213 Link Here
206
	fi
229
	fi
207
}
230
}
208
231
209
checks="shebang symlinks paths stripped desktopfileutils sharedmimeinfo suidfiles libtool"
232
proxydeps_suggest_uses() {
233
	local pkg=$1
234
	local lib_file=$2
210
235
236
	if expr ${pkg} : '^gettext-[0-9]' > /dev/null ; then
237
		warn "you need USES+=gettext"
238
	elif expr ${pkg} : '^glib-2' > /dev/null ; then
239
		warn "you need USE_GNOME+=glib20"
240
	elif expr ${pkg} : '^gdk-pixbuf2-' > /dev/null ; then
241
		warn "you need USE_GNOME+=gdkpixbuf2"
242
	elif expr ${pkg} : '^cairo-[0-9]' > /dev/null ; then
243
		warn "you need USE_GNOME+=cairo"
244
	# Xorg-libraries: this should be by XORG_MODULES @ bsd.xorg.mk
245
	elif echo ${pkg} | grep -E '^lib(X11|Xau|Xdmcp|Xext|SM|ICE|Xfixes|Xft|Xdamage|Xcomposite|Xcursor|Xinerama|Xmu|Xmuu|Xpm|Xt|Xtst|Xi|Xrandr|Xrender|Xres|Xv|Xxf86vm|Xxf86dga|Xxf86misc)-' > /dev/null ; then
246
		warn "you need USE_XORG+=$(echo ${pkg} | sed -E 's/^lib(.+)\-.*/\1/' | tr '[:upper:]' '[:lower:]')"
247
	# Qt4
248
	elif echo ${pkg} | grep -E '^qt4-([a-z0-9]+)-[0-9]' > /dev/null ; then
249
		warn "you need USE_QT4+=$(echo ${pkg} | sed -E 's/^qt4-([a-z0-9]+)-[0-9].*/\1/')"
250
	# Qt5
251
	elif echo ${pkg} | grep -E '^qt5-([a-z]+)-[0-9]' > /dev/null ; then
252
		warn "you need USE_QT5+=$(echo ${pkg} | sed -E 's/^qt5-([a-z]+)-[0-9].*/\1/')"
253
	elif expr ${lib_file} : "${LOCALBASE}/lib/[^/]*$" > /dev/null ; then
254
		warn "you need LIB_DEPENDS+=${lib_file#${LOCALBASE}/lib/}:\${PORTSDIR}/$(pkg info -o ${pkg} | sed -E 's/^[^[:space:]]+[[:space:]]+//g')"
255
	fi
256
}
257
258
proxydeps_check() {
259
	local pkg=$1
260
	local filelist=$2
261
	local deplist=$3
262
263
	local file dep_file dep_file_pkg already pkg_dep_files
264
265
	# check for every dynamic executable
266
	for file in ${filelist}; do
267
		pkg_dep_files=$(ldd -a "${file}" | \
268
				awk 'BEGIN {section=0}; /^\// {section++} /^[^\/]/ {if(section<=1) print}' | \
269
				sed -e 's/.*=> //' | sed -e 's/ .*//')
270
		# check every dependency file
271
		for dep_file in $pkg_dep_files; do
272
			if listcontains ${dep_file} "${already}" ; then
273
				continue
274
			fi
275
			if ! (expr "$dep_file" : '^/lib/' \| "$dep_file" : '^/usr/lib/' > /dev/null) ; then
276
				if $(pkg which ${dep_file} > /dev/null 2>&1) ; then
277
					dep_file_pkg=$(pkg which ${dep_file} | sed -e 's/.* installed by package //g')
278
					if ! listcontains ${dep_file_pkg} "${deplist} ${pkg}" ; then
279
						warn "dependency file ${dep_file} belongs to the package ${dep_file_pkg} which isn't declared as a dependency"
280
						proxydeps_suggest_uses ${dep_file_pkg} ${dep_file}
281
					fi
282
				else
283
					warn "dependency file ${dep_file} doesn't belong to any package"
284
				fi
285
			fi
286
			already="${already} ${dep_file}"
287
		done
288
	done
289
}
290
291
292
proxydeps() {
293
	# finds all dynamic executables which have dependencies that aren't within the
294
	# declared set of dependencies in this port
295
	local filelist
296
	filelist=`find ${STAGEDIR} -type f \
297
		\( -perm -u+x -or -perm -g+x -or -perm -o+x \) \
298
		-and -exec /bin/sh -c "ldd {} > /dev/null 2>&1" \; \
299
		-and -exec echo {} \;`
300
	proxydeps_check ${PKG_NAME} "${filelist}" "${PKG_DEPS}"
301
}
302
303
checks="shebang symlinks paths stripped desktopfileutils sharedmimeinfo suidfiles libtool proxydeps"
304
211
ret=0
305
ret=0
212
cd ${STAGEDIR}
306
cd ${STAGEDIR}
213
for check in ${checks}; do
307
for check in ${checks}; do

Return to bug 195203