如何在Fedora 23上制作vim时修复此错误

时间:2016-01-24 11:12:45

标签: vim makefile fedora make-install

我正在尝试使用Fedora 23上的以下选项构建vim

我想要+python +python3 +perl +lua +ruby +gui +conceal +gui一些插件。

我找不到内置所有内容的版本(所以我自己做)

旅程从Valloric

开始
sudo yum install -y ruby ruby-devel lua lua-devel luajit \
    luajit-devel ctags git python python-devel \
    python3 python3-devel tcl-devel \
    perl perl-devel perl-ExtUtils-ParseXS \
    perl-ExtUtils-XSpp perl-ExtUtils-CBuilder \
    perl-ExtUtils-Embed

我也有ncurses(raw,devel,static,...)

然后

$ cd $HOME/Sources
$ git clone https://github.com/vim/vim.git
$ cd vim
$ ./configure --with-tlib=ncurses \
              --with-features=huge \
              --enable-fail-if-missing \
              --enable-luainterp=yes \
              --enable-mzschemeinterp \
              --enable-perlinterp \
              --enable-pythoninterp=yes \
              --with-python-config-dir=/usr/lib64/python2.7/config \
              --enable-python3interp=yes \
              --enable-tclinterp=yes \
              --enable-rubyinterp=yes \
              --enable-cscope \
              --enable-multibyte \
              --enable-gui=auto \
              --prefix=$HOME/Build/vim \
              --with-compiledby=statquant | tee configure.log

屏幕上印有以下内容:

/home/statquant/Sources/vim/src/config-PyMake3137:1478: warning: overriding recipe for target 'Modules/_math.o'
/home/statquant/Sources/vim/src/config-PyMake3137:1475: warning: ignoring old recipe for target 'Modules/_math.o'
/home/statquant/Sources/vim/src/config-PyMake3137:1517: warning: overriding recipe for target 'Modules/timemodule.o'
/home/statquant/Sources/vim/src/config-PyMake3137:1482: warning: ignoring old recipe for target 'Modules/timemodule.o'
configure: error: NOT FOUND!
      You need to install a terminal library; for example ncurses.
      Or specify the name of the library with --with-tlib.

然后我

make | tee make.log

我意识到它实际上是在$HOME/Sources/vim/src而不是$HOME/Build/vim中构建了vim(也许我错了预期)

当我在:version上运行./vim -g时(vim已经使用GUI支持构建)有 没有python没有python3 .... enter image description here

configure.logtheremake.logthere

EDIT1 :以下作品,我现在只想念+perl +ruby

./configure --with-features=huge \
       --enable-tclinterp=yes \
       --enable-luainterp=yes \
       --enable-pythoninterp=yes \
       --enable-python3interp=yes \
       --with-compiledby=statquant \
       --prefix=$HOME/Build/vim \

make install # and yes it installs in $HOME/Build/vim  

enter image description here

EDIT2 以下是我尝试添加

时发生的情况
  1. + perl的
  2. 我可以跑

    ./configure --with-features=huge \
                --enable-tclinterp=yes \
                --enable-luainterp=yes \
                --enable-pythoninterp=yes \
                --enable-python3interp=yes \
                --enable-perlinterp=yes \
                --prefix=$HOME/Build/vim \
                --with-compiledby=statquant | tee configure.log
    

    似乎有效(无错误):configure.log

    make | tee make.log
    [...]
    cc1: error: -Wformat-security ignored without -Wformat [-Werror=format-security]
    <command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined
    <command-line>:0:0: note: this is the location of the previous definition
    cc1: some warnings being treated as errors
    make[1]: *** [objects/option.o] Error 1
    Makefile:2907: recipe for target 'objects/option.o' failed
    make[1]: Leaving directory '/home/statquant/Sources/vim/src'
    make: *** [first] Error 2
    Makefile:26: recipe for target 'first' failed
    

    我在vimmake.log

    中内置了/home/statquant/Sources/vim/src
    1. +红宝石

      ./ configure --with-features = huge \             --enable-tclinterp =是\             --enable-luainterp =是\             --enable-pythoninterp =是\             --enable-python3interp =是\             --enable-rubyinterp =是\             --prefix = $ HOME / Build / vim \             --with-compiledby = statquant | tee configure.log

    2. 它甚至没有运行configure

      checking --with-tlib argument... empty: automatic terminal library selection
      checking for tgetent in -ltinfo... no
      checking for tgetent in -lncurses... no
      checking for tgetent in -ltermlib... no
      checking for tgetent in -ltermcap... no
      checking for tgetent in -lcurses... no
      no terminal library found
      checking for tgetent()... configure: error: NOT FOUND!
            You need to install a terminal library; for example ncurses.
            Or specify the name of the library with --with-tlib.
      

      以下是日志:configure.log

