source: ProjectBuilder/devel/pb-modules/lib/ProjectBuilder/Env.pm@ 2310

Last change on this file since 2310 was 2310, checked in by Bruno Cornec, 7 years ago

Create pb_env_create_dirs to allow later directory creation

File size: 40.9 KB
Line 
1#!/usr/bin/perl -w
2#
3# Project Builder Env module
4# Env subroutines brought by the the Project-Builder project
5# which can be easily used by pbinit scripts
6#
7# Copyright B. Cornec 2007-2016
8# Eric Anderson's changes are (c) Copyright 2012 Hewlett Packard
9# Provided under the GPL v2
10#
11# $Id$
12#
13
14package ProjectBuilder::Env;
15
16use strict 'vars';
17use Data::Dumper;
18use English;
19use File::Basename;
20use File::stat;
21use POSIX qw(strftime);
22use lib qw (lib);
23use ProjectBuilder::Version;
24use ProjectBuilder::Base;
25use ProjectBuilder::Conf;
26use ProjectBuilder::VCS;
27
28# Inherit from the "Exporter" module which handles exporting functions.
29
30use vars qw($VERSION $REVISION @ISA @EXPORT);
31use Exporter;
32
33# Export, by default, all the functions into the namespace of
34# any code which uses this module.
35
36our @ISA = qw(Exporter);
37our @EXPORT = qw(pb_env_init pb_env_init_pbrc);
38($VERSION,$REVISION) = pb_version_init();
39
40=pod
41
42=head1 NAME
43
44ProjectBuilder::Env, part of the project-builder.org
45
46=head1 DESCRIPTION
47
48This modules provides environment functions suitable for pbinit calls.
49
50=head1 USAGE
51
52=over 4
53
54=item B<pb_env_init_pbrc>
55
56This function setup/use the configuration file in the HOME directory
57It sets up environment variables (PBETC)
58
59=cut
60
61sub pb_env_init_pbrc {
62
63# if sudo, then get the real id of the user launching the context
64# to point to the right conf file
65# Mandatory for rpmbootstrap calls
66my $dir;
67
68if (defined $ENV{'SUDO_USER'}) {
69 # Home dir is the 8th field in list context
70 $dir = (getpwnam($ENV{'SUDO_USER'}))[7];
71} else {
72 $dir = $ENV{'HOME'};
73}
74
75$ENV{'PBETC'} = "$dir/.pbrc.yml";
76
77if (! -f $ENV{'PBETC'}) {
78 if (! -f "$dir/.pbrc") {
79 pb_log(0, "No existing $ENV{'PBETC'} found, creating one as template\n");
80 open(PBRC, "> $ENV{'PBETC'}") || die "Unable to create $ENV{'PBETC'}";
81 print PBRC << "EOF";
82---
83#
84# Define for each project the URL of its pbconf repository
85# No default option allowed here as they need to be all different
86#
87# pbconfurl:
88# example: svn+ssh://svn.example.org/svn/pb/projects/example/pbconf
89# pbconfurl:
90# pb: svn+ssh://svn.project-builder.org/mondo/svn/pb/pbconf
91#
92# Under that dir will take place everything related to pb
93# If you want to use VMs/chroot/..., then use \$ENV{'HOME'} to make it portable
94# to your VMs/chroot/...
95# if not defined then /var/cache
96# pbdefdir:
97# default: \$ENV{'HOME'}/pb/projects
98# pbdefdir:
99# pb: \$ENV{'HOME'}
100#
101# If not defined, pbconfdir is under pbdefdir/pbproj/pbconf
102# pbconfdir:
103# pb: \$ENV{'HOME'}/pb/pbconf
104#
105# If not defined, pbprojdir is under pbdefdir/pbproj
106# Only defined if we have access to the dev of the project
107# pbprojdir:
108# example: \$ENV{'HOME'}/example/svn
109#
110# We have commit acces to these
111# pbprojurl:
112# example: cvs+ssh://user\@example.cvs.sourceforge.net:/cvsroot/example
113# pbprojurl:
114# pb: svn+ssh://svn.project-builder.org/mondo/svn/pb
115#
116# I mask my real login on the ssh machines here
117# sshlogin:
118# example: user
119#
120# where to find Build System infos:
121# vmpath:
122# default: /home/qemu
123# vepath:
124# default: /home/rpmbootstrap
125# rmpath:
126# default: /home/remote
127#
128# Overwrite generic setup
129# vmport:
130# pb: 2223
131# vmport:
132# example: 2224
133#
134# Info on who is packaging
135# pbpackager:
136# default: William Porte <bill\@porte.org>
137# pbpassphrase:
138# default: TheScretePassPhrase
139# pbpassfile:
140# default: /home/williamporte/secret/passfile
141EOF
142 } else {
143 pb_log(0, "Found an existing $dir/.pbrc converting it into $ENV{'PBETC'}\n");
144 pb_conf_update_v0("$dir/.pbrc",$ENV{'PBETC'});
145 }
146}
147
148# We only have one configuration file for now.
149pb_conf_add("$ENV{'PBETC'}");
150}
151
152=item B<pb_env_init>
153
154This function setup the environment for project-builder.
155The first parameter is the project if given on the command line.
156The second parameter is a flag indicating whether we should setup up the pbconf environment or not.
157The third parameter is the action passed to pb.
158It sets up environement variables (PBETC, PBPROJ, PBDEFDIR, PBBUILDDIR, PBROOTDIR, PBDESTDIR, PBCONFDIR, PBPROJVER)
159
160=cut
161
162sub pb_env_init {
163
164my $proj=shift;
165my $pbinit=shift;
166my $action=shift;
167my $pbkeep=shift || 0;
168my $ver;
169my $tag;
170
171pb_conf_init($proj);
172pb_env_init_pbrc();
173
174#
175# We get the pbconf file for that project
176# and use its content
177#
178my ($pbconf) = pb_conf_get("pbconfurl");
179pb_log(2,"DEBUG pbconfurl: ".Dumper($pbconf)."\n");
180
181my %pbconf = %$pbconf;
182if (not defined $proj) {
183 # Take the first as the default project
184 $proj = (keys %pbconf)[0];
185 if (defined $proj) {
186 pb_log(1,"WARNING: using $proj as default project as none has been specified\n");
187 pb_log(1," Please either create a pbconfurl reference for project $proj in $ENV{'PBETC'}\n");
188 pb_log(1," or call pb with the -p project option or use the env var PBPROJ\n");
189 pb_log(1," if you want to use another project\n");
190 }
191}
192die "No project defined - use env var PBPROJ or -p proj or a pbconfurl entry in $ENV{'PBETC'}" if (not (defined $proj));
193
194# That's always the environment variable that will be used
195$ENV{'PBPROJ'} = $proj;
196pb_log(1,"PBPROJ: $ENV{'PBPROJ'}\n");
197
198if (not defined ($pbconf{$ENV{'PBPROJ'}})) {
199 die "Please create a pbconfurl reference for project $ENV{'PBPROJ'} in $ENV{'PBETC'}\n";
200}
201
202# Adds a potential conf file now as it's less
203# important than the project conf file
204my ($vmpath,$vepath,$rmpath) = pb_conf_get_if("vmpath","vepath","rmpath");
205foreach my $p ($vmpath,$vepath,$rmpath) {
206 if ((defined $p) && (defined $p->{$ENV{'PBPROJ'}})) {
207 $p->{$ENV{'PBPROJ'}} = pb_path_expand($p->{$ENV{'PBPROJ'}});
208 # TODO: should we add the conf files pointed by project default as well ?
209 if (-f "$p->{$ENV{'PBPROJ'}}/.pbrc.yml") {
210 pb_conf_add("$p->{$ENV{'PBPROJ'}}/.pbrc.yml");
211 } elsif (-f "$p->{$ENV{'PBPROJ'}}/.pbrc") {
212 pb_vcs_conf_update_v0("$p->{$ENV{'PBPROJ'}}/.pbrc","$p->{$ENV{'PBPROJ'}}/.pbrc.yml");
213 pb_conf_add("$p->{$ENV{'PBPROJ'}}/.pbrc.yml");
214 #pb_vcs_add_if_not_in($scheme,"$p->{$ENV{'PBPROJ'}}/.pbrc.yml");
215 }
216 }
217}
218
219#
220# Detect the root dir for hosting all the content generated with pb
221#
222# Cf Directory structure in pb.yml.pod
223
224my ($pbdefdir) = pb_conf_get_if("pbdefdir");
225
226if (not defined $ENV{'PBDEFDIR'}) {
227 if ((not defined $pbdefdir) || (not defined $pbdefdir->{$ENV{'PBPROJ'}})) {
228 pb_log(1,"WARNING: no pbdefdir defined, using /var/cache\n");
229 pb_log(1," Please create a pbdefdir reference for project $ENV{'PBPROJ'} in $ENV{'PBETC'}\n");
230 pb_log(1," if you want to use another directory\n");
231 $ENV{'PBDEFDIR'} = "/var/cache";
232 } else {
233 # That's always the environment variable that will be used
234 $ENV{'PBDEFDIR'} = $pbdefdir->{$ENV{'PBPROJ'}};
235 }
236}
237# Expand potential env variable in it
238$ENV{'PBDEFDIR'} = pb_path_expand($ENV{'PBDEFDIR'});
239pb_log(1,"PBDEFDIR: $ENV{'PBDEFDIR'}\n");
240
241# Need to do that earlier as it's used potentialy in pb_vcs_add
242pb_temp_init($pbkeep);
243pb_log(2,"PBTMP: $ENV{'PBTMP'}\n");
244
245my ($pbprojdir) = pb_conf_get_if("pbprojdir");
246if (not defined $ENV{'PBPROJDIR'}) {
247 if ((not defined $pbprojdir) || (not defined $pbprojdir->{$ENV{'PBPROJ'}})) {
248 pb_log(1,"WARNING: no pbprojdir defined, using $ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}\n");
249 pb_log(1," Please create a pbprojdir reference for project $ENV{'PBPROJ'} in $ENV{'PBETC'}\n");
250 pb_log(1," if you want to use another directory\n");
251 $ENV{'PBPROJDIR'} = "$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}";
252 } else {
253 # That's always the environment variable that will be used
254 $ENV{'PBPROJDIR'} = $pbprojdir->{$ENV{'PBPROJ'}};
255 }
256}
257$ENV{'PBPROJDIR'} = pb_path_expand($ENV{'PBPROJDIR'});
258
259my $pbconfpath = "$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}";
260
261#
262# Set delivery directory
263#
264$ENV{'PBDESTDIR'}="$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}/pbdelivery";
265
266pb_log(1,"PBDESTDIR: $ENV{'PBDESTDIR'}\n");
267#
268# Removes all directory existing below the delivery dir
269# as they are temp dir only except when called from a pbinit script
270# Files stay and have to be cleaned up manually if needed
271# those files serves as communication channels between pb phases
272# Removing them prevents a following phase to detect what has been done before
273#
274if ((-d $ENV{'PBDESTDIR'}) && ($action !~ /pbinit/)) {
275 opendir(DIR,$ENV{'PBDESTDIR'}) || die "Unable to open directory $ENV{'PBDESTDIR'}: $!";
276 foreach my $d (readdir(DIR)) {
277 next if ($d =~ /^\./);
278 next if (-f "$ENV{'PBDESTDIR'}/$d");
279 pb_rm_rf("$ENV{'PBDESTDIR'}/$d") if (-d "$ENV{'PBDESTDIR'}/$d");
280 }
281 closedir(DIR);
282}
283
284#
285# Set build directory
286#
287$ENV{'PBBUILDDIR'}="$pbconfpath/pbbuild";
288
289pb_log(1,"PBBUILDDIR: $ENV{'PBBUILDDIR'}\n");
290
291return if ($action =~ /^(clean|updateconf)$/);
292#
293# The following part is only useful when in sbx|cms2something or newsomething
294# In VMs/VEs/RMs we want to skip that by providing good env vars.
295# return values in that case are useless
296#
297
298if ($action =~ /^(cms2|sbx2|newver|newproj|pbinit|announce|checkssh|cleanssh|getconf|setupve)/) {
299
300 #
301 # Check pbconf cms compliance
302 #
303 pb_vcs_compliant("pbconfdir",'PBCONFDIR',"$pbconfpath/pbconf",$pbconf{$ENV{'PBPROJ'}},$pbinit);
304 my ($scheme, $account, $host, $port, $path) = pb_get_uri($pbconf{$ENV{'PBPROJ'}});
305
306 # Check where is our PBROOTDIR (release tag name can't be guessed the first time)
307 #
308 if (not defined $ENV{'PBROOTDIR'}) {
309 if (! -f ("$ENV{'PBDESTDIR'}/pbrc.yml")) {
310 $ENV{'PBROOTDIR'} = "$ENV{'PBCONFDIR'}";
311 pb_log(1,"WARNING: no pbroot defined, using $ENV{'PBROOTDIR'}\n");
312 pb_log(1," Please use -r release if you want to use another release\n");
313 die "No directory found under $ENV{'PBCONFDIR'}" if (not defined $ENV{'PBROOTDIR'});
314 } else {
315 my ($pbroot) = pb_conf_read_if("$ENV{'PBDESTDIR'}/pbrc.yml","pbroot");
316 # That's always the environment variable that will be used
317 die "Please remove inconsistent $ENV{'PBDESTDIR'}/pbrc.yml" if ((not defined $pbroot) || (not defined $pbroot->{$ENV{'PBPROJ'}}));
318 $ENV{'PBROOTDIR'} = $pbroot->{$ENV{'PBPROJ'}};
319 }
320 } else {
321 # transform in full path if relative
322 $ENV{'PBROOTDIR'} = "$ENV{'PBCONFDIR'}/$ENV{'PBROOTDIR'}" if ($ENV{'PBROOTDIR'} !~ /^\//);
323 # If git, then versions are in branch not in dirs, except for git+svn
324 $ENV{'PBROOTDIR'} = "$ENV{'PBCONFDIR'}" if (($scheme =~ /^git/) && ($scheme !~ /svn/));
325 pb_mkdir_p($ENV{'PBROOTDIR'}) if (defined $pbinit);
326 die "$ENV{'PBROOTDIR'} is not a directory" if (not -d $ENV{'PBROOTDIR'});
327 }
328 pb_log(1,"PBROOTDIR=$ENV{'PBROOTDIR'}\n");
329
330 # Adds that conf file to the list to consider
331 if (-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml") {
332 pb_conf_add("$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml") if (-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml");
333 } elsif (-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb") {
334 pb_vcs_conf_update_v0("$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb","$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml");
335 pb_conf_add("$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml") if (-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml");
336 }
337
338 return if ($action =~ /^(newver|getconf|setupve)$/);
339
340 my %version = ();
341 my %defpkgdir = ();
342 my %extpkgdir = ();
343 my %filteredfiles = ();
344 my %supfiles = ();
345
346 if ((-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml") and (not defined $pbinit)) {
347
348 # List of pkg to build by default (mandatory)
349 # TODO: projtag could be with a 1 default value
350 my ($defpkgdir,$pbpackager, $pkgv, $pkgt) = pb_conf_get("defpkgdir","pbpackager","projver","projtag");
351 # List of additional pkg to build when all is called (optional)
352 # Valid version names (optional)
353 # List of files to filter (optional)
354 # Project version and tag (optional)
355 my ($extpkgdir, $version, $filteredfiles, $supfiles) = pb_conf_get_if("extpkgdir","version","filteredfiles","supfiles");
356 pb_log(2,"DEBUG: defpkgdir: ".Dumper($defpkgdir)."\n");
357 pb_log(2,"DEBUG: extpkgdir: ".Dumper($extpkgdir)."\n");
358 pb_log(2,"DEBUG: version: ".Dumper($version)."\n");
359 pb_log(2,"DEBUG: filteredfiles: ".Dumper($filteredfiles)."\n");
360 pb_log(2,"DEBUG: supfiles: ".Dumper($supfiles)."\n");
361 # Global
362 %defpkgdir = %$defpkgdir;
363 %extpkgdir = %$extpkgdir if (defined $extpkgdir);
364 %version = %$version if (defined $version);
365 %filteredfiles = %$filteredfiles if (defined $filteredfiles);
366 %supfiles = %$supfiles if (defined $supfiles);
367 #
368 # Get global Version/Tag
369 #
370 if (not defined $ENV{'PBPROJVER'}) {
371 if ((defined $pkgv) && (defined $pkgv->{$ENV{'PBPROJ'}})) {
372 $ENV{'PBPROJVER'}=$pkgv->{$ENV{'PBPROJ'}};
373 } else {
374 die "No projver found in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml";
375 }
376 }
377 die "Invalid version name $ENV{'PBPROJVER'} in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml" if (($ENV{'PBPROJVER'} !~ /[0-9.]+/) && (defined $version) && ($ENV{'PBPROJVER'} =~ /$version{$ENV{'PBPROJ'}}/));
378
379 if (not defined $ENV{'PBPROJTAG'}) {
380 if ((defined $pkgt) && (defined $pkgt->{$ENV{'PBPROJ'}})) {
381 $ENV{'PBPROJTAG'}=$pkgt->{$ENV{'PBPROJ'}};
382 } else {
383 die "No projtag found in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml";
384 }
385 }
386 die "Invalid tag name $ENV{'PBPROJTAG'} in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml" if ($ENV{'PBPROJTAG'} !~ /[0-9.]+/);
387
388 if (not defined $ENV{'PBPACKAGER'}) {
389 if ((defined $pbpackager) && (defined $pbpackager->{$ENV{'PBPROJ'}})) {
390 $ENV{'PBPACKAGER'}=$pbpackager->{$ENV{'PBPROJ'}};
391 } else {
392 die "No pbpackager found in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml";
393 }
394 }
395 } else {
396 if (defined $pbinit) {
397 my @pkgs = @ARGV;
398 @pkgs = ("pkg1") if (not @pkgs);
399
400 open(CONF,"> $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml") || die "Unable to create $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml";
401 print CONF << "EOF";
402---
403#
404# Project Builder configuration file
405# For project $ENV{'PBPROJ'}
406#
407# \$Id\$
408#
409#
410# What is the project URL
411#
412# pbprojurl:
413# $ENV{'PBPROJ'}: svn://svn.$ENV{'PBPROJ'}.org/$ENV{'PBPROJ'}/devel
414# $ENV{'PBPROJ'}: svn+ssh://user\@svn.$ENV{'PBPROJ'}.org/$ENV{'PBPROJ'}/devel
415# $ENV{'PBPROJ'}: git+ssh//user\@git.$ENV{'PBPROJ'}.org/$ENV{'PBPROJ'}/devel
416# $ENV{'PBPROJ'}: cvs://cvs.$ENV{'PBPROJ'}.org/$ENV{'PBPROJ'}/devel
417# $ENV{'PBPROJ'}: http://www.$ENV{'PBPROJ'}.org/src/$ENV{'PBPROJ'}-devel.tar.gz
418# $ENV{'PBPROJ'}: ftp://ftp.$ENV{'PBPROJ'}.org/src/$ENV{'PBPROJ'}-devel.tar.gz
419# $ENV{'PBPROJ'}: file:///src/$ENV{'PBPROJ'}-devel.tar.gz
420# $ENV{'PBPROJ'}: dir:///src/$ENV{'PBPROJ'}-devel
421#
422# Repository
423# pbrepo:
424# $ENV{'PBPROJ'}: ftp://ftp.$ENV{'PBPROJ'}.org
425# pbml:
426# $ENV{'PBPROJ'}: $ENV{'PBPROJ'}-announce\@lists.$ENV{'PBPROJ'}.org
427# pbsmtp:
428# $ENV{'PBPROJ'}: localhost
429# pbgpgcheck:
430# $ENV{'PBPROJ'}: 1
431# For distro supporting it, which area is used
432# projcomponent:
433# $ENV{'PBPROJ'}: main
434#
435# Check whether project is well formed
436# when downloading from ftp/http/...
437# (containing already a directory with the project-version name)
438# pbwf:
439# $ENV{'PBPROJ'}: 1
440#
441# Do we check GPG keys
442# pbgpgcheck:
443# $ENV{'PBPROJ'}: 1
444#
445#
446# Packager label
447#
448# pbpackager:
449# $ENV{'PBPROJ'}: William Porte <bill\@$ENV{'PBPROJ'}.org>
450#
451#
452# For delivery to a machine by SSH (potentially the FTP server)
453# Needs hostname, account and directory
454#
455# sshhost:
456# $ENV{'PBPROJ'}: www.$ENV{'PBPROJ'}.org
457# sshlogin:
458# $ENV{'PBPROJ'}: bill
459# sshdir:
460# $ENV{'PBPROJ'}: /$ENV{'PBPROJ'}/ftp
461# sshport:
462# $ENV{'PBPROJ'}: 22
463#
464#
465# For Virtual machines management
466# Naming convention to follow: distribution name (as per ProjectBuilder::Distribution)
467# followed by '-' and by release number
468# followed by '-' and by architecture
469# a .vmtype extension will be added to the resulting string
470# a QEMU rhel-3-i286 here means that the VM will be named rhel-3-i386.qemu
471#
472# vmlist:
473# $ENV{'PBPROJ'}: asianux-2-i386,asianux-3-i386,centos-7-x86_64,mandrake-10.1-i386,mandrake-10.2-i386,mandriva-2006.0-i386,mandriva-2007.0-i386,mandriva-2007.1-i386,mandriva-2008.0-i386,mandriva-2008.1-i386,mandriva-2009.0-i386,mandriva-2009.1-i386,mandriva-2010.0-i386,mandriva-2010.1-i386,redhat-7.3-i386,redhat-9-i386,fedora-4-i386,fedora-5-i386,fedora-6-i386,fedora-7-i386,fedora-8-i386,fedora-9-i386,fedora-10-i386,fedora-11-i386,fedora-12-i386,fedora-13-i386,fedora-14-i386,fedora-15-i386,fedora-16-i386,fedora-17-i386,fedora-18-i386,fedora-19-i386,fedora-20-i386,fedora-21-i386,rhel-2-i386,rhel-3-i386,rhel-4-i386,rhel-5-i386,rhel-6-i386,suse-10.0-i386,suse-10.1-i386,opensuse-10.2-i386,opensuse-10.3-i386,opensuse-11.0-i386,opensuse-11.1-i386,opensuse-11.2-i386,opensuse-11.3-i386,opensuse-11.4-i386,opensuse-12.1-i386,opensuse-12.2-i386,opensuse-12.3-i386,opensuse-13.1-i386,opensuse-13.2-i386,sles-9-i386,sles-10-i386,sles-11-i386,gentoo-nover-i386,debian-3-i386,debian-4-i386,debian-5-i386,debian-6-i386,debian-7-i386,debian-8-i386,ubuntu-6.06-i386,ubuntu-7.04-i386,ubuntu-7.10-i386,ubuntu-8.04-i386,ubuntu-8.10-i386,ubuntu-9.04-i386,ubuntu-9.10-i386,ubuntu-10.04-i386,ubuntu-10.10-i386,ubuntu-11.04-i386,ubuntu-11.10-i386,ubuntu-12.04-i386,ubuntu-12.10-i386,ubuntu-13.04-i386,ubuntu-13.10-i386,ubuntu-14.04-i386,ubuntu-14.10-i386,ubuntu-15.04-i386,ubuntu-15.10-i386,ubuntu-16.04-i386,solaris-10-i386,asianux-2-x86_64,asianux-3-x86_64,mandriva-2007.0-x86_64,mandriva-2007.1-x86_64,mandriva-2008.0-x86_64,mandriva-2008.1-x86_64,mandriva-2009.0-x86_64,mandriva-2009.1-x86_64,mandriva-2010.0-x86_64,mandriva-2010.1-x86_64,mageia-1-i386,mageia-2-i386,mageia-3-i386,mageia-4-i386,mageia-5-i386,mageia-1-x86_64,mageia-2-x86_64,mageia-3-x86_64,mageia-4-x86_64,mageia-5-x86_64,fedora-6-x86_64,fedora-7-x86_64,fedora-8-x86_64,fedora-9-x86_64,fedora-10-x86_64,fedora-11-x86_64,fedora-12-x86_64,fedora-13-x86_64,fedora-14-x86_64,fedora-15-x86_64,fedora-16-x86_64,fedora-17-x86_64,fedora-18-x86_64,fedora-19-x86_64,fedora-20-x86_64,fedora-21-x86_64,fedora-22-x86_64,fedora-23-x86_64,rhel-3-x86_64,rhel-4-x86_64,rhel-5-x86_64,rhel-6-x86_64,rhel-7-x86_64,opensuse-10.2-x86_64,opensuse-10.3-x86_64,opensuse-11.0-x86_64,opensuse-11.1-x86_64,opensuse-11.2-x86_64,opensuse-11.3-x86_64,opensuse-11.4-x86_64,opensuse-12.1-x86_64,opensuse-12.2-x86_64,opensuse-12.3-x86_64,opensuse-13.1-x86_64,opensuse-13.2-x86_64,sles-10-x86_64,sles-11-x86_64,sles-12-x86_64,gentoo-nover-x86_64,debian-4-x86_64,debian-5-x86_64,debian-6-x86_64,debian-7-x86_64,debian-8-x86_64,ubuntu-7.04-x86_64,ubuntu-7.10-x86_64,ubuntu-8.04-x86_64,ubuntu-8.10-x86_64,ubuntu-9.04-x86_64,ubuntu-9.10-x86_64,ubuntu-10.04-x86_64,ubuntu-10.10-x86_64,ubuntu-11.04-x86_64,ubuntu-11.10-x86_64,ubuntu-12.04-x86_64,ubuntu-12.10-x86_64,ubuntu-13.04-x86_64,ubuntu-13.10-x86_64,ubuntu-14.04-x86_64,ubuntu-14.10-x86_64,ubuntu-15.04-x86_64,ubuntu-15.10-x86_64,ubuntu-16.04-x86_64
474#
475#
476# Valid values for vmtype are
477# qemu, (vmware, xen, ... TBD)
478# vmtype:
479# $ENV{'PBPROJ'}: qemu
480#
481# Hash for VM stuff on vmtype
482# vmntp:
483# default: pool.ntp.org
484#
485# We suppose we can commmunicate with the VM through SSH
486# vmhost:
487# $ENV{'PBPROJ'}: localhost
488# vmlogin:
489# $ENV{'PBPROJ'}: pb
490# vmport:
491# $ENV{'PBPROJ'}: 2222
492#
493# Timeout to wait when VM is launched/stopped
494# vmtmout:
495# default: 120
496#
497# per VMs needed paramaters
498# vmopt:
499# $ENV{'PBPROJ'}: -m 384 -daemonize
500# vmpath:
501# $ENV{'PBPROJ'}: /home/qemu
502# vmsize:
503# $ENV{'PBPROJ'}: 5G
504#
505#
506# For Virtual environment management
507# Naming convention to follow: distribution name (as per ProjectBuilder::Distribution)
508# followed by '-' and by release number
509# followed by '-' and by architecture
510# a .vetype extension will be added to the resulting string
511# a chroot rhel-3-i286 here means that the VE will be named rhel-3-i386.chroot
512#
513# velist:
514# $ENV{'PBPROJ'}: debian-7-x86_64,debian-8-x86_64,centos-5-x86_64,centos-6-x86_64,centos-7-x86_64,fedora-21-x86_64,fedora-22-x86_64,fedora-23-x86_64,fedora-24-x86_64,fedora-25-x86_64,ubuntu-12.04-x86_64,ubuntu-14.04-x86_64,ubuntu-14.10-x86_64,ubuntu-15.04-x86_64,ubuntu-15.10-x86_64,ubuntu-16.04-x86_64,ubuntu-16.10-x86_64,opensuse-42.1-x86_64,opensuse-42.2-x86_64,opensuse-13.2-x86_64,opensuse-13.1-x86_64,mageia-4-x86_64,mageia-5-x86_64
515#
516# VE params
517# vetype:
518# $ENV{'PBPROJ'}: docker
519# ventp:
520# default: pool.ntp.org
521# velogin:
522# $ENV{'PBPROJ'}: pb
523# vepath:
524# $ENV{'PBPROJ'}: /var/cache/rpmbootstrap
525# rbsconf:
526# $ENV{'PBPROJ'}: /etc/mock
527# verebuild:
528# $ENV{'PBPROJ'}: false
529#
530#
531# Global version/tag for the project
532#
533# projver:
534# $ENV{'PBPROJ'}: devel
535# projtag:
536# $ENV{'PBPROJ'}: 1
537#
538# Hash of valid version names
539# version:
540# $ENV{'PBPROJ'}: devel,stable
541#
542# Is it a test version or a production version
543# testver:
544# $ENV{'PBPROJ'}: true
545# Which upper target dir for delivery
546# delivery:
547# $ENV{'PBPROJ'}: test
548#
549# Additional repository to add at build time
550# addrepo:
551# centos-5-x86_64: http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm,ftp://ftp.project-builder.org/centos/5/pb.repo
552# centos-4-x86_64: http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm,ftp://ftp.project-builder.org/centos/4/pb.repo
553#
554# Adapt to your needs:
555# Optional if you need to overwrite the global values above
556#
557EOF
558
559 foreach my $pp (@pkgs) {
560 print CONF << "EOF";
561# pkgver:
562# $pp : stable
563# pkgtag:
564# $pp : 3
565EOF
566 }
567 foreach my $pp (@pkgs) {
568 print CONF << "EOF";
569# Hash of default package/package directory
570# defpkgdir:
571# $pp: dir-$pp
572EOF
573 }
574
575 print CONF << "EOF";
576# Hash of additional package/package directory
577# extpkgdir:
578# minor-pkg: dir-minor-pkg
579#
580# List of files per pkg on which to apply filters
581# Files are mentioned relatively to pbroot/defpkgdir
582EOF
583 foreach my $pp (@pkgs) {
584 print CONF << "EOF";
585# filteredfiles:
586# $pp: Makefile.PL,configure.in,install.sh,$pp.8
587# supfiles:
588# $pp: $pp.init
589
590# For perl modules, names are different depending on distro
591# Here perl-xxx for RPMs, libxxx-perl for debs, ...
592# So the package name is indeed virtual
593# namingtype:
594# $pp: perl
595EOF
596 }
597 close(CONF);
598 pb_mkdir_p("$ENV{'PBROOTDIR'}/pbfilter");
599 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/all.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/all.yml";
600 print CONF << "EOF";
601---
602#
603# \$Id\$
604#
605# Filter for all files
606#
607#
608 filter:
609# PBREPO is replaced by the root URL to access the repository
610 PBREPO: \$pb->{'repo'}
611#
612# PBSRC is replaced by the source package location after the repo
613 PBSRC: src/%{srcname}-%{version}\$pb->{'extdir'}.tar.gz
614#
615# PBVER is replaced by the version (\$pb->{'ver'} in code)
616 PBVER: \$pb->{'ver'}
617#
618# PBDATE is replaced by the date (\$pb->{'date'} in code)
619 PBDATE: \$pb->{'date'}
620#
621# PBEXTDIR is replaced by the testdir extension if needed (\$pb->{'extdir'} in code)
622 PBEXTDIR: \$pb->{'extdir'}
623#
624# PBPATCHSRC is replaced by the patches names if value is yes. Patches are located under the pbpatch dir of the pkg.
625# PBPATCHSRC: yes
626#
627# PBPATCHCMD is replaced by the patches commands if value is yes
628# PBPATCHCMD: yes
629#
630# PBMULTISRC is replaced by the sources names if value is yes. Sources are located under the pbsrc dir of the pkg.
631# PBMULTISRC: yes
632#
633# PBTAG is replaced by the tag (\$pb->{'tag'} in code)
634 PBTAG: \$pb->{'tag'}
635#
636# PBREV is replaced by the revision (\$pb->{'rev'} in code)
637 PBREV: \$pb->{'rev'}
638#
639# PBREALPKG is replaced by the package name (\$pb->{'realpkg'} in code)
640 PBREALPKG: \$pb->{'realpkg'}
641#
642# PBPKG is replaced by the package name (\$pb->{'pkg'} in code)
643 PBPKG: \$pb->{'pkg'}
644#
645# PBPROJ is replaced by the project name (\$pb->{'proj'} in code)
646 PBPROJ: \$pb->{'proj'}
647#
648# PBPACKAGER is replaced by the packager name (\$pb->{'packager'} in code)
649 PBPACKAGER: \$pb->{'packager'}
650#
651# PBDESC contains the description of the package
652# PBDESC: Bla-Bla \
653# with a trailing \, the variable can be multi-line. \
654# only the trailing \'s will be removed, the leading spaces, \
655# trailing spaces, and newlines will remain except on the \
656# last line. You can use dollar slash as a way to introduce carraige \
657# return (perl syntax). \
658# You can use transform e.g. in rpm.yml to adjust spaces
659#
660# PBSUMMARY contains a short single line description of the package
661# PBSUMMARY: Bla
662#
663# PBURL contains the URL of the Web site of the project
664# PBURL: http://www.$ENV{'PBPROJ'}.org
665#
666# PBLOG is replaced by the changelog if value is yes
667# and should be last as when used we need the %pb hash filled
668# PBLOG: yes
669EOF
670 close(CONF);
671 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/rpm.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/rpm.yml";
672 print CONF << "EOF";
673---
674#
675# \$Id\$
676#
677# Filter for rpm build
678#
679# PBGRP is replaced by the RPM group of apps
680# PBGRP: Applications/Archiving
681#
682# PBLIC is replaced by the license of the application
683# PBLIC: GPL
684#
685# PBDEP is replaced by the list of dependencies
686# PBDEP:
687#
688# PBBDEP is replaced by the list of build dependencies
689# PBBDEP:
690#
691# PBSUF is replaced by the package suffix (\$pb->{'suf'} in code)
692 PBSUF: \$pb->{'suf'}
693#
694# PBOBS is replaced by the Obsolete line
695# PBOBS:
696#
697# transform a variable from the key on the right to the key on the left using the perl expression
698# after the input key name. Useful for taking multi-line documentation and removing trailing spaces
699# or leading spaces.
700# transform:
701# PBDESC: PBDESC_raw s/\\s+\\n/\\n/go;
702EOF
703 close(CONF);
704 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/fedora.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/fedora.yml";
705 print CONF << "EOF";
706---
707#
708# \$Id\$
709#
710# Filter for rpm build
711#
712# PBGRP is replaced by the RPM group of apps
713# Cf: http://fedoraproject.org/wiki/RPMGroups
714# filter:
715# PBGRP: Applications/Archiving
716#
717# PBLIC is replaced by the license of the application
718# Cf: http://fedoraproject.org/wiki/Licensing
719# PBLIC: GPLv2+
720#
721# PBDEP is replaced by the list of dependencies
722# PBDEP:
723#
724# PBBDEP is replaced by the list of build dependencies
725# PBBDEP:
726#
727# PBSUF is replaced by the package suffix (\$pb->{'suf'} in code)
728 PBSUF: %{dist}
729#
730# PBOBS is replaced by the Obsolete line
731# PBOBS:
732EOF
733 close(CONF);
734 foreach my $i (1..7) {
735 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/fedora-$i.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/fedora-$i.yml";
736 print CONF << "EOF";
737---
738#
739# \$Id\$
740#
741# Filter for old fedora build
742#
743# PBSUF is replaced by the package suffix (\$pb->{'suf'} in code)
744 filter:
745 PBSUF: \$pb->{'suf'}
746EOF
747 close(CONF);
748 }
749 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/deb.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/deb.yml";
750 print CONF << "EOF";
751---
752#
753# \$Id\$
754#
755# Filter for debian build
756#
757# PBGRP is replaced by the group of apps
758 filter:
759 PBGRP: utils
760#
761# PBLIC is replaced by the license of the application
762# Cf: http://www.debian.org/legal/licenses/
763# PBLIC: GPL
764#
765# PBDEP is replaced by the list of dependencies
766# PBDEP:
767#
768# PBBDEP is replaced by the list of build dependencies
769# PBBDEP:
770#
771# PBSUG is replaced by the list of suggestions
772# PBSUG:
773#
774# PBREC is replaced by the list of recommandations
775# PBREC:
776EOF
777 close(CONF);
778 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/debian-3.1.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/debian-3.1.yml";
779 print CONF << "EOF";
780---
781#
782# \$Id\$
783#
784# Filter for debian build
785#
786# PBDEBSTD is replaced by the Debian standard version
787 filter:
788 PBDEBSTD: 3.6.1
789#
790# PBDEBCOMP is replaced by the Debian Compatibility value
791 PBDEBCOMP: 4
792EOF
793 close(CONF);
794 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/debian-4.0.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/debian-4.0.yml";
795 print CONF << "EOF";
796---
797#
798# \$Id\$
799#
800# Filter for debian build
801#
802# PBDEBSTD is replaced by the Debian standard version
803 filter:
804 PBDEBSTD: 3.6.1
805#
806# PBDEBCOMP is replaced by the Debian Compatibility value
807 PBDEBCOMP: 5
808EOF
809 close(CONF);
810 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/debian-5.0.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/debian-5.0.yml";
811 print CONF << "EOF";
812---
813#
814# \$Id\$
815#
816# Filter for debian build
817#
818# PBDEBSTD is replaced by the Debian standard version
819 filter:
820 PBDEBSTD: 3.8.0
821#
822# PBDEBCOMP is replaced by the Debian Compatibility value
823 PBDEBCOMP: 7
824EOF
825 close(CONF);
826 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/debian-6.0.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/debian-6.0.yml";
827 print CONF << "EOF";
828---
829#
830# \$Id\$
831#
832# Filter for debian build
833#
834# PBDEBSTD is replaced by the Debian standard version
835 filter:
836 PBDEBSTD: 3.8.0
837#
838# PBDEBCOMP is replaced by the Debian Compatibility value
839 PBDEBCOMP: 7
840EOF
841 close(CONF);
842 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/debian.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/debian.yml";
843 print CONF << "EOF";
844---
845#
846# \$Id\$
847#
848# Filter for debian build
849#
850# PBDEBSTD is replaced by the Debian standard version
851 filter:
852 PBDEBSTD: 3.9.4
853#
854# PBDEBCOMP is replaced by the Debian Compatibility value
855 PBDEBCOMP: 9
856EOF
857 close(CONF);
858 foreach my $ubv ("ubuntu-6.06.yml","ubuntu-7.04.yml","ubuntu-7.10.yml") {
859 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/$ubv") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/$ubv";
860 print CONF << "EOF";
861---
862#
863# \$Id\$
864#
865# Filter for ubuntu build
866#
867# PBDEBSTD is replaced by the Debian standard version
868 filter:
869 PBDEBSTD: 3.6.2
870#
871# PBDEBCOMP is replaced by the Debian Compatibility value
872 PBDEBCOMP: 4
873EOF
874 close(CONF);
875 }
876 foreach my $ubv ("ubuntu-8.04.yml","ubuntu-8.10.yml") {
877 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/$ubv") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/$ubv";
878 print CONF << "EOF";
879---
880#
881# \$Id\$
882#
883# Filter for ubuntu build
884#
885# PBDEBSTD is replaced by the Debian standard version
886 filter:
887 PBDEBSTD: 3.7.3
888#
889# PBDEBCOMP is replaced by the Debian Compatibility value
890 PBDEBCOMP: 4
891EOF
892 close(CONF);
893 }
894 foreach my $ubv ("ubuntu-9.04.yml") {
895 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/$ubv") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/$ubv";
896 print CONF << "EOF";
897---
898#
899# \$Id\$
900#
901# Filter for ubuntu build
902#
903# PBDEBSTD is replaced by the Debian standard version
904 filter:
905 PBDEBSTD: 3.8.0
906#
907# PBDEBCOMP is replaced by the Debian Compatibility value
908 PBDEBCOMP: 4
909EOF
910 close(CONF);
911 }
912 # 9.10+
913 foreach my $ubv ("ubuntu.yml") {
914 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/$ubv") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/$ubv";
915 print CONF << "EOF";
916---
917#
918# \$Id\$
919#
920# Filter for ubuntu build
921#
922# PBDEBSTD is replaced by the Debian standard version
923 filter:
924 PBDEBSTD: 3.8.3
925#
926# PBDEBCOMP is replaced by the Debian Compatibility value
927 PBDEBCOMP: 7
928EOF
929 close(CONF);
930 }
931 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/md.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/md.yml";
932 print CONF << "EOF";
933---
934#
935# \$Id\$
936#
937# Specific group for Mandriva for $ENV{'PBPROJ'}
938# Cf: http://wiki.mandriva.com/en/Development/Packaging/Groups
939# filter:
940# PBGRP: Archiving/Backup
941#
942# PBLIC is replaced by the license of the application
943# Cf: http://wiki.mandriva.com/en/Development/Packaging/Licenses
944# filter:
945# PBLIC: GPL
946EOF
947 close(CONF);
948 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/novell.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/novell.yml";
949 print CONF << "EOF";
950---
951#
952# \$Id\$
953#
954# Specific group for SuSE for $ENV{'PBPROJ'}
955# Cf: http://en.opensuse.org/SUSE_Package_Conventions/RPM_Groups
956# filter:
957# PBGRP: Productivity/Archiving/Backup
958#
959# PBLIC is replaced by the license of the application
960# Cf: http://en.opensuse.org/Packaging/SUSE_Package_Conventions/RPM_Style#1.6._License_Tag
961# filter:
962# PBLIC: GPL
963EOF
964 close(CONF);
965 foreach my $pp (@pkgs) {
966 pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/deb");
967 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/control") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/control";
968 print CONF << "EOF";
969Source: PBPKG
970# http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections
971Section: PBGRP
972Priority: optional
973Maintainer: PBPACKAGER
974Build-Depends: debhelper (>= 4.2.20), PBBDEP
975Standards-Version: PBDEBSTD
976Vcs-Svn: svn://svn.PBPROJ.org/svn/PBVER/PBPKG
977Vcs-Browser: http://trac.PBPROJ.org/browser/PBVER/PBPKG
978Homepage: PBURL
979
980Package: PBPKG
981Architecture: amd64 i386 ia64
982# http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections
983Section: PBGRP
984Priority: optional
985Depends: \${shlibs:Depends}, \${misc:Depends}, PBDEP
986Recommends: PBREC
987Suggests: PBSUG
988Description: PBSUMMARY
989 PBDESC
990 .
991
992EOF
993 close(CONF);
994 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/copyright") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/copyright";
995 print CONF << "EOF";
996This package is debianized by PBPACKAGER
997`date`
998
999The current upstream source was downloaded from
1000PBREPO.
1001
1002Upstream Authors: Put their name here
1003
1004Copyright:
1005
1006 This package is free software; you can redistribute it and/or modify
1007 it under the terms of the GNU General Public License as published by
1008 the Free Software Foundation; version 2 dated June, 1991.
1009
1010 This package is distributed in the hope that it will be useful,
1011 but WITHOUT ANY WARRANTY; without even the implied warranty of
1012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1013 GNU General Public License for more details.
1014
1015 You should have received a copy of the GNU General Public License
1016 along with this package; if not, write to the Free Software
1017 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
1018 MA 02110-1301, USA.
1019
1020On Debian systems, the complete text of the GNU General
1021Public License can be found in /usr/share/common-licenses/GPL.
1022
1023EOF
1024 close(CONF);
1025 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/changelog") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/changelog";
1026 print CONF << "EOF";
1027PBLOG
1028EOF
1029 close(CONF);
1030 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/compat") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/compat";
1031 print CONF << "EOF";
1032PBDEBCOMP
1033EOF
1034 close(CONF);
1035 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/$pp.dirs") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/$pp.dirs";
1036 print CONF << "EOF";
1037EOF
1038 close(CONF);
1039 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/$pp.docs") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/$pp.docs";
1040 print CONF << "EOF";
1041INSTALL
1042COPYING
1043AUTHORS
1044NEWS
1045README
1046EOF
1047 close(CONF);
1048 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/rules") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/rules";
1049 print CONF << 'EOF';
1050#!/usr/bin/make -f
1051# -*- makefile -*-
1052# Sample debian/rules that uses debhelper.
1053# GNU copyright 1997 to 1999 by Joey Hess.
1054#
1055# $Id$
1056#
1057
1058# Uncomment this to turn on verbose mode.
1059#export DH_VERBOSE=1
1060
1061# Define package name variable for a one-stop change.
1062PACKAGE_NAME = PBPKG
1063
1064# These are used for cross-compiling and for saving the configure script
1065# from having to guess our platform (since we know it already)
1066DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
1067DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
1068
1069CFLAGS = -Wall -g
1070
1071ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
1072 CFLAGS += -O0
1073else
1074 CFLAGS += -O2
1075endif
1076ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
1077 INSTALL_PROGRAM += -s
1078endif
1079
1080config.status: configure
1081 dh_testdir
1082
1083 # Configure the package.
1084 CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man
1085
1086# Build both architecture dependent and independent
1087build: build-arch build-indep
1088
1089# Build architecture dependent
1090build-arch: build-arch-stamp
1091
1092build-arch-stamp: config.status
1093 dh_testdir
1094
1095 # Compile the package.
1096 $(MAKE)
1097
1098 touch build-stamp
1099
1100# Build architecture independent
1101build-indep: build-indep-stamp
1102
1103build-indep-stamp: config.status
1104 # Nothing to do, the only indep item is the manual which is available as html in original source
1105 touch build-indep-stamp
1106
1107# Clean up
1108clean:
1109 dh_testdir
1110 dh_testroot
1111 rm -f build-arch-stamp build-indep-stamp #CONFIGURE-STAMP#
1112 # Clean temporary document directory
1113 rm -rf debian/doc-temp
1114 # Clean up.
1115 -$(MAKE) distclean
1116 rm -f config.log
1117ifneq "$(wildcard /usr/share/misc/config.sub)" ""
1118 cp -f /usr/share/misc/config.sub config.sub
1119endif
1120ifneq "$(wildcard /usr/share/misc/config.guess)" ""
1121 cp -f /usr/share/misc/config.guess config.guess
1122endif
1123
1124 dh_clean
1125
1126# Install architecture dependent and independent
1127install: install-arch install-indep
1128
1129# Install architecture dependent
1130install-arch: build-arch
1131 dh_testdir
1132 dh_testroot
1133 dh_clean -k -s
1134 dh_installdirs -s
1135
1136 # Install the package files into build directory:
1137 # - start with upstream make install
1138 $(MAKE) install prefix=$(CURDIR)/debian/$(PACKAGE_NAME)/usr mandir=$(CURDIR)/debian/$(PACKAGE_NAME)/usr/share/man
1139 # - copy html manual to temporary location for renaming
1140 mkdir -p debian/doc-temp
1141 dh_install -s
1142
1143# Install architecture independent
1144install-indep: build-indep
1145 dh_testdir
1146 dh_testroot
1147 dh_clean -k -i
1148 dh_installdirs -i
1149 dh_install -i
1150
1151# Must not depend on anything. This is to be called by
1152# binary-arch/binary-indep
1153# in another 'make' thread.
1154binary-common:
1155 dh_testdir
1156 dh_testroot
1157 dh_installchangelogs ChangeLog
1158 dh_installdocs
1159 dh_installman
1160 dh_link
1161 dh_strip
1162 dh_compress
1163 dh_fixperms
1164 dh_installdeb
1165 dh_shlibdeps
1166 dh_gencontrol
1167 dh_md5sums
1168 dh_builddeb
1169
1170# Build architecture independant packages using the common target.
1171binary-indep: build-indep install-indep
1172 $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common
1173
1174# Build architecture dependant packages using the common target.
1175binary-arch: build-arch install-arch
1176 $(MAKE) -f debian/rules DH_OPTIONS=-a binary-common
1177
1178# Build architecture depdendent and independent packages
1179binary: binary-arch binary-indep
1180.PHONY: clean binary
1181
1182EOF
1183 close(CONF);
1184 pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/rpm");
1185 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/rpm/$pp.spec") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/rpm/$pp.spec";
1186 print CONF << 'EOF';
1187#
1188# $Id$
1189#
1190# Used if virtual name != real name (perl, ...) - replace PBPKG by PBREALPKG in the line below
1191%define srcname PBPKG
1192
1193Summary: PBSUMMARY
1194Summary(fr): french bla-bla
1195
1196Name: PBREALPKG
1197Version: PBVER
1198Release: PBTAGPBSUF
1199License: PBLIC
1200Group: PBGRP
1201Url: PBURL
1202Source: PBREPO/PBSRC
1203#PBPATCHSRC
1204BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n)
1205#Requires: PBDEP
1206#BuildRequires: PBBDEP
1207
1208%description
1209PBDESC
1210
1211%description -l fr
1212french desc
1213
1214%prep
1215%setup -q %{name}-%{version}PBEXTDIR
1216# Used if virtual name != real name (perl, ...)
1217#%setup -q -n %{srcname}-%{version}PBEXTDIR
1218#PBPATCHCMD
1219
1220%build
1221%configure
1222make %{?_smp_mflags}
1223
1224%install
1225%{__rm} -rf $RPM_BUILD_ROOT
1226make DESTDIR=$RPM_BUILD_ROOT install
1227
1228%clean
1229%{__rm} -rf $RPM_BUILD_ROOT
1230
1231%files
1232%defattr(-,root,root)
1233%doc ChangeLog
1234%doc INSTALL COPYING README AUTHORS NEWS
1235
1236%changelog
1237PBLOG
1238
1239EOF
1240 close(CONF);
1241 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/pkg.yml") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/pkg.yml";
1242 print CONF << "EOF";
1243#
1244# \$Id\$
1245#
1246# Filter for pkg build
1247#
1248# Solaris package name (VENDOR : 4 letters in uppercase, SOFT : 8 letters in lowercase)
1249filter PBSOLPKG = SUNWsoftware
1250
1251EOF
1252 close(CONF);
1253 pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/pbfilter");
1254 pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/pkg");
1255 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/pkg/pkginfo") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/pkg/pkginfo";
1256 print CONF << 'EOF';
1257#
1258# $Id$
1259#
1260PKG="PBSOLPKG"
1261NAME="PBREALPKG"
1262VERSION="PBVER"
1263# all or i386
1264ARCH="all"
1265CATEGORY="application"
1266DESC="PBSUMMARY"
1267EMAIL="PBPACKAGER"
1268VENDOR="PBPACKAGER"
1269HOTLINE="PBURL"
1270EOF
1271 close(CONF);
1272 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/pkg/pbbuild") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/pkg/pbbuild";
1273 print CONF << 'EOF';
1274#
1275# $Id$
1276#
1277#perl Makefile.PL INSTALLDIRS=vendor
1278./configure --prefix=/usr
1279make
1280make install DESTDIR=\$1
1281EOF
1282 close(CONF);
1283 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/pkg/depend") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/pkg/depend";
1284 print CONF << 'EOF';
1285#
1286# $Id$
1287#
1288#P SUNWperl584core Perl 5.8.4 (core)
1289EOF
1290 close(CONF);
1291
1292 }
1293 pb_vcs_add($pbconf{$ENV{'PBPROJ'}},$ENV{'PBCONFDIR'});
1294 my $msg = "Project $ENV{'PBPROJ'} creation";
1295 pb_vcs_checkin($pbconf{$ENV{'PBPROJ'}},"$ENV{'PBCONFDIR'}",$msg);
1296 } else {
1297 pb_log(0,"ERROR: no pbroot defined, used $ENV{'PBROOTDIR'}, without finding $ENV{'PBPROJ'}.yml in it\n");
1298 pb_log(0," Please use -r release in order to be able to initialize your environment correctly\n");
1299 die "Unable to open $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.yml";
1300 }
1301 }
1302 pb_env_create_dirs();
1303 umask 0022;
1304 return(\%filteredfiles, \%supfiles, \%defpkgdir, \%extpkgdir);
1305} elsif ($action =~ /^(newv|setupv)/) {
1306 pb_env_create_dirs();
1307 # No PBDESTDIR yet so doing nothing
1308 return;
1309} else {
1310 pb_env_create_dirs();
1311
1312 # Setup the variables from what has been stored at the end of cms2build
1313 my ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc.yml","pbroot");
1314 $ENV{'PBROOTDIR'} = $var->{$ENV{'PBPROJ'}};
1315
1316 ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc.yml","projver");
1317 $ENV{'PBPROJVER'} = $var->{$ENV{'PBPROJ'}};
1318
1319 ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc.yml","projtag");
1320 $ENV{'PBPROJTAG'} = $var->{$ENV{'PBPROJ'}};
1321
1322 ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc.yml","pbpackager");
1323 $ENV{'PBPACKAGER'} = $var->{$ENV{'PBPROJ'}};
1324
1325 return;
1326}
1327}
1328sub pb_env_create_dirs {
1329if (! -d "$ENV{'PBDESTDIR'}") {
1330 pb_mkdir_p($ENV{'PBDESTDIR'});
1331}
1332if (! -d "$ENV{'PBBUILDDIR'}") {
1333 pb_mkdir_p($ENV{'PBBUILDDIR'});
1334}
1335}
1336
1337=head1 WEB SITES
1338
1339The main Web site of the project is available at L<http://www.project-builder.org/>. Bug reports should be filled using the trac instance of the project at L<http://trac.project-builder.org/>.
1340
1341=head1 USER MAILING LIST
1342
1343None exists for the moment.
1344
1345=head1 AUTHORS
1346
1347The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
1348
1349=head1 COPYRIGHT
1350
1351Project-Builder.org is distributed under the GPL v2.0 license
1352described in the file C<COPYING> included with the distribution.
1353
1354=cut
1355
13561;
Note: See TracBrowser for help on using the repository browser.