4 unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
15 my $servicedir = '/usr/lib/obs/service';
20 opendir(D, $_[0]) || return ();
21 my @r = grep {$_ ne '.' && $_ ne '..'} readdir(D);
29 my $servicexml = Build::SimpleXML::parse($xml);
30 die("not a valid _service file\n") unless $servicexml && $servicexml->{'services'};
31 $servicexml = $servicexml->{'services'}->[0];
34 if ($buildroot ne '') {
35 $tempdir = File::Temp::tempdir('CLEANUP' => 1, 'DIR' => "$buildroot/tmp");
36 die("bad tempdir\n") unless $tempdir =~ s/^\Q$buildroot\E//;
38 $tempdir = File::Temp::tempdir('CLEANUP' => 1);
41 # take default version setting
42 for my $s (@{$servicexml->{'service'} || []}) {
43 # buildtime only is default
44 next unless $s->{'mode'} && $s->{'mode'} eq 'buildtime';
45 die("missing name in service\n") unless $s->{'name'};
47 if (! -x "$buildroot$servicedir/$s->{'name'}") {
48 die("service '$s->{'name'}' configured to run, but is not available\n");
52 push @run, "$servicedir/$s->{'name'}";
53 for my $param (@{$s->{'param'}}) {
54 next if $param->{'name'} eq 'outdir';
55 next unless $param->{'_content'};
56 push @run, "--$param->{'name'}";
57 push @run, $param->{'_content'};
59 push @run, "--outdir";
62 die("fork: $!\n") unless defined $pid;
64 if ($buildroot ne '') {
65 chroot($buildroot) || die("chroot $buildroot: $!\n");
70 1 while waitpid($pid, 0) != $pid;
71 die("service run failed for service '$s->{'name'}'\n") if $?;
73 for my $file (grep {!/^[:\.]/} ls("$buildroot$tempdir")) {
74 File::Copy::move("$buildroot$tempdir/$file", $file) if -f "$buildroot$tempdir/$file";
79 if (@ARGV > 1 && $ARGV[0] eq '--buildroot') {
81 $buildroot = shift @ARGV;
82 $buildroot = '' if $buildroot && $buildroot eq '/';
83 die("bad buildroot\n") unless $buildroot eq '' || $buildroot =~ /^\//;
87 open(F, '<', '_service') || die("_service: $!\n");
89 1 while sysread(F, $xml, 4096, length($xml)) > 0;