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

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

Fix usage of labels in env var (normalize with 'LABEL'

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