我认为,可以假设用户聪明一点:假设“pidgin就安装在prefix指定的位置”,而且“用户已经正确设定了prefix”,而不需要自动检测。这样做,就要求用户在编译pidgin-openfetion的时候,在cmake
.这一步加上选项:-DCMAKE_INSTALL_PREFIX:PATH=/usr
实际上其他软件的插件(比如gedit)都必须用户定义prefix的位置。
在给Fedora打rpm包的时候,Fedora的rpmbuild已经定义了%cmake这个宏,这个宏调用cmake,同时已经加了上述prefix选项。关于/usr/lib和/usr/lib64的区别,Fedora目前的宏定义中有LIB_SUFFIX这个宏,它在64位系统上编译时被定义为"64"。
因此可以在CMakeLists.txt中这样定义:
if(NOT DEFINED LIB_INSTALL_DIR)
set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
endif(NOT DEFINED LIB_INSTALL_DIR)
这样,在64位系统上,如果prefix是/usr,那么LIB_INSTALL_DIR就是/usr/lib64。在32位系统上,就是/usr/lib。
Fedora相关的详情见http://fedoraproject.org/wiki/Packaging/cmake
另外,http://fedoraproject.org/wiki/PackagingDrafts/cmake这里有人建议在构建的时候给cmake定义CMAKE_INSTALL_LIBDIR,
INCLUDE_INSTALL_DIR, LIB_INSTALL_DIR, SYSCONF_INSTALL_DIR,
SHARE_INSTALL_PREFIX这几个宏,这样CMakeLists.txt里就可以直接使用LIB_INSTALL_DIR这个宏。
LIB_INSTAL_DIR这个宏没有出现在cmake的documentation中。但是在kde的邮件组中有人提到。有没有人帮我查一查上述几个宏的最早出处。目前似乎还不是一个标准。
新的CMakeLists.txt在附件中,可以在Fedora14,64位机上编译。还需要测试一下在其他环境中能不能工作。
wks
bug 报告是这样的,原来用 whereis + sed 的方法,在没有 pidgin-dev 的时候会生成一些无效的路径名,路径里面有换行符(\n)。
我的方法是这样的:
1. 用 pkg-config 来找 libpurple 的位置:
EXEC_PROGRAM("pkg-config --variable=datadir purple 2>/dev/null"
OUTPUT_VARIABLE PURPLE_DATADIR)
EXEC_PROGRAM("pkg-config --variable=libdir purple 2>/dev/null"
OUTPUT_VARIABLE PURPLE_LIBDIR)
后面
SET(RES_INSTALL_DIR "${PURPLE_DATADIR}/purple/openfetion/")
SET(LIB_INSTALL_DIR "${PURPLE_LIBDIR}/purple-${PURPLE_MAJOR_VERSION}")
这样做可以不用理会发行版的不同,因为 libdir 的问题已经有 purple 的维护人员处理过,咱们只要随它安装到哪就放哪,:D
2. 用 CMAKE_INSTALL_PREFIX 指定 Pidgin 的目录:
SET(PIDGIN_PIX_INSTALL_DIR
"${CMAKE_INSTALL_PREFIX}/share/pixmaps/pidgin/protocols/16/")
这个目录必须在 /usr/share 或者 /usr/locale/share 之下,否则不符合 FHS,所以我直接把 share 写到里面了。
--
Regards,
Aron Xu
plugindir=${libdir}/purple-2
Name: libpurple
Description: libpurple is a GLib-based instant messenger library.
Version: 2.7.9
Requires: glib-2.0
Cflags: -I${includedir}/libpurple
Libs: -L${libdir} -lpurple
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的“Openfetion ”论坛。
> 要向此网上论坛发帖,请发送电子邮件至 ofe...@googlegroups.com。
> 要取消订阅此网上论坛,请发送电子邮件至 ofetion+u...@googlegroups.com。
> 若有更多问题,请通过 http://groups.google.com/group/ofetion?hl=zh-CN 访问此网上论坛。
>
>
2.6.x 的 purple.pc 没有这个变量,可以加个测试,如果有就直接用。
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
datarootdir=${prefix}/share
datadir=${datarootdir}
sysconfdir=/etc
Name: libpurple
Description: libpurple is a GLib-based instant messenger library.
Version: 2.6.6
Requires: glib-2.0
Cflags: -I${includedir}/libpurple
Libs: -L${libdir} -lpurple
--
Regards,
Aron Xu