在Ubuntu Linux上构建Mercurial 1.3.1

6
我正在尝试构建mercurial 1.3.1。迄今为止,我已经在我的Mac OS X机器和我运行的Linux Ubuntu虚拟机上尝试过这个过程。
我在进行make时不断出现错误。我知道Linux和Mac都有可用的二进制文件,但我想构建自己的副本。我一直跳过构建过程,现在我想学习如何做到这一点。
但是现在,我需要帮助。以下是来自我的Ubuntu Linux v9.04机器的整个构建过程的结果...错误信息“error: Python.h: No such file or directory”出现在末尾。如果这对某人的故障排除有所帮助,我已经包含了所有结果。
frank@ubuntu:~/Desktop/mercurial-1.3.1$ sudo make install
[sudo] password for frank: 
python setup.py  build
running build
running build_py
creating build
creating build/lib.linux-i686-2.6
creating build/lib.linux-i686-2.6/mercurial
copying mercurial/dirstate.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/bundlerepo.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/subrepo.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/httprepo.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/__version__.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/changelog.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/repo.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/config.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/byterange.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/verify.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/encoding.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/keepalive.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/sshserver.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/fancyopts.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/__init__.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/merge.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/i18n.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/archival.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/match.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/mail.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/help.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/win32.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/posix.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/repair.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/dispatch.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/error.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/templatefilters.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/localrepo.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/sshrepo.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/node.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/templater.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/streamclone.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/context.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/strutil.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/ignore.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/hook.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/mdiff.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/ui.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/lsprofcalltree.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/transaction.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/commands.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/windows.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/revlog.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/store.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/lock.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/changegroup.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/lsprof.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/manifest.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/url.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/util.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/demandimport.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/graphmod.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/statichttprepo.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/cmdutil.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/extensions.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/filemerge.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/hg.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/filelog.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/copies.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/hbisect.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/patch.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/ancestor.py -> build/lib.linux-i686-2.6/mercurial
copying mercurial/simplemerge.py -> build/lib.linux-i686-2.6/mercurial
creating build/lib.linux-i686-2.6/mercurial/hgweb
copying mercurial/hgweb/webutil.py -> build/lib.linux-i686-2.6/mercurial/hgweb
copying mercurial/hgweb/request.py -> build/lib.linux-i686-2.6/mercurial/hgweb
copying mercurial/hgweb/wsgicgi.py -> build/lib.linux-i686-2.6/mercurial/hgweb
copying mercurial/hgweb/protocol.py -> build/lib.linux-i686-2.6/mercurial/hgweb
copying mercurial/hgweb/server.py -> build/lib.linux-i686-2.6/mercurial/hgweb
copying mercurial/hgweb/__init__.py -> build/lib.linux-i686-2.6/mercurial/hgweb
copying mercurial/hgweb/common.py -> build/lib.linux-i686-2.6/mercurial/hgweb
copying mercurial/hgweb/hgwebdir_mod.py -> build/lib.linux-i686-2.6/mercurial/hgweb
copying mercurial/hgweb/webcommands.py -> build/lib.linux-i686-2.6/mercurial/hgweb
copying mercurial/hgweb/hgweb_mod.py -> build/lib.linux-i686-2.6/mercurial/hgweb
creating build/lib.linux-i686-2.6/hgext
copying hgext/pager.py -> build/lib.linux-i686-2.6/hgext
copying hgext/purge.py -> build/lib.linux-i686-2.6/hgext
copying hgext/graphlog.py -> build/lib.linux-i686-2.6/hgext
copying hgext/win32text.py -> build/lib.linux-i686-2.6/hgext
copying hgext/gpg.py -> build/lib.linux-i686-2.6/hgext
copying hgext/hgk.py -> build/lib.linux-i686-2.6/hgext
copying hgext/color.py -> build/lib.linux-i686-2.6/hgext
copying hgext/bugzilla.py -> build/lib.linux-i686-2.6/hgext
copying hgext/bookmarks.py -> build/lib.linux-i686-2.6/hgext
copying hgext/__init__.py -> build/lib.linux-i686-2.6/hgext
copying hgext/notify.py -> build/lib.linux-i686-2.6/hgext
copying hgext/record.py -> build/lib.linux-i686-2.6/hgext
copying hgext/interhg.py -> build/lib.linux-i686-2.6/hgext
copying hgext/rebase.py -> build/lib.linux-i686-2.6/hgext
copying hgext/churn.py -> build/lib.linux-i686-2.6/hgext
copying hgext/keyword.py -> build/lib.linux-i686-2.6/hgext
copying hgext/mq.py -> build/lib.linux-i686-2.6/hgext
copying hgext/transplant.py -> build/lib.linux-i686-2.6/hgext
copying hgext/acl.py -> build/lib.linux-i686-2.6/hgext
copying hgext/children.py -> build/lib.linux-i686-2.6/hgext
copying hgext/fetch.py -> build/lib.linux-i686-2.6/hgext
copying hgext/extdiff.py -> build/lib.linux-i686-2.6/hgext
copying hgext/win32mbcs.py -> build/lib.linux-i686-2.6/hgext
copying hgext/share.py -> build/lib.linux-i686-2.6/hgext
copying hgext/parentrevspec.py -> build/lib.linux-i686-2.6/hgext
copying hgext/hgcia.py -> build/lib.linux-i686-2.6/hgext
copying hgext/patchbomb.py -> build/lib.linux-i686-2.6/hgext
creating build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/bzr.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/convcmd.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/gnuarch.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/cvsps.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/__init__.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/git.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/p4.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/subversion.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/transport.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/common.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/hg.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/monotone.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/cvs.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/filemap.py -> build/lib.linux-i686-2.6/hgext/convert
copying hgext/convert/darcs.py -> build/lib.linux-i686-2.6/hgext/convert
creating build/lib.linux-i686-2.6/hgext/highlight
copying hgext/highlight/highlight.py -> build/lib.linux-i686-2.6/hgext/highlight
copying hgext/highlight/__init__.py -> build/lib.linux-i686-2.6/hgext/highlight
creating build/lib.linux-i686-2.6/hgext/zeroconf
copying hgext/zeroconf/__init__.py -> build/lib.linux-i686-2.6/hgext/zeroconf
copying hgext/zeroconf/Zeroconf.py -> build/lib.linux-i686-2.6/hgext/zeroconf
creating build/lib.linux-i686-2.6/hgext/inotify
copying hgext/inotify/server.py -> build/lib.linux-i686-2.6/hgext/inotify
copying hgext/inotify/__init__.py -> build/lib.linux-i686-2.6/hgext/inotify
copying hgext/inotify/common.py -> build/lib.linux-i686-2.6/hgext/inotify
copying hgext/inotify/client.py -> build/lib.linux-i686-2.6/hgext/inotify
creating build/lib.linux-i686-2.6/hgext/inotify/linux
copying hgext/inotify/linux/__init__.py -> build/lib.linux-i686-2.6/hgext/inotify/linux
copying hgext/inotify/linux/watcher.py -> build/lib.linux-i686-2.6/hgext/inotify/linux
running build_ext
building 'mercurial.base85' extension
creating build/temp.linux-i686-2.6
creating build/temp.linux-i686-2.6/mercurial
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c mercurial/base85.c -o build/temp.linux-i686-2.6/mercurial/base85.o
mercurial/base85.c:12:20: error: Python.h: No such file or directory
mercurial/base85.c: In function ‘b85prep’:
mercurial/base85.c:23: warning: implicit declaration of function ‘memset’
mercurial/base85.c:23: warning: incompatible implicit declaration of built-in function ‘memset’
mercurial/base85.c: At top level:
mercurial/base85.c:28: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
mercurial/base85.c:76: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
mercurial/base85.c:141: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘methods’
mercurial/base85.c:150: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘initbase85’
error: command 'gcc' failed with exit status 1
make: *** [build] Error 1
3个回答

