xref: /openbsd-src/gnu/usr.bin/perl/ext/re/Makefile.PL (revision 3d61058aa5c692477b6d18acfbbdb653a9930ff9)
1use strict;
2use warnings;
3use ExtUtils::MakeMaker;
4use File::Spec;
5use Config;
6#   [ src => @deps ]
7our @files = (
8    # compiler files ########################################
9    ['regcomp.c'        => 'dquote.c', 'invlist_inline.h'   ],
10    ['regcomp_invlist.c' => 'invlist_inline.h'              ],
11    ['regcomp_study.c'                                      ],
12    ['regcomp_trie.c'                                       ],
13    ['regcomp_debug.c'                                      ],
14    # execution engine files ################################
15    ['regexec.c'        => 'invlist_inline.h'               ],
16    # misc files ############################################
17    ['dquote.c'                                             ],
18    ['invlist_inline.h'                                     ],
19    #########################################################
20);
21
22my @objects = 're$(OBJ_EXT)';
23foreach my $tuple (@files) {
24    my $src_file = $tuple->[0];
25    if ($src_file=~s/reg/re_/ and $src_file=~s/\.c/\$(OBJ_EXT)/) {
26        push @objects, $src_file;
27    }
28}
29
30my $defines = '-DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT';
31my %args;
32for my $arg (@ARGV) {
33    $args{$1} = $2 if $arg =~ /^(\w+)=(.*)$/;
34}
35if ($args{LINKTYPE} eq "static") {
36    $defines .= ' -DPERL_EXT_RE_STATIC';
37}
38
39my @libs;
40if ($^O eq 'cygwin' && $Config{usequadmath}) {
41    push @libs, qw(quadmath);
42}
43WriteMakefile(
44    NAME		=> 're',
45    @libs ? ( 'LIBS' => [ join(" ", map { "-l$_" } @libs) ] ) : (),
46    VERSION_FROM	=> 're.pm',
47    XSPROTOARG		=> '-noprototypes',
48    OBJECT		=> "@objects",
49    DEFINE             => $defines,
50    clean		=> { FILES => '*$(OBJ_EXT) invlist_inline.h *.c ../../lib/re.pm' },
51);
52
53package MY;
54sub upupfile {
55    File::Spec->catfile(File::Spec->updir, File::Spec->updir, $_[0]);
56}
57
58sub postamble {
59    my $postamble = "";
60
61    foreach my $tuple (@::files) {
62        my ($file, @deps) = @$tuple;
63        my $src_file = upupfile($file);
64        my $target = $file;
65        $target =~ s/^reg/re_/;
66        $postamble .=
67    <<EOF;
68$target : $src_file
69	- \$(RM_F) $target
70	\$(CP) $src_file $target
71
72EOF
73        next if $target eq $file;
74        my $base_name = $target;
75        if ($base_name=~s/\.c\z//) {
76            $postamble .= <<EOF
77$base_name\$(OBJ_EXT) : $target @deps
78
79EOF
80        }
81    }
82    return $postamble
83}
84
85sub MY::c_o {
86    my($self) = @_;
87    package MY; # so that "SUPER" works right
88    my $inh = $self->SUPER::c_o(@_);
89    use Config;
90    if ($Config{osname} eq 'aix' && $Config{ccversion} eq '5.0.1.0') {
91	# Known buggy optimizer.
92	my $cccmd = $self->const_cccmd;
93	$cccmd =~ s/^CCCMD\s*=\s*//;
94	$cccmd =~ s/\s\$\(OPTIMIZE\)\s/ /;
95	$inh .= qq{
96
97re_comp\$\(OBJ_EXT\): re_comp.c
98\t$cccmd \$(CCCDLFLAGS) -I\$(PERL_INC) \$(DEFINE) \$*.c
99};
100    }
101    $inh;
102}
103