#!/usr/bin/perl -w =head1 NAME dh_illumos_make - build illumos sources =cut use strict; use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS B [S>] [B<-m>I] [B<-t>I] [B<--debug>] [B<--without-ctf>] [B<--without-mcs>] [B<--no-onbld>] [B<--native>] [directories] =head1 DESCRIPTION C 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. =head1 EXAMPLES dh_illumos_make -t install_h usr/src/uts is equivalent to cd illumos-gate ksh93 bldenv.sh 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 cd illumos-gate ksh93 bldenv.sh env.sh -c "cd usr/src/lib && /opt/SUNWspro/bin/dmake install" =head1 OPTIONS =over 4 =item B<-m>I B<--make=>I Make program to use. Default is F. =item B<-t>I B<--target=>I Target for I. Default is C which will build sources and install into proto area. =item B<--debug> Turn on debug build. This will execute ksh93 bldenv.sh -d env.sh ... instead of ksh93 bldenv.sh env.sh ... =item B<--without-ctf> Do not use CTF (I) tools during build. Every ELF object built from illumos sources should be processed by these tools, even F itself. This option is useful for bootstrapping when CTF tools are not available. This is implemented by setting corresponding environment variables to ":". =item B<--without-mcs> Do not manipulate the comment section of generated objects during build. These operations require MCS tool, which may not be available when bootstrapping. Likewise, variable C will be defined as ":". =item B<--no-onbld> Do not use C tools installed in system (F). Normally it only works and useful for building C itself. Otherwise F must be unpacked and built before any other component. If this option is given, F 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 will build those components using system native compiler. =back =head1 NOTES If illumos sources were unpacked with L, proto area is F. =cut $dh{'MAKE'} = '/usr/bin/make --sun'; $dh{'TARGET'} = 'install'; $dh{'WITHOUT_CTF'} = 0; $dh{'WITHOUT_MCS'} = 0; $dh{'NO_ONBLD'} = 0; init(options => { 'make|m=s' => \$dh{'MAKE'}, 'target|t=s' => \$dh{'TARGET'}, 'debug' => \$dh{'DEBUG'}, 'without-ctf' => \$dh{'WITHOUT_CTF'}, 'without-mcs' => \$dh{'WITHOUT_MCS'}, 'no-onbld' => \$dh{'NO_ONBLD'}, 'native' => \$dh{'NATIVE'}, }); my @dirs = ('usr/src'); if (@ARGV) { @dirs = @ARGV; } # Check whether all dirs exist before doing anything: foreach (@dirs) { s,.*illumos-gate/+,,; if (! -d "illumos-gate/$_") { error("`illumos-gate/$_' does not exist or not a directory"); } } # Build in each dir: # Sanity checks: foreach (qw/bldenv.sh env.sh/) { if (! -r "illumos-gate/$_") { error("`$_' not found under illumos-gate. Maybe illumos sources were not properly unpacked.") } } my $opts = ''; $opts .= '-d' if $dh{'DEBUG'}; my $onbld = $dh{'NO_ONBLD'} ? '-t' : '+t'; $opts .= $onbld; my $env = ''; $env .= ' MCS=:' if $dh{'WITHOUT_MCS'}; $env .= ' CTFCONVERT=:' if $dh{'WITHOUT_CTF'}; $env .= ' CTFMERGE=:' if $dh{'WITHOUT_CTF'}; if ($dh{'NATIVE'}) { $env .= ' i386_XARCH='; $env .= ' LDLIBS32="\$LDLIBS_NATIVE"'; } $env = "export $env &&" if $env; foreach (@dirs) { complex_doit(qq!cd illumos-gate && ksh93 bldenv.sh $opts env.sh -c "cd $_ && $env $dh{'MAKE'} $dh{'TARGET'}"!); } =head1 SEE ALSO L, L. =head1 AUTHOR Igor Pashev =cut