1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-13 07:34:50 +00:00

IGNORE emulators/i386-wine(-devel)? on ARCH=i386, fix lib bundling.

Due to the hackery things these ports do to properly work under amd64, it
results in issues for pkg.  This port - although it needs to build under
i386 - is not intended to be consumed under i386.  The normal wine(-devel)?
ports should be consumed on an i386 system and these ports should be
consumed on an amd64 system. [1]

Reorder the library detection to pick up soft dependencies first, then the
linked to libraries.  Prior to this change any libraries required by a soft
dependency wasn't bundled, for example libgnutls.so.28 did not have its
dependencies bundled. [2][3]

Requested by:	bdrewery [1]
Reported by:	Joseph Mingrone <jrm@ftfl.ca> [2]
		Beeblebrox <zaphod@berentweb.com> [3]
This commit is contained in:
David Naylor 2014-08-25 20:02:20 +00:00
parent 8dac2b879b
commit 68ea15cd5b
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=366144
3 changed files with 30 additions and 21 deletions

View File

@ -24,6 +24,10 @@ PLIST_REINPLACE_WINELIB= s!lib/!lib32/!g
WINE_SLAVE_BUILD= yes
USE_LDCONFIG32= ${WINELIBDIR} ${WINELIBDIR}/wine
.if !defined(WINE_CROSS_BUILD)
IGNORE= This port is not for consumption on FreeBSD/i386. To cross-build for FreeBSD/amd64: make -DWINE_CROSS_BUILD
.endif
# Hook into post-install and do some adapting to make i386 binaries work nicely
# under FreeBSD/amd64
post-install-script:
@ -33,12 +37,25 @@ post-install-script:
[ "$${i}" = "wine" ] || ${LN} -f ${STAGEDIR}${PREFIX}/bin/wine ${STAGEDIR}${PREFIX}/bin/$${i} ; \
echo bin32/$${i} >> ${TMPPLIST} ; \
done
# Install libGL
${INSTALL_DATA} ${LOCALBASE}/lib/libGL.so.1 ${STAGEDIR}${PREFIX}/lib32/.libGL/
echo lib32/.libGL/libGL.so.1 >> ${TMPPLIST}
# Install dri libraries (internal libGL requirements)
${MKDIR} ${STAGEDIR}${PREFIX}/lib32/.libGL/dri
for i in ${LOCALBASE}/lib/dri/*.so; do \
${INSTALL_DATA} $${i} ${STAGEDIR}${PREFIX}/lib32/.libGL/dri/ ; \
echo lib32/.libGL/dri/$${i##*/} >> ${TMPPLIST} ; \
done
# Find all soft dependencies (via strings(1))
grep -v '[@%]' ${TMPPLIST} | sed "s!^!${STAGEDIR}${PREFIX}/!g" | \
xargs -n1 file -F' ' | grep ELF | cut -f1 -d' ' | xargs strings | \
grep '^lib.*\.so' | sort -u > ${WRKDIR}/winesoftlibs
for i in `cat ${WRKDIR}/winesoftlibs` ; do \
if [ -e ${LOCALBASE}/lib/$${i} ] && [ -z "`grep $${i} ${TMPPLIST}`" ]; then \
${INSTALL_DATA} ${LOCALBASE}/lib/$${i} ${STAGEDIR}${PREFIX}/lib32/ ; \
echo lib32/$${i} >> ${TMPPLIST} ; \
fi ; \
done
# Find all libraries that are linked too (via ldd(1))
grep -v '[@%]' ${TMPPLIST} | sed "s!^!${STAGEDIR}${PREFIX}/!g" | \
xargs -n1 file -F' ' | grep ELF | cut -f1 -d' ' | \
@ -46,22 +63,9 @@ post-install-script:
| sort -u | grep -v '^\(/usr\)\?/lib' | grep -v "^${STAGEDIR}${PREFIX}/lib32/libwine.so" \
| grep -v "^${STAGEDIR}${PREFIX}/lib32/wine" > ${WRKDIR}/winelibs
for i in `cat ${WRKDIR}/winelibs` ; do \
if [ `basename $${i}` != libGL.so.1 ]; then \
if [ -z "`grep $${i##*/} ${TMPPLIST}`" ]; then \
${INSTALL_DATA} $${i} ${STAGEDIR}${PREFIX}/lib32/ ; \
echo lib32/$${i##*/} >> ${TMPPLIST} ; \
else \
${INSTALL_DATA} $${i} ${STAGEDIR}${PREFIX}/lib32/.libGL/ ; \
echo lib32/.libGL/libGL.so.1 >> ${TMPPLIST} ; \
fi ; \
done
# Find all soft dependancies (via strings(1))
grep -v '[@%]' ${TMPPLIST} | sed "s!^!${STAGEDIR}${PREFIX}/!g" | \
xargs -n1 file -F' ' | grep ELF | cut -f1 -d' ' | xargs strings | \
grep '^lib.*\.so' | sort -u > ${WRKDIR}/winesoftlibs
for i in `cat ${WRKDIR}/winesoftlibs` ; do \
if [ -e ${LOCALBASE}/lib/$${i} ] && [ -z "`grep $${i} ${TMPPLIST}`" ] ; then \
${INSTALL_DATA} ${LOCALBASE}/lib/$${i} ${STAGEDIR}${PREFIX}/lib32/ ; \
echo lib32/$${i} >> ${TMPPLIST} ; \
fi ; \
done
echo '@dirrm lib32/.libGL/dri' >> ${TMPPLIST}

View File

@ -32,7 +32,8 @@ EXTRACT_AFTER_ARGS= -C / --exclude +COMPACT_MANIFEST --exclude +MANIFEST \
NO_BUILD= yes
ONLY_FOR_ARCHS= i386 amd64
ONLY_FOR_ARCHS_REASON= wine only runs on x86 architecture
PKGINSTALL= ${.CURDIR}/files/pkg-install
SLAVEDIR?= ${.CURDIR}
PKGINSTALL= ${SLAVEDIR}/files/pkg-install
PKGDEINSTALL= ${PKGINSTALL}
PKGMESSAGE= ${WRKDIR}/pkg-message
SUB_FILES= pkg-message
@ -71,18 +72,18 @@ ${PLIST}: fetch
${TAR} -tf ${_DISTDIR}/${EXTRACT_ONLY} ${EXTRACT_AFTER_ARGS} | ${GREP} '/$$' | ${SED} -e 's|/usr/local/\(.*\)/$$|@dirrm \1|g' -e 's|/$$||g' -e 's|@dirrm man|@dirrmtry man|g' | sort -r >> ${PLIST}
port-update:
${RM} -f ${.CURDIR}/distinfo ${.CURDIR}/distinfo~ ${.CURDIR}/pkg-plist.*
${RM} -f ${SLAVEDIR}/distinfo ${SLAVEDIR}/distinfo~ ${SLAVEDIR}/pkg-plist.*
.for osrel in 8 9 10 11
.for suffix in -devel -compholio
${MAKE} fetch OSREL=${osrel} PKGNAMESUFFIX=${suffix}
${MAKE} makesum OSREL=${osrel} PKGNAMESUFFIX=${suffix}
${CAT} ${.CURDIR}/distinfo >> ${.CURDIR}/distinfo~
${RM} ${.CURDIR}/distinfo
${CAT} ${SLAVEDIR}/distinfo >> ${SLAVEDIR}/distinfo~
${RM} ${SLAVEDIR}/distinfo
[ "${suffix}" != "-devel" ] || ${MAKE} pkg-plist.${osrel} PLIST=pkg-plist.${osrel} OSREL=${osrel}
.endfor
.endfor
${MV} ${.CURDIR}/distinfo~ ${.CURDIR}/distinfo
python ${FILESDIR}/mergeplist.py ${.CURDIR}/pkg-plist.* > ${PLIST}
${RM} ${.CURDIR}/pkg-plist.*
${MV} ${SLAVEDIR}/distinfo~ ${SLAVEDIR}/distinfo
python ${FILESDIR}/mergeplist.py ${SLAVEDIR}/pkg-plist.* > ${PLIST}
${RM} ${SLAVEDIR}/pkg-plist.*
.include <bsd.port.post.mk>

View File

@ -23,6 +23,10 @@ PLIST_REINPLACE_WINELIB= s!lib/!lib32/!g
WINE_SLAVE_BUILD= yes
USE_LDCONFIG32= ${WINELIBDIR} ${WINELIBDIR}/wine
.if !defined(WINE_CROSS_BUILD)
IGNORE= This port is not for consumption on FreeBSD/i386. To cross-build for FreeBSD/amd64: make -DWINE_CROSS_BUILD
.endif
# Hook into post-install and do some adapting to make i386 binaries work nicely
# under FreeBSD/amd64
post-install-script: