Codebase list libcryptx-perl / 6179e02
tuning Makefile.PL Karel Miko 6 years ago
1 changed file(s) with 57 addition(s) and 50 deletion(s). Raw diff Collapse all Expand all
22 use ExtUtils::MakeMaker;
33 use Config;
44
5 my @myobjs = map { s|.c$|$Config{obj_ext}|; $_ } grep { $_ !~ m|^src/ltc/\.*tab\.c$| } (
6 glob('src/ltm/*.c'),
7 glob('src/ltc/*/*.c'),
8 glob('src/ltc/*/*/*.c'),
9 glob('src/ltc/*/*/*/*.c'),
10 glob('src/ltc/*/*/*/*/*.c'),
11 );
12 my $myextlib = "src/liballinone$Config{lib_ext}";
13 my $mycflags = "$Config{ccflags} $Config{cccdlflags} $Config{optimize}";
5 my (@EUMM_INC_LIB, $myarflags, $mycflags);
146
15 #FIX: this is particularly useful for Debian https://github.com/DCIT/perl-CryptX/pull/39
16 $mycflags .= " $ENV{CFLAGS}" if $ENV{CFLAGS};
17 $mycflags .= " $ENV{CPPFLAGS}" if $ENV{CPPFLAGS};
7 if ($ENV{CRYPTX_CFLAGS} || $ENV{CRYPTX_LDFLAGS}) {
8 # EXPERIMENTAL: use system libraries libtomcrypt + libtommath
9 # e.g.
10 # CRYPTX_LDFLAGS='-L/usr/local/lib -ltommath -ltomcrypt' CRYPTX_CFLAGS='-DLTM_DESC -I/usr/local/include' perl Makefile.PL
11 print "CRYPTX_CFLAGS = $ENV{CRYPTX_CFLAGS}\n" if $ENV{CRYPTX_CFLAGS};
12 print "CRYPTX_LDFLAGS = $ENV{CRYPTX_LDFLAGS}\n" if $ENV{CRYPTX_LDFLAGS};
13 @EUMM_INC_LIB = (
14 INC => $ENV{CRYPTX_CFLAGS},
15 LIBS => [ $ENV{CRYPTX_LDFLAGS} ],
16 );
17 }
18 else {
19 # PREFERRED: use bundled libtomcrypt + libtommath (from ./src subdir)
20 my @myobjs = map { s|.c$|$Config{obj_ext}|; $_ } grep { $_ !~ m|^src/ltc/\.*tab\.c$| } (
21 glob('src/ltm/*.c'),
22 glob('src/ltc/*/*.c'),
23 glob('src/ltc/*/*/*.c'),
24 glob('src/ltc/*/*/*/*.c'),
25 glob('src/ltc/*/*/*/*/*.c'),
26 );
27 $mycflags = "$Config{ccflags} $Config{cccdlflags} $Config{optimize}";
1828
19 #FIX: gcc with -flto is a trouble maker see https://github.com/DCIT/perl-CryptX/issues/32
20 $mycflags =~ s/-flto\b//g;
29 #FIX: this is particularly useful for Debian https://github.com/DCIT/perl-CryptX/pull/39
30 $mycflags .= " $ENV{CFLAGS}" if $ENV{CFLAGS};
31 $mycflags .= " $ENV{CPPFLAGS}" if $ENV{CPPFLAGS};
2132
22 #FIX: avoid -Wwrite-strings -Wcast-qual -pedantic -pedantic-errors -ansi -std=c89
23 $mycflags =~ s/-pedantic\b//g;
24 $mycflags =~ s/-pedantic-errors\b//g;
25 $mycflags =~ s/-std=c89\b//g;
26 $mycflags =~ s/-ansi\b//g;
27 $mycflags =~ s/-Wwrite-strings\b//g;
28 $mycflags =~ s/-Wcast-qual\b//g;
33 #FIX: gcc with -flto is a trouble maker see https://github.com/DCIT/perl-CryptX/issues/32
34 $mycflags =~ s/-flto\b//g;
2935
30 #FIX: avoid "ar: fatal: Numeric group ID too large" see https://github.com/DCIT/perl-CryptX/issues/33
31 my $myarflags = '$(AR_STATIC_ARGS)';
32 if ($^O ne 'MSWin32' && $Config{ar}) {
33 # for ar's "deterministic mode" we need GNU binutils 2.20+ (2009-10-16)
34 my $arver = `$Config{ar} --version 2>/dev/null`;
35 my ($maj, $min) = $arver =~ /^GNU ar [^\d]*(\d)\.(\d+)\.\d+/s;
36 $myarflags = 'rcD' if ($maj && $min && $maj >= 2 && $min >= 20) || $arver=~ /^BSD ar /;
36 #FIX: avoid -Wwrite-strings -Wcast-qual -pedantic -pedantic-errors -ansi -std=c89
37 $mycflags =~ s/-pedantic\b//g;
38 $mycflags =~ s/-pedantic-errors\b//g;
39 $mycflags =~ s/-std=c89\b//g;
40 $mycflags =~ s/-ansi\b//g;
41 $mycflags =~ s/-Wwrite-strings\b//g;
42 $mycflags =~ s/-Wcast-qual\b//g;
43
44 #FIX: avoid "ar: fatal: Numeric group ID too large" see https://github.com/DCIT/perl-CryptX/issues/33
45 $myarflags = '$(AR_STATIC_ARGS)';
46 if ($^O ne 'MSWin32' && $Config{ar}) {
47 # for ar's "deterministic mode" we need GNU binutils 2.20+ (2009-10-16)
48 my $arver = `$Config{ar} --version 2>/dev/null`;
49 my ($maj, $min) = $arver =~ /^GNU ar [^\d]*(\d)\.(\d+)\.\d+/s;
50 $myarflags = 'rcD' if ($maj && $min && $maj >= 2 && $min >= 20) || $arver=~ /^BSD ar /;
51 }
52 @EUMM_INC_LIB = (
53 INC => '-DLTM_DESC -Isrc/ltc/headers -Isrc/ltm',
54 MYEXTLIB => "src/liballinone$Config{lib_ext}",
55 clean => { 'FILES' => join(' ', @myobjs, "src/liballinone$Config{lib_ext}") },
56 );
3757 }
3858
3959 my %eumm_args = (
4565 LICENSE => 'perl_5',
4666 META_MERGE => { resources => { repository => 'https://github.com/DCIT/perl-CryptX', bugtracker => 'https://github.com/DCIT/perl-CryptX/issues' } },
4767 dist => { 'PREOP' => 'perldoc -u lib/CryptX.pm | pod2markdown > README.md' },
48 ($ENV{CRYPTX_CFLAGS} || $ENV{CRYPTX_LDFLAGS})
49 ?
50 (
51 # e.g. CRYPTX_LDFLAGS='-L/usr/local/lib -ltommath -ltomcrypt' CRYPTX_CFLAGS='-DLTM_DESC -I/usr/local/include' perl Makefile.PL
52 INC => $ENV{CRYPTX_CFLAGS},
53 LIBS => [ $ENV{CRYPTX_LDFLAGS} ],
54 )
55 :
56 (
57 # bundled libtomcrypt + libtommath
58 INC => '-DLTM_DESC -Isrc/ltc/headers -Isrc/ltm',
59 MYEXTLIB => $myextlib,
60 clean => { 'FILES' => join(' ', @myobjs, $myextlib) },
61 )
68 @EUMM_INC_LIB
6269 );
6370
64 my $eumm_ver = eval $ExtUtils::MakeMaker::VERSION;
71 my $eumm_ver = eval $ExtUtils::MakeMaker::VERSION;
6572 delete $eumm_args{MIN_PERL_VERSION} if $eumm_ver < 6.48;
6673 delete $eumm_args{META_ADD} if $eumm_ver < 6.46;
6774 delete $eumm_args{META_MERGE} if $eumm_ver < 6.46;
6976
7077 WriteMakefile(%eumm_args);
7178
72 # ARFLAGS=\$(AR_STATIC_ARGS) RANLIB=\$(RANLIB) AR=\$(AR)
79 sub MY::postamble {
80 return "" unless $mycflags && $myarflags;
7381
74 sub MY::postamble {
75 my $myextlib = qq{
82 my $extra_targets = qq{
7683 \$(MYEXTLIB): src/Makefile
7784 cd src && \$(MAKE) ARFLAGS="$myarflags" RANLIB="\$(RANLIB)" AR="\$(AR)" CC="\$(CC)" LIB_EXT=\$(LIB_EXT) OBJ_EXT=\$(OBJ_EXT) CFLAGS="$mycflags"
7885 };
7986
80 $myextlib = qq{
87 $extra_targets = qq{
8188 \$(MYEXTLIB): src/Makefile
8289 cd src && \$(MAKE) -f Makefile.nmake CFLAGS="$mycflags"
8390 } if $^O eq 'MSWin32' && $Config{make} =~ /nmake/ && $Config{cc} =~ /cl/;
8491
85 $myextlib = qq{
92 $extra_targets = qq{
8693 \$(MYEXTLIB): src/Makefile
8794 cd src && \$(MAKE) CC="$Config{cc}" CFLAGS="$mycflags"
8895 } if $^O eq 'MSWin32' && $Config{cc} =~ /gcc/;
8996
90 my $version_patch = q{
97 $extra_targets .= q{
9198 versionsync:
9299 $(NOECHO) perl _generators/version_patch.pl sync
93100 versioninc:
113120
114121 };
115122
116 return "$myextlib\n$version_patch";
123 return $extra_targets;
117124 }