12

确保您已安装python-dev软件包:

apt-get install python-dev

我已经检查了Python - 我有Python 2.6.2 - Frank V
您需要安装Python和python-dev软件包。执行上述命令,然后再次运行Mercurial安装... - Jonathan Holloway
谢谢。我没有意识到“Python”和“Python-dev”之间有区别。 - Frank V

2
我知道你想要从源代码构建,但对于 OS X(以及其他地方),你可以简单地使用 Python 的 easy_install(通过 Setuptools 获取):
sudo easy_install mercurial

由于Mercurial是用Python编写的,因此该代码会查找最新版本(撰写本文时为1.3.1),并且(我不使用Macports或Fink)在以下位置轻松安装:
/Library/Frameworks/Python.framework/Versions/2.6/bin/

我使用Python 2.6(在Mac OS 10.4.11上),因此这也解决了{{link1:Mercurial OS X安装程序包}}(截至2009年7月25日仅为1.2.1)需要Python 2.5的问题。

0
根据Ubuntu论坛的说法:

我只是没有意识到默认情况下只安装了Python的一部分,我需要安装包含所有头文件的python-dev软件包。

这是针对Linux的。我相信在OS X上,只有在安装了开发人员工具后才会安装Python.h。你安装了吗?

是的,这确实有帮助,但命令才是答案...所以我必须把它交给Jon... - Frank V
是的,我有适用于Mac OS的开发工具。不过,这篇帖子是关于我的Ubuntu设置的。 - Frank V
啊,你没有提到在 OS X 上的构建是否成功。从原始问题来看,似乎没有成功。 - Steve Losh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接