source: ProjectBuilder/devel/pb/lib/ProjectBuilder/common.pm@ 68

Last change on this file since 68 was 68, checked in by Bruno Cornec, 17 years ago

Remove use of PBTOPDIR useless
delivery dir is cleaned of dir in it only now.
One level less generated during delivery (easier)

  • Property svn:executable set to *
File size: 3.6 KB
RevLine 
[2]1#!/usr/bin/perl -w
2#
3# Creates common environment
4#
5# $Id$
6#
7
[18]8use strict;
[5]9use lib qw (lib);
[52]10use ProjectBuilder::pb qw (pb_init);
[2]11use File::Basename;
[9]12use File::Path;
[2]13use File::Temp qw /tempdir/;
[8]14use Data::Dumper;
[2]15
[49]16$ENV{'PBETC'} = "$ENV{'HOME'}/.pbrc";
[5]17
[9]18sub env_init {
[2]19
[5]20my $proj=shift;
21my $ver;
22my $tag;
[2]23
[8]24#
[5]25# Check project name
[49]26# Could be with env var PBPROJ
27# or option -p
28# if not define take the first in conf file
[8]29#
[5]30if ((defined $ENV{'PBPROJ'}) &&
31 (not (defined $proj))) {
32 $proj = $ENV{'PBPROJ'};
33}
[49]34#
[67]35# Use project configuration file if needed
[49]36#
[67]37if (not defined $ENV{'PBROOT'}) {
38 pb_init("$ENV{'PBETC'}");
[49]39
[67]40 if (not defined $proj) {
41 # Take the first as the default project
42 $proj = (keys %pbroot)[0];
[49]43 print $LOG "Using $proj as default project as none has been specified\n" if (($debug >= 0) and (defined $proj));
[67]44 }
45 die "No project defined - use env var PBPROJ or -p proj" if (not (defined $proj));
46
47 $ENV{'PBROOT'} = $pbroot{$proj};
48} else {
49 die "No project defined - use env var PBPROJ or -p proj" if (not (defined $proj));
[49]50}
[2]51
[8]52#
[49]53# Check pb conf compliance
[8]54#
[49]55$ENV{'PBCONF'} = "$ENV{'PBROOT'}/pbconf";
56die "Project $proj not Project-Builder compliant. Please populate $ENV{'PBCONF'}" if ( not -d "$ENV{'PBCONF'}");
[2]57
[49]58if (-f "$ENV{'PBCONF'}/$proj.pb") {
59 pb_conf_init("$ENV{'PBCONF'}/$proj.pb");
[38]60} else {
[49]61 die "Unable to open $ENV{'PBCONF'}/$proj.pb";
[38]62}
63
[8]64#
[5]65# Check content
[8]66#
[18]67if (defined $confparam{"cvsroot"}) {
68 $ENV{'CVSROOT'} = $confparam{"cvsroot"};
[17]69}
70
[13]71die "defpkgdir doesn't exist in $ENV{'PBETC'}/$proj.pb" if (not (defined %defpkgdir));
[5]72
[8]73#
[5]74# Set temp directory
[8]75#
[7]76if (not defined $ENV{'TMPDIR'}) {
[2]77 $ENV{'TMPDIR'}="/tmp";
78}
[5]79$ENV{'PBTMP'} = tempdir( "pb.XXXXXXXXXX", DIR => $ENV{'TMPDIR'}, CLEANUP => 1 );
[2]80
[8]81#
[5]82# Get global VERSION
[8]83#
[11]84open(VER, "$ENV{'PBCONF'}/VERSION") || die "Unable to open $ENV{'PBCONF'}/VERSION: $?";
[5]85$ver = <VER>;
86chomp($ver);
[8]87#print Dumper(%version);
88die "Invalid version name $ver in $ENV{'PBROOT'}/VERSION" if ($ver !~ /[0-9.]+/) && (not exists $version{$ver});
[5]89$ENV{'PBVER'}=$ver;
90close(VER);
91
[8]92#
[5]93#Get global TAG
[8]94#
[11]95open(TAG, "$ENV{'PBCONF'}/TAG") || die "Unable to open $ENV{'PBCONF'}/TAG: $?";
[5]96$tag = <TAG>;
97chomp($tag);
[8]98die "Invalid tag name $tag in $ENV{'PBROOT'}/TAG" if ($tag !~ /[0-9]+/);
[5]99$ENV{'PBTAG'}=$tag;
100close(TAG);
101
[8]102#
[5]103# Adapt to your needs
104# Set delivery directory
[68]105# Removes all directory existing below as they are temp dir only
106# Files stay and have to be cleaned up manually
[8]107#
[25]108chdir "$ENV{'PBROOT'}/..";
109my $path = `pwd`;
110chomp($path);
[68]111$ENV{'PBDESTDIR'}=$path."/delivery";
[25]112if (-d $ENV{'PBDESTDIR'}) {
113 opendir(DIR,$ENV{'PBDESTDIR'}) || die "Unable to open directory $ENV{'PBDESTDIR'}: $!";
114 foreach my $d (readdir(DIR)) {
115 next if ($d =~ /^\./);
[68]116 next if (-f "$ENV{'PBDESTDIR'}/$d");
[25]117 pbrm_rf("$ENV{'PBDESTDIR'}/$d") if (-d "$ENV{'PBDESTDIR'}/$d");
118 }
119 closedir(DIR);
120}
121if (! -d "$ENV{'PBDESTDIR'}") {
122 pbmkdir_p($ENV{'PBDESTDIR'}) || die "Unable to recursively create $ENV{'PBDESTDIR'}";
123}
[5]124
[25]125#
126# Set build directory
127#
128$ENV{'PBBUILDDIR'}=$path."/build";
129pbrm_rf($ENV{'PBBUILDDIR'}) if (-d "$ENV{'PBBUILDDIR'}");
130pbmkdir_p($ENV{'PBBUILDDIR'}) || die "Unable to recursively create $ENV{'PBBUILDDIR'}";
131
[8]132umask 0022;
133return($proj);
[2]134}
[9]135
136sub pbmkdir_p {
[29]137my @dir = @_;
138my $ret = mkpath(@dir, 0, 0755);
139return($ret);
[9]140}
141
142sub pbrm_rf {
[29]143my @dir = @_;
144my $ret = rmtree(@dir, 0, 0);
145return($ret);
[9]146}
147
[29]148sub pbsystem {
149
150my $cmd=shift;
[30]151my $cmt=shift || $cmd;
[29]152
[30]153print $LOG "$cmt... ";
[29]154system("$cmd");
155if ($? == -1) {
156 print $LOG "failed to execute: $!\n" if ($debug >= 0);
157} elsif ($? & 127) {
158 printf $LOG "child died with signal %d, %s coredump\n", ($? & 127), ($? & 128) ? 'with' : 'without' if ($debug >= 0);
159} else {
[30]160 print $LOG "OK\n" if ($debug >= 0);
[29]161}
[30]162}
[2]1631;
Note: See TracBrowser for help on using the repository browser.