summaryrefslogtreecommitdiff
path: root/dh_illumos_make
blob: 4b788b22151ebc9d10c3a70ba67647787cff80a8 (plain)
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#!/usr/bin/perl -w

=head1 NAME

dh_illumos_make - build illumos sources

=cut

use strict;
use Debian::Debhelper::Dh_Lib;
use Cwd;

=head1 SYNOPSIS

B<dh_illumos_make> [S<I<debhelper options>>] [B<-m>I<make program>]
[B<-t>I<target>] [B<--debug>] [B<--ctf>]
[B<--no-onbld>] [B<--native>]
[directories]

=head1 DESCRIPTION

C<dh_illumos_make> is responsible for building illumos sources.
If no directories specified, it will build entire illumos gate (not recommended,
and probably will fail). If directories are given, it will build within those directories
in order. Illumos sources should be previously unpacked with L<dh_illumos_gate(1)>.

=head1 EXAMPLES

    dh_illumos_make -t install_h usr/src/uts is equivalent to

    ksh93 usr/bldenv.sh usr/env.sh -c "cd usr/src/uts && /usr/bin/make --sun install_h"


    dh_illumos_make -m /opt/SUNWspro/bin/dmake usr/src/lib is equivalent to

    ksh93 usr/bldenv.sh usr/env.sh -c "cd usr/src/lib && /opt/SUNWspro/bin/dmake install"


=head1 OPTIONS

=over 4

=item B<--root=>I<path>

Defines root directory where build result will be installed: executables, libraries, headers, etc.
Overrides one configured by L<dh_illumos_gate(1)>.

Proto directory to install build results in. If absent, it will be created.

=item B<-m>I<make program> B<--make=>I<make program>

Make program to use. Default is F</usr/bin/make --sun>.

=item B<-t>I<target> B<--target=>I<target>

Target for I<make program>. Default is C<install> which will build
sources and install into proto area.

=item B<--debug>

Turn on debug build. This will execute 

    ksh93 usr/bldenv.sh -d usr/env.sh ...

instead of

    ksh93 usr/bldenv.sh usr/env.sh ...

=item B<--ctf>

Do use CTF (I<Compact C Type Format>) tools during build.
Every ELF object built from illumos sources used to be processed
by these tools, even F<libctf> itself. As a side effect any
debug information is being stripped out from resulting binaries.
This is not acceptable on Debian, so CTF is not used by default.

=item B<--no-onbld>

Do not use C<onbld> tools installed in system (F</opt/onbld>). Normally it only works
and useful for building C<onbld> itself. Otherwise F<usr/src/tools>
must be unpacked and built before any other component.
If this option is given, F<bldenv.sh> is called with C<-t> option instead of C<+t>.

=item B<--native>

Some components have both 32- and 64-bit versions, others have no architecture
specific versions.  Such components assumed to be 32-bit, and on 64-bit system
it is incorrect. With this option C<dh_illumos_make> will build those
components using system native compiler.

=back

=head1 NOTES

If illumos sources were unpacked with L<dh_illumos_gate(1)>,
proto area is F<debian/tmp>.

=cut

$dh{'MAKE'}     = '/usr/bin/make --sun';
$dh{'TARGET'}   = 'install';
$dh{'CTF'}      = 0;
$dh{'NO_ONBLD'} = 0;

my $cwd = getcwd();

init(
    options => {
        'ctf!'       => \$dh{'CTF'},
        'debug'      => \$dh{'DEBUG'},
        'make|m=s'   => \$dh{'MAKE'},
        'native'     => \$dh{'NATIVE'},
        'no-onbld'   => \$dh{'NO_ONBLD'},
        'root=s'     => \$dh{'ROOT'},
        'target|t=s' => \$dh{'TARGET'},
    }
);

my @dirs = ('usr/src');
if (@ARGV) {
    @dirs = @ARGV;
}

# Check whether all dirs exist before doing anything:
foreach (@dirs) {
    s,.*illumos-gate/+,,;
    if ( !-d "$_" ) {
        error("`$_' does not exist or not a directory");
    }
}

my $opts = '';
$opts .= '-d' if $dh{'DEBUG'};
my $onbld = $dh{'NO_ONBLD'} ? '-t' : '+t';
$opts .= $onbld;

my $override = '';
if ( !$dh{CTF} ) {
    $override .= ' CTFCONVERT=: CTFMERGE=:';
}

if ( $dh{ROOT} ) {
    doit( 'mkdir', '-p', $dh{ROOT} );
    chdir $dh{ROOT};
    $override .= ' ROOT="' . getcwd() . '"';
    chdir $cwd;
}

if ( $dh{'NATIVE'} ) {
    my $deb_host_arch_cpu = `dpkg-architecture -qDEB_HOST_ARCH_CPU`;
    chomp $deb_host_arch_cpu;
    $override .= ' i386_XARCH=';

    # We need to propogate it through perl and shell to make:
    $override .= " LDLIBS32='\\\$(LDLIBS_NATIVE)'";
    $override .= " MAPFILE.NGB='\\\$(MAPFILE.NGB_$deb_host_arch_cpu)'";
}

foreach (@dirs) {
    my $root = s!(.*)usr/.*!$1!r;
    complex_doit(
qq!ksh93 ${root}usr/bldenv.sh $opts ${root}usr/env.sh -c "cd $_ && $dh{'MAKE'} $dh{'TARGET'} $override"!
    );
}

=head1 SEE ALSO

L<debhelper(7)>, L<dh_illumos_gate(1)>.

=head1 AUTHOR

Igor Pashev <pashev.igor@gmail.com>

=cut