5 个答案:

答案 0 :(得分:2)

好的......所以这就是事情。 VIM是那些拥有大量补丁的程序之一,Fedora在GCC级别执行一些安全检查,不允许你从源代码构建它(轻松),我的建议:重建源rpm,并不难:

安装所需的依赖项以重建VIM

您需要这些软件包才能在F23中构建VIM

sudo dnf install gtk2-devel ncurses-devel lua-devel perl-devel perl-ExtUtils-Embed perl-ExtUtils-ParseXS perl-ExtUtils-XSpp perl-ExtUtils-CBuilder python-devel python3-devel tcl-devel ruby-devel 

安装球拍库

我看到你正在传递需要球拍的--enable-mzschemeinterp旗帜,这不包括在官方回购中。

cat >/etc/yum.repos.d/rpm-sphere.repo <<EOF
[rpm-sphere]
name=RPM Sphere
baseurl=http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_23/
gpgkey=http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_23/repodata/repomd.xml.key
enabled=1
gpgcheck=1
EOF

安装RPM开发人员工具:

这些是安装工具以构建/重建rpms

所必需的
sudo dnf install @development-tools
sudo dnf install fedora-packager
sudo dnf install rpmdevtools

设置RPM构建根目录

在您的主文件夹rpmmacros上创建一个文件,如下所示:

vim ~/.rpmmacros

将以下内容添加到其中:

%_topdir    /home/statquant/Src/rpm

然后创建文件夹/home/statquant/Src/rpm

创建RPM构建必要文件夹

您需要拥有这些文件夹,以便在安装源rpm时存储源代码和规范文件:

mkdir -p ~/Src/rpm
cd ~/Src/rpm
mkdir BUILD RPMS SOURCES SPECS SRPMS
mkdir RPMS/{noarch,x86,x86_64}

下载VIM源RPM:

dnf dnl --source vim

这会将源rpm下载到当前文件夹,例如vim-7.4.1718-1.fc23.src.rpm

下载后,安装它:

rpm -ivh vim-7.4.1718-1.fc23.src.rpm

安装完成后,RPM应创建文件/home/statquant/Src/rpm/SPECS/vim.spec打开此文件。

修改配置选项

您将看到SPEC文件具有configure选项和make命令来构建实际的东西。这个文件很大,有很多补丁。您可以继续修改configure命令所在的区域,有3个:

  • 一个用于vim minimal
  • 一个用于vim增强
  • 一个用于vim的GUI版本

确保相应修改。我用你的选项进行了测试。你可以下载我的SPEC file here,vim,vim-enhanced和gvim工作正常。

重建RPM

修改(或从我的模板中复制)要根据该规范构建RPM的规范文件后,转到/home/statquant/Src/rpm然后:

rpmbuild -ba SPECS/vim.spec

这需要一段时间,在那之后,您应该看到一些输出说成功构建了包,在我的情况下:

Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/gustavo/Src/rpm/BUILDROOT/vim-7.4.1718-1.fc23.x86_64
Wrote: /home/gustavo/Src/rpm/SRPMS/vim-7.4.1718-1.fc23.src.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-common-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-minimal-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-enhanced-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-filesystem-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-X11-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-debuginfo-7.4.1718-1.fc23.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.tNsBuH
+ umask 022
+ cd /home/gustavo/Src/rpm/BUILD
+ cd vim74
+ rm -rf /home/gustavo/Src/rpm/BUILDROOT/vim-7.4.1718-1.fc23.x86_64
+ exit 0

安装新版本

所以现在你有了按照fedora推荐和补丁构建的软件包,你可以继续并重新安装它们(如果你已经有了默认的fedora vim版本,那可能是真的),如下所示:

