-
Notifications
You must be signed in to change notification settings - Fork 138
/
gettext.pm
99 lines (76 loc) · 2.31 KB
/
gettext.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# Copyright (C) 2008, Parrot Foundation.
=head1 NAME
config/auto/gettext.pm - Test for GNU native language support (gettext) library
=head1 DESCRIPTION
Determines whether the platform supports gettext. This is needed for parrot
internationalization.
From L<http://www.gnu.org/software/gettext/>: "[T]he GNU `gettext' utilities
are a set of tools that provides a framework to help other GNU packages
produce multi-lingual messages."
=cut
package auto::gettext;
use strict;
use warnings;
use base qw(Parrot::Configure::Step);
use Parrot::Configure::Utils ':auto';
sub _init {
my $self = shift;
my %data;
$data{description} = q{Does your configuration include gettext};
$data{result} = q{};
return \%data;
}
sub runstep {
my ( $self, $conf ) = @_;
my $without = $conf->options->get( qw| without-gettext | );
if ($without) {
$conf->data->set( has_gettext => 0 );
$self->set_result('skipped');
return 1;
}
my $osname = $conf->data->get('osname');
my $extra_libs = $self->_select_lib( {
conf => $conf,
osname => $osname,
cc => $conf->data->get('cc'),
win32_gcc => '-lintl',
win32_nongcc => 'intl.lib',
default => defined $conf->data->get('glibc') ? '' : '-lintl',
} );
$conf->cc_gen('config/auto/gettext/gettext_c.in');
eval { $conf->cc_build( q{}, $extra_libs ); };
my $has_gettext = 0;
if ( !$@ ) {
my $test = $conf->cc_run();
$has_gettext = $self->_evaluate_cc_run($conf, $test);
}
if ($has_gettext) {
_handle_gettext($conf, $extra_libs);
}
$conf->data->set( HAS_GETTEXT => $has_gettext );
return 1;
}
sub _evaluate_cc_run {
my ($self, $conf, $test) = @_;
my $has_gettext = 0;
if ( $test eq "Hello, world!\n" ) {
$has_gettext = 1;
$conf->debug(" (yes) ");
$self->set_result('yes');
}
return $has_gettext;
}
sub _handle_gettext {
my ($conf, $libs) = @_;
$conf->data->add( ' ', ccflags => "-DHAS_GETTEXT" );
$conf->data->add( ' ', libs => $libs );
$conf->debug("\n ccflags: ", $conf->data->get("ccflags"), "\n");
return 1;
}
1;
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4: