6.22.使用 iconv

FreeBSD操作系统中有一个原生的iconv

对于需要iconv的软件,定义USES=iconv

当一个port定义了USES=iconv时,这些变量将可用:

变量名称意图port iconv(当使用WCHAR_T或者//TRANSLIT扩展时)基础iconv

ICONV_CMD

iconv二进制文件所在的目录

${LOCALBASE}/bin/iconv

/usr/bin/iconv

ICONV_LIB

链接到libiconvld参数(如果需要的话)

-liconv

(无)

ICONV_PREFIX

iconv实现所在的目录(对于配置脚本很有用)

${LOCALBASE}

/usr

ICONV_CONFIGURE_ARG

为配置脚本预构建的configure参数

--with-libiconv-prefix=${LOCALBASE}

(空)

ICONV_CONFIGURE_BASE

为配置脚本预构建的configure参数

--with-libiconv=${LOCALBASE}

(空)

以下两个例子分别使用converters/libiconv和原生iconv来给系统自动生成正确的变量值:

例子86.简单的iconv使用

USES=		iconv
LDFLAGS+=	-L${LOCALBASE}/lib ${ICONV_LIB}

例子87.带configureiconv使用

USES=		iconv
CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}

如上所示,当原生iconv存在时,ICONV_LIB为空。这可以用来检测原生iconv并做出相应的响应。

有时,程序在Makefile或配置脚本中硬编码了ld参数或搜索路径。可以使用以下方法解决这个问题:

例子88.修复硬编码-liconv问题

USES=		iconv

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

在某些情况下,需要根据是否存在原生iconv来设置替代值或执行操作。在测试ICONV_LIB的值之前,必须先包含bsd.port.pre.mk文件:

例子89.检查原生iconv的可用性

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>

最后更新于

FreeBSD 中文社区