迫切需要帮助使用Strawberry Perl编译Font :: FreeType CPAN模块

时间:2013-01-31 21:18:10

标签: perl

几天以来,我一直在网上搜索,诅咒和撕扯我的头发,试图用 dmake 编译Font::FreeType dwimperl-5.14.2.1- v7-32bit (Strawberry Perl 5.14.2.1)。对于开场白, FreeType.xs 文件中有几个错误,我在Bug #32713 for Font-FreeType: patch for Font-FreeType-0.03找到了补丁。可爱。这个模块的最后一次更新是2004年9月11日(注意当天)所以它确实已经死了,但我需要它来使用perlcairo的REAL字体。所以我决心(绝望)让它发挥作用。到目前为止,我使用cpan没有问题,除了这个模块。实际上 Strawberry Perl 是我用过的唯一一款实际上与CPAN开箱即用的Windows perl。这显然是一个流氓模块。甚至* nix用户也遇到过问题。

我读了How do I fix Perl's Font::FreeType compilation errors?但没有帮助,所以我认为新的线程是合理的。

Number found where operator expected at Makefile.PL line 17, near "my $font_filename = catfile($data_dir, '5"
  (Might be a runaway multi-line '' string starting on line 9)
    (Do you need to predeclare my?)

Makefile.pl:

1  use ExtUtils::MakeMaker;
2  use File::Spec::Functions;
3  
4  WriteMakefile(
5      NAME            => 'Font::FreeType',
6      AUTHOR          => 'Geoff Richards <qef@laxan.com>',
7      VERSION_FROM    => 'lib/Font/FreeType.pm',
8      LIBS            => [ '-lfreetype' ],
9      INC             => '-I/usr/include/freetype2',
10     NO_META         => 1,
11 );
12 
13 
14 # Generate a listing of the characters in the BDF test font, for checking
15 # that the library can find them all.  See t/10metrics_5x7bdf.t
16 my $data_dir = catdir(qw( t data ));
17 my $font_filename = catfile($data_dir, '5x7.bdf');

使用perl运行得很好所以dmake的问题是什么?如果我只是用perl运行它, dmake 将重新运行它。我无法弄清楚如何让 dmake 只使用那里的东西,我在 dmake 上找不到真正的文档,只是无用的帮助和手册页(至少没用到我)。

我尝试向 $ data_dir 添加一个尾部斜杠但是同样的错误。最后,我将 $ font_filename 设置为完整路径。我知道原油,但它确实有效。

所以现在创建 FreeType.c ,但现在存在路径问题:

gcc -c  -I/usr/include/freetype2    -s -O2 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-bitfields -s -O2     -DVERSION=\"0.03\"    -DXS_VERSION=\"0.03\"  "-IC:\Dwimperl\perl\lib\CORE"   FreeType.c
FreeType.xs:19:22: fatal error: ft2build.h: No such file or directory

FreeType.c包含:

#include <ft2build.h>
#include FT_FREETYPE_H

我尝试在 Makefile.pl 中更改包含路径,但我真的不知道“正确”的方法:

WriteMakefile(
    .
    LIBS            => '-LC:/gtk/lib -lfreetype',
    INC             => '-IC:/gtk/include/freetype2 -IC:/gtk/include -IC:/Dwimperl/c/include',

我认为现在问题是将* nix路径转换为Windows路径,以便编译器可以找到所有头文件。有没有人使用ANY编译器在Windows中成功编译了该死的模块?或者至少有人知道如何为 WriteMakefile 指定Windows路径吗?

1 个答案:

答案 0 :(得分:1)

我也试图使用cpan来安装最新的FreeType模块在cygwin上安装:

$ cpan

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]> install Font::FreeType

我遇到的第一个问题是在制作阶段。 Make抱怨无法找到ft2build.h。

然后我意识到我必须首先下载并编译/安装FreeType库(doh!)。因此,我从FreeType download页面下载了最新版本,并按如下方式安装:

$ cd cygwin/freetype-2.4.0
$ ./configure
...
$ make
...
$ make install

下一个问题是,当我再次尝试在cpan中创建模块时,它在ft2build.h中的以下行失败了:

#include <freetype/config/ftheader.h>

如果您查看实际文件(在我的系统中的/usr/local/include/ft2build.h中,但它可能在您的其他地方),您将在该行之前看到此注释:

/* `<prefix>/include/freetype2' must be in your current inclusion path */

所以,我设置了适当的环境变量(我相信“正确”的方式 - 比修改make文件中的“INC”行更好):

$ C_INCLUDE_PATH=/usr/local/include/freetype2
$ export C_INCLUDE_PATH

在解决之后,我遇到的下一个问题是左值错误:

$ cpan install Font::FreeType
CPAN: Storable loaded ok (v2.27)
...
FreeType.xs:808:21: error: lvalue required as left operand of assignment
...
Makefile:340: recipe for target `FreeType.o' failed
make: *** [FreeType.o] Error 1
  GEOFFR/Font-FreeType-0.03.tar.gz
  /usr/bin/make -- NOT OK
CPAN: YAML loaded ok (v0.84)
Running make test
  Can't test without successful make
Running make install
  Make had returned bad status, install seems impossible

我知道你已经解决了这个问题,但我会在这里发布信息以防其他人遇到它。将补丁文件从here保存到FreeType.xs.diff(您的Font-FreeType-0.03目录可能以不同方式命名),应用它,以及如下所示进行make / compile。请注意,由于我们修改了模块,因此无法再使用cpan,因此我们手动完成:

$ cd ~/.cpan/build/Font-FreeType-0.03
$ patch FreeType.xs FreeType.xs.diff
patching file FreeType.xs

$ make
Makefile out-of-date with respect to Makefile.PL
...
==> Your Makefile has been rebuilt. <==
==> Please rerun the make command.  <==
false
Makefile:866: recipe for target `Makefile' failed
make: *** [Makefile] Error 1

$ make
cp lib/Font/FreeType.pm blib/lib/Font/FreeType.pm
...
Manifying blib/man3/Font.FreeType.3pm

$ make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
...
Appending installation info to /usr/lib/perl5/5.14/i686-cygwin-threads-64int/perllocal.pod

瞧!它被编译了!另一件需要指出的是,我使用了常规的gnu make而不是dmake,正如Borodin先前指出的那样。 FreeType安装说明说你必须运行GNU Make 3.80或更高版本。您可以查看已安装的make版本,如下所示:

$ make -v
GNU Make 3.82.90
Built for i686-pc-cygwin
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.