Freebsd porting e pkg-static

1

Estou portando o makemkv para o freebsd 10.2 e por esse motivo eu escrevi o seguinte makefile:

# New ports collection makefile for:    makemkv
# Date created:             05 Mar 2012
# Date Updated:             10 April 2016
# Whom:                 kappei84
#
# $FreeBSD$
#

PORTNAME=   makemkv
PORTVERSION=    1.9.9
CATEGORIES= multimedia
DISTNAME=   ${PORTNAME}-oss-${PORTVERSION}${EXTRACT_SUFFIX}
MASTER_SITES=   http://www.makemkv.com/download/

# Prefix for the pkp-plist
#PLIST_SUB= DATADIR=${PREFIX}

# Missing qt4/qt5 dependency check in case the port is built with --enable-gui
BUILD_DEPENDS=  ffmpeg${FFMPEG_SUFX}:${PORTSDIR}/multimedia/ffmpeg${FFMPEG_SUFX}

MAINTAINER= 
COMMENT=    Make MKV from Blu-ray and DVD

GNU_CONFIGURE=  yes
OPTIONS_DEFINE= GUI

.include <bsd.port.options.mk>

.if ${PORT_OPTIONS:MGUI}
CONFIGURE_ARGS+=    --enable-gui
.else
CONFIGURE_ARGS+=    --disable-gui
.endif # GUI

# flags for the configure script
CPPFLAGS+=  -I${LOCALBASE}/include
LIBS+=      -L${LOCALBASE}/lib

MAKEFILE=   Makefile
USES= gmake
USE_OPENSSL=    yes
USE_LDCONFIG=   yes
USE_QT_VER= 4
QT_COMPONENTS=  qmake gui svg webkit xml moc uic rcc imageformats

do-install:
.if ${PORT_OPTIONS:MGUI}
    ${INSTALL_PROGRAM} ${WRKSRC}/out/${PORTNAME} ${PREFIX}/bin
.endif
.for i in libdriveio.so.0 libmakemkv.so.1 libmmbd.so.0
    ${INSTALL_PROGRAM} ${WRKSRC}/out/${i} ${PREFIX}/lib
.endfor
    @ cd ${PREFIX}/lib ; \
    ${LN} -sf libdriveio.so.0 libdriveio.so ; \
    ${LN} -sf libmakemkv.so.1 libmakemkv.so ; \
    ${LN} -sf libmmbd.so.0 libmmbd.so

.include <bsd.port.mk>

este makefile faz referência ao Makefile da aplicação original e compila e cria todos os arquivos fonte necessários para gerar as três bibliotecas libdriveio.so.o , libmakemkv.so.1 e libmmbd.so.0 que são copiados para / usr / local / lib com a pós-instalação. Até esta etapa tudo funciona perfeitamente como você pode ver no log abaixo:

gmake[2]: Leaving directory '/usr/ports/multimedia/makemkv/work/makemkv-oss-1.9.9'
===>  Staging for makemkv-1.9.9
===>   Generating temporary packing list
install  -s -m 555 /usr/ports/multimedia/makemkv/work/makemkv-oss-1.9.9/out/libdriveio.so.0 /usr/local/lib
install  -s -m 555 /usr/ports/multimedia/makemkv/work/makemkv-oss-1.9.9/out/libmakemkv.so.1 /usr/local/lib
install  -s -m 555 /usr/ports/multimedia/makemkv/work/makemkv-oss-1.9.9/out/libmmbd.so.0 /usr/local/lib

O que eu não entendo é a fase final que é executada após a do-install, que é a fase de registro:

====> Compressing man pages (compress-man)
===>  Installing for makemkv-1.9.9
===>  Checking if makemkv already installed
===>   Registering installation for makemkv-1.9.9
pkg-static: Unable to access file /usr/ports/multimedia/makemkv/work/stage/lib/libdriveio.so: No such file or directory
pkg-static: Unable to access file /usr/ports/multimedia/makemkv/work/stage/lib/libdriveio.so.0: No such file or directory
pkg-static: Unable to access file /usr/ports/multimedia/makemkv/work/stage/lib/libmakemkv.so: No such file or directory
pkg-static: Unable to access file /usr/ports/multimedia/makemkv/work/stage/lib/libmakemkv.so.1: No such file or directory
pkg-static: Unable to access file /usr/ports/multimedia/makemkv/work/stage/lib/libmmbd.so.0: No such file or directory
pkg-static: Unable to access file /usr/ports/multimedia/makemkv/work/stage/lib/libmmbd.so: No such file or directory
*** Error code 74

Stop.
make[1]: stopped in /usr/ports/multimedia/makemkv
*** Error code 1

Stop.
make: stopped in /usr/ports/multimedia/makemkv

como você pode ver alguns dos arquivos (listados dentro de um arquivo chamado pkg-plist) não podem ser encontrados sob o caminho esperado e a instalação falha.

Existe alguma maneira de evitar ou alterar a pasta padrão onde o pkg-static deve verificar? Como é a primeira porta para mim, é necessário executar esta fase e ter um pkg-plist ou é também possível remover um arquivo como as bibliotecas principais já foram copiadas para o caminho certo?

    
por Daniele Mazzotti 10.04.2016 / 17:45

1 resposta

1

Seu Makefile parece estar tentando instalar diretamente em ${PREFIX} . Isso não é como as coisas são feitas nos dias de hoje.

Você deve estar instalando em ${STAGEDIR}${PREFIX} . Esta é uma área de preparação sob ${WRKDIR} , que espelha os diretórios de destino. O material subjacente chamado por make install pegará os arquivos de lá, e é assim que o registro funciona.

Detalhes completos aqui:

link

mas fique à vontade para comentar com qualquer dúvida.

    
por 09.07.2017 / 12:46