cd /home/statquant/Src/rpm/RPMS/x86_64/
sudo dnf reinstall ./vim-common-7.4.1718-1.fc23.x86_64.rpm
sudo dnf reinstall ./vim-enhanced-7.4.1718-1.fc23.x86_64.rpm
etc...

请注意点和斜线意味着dnf正在尝试安装本地软件包,而不是搜索其下载已有版本的数据库。

注释

出于安全方面的考虑,我没有上传我自定义的软件包,但是如果你不介意或者想尝试一下ping我,我就可以上传它们,这样你就省去了所有这些麻烦...我已经拥有了所有这些RPM构建工具,因为我为我构建了一些here

您可能还想创建一个COPR存储库,以便自动执行此过程,如果您需要格式化磁盘,重新安装Fedora,将其安装在新计算机上,您只需添加存储库并使用dnf安装自定义包。

如果您有任何其他问题,请告诉我,祝您好运!

更新规范文件中有以# options for开头的注释,因此您可以跳转到实际的配置选项

答案 1 :(得分:0)

您已启用-Werror=format-security。这会将当前被视为“错误”的printfscanf格式的任何易受影响的用法视为对象。

您可以修复if_perl.c中的使用情况,我相信这是生成的文件。或删除标记-Werror=format-security

答案 2 :(得分:0)

python问题是这个......

--with-python-config-dir=/usr/lib64/python2.7/config \
--enable-python3interp=yes \

版本2配置版本3解释器。

您错过了ncurses-devel库,我可以看到您从配置中删除了它。

sudo yum install ncurses-devel

configure实际上对我有用,即使我没有安装perl dev软件包,也就是说它没有让我安装它们,我发现它们很奇怪。您是否已安装所有需要的开发包。

sudo yum install perl-devel
sudo yum install ruby-devel

答案 3 :(得分:0)

如果你缺少ruby或perl的dev包,配置脚本会说:&#34;禁用此选项&#34;。刚刚用红宝石做了这个。安装ruby-dev软件包后,在vim中启用了ruby选项。与libperl-dev相同。

答案 4 :(得分:0)

现在有关于此的Vim问题: https://github.com/vim/vim/issues/1081

我正在使用我在评论中提到的解决方法: https://github.com/vim/vim/issues/1081#issuecomment-269920486

我已经复制了下面的大部分评论,以防它可能有所帮助。

我在Fedora 25(x86_64)上遇到了这个问题。 Vim的配置脚本向ruby询问LDFLAGS没有关于CFLAGS的相应查询: https://github.com/vim/vim/blob/v8.0.0134/src/auto/configure#L7174

rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LDFLAGS']"`

自从Fedora 23以来,所有的RPM都已经变硬了#34;默认情况下: https://fedoraproject.org/wiki/Changes/Harden_All_Packages

构建RPM时,RPM SPEC文件中使用的%configure宏会自动调整,以使用强化设置提供CFLAGS,LDFLAGS和其他几个环境变量。使用Fedora的ruby包时,使用rbconfig的上述查询将返回强化的链接器标志。由于Vim的配置脚本没有使用相应的rbconfig来查询ruby的CFLAGS,因此编译和链接标志不匹配,导致错误:

configure: error: NOT FOUND!
      You need to install a terminal library; for example ncurses.
      Or specify the name of the library with --with-tlib.

在src / auto / config.log中,这种不匹配的标志会导致此错误:

configure:11318: checking for tgetent in -lncurses
configure:11343: gcc -o conftest -g -O2  -L. -Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,--enable-new-dtags -Wl,-z,relro    -L/usr/local/lib conftest.c -lncurses   -lselinux  >&5
/usr/bin/ld: /tmp/cckpDslF.o: relocation R_X86_64_PC32 against undefined symbol `tgetent' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

我可以通过解决方案成功构建,但我对autoconf的了解不足以建议对configure脚本进行适当的修复。解决方法涉及首先安装一些与RPM相关的包:

sudo dnf install -y rpm-build redhat-rpm-config

接下来,通过以下方式在shell提示符下设置这些变量:

eval $(rpmbuild --eval '%{configure}' | egrep '^\s*[A-Z]+=')

以上使用rpmbuild --eval&#39;%{configure}&#39;查询以多个环境变量赋值开头的%configure宏的定义。这提供了%configure宏中提供的相同默认编译环境。现在运行以下调用成功:

./configure --quiet --with-features=huge --enable-rubyinterp