1# $OpenBSD: LoFile.pm,v 1.6 2023/07/06 08:29:26 espie Exp $
2
3# Copyright (c) 2007-2010 Steven Mestdagh <steven@openbsd.org>
4# Copyright (c) 2012 Marc Espie <espie@openbsd.org>
5#
6# Permission to use, copy, modify, and distribute this software for any
7# purpose with or without fee is hereby granted, provided that the above
8# copyright notice and this permission notice appear in all copies.
9#
10# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
18use v5.36;
19
20package LT::LoFile;
21use parent qw(LT::LaLoFile);
22use File::Basename;
23use LT::Util;
24
25# write a libtool object file
26sub write($self, $filename)
27{
28	my $picobj = $self->stringize('picobj');
29	my $nonpicobj = $self->stringize('nonpicobj');
30
31	my $name = basename $filename;
32
33	open(my $lo, '>', $filename) or die "Cannot write $filename: $!\n";
34	say "creating $filename" if $main::verbose;
35	print $lo <<EOF
36# $name - a libtool object file
37# Generated by libtool $version
38#
39pic_object='$picobj'
40non_pic_object='$nonpicobj'
41EOF
42;
43}
44
45sub compile($self, $compiler, $odir, $args)
46{
47	mkdir "$odir/$ltdir" unless -d "$odir/$ltdir";
48	if (defined $self->{picobj}) {
49		my @cmd = @$compiler;
50		push @cmd, @$args if @$args;
51		push @cmd, @{$self->{picflags}}, '-o';
52		my $o = ($odir eq '.') ? '' : "$odir/";
53		$o .= $self->{picobj};
54		push @cmd, $o;
55		LT::Exec->compile(@cmd);
56	}
57	if (defined $self->{nonpicobj}) {
58		my @cmd = @$compiler;
59		push @cmd, @$args if @$args;
60		push @cmd, @{$self->{nonpicflags}}, '-o';
61		my $o = ($odir eq '.') ? '' : "$odir/";
62		$o .= $self->{nonpicobj};
63		push @cmd, $o;
64		LT::Exec->compile(@cmd);
65	}
66}
67
681;
69