6.23. Usando iconv

Após 2013-10-08 (254273), o FreeBSD 10-CURRENT e as versões mais recentes têm um iconv nativo no sistema operacional. Em versões anteriores, o converters/libiconv era usado como dependência.

Para softwares que precisam do iconv, defina USES=iconv. As versões do FreeBSD antes do 10-CURRENT em 2013-08-13 (254273) não tem um iconv nativo. Nestas versões anteriores, uma dependência do converters/libiconv será adicionada automaticamente.

Quando um port define USES=iconv, estas variáveis ​​estarão disponíveis:

Nome da variávelPropósitoValor antes do FreeBSD 10-CURRENT 254273(2013-08-13)Valor após o FreeBSD 10-CURRENT 254273(2013-08-13)
ICONV_CMDDiretório onde o binário iconv reside${LOCALBASE}/bin/iconv/usr/bin/iconv
ICONV_LIBargumento do ld para vincular ao libiconv (se necessário)-liconv(vazio)
ICONV_PREFIXDiretório onde a implementação do iconv reside (útil para configurar scripts)${LOCALBASE}/usr
ICONV_CONFIGURE_ARGArgumento de configuração pré-configurado para scripts de configuração--with-libiconv-prefix=${LOCALBASE}(vazio)
ICONV_CONFIGURE_BASEArgumento de configuração pré-configurado para scripts de configuração--with-libiconv=${LOCALBASE}(vazio)

Esses dois exemplos preenchem automaticamente as variáveis ​​com o valor correto para sistemas usando respectivamente o converters/libiconv ou o iconv nativo:

Exemplo 6.30. Simples uso do iconv
USES=		iconv
LDFLAGS+=	-L${LOCALBASE}/lib ${ICONV_LIB}

Exemplo 6.31. Uso do iconv com configure
USES=		iconv
CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}

Como mostrado acima, a variável ICONV_LIB estará vazia quando um iconv nativo estiver presente. Isso pode ser usado para detectar o iconv nativo e responder adequadamente.

Às vezes um programa tem um argumento ld ou caminho de pesquisa codificado em um Makefile ou no script configure. Essa abordagem pode ser usada para resolver esse problema:

Exemplo 6.32. Corrigindo Hardcoded -liconv
USES=		iconv

post-patch:
	@${REINPLACE_CMD} -e 's/-liconv/${ICONV_LIB}/' ${WRKSRC}/Makefile

Em alguns casos, é necessário definir valores alternativos ou executar operações dependendo se há um iconv nativo. O bsd.port.pre.mk deve ser incluído antes de testar o valor de ICONV_LIB:

Exemplo 6.33. Verificando Disponibilidade do iconv Nativo
USES=		iconv

.include <bsd.port.pre.mk>

post-patch:
.if empty(ICONV_LIB)
	# native iconv detected
	@${REINPLACE_CMD} -e 's|iconv||' ${WRKSRC}/Config.sh
.endif

.include <bsd.port.post.mk>

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.