source: ProjectBuilder/devel/pb/lib/ProjectBuilder/Env.pm@ 456

Last change on this file since 456 was 456, checked in by Bruno Cornec, 16 years ago
  • pb now generates testver in the .pb for newproj
  • afio rpm build correct
File size: 27.5 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# $Id$
8#
9# Copyright B. Cornec 2007
10# Provided under the GPL v2
11
12package ProjectBuilder::Env;
13
14use strict 'vars';
15use Data::Dumper;
16use English;
17use File::Basename;
18use File::stat;
19use POSIX qw(strftime);
20use lib qw (lib);
21use ProjectBuilder::Base;
22use ProjectBuilder::Conf;
23use ProjectBuilder::CMS;
24
25# Inherit from the "Exporter" module which handles exporting functions.
26
27use Exporter;
28
29# Export, by default, all the functions into the namespace of
30# any code which uses this module.
31
32our @ISA = qw(Exporter);
33our @EXPORT = qw(pb_env_init);
34
35=pod
36
37=head1 NAME
38
39ProjectBuilder::Env, part of the project-builder.org
40
41=head1 DESCRIPTION
42
43This modules provides environment functions suitable for pbinit calls.
44
45=head1 USAGE
46
47=over 4
48
49=item B<pb_env_init>
50
51This function setup the environment for project-builder.
52The first parameter is the project if givent on the command line.
53The second parameter is a flag indicating whether we should setup up the pbconf environment or not.
54The third parameter is the action passed to bp.
55It sets up environement variables (PBETC, PBPROJ, PBDEFDIR, PBBUILDDIR, PBROOTDIR, PBDESTDIR, PBCONFDIR, PBPROJVER)
56
57=cut
58
59sub pb_env_init {
60
61my $proj=shift || undef;
62my $pbinit=shift || undef;
63my $action=shift;
64my $ver;
65my $tag;
66
67$ENV{'PBETC'} = "$ENV{'HOME'}/.pbrc";
68
69# We only have one configuration file for now.
70pb_conf_add("$ENV{'PBETC'}");
71
72#
73# Check project name
74# Could be with env var PBPROJ
75# or option -p
76# if not define take the first in conf file
77#
78if ((defined $ENV{'PBPROJ'}) &&
79 (not (defined $proj))) {
80 $proj = $ENV{'PBPROJ'};
81}
82
83#
84# We get the pbconf file for that project
85# and use its content
86#
87my ($pbconf) = pb_conf_get("pbconfurl");
88pb_log(2,"DEBUG pbconfurl: ".Dumper($pbconf)."\n");
89
90my %pbconf = %$pbconf;
91if (not defined $proj) {
92 # Take the first as the default project
93 $proj = (keys %pbconf)[0];
94 if (defined $proj) {
95 pb_log(1,"WARNING: using $proj as default project as none has been specified\n");
96 pb_log(1," Please either create a pbconfurl reference for project $proj in $ENV{'PBETC'}\n");
97 pb_log(1," or call pb with the -p project option or use the env var PBPROJ\n");
98 pb_log(1," if you want to use another project\n");
99 }
100}
101die "No project defined - use env var PBPROJ or -p proj or a pbconfurl entry in $ENV{'PBETC'}" if (not (defined $proj));
102
103# That's always the environment variable that will be used
104$ENV{'PBPROJ'} = $proj;
105pb_log(2,"PBPROJ: $ENV{'PBPROJ'}\n");
106
107if (not defined ($pbconf{$ENV{'PBPROJ'}})) {
108 die "Please create a pbconfurl reference for project $ENV{'PBPROJ'} in $ENV{'PBETC'}\n";
109}
110
111# Adds a potential conf file now as it's more
112# important than the project conf file
113my ($vmpath,$vepath) = pb_conf_get("vmpath","vepath");
114pb_conf_add("$vmpath->{$ENV{'PBPROJ'}}/.pbrc") if (-f "$vmpath->{$ENV{'PBPROJ'}}/.pbrc");
115pb_conf_add("$vepath->{$ENV{'PBPROJ'}}/.pbrc") if (-f "$vepath->{$ENV{'PBPROJ'}}/.pbrc");
116
117#
118# Detect the root dir for hosting all the content generated with pb
119#
120# Tree will look like this:
121#
122# maint pbdefdir PBDEFDIR dev dir (optional)
123# | |
124# ------------------------ --------------------
125# | | | |
126# pbproj1 pbproj2 PBPROJ pbproj1 pbproj2 PBPROJDIR
127# | |
128# --------------------------------------------- ----------
129# * * * | | | * *
130# tag dev pbconf ... build delivery PBCONFDIR dev tag
131# | | | PBDESTDIR |
132# --- ------ pbrc PBBUILDDIR -------
133# | | | | |
134# 1.1 dev tag 1.0 1.1 PBDIR
135# |
136# -------
137# | |
138# 1.0 1.1 PBROOTDIR
139# |
140# ----------------------------------
141# | | | |
142# pkg1 pbproj1.pb pbfilter pbcl
143# |
144# -----------------
145# | | |
146# rpm deb pbfilter
147#
148#
149# (*) By default, if no relocation in .pbrc, dev dir is taken in the maint pbdefdir (when appropriate)
150# Names under a pbproj and the corresponding pbconf should be similar
151#
152
153my ($pbdefdir) = pb_conf_get_if("pbdefdir");
154
155if (not defined $ENV{'PBDEFDIR'}) {
156 if ((not defined $pbdefdir) || (not defined $pbdefdir->{$ENV{'PBPROJ'}})) {
157 pb_log(1,"WARNING: no pbdefdir defined, using /var/cache\n");
158 pb_log(1," Please create a pbdefdir reference for project $ENV{'PBPROJ'} in $ENV{'PBETC'}\n");
159 pb_log(1," if you want to use another directory\n");
160 $ENV{'PBDEFDIR'} = "/var/cache";
161 } else {
162 # That's always the environment variable that will be used
163 $ENV{'PBDEFDIR'} = $pbdefdir->{$ENV{'PBPROJ'}};
164 }
165}
166# Expand potential env variable in it
167eval { $ENV{'PBDEFDIR'} =~ s/(\$ENV.+\})/$1/eeg };
168
169pb_log(2,"PBDEFDIR: $ENV{'PBDEFDIR'}\n");
170
171# Put under CMS the PBPROJ dir
172if (defined $pbinit) {
173 if (! -d "$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}") {
174 pb_mkdir_p("$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}") || die "Unable to recursively create $ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}";
175 }
176 pb_cms_add($pbconf{$ENV{'PBPROJ'}},"$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}");
177}
178
179#
180# Set delivery directory
181#
182$ENV{'PBDESTDIR'}="$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}/delivery";
183
184pb_log(2,"PBDESTDIR: $ENV{'PBDESTDIR'}\n");
185#
186# Removes all directory existing below the delivery dir
187# as they are temp dir only except when called from pbinit
188# Files stay and have to be cleaned up manually if needed
189# those files serves as communication channels between pb phases
190# Removing them prevents a following phase to detect what has been done before
191#
192if ((-d $ENV{'PBDESTDIR'}) && ($action !~ /pbinit/)) {
193 opendir(DIR,$ENV{'PBDESTDIR'}) || die "Unable to open directory $ENV{'PBDESTDIR'}: $!";
194 foreach my $d (readdir(DIR)) {
195 next if ($d =~ /^\./);
196 next if (-f "$ENV{'PBDESTDIR'}/$d");
197 pb_rm_rf("$ENV{'PBDESTDIR'}/$d") if (-d "$ENV{'PBDESTDIR'}/$d");
198 }
199 closedir(DIR);
200}
201if (! -d "$ENV{'PBDESTDIR'}") {
202 pb_mkdir_p($ENV{'PBDESTDIR'}) || die "Unable to recursively create $ENV{'PBDESTDIR'}";
203}
204
205#
206# Set build directory
207#
208$ENV{'PBBUILDDIR'}="$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}/build";
209if (! -d "$ENV{'PBBUILDDIR'}") {
210 pb_mkdir_p($ENV{'PBBUILDDIR'}) || die "Unable to recursively create $ENV{'PBBUILDDIR'}";
211}
212
213pb_log(2,"PBBUILDDIR: $ENV{'PBBUILDDIR'}\n");
214
215pb_temp_init();
216pb_log(2,"PBTMP: $ENV{'PBTMP'}\n");
217
218#
219# The following part is only useful when in cms2something of newver
220# In VMs/VEs we want to skip that by providing good env vars.
221# return values in that case are useless
222#
223if (($action =~ /^cms2/) || ($action =~ /^newver$/) || ($action =~ /pbinit/) || ($action =~ /^newproj$/)) {
224
225 #
226 # Check pbconf cms compliance
227 #
228 pb_cms_compliant("pbconfdir",'PBCONFDIR',"$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}/pbconf",$pbconf{$ENV{'PBPROJ'}},$pbinit);
229
230 # Check where is our PBROOTDIR (release tag name can't be guessed the first time)
231 #
232 if (not defined $ENV{'PBROOTDIR'}) {
233 if (! -f ("$ENV{'PBDESTDIR'}/pbrc")) {
234 opendir(DIR,$ENV{'PBCONFDIR'}) || die "Unable to open directory $ENV{'PBCONFDIR'}: $!";
235 my $maxmtime = 0;
236 foreach my $d (readdir(DIR)) {
237 pb_log(3,"Looking at \'$d\'...");
238 next if ($d =~ /^\./);
239 next if (! -d "$ENV{'PBCONFDIR'}/$d");
240 my $s = stat("$ENV{'PBCONFDIR'}/$d");
241 next if (not defined $s);
242 pb_log(3,"KEEP\n");
243 # Keep the most recent
244 pb_log(2," $s->mtime\n");
245 if ($s->mtime > $maxmtime) {
246 $ENV{'PBROOTDIR'} = "$ENV{'PBCONFDIR'}/$d";
247 $maxmtime = $s->mtime;
248 }
249 }
250 closedir(DIR);
251 pb_log(1,"WARNING: no pbroot defined, using $ENV{'PBROOTDIR'}\n");
252 pb_log(1," Please use -r release if you want to use another release\n");
253 die "No directory found under $ENV{'PBCONFDIR'}" if (not defined $ENV{'PBROOTDIR'});
254 } else {
255 my ($pbroot) = pb_conf_read_if("$ENV{'PBDESTDIR'}/pbrc","pbroot");
256 # That's always the environment variable that will be used
257 die "Please remove inconsistent $ENV{'PBDESTDIR'}/pbrc" if ((not defined $pbroot) || (not defined $pbroot->{$ENV{'PBPROJ'}}));
258 $ENV{'PBROOTDIR'} = $pbroot->{$ENV{'PBPROJ'}};
259 }
260 } else {
261 # transform in full path if relative
262 $ENV{'PBROOTDIR'} = "$ENV{'PBCONFDIR'}/$ENV{'PBROOTDIR'}" if ($ENV{'PBROOTDIR'} !~ /^\//);
263 pb_mkdir_p($ENV{'PBROOTDIR'}) if (defined $pbinit);
264 die "$ENV{'PBROOTDIR'} is not a directory" if (not -d $ENV{'PBROOTDIR'});
265 }
266
267 # Adds that conf file to the list to consider
268 pb_conf_add("$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb") if (-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb");
269
270 return if ($action =~ /^newver$/);
271
272 my %version = ();
273 my %defpkgdir = ();
274 my %extpkgdir = ();
275 my %filteredfiles = ();
276 my %supfiles = ();
277
278 if ((-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb") and (not defined $pbinit)) {
279
280 # List of pkg to build by default (mandatory)
281 my ($defpkgdir,$pbpackager, $pkgv, $pkgt) = pb_conf_get("defpkgdir","pbpackager","projver","projtag");
282 # List of additional pkg to build when all is called (optional)
283 # Valid version names (optional)
284 # List of files to filter (optional)
285 # Project version and tag (optional)
286 my ($extpkgdir, $version, $filteredfiles, $supfiles) = pb_conf_get_if("extpkgdir","version","filteredfiles","supfiles");
287 pb_log(2,"DEBUG: defpkgdir: ".Dumper($defpkgdir)."\n");
288 pb_log(2,"DEBUG: extpkgdir: ".Dumper($extpkgdir)."\n");
289 pb_log(2,"DEBUG: version: ".Dumper($version)."\n");
290 pb_log(2,"DEBUG: filteredfiles: ".Dumper($filteredfiles)."\n");
291 pb_log(2,"DEBUG: supfiles: ".Dumper($supfiles)."\n");
292 # Global
293 %defpkgdir = %$defpkgdir;
294 %extpkgdir = %$extpkgdir if (defined $extpkgdir);
295 %version = %$version if (defined $version);
296 %filteredfiles = %$filteredfiles if (defined $filteredfiles);
297 %supfiles = %$supfiles if (defined $supfiles);
298 #
299 # Get global Version/Tag
300 #
301 if (not defined $ENV{'PBPROJVER'}) {
302 if ((defined $pkgv) && (defined $pkgv->{$ENV{'PBPROJ'}})) {
303 $ENV{'PBPROJVER'}=$pkgv->{$ENV{'PBPROJ'}};
304 } else {
305 die "No projver found in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
306 }
307 }
308 die "Invalid version name $ENV{'PBPROJVER'} in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb" if (($ENV{'PBPROJVER'} !~ /[0-9.]+/) && (not defined $version) && ($ENV{'PBPROJVER'} =~ /$version{$ENV{'PBPROJ'}}/));
309
310 if (not defined $ENV{'PBPROJTAG'}) {
311 if ((defined $pkgt) && (defined $pkgt->{$ENV{'PBPROJ'}})) {
312 $ENV{'PBPROJTAG'}=$pkgt->{$ENV{'PBPROJ'}};
313 } else {
314 die "No projtag found in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
315 }
316 }
317 die "Invalid tag name $ENV{'PBPROJTAG'} in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb" if ($ENV{'PBPROJTAG'} !~ /[0-9.]+/);
318
319
320 if (not defined $ENV{'PBPACKAGER'}) {
321 if ((defined $pbpackager) && (defined $pbpackager->{$ENV{'PBPROJ'}})) {
322 $ENV{'PBPACKAGER'}=$pbpackager->{$ENV{'PBPROJ'}};
323 } else {
324 die "No pbpackager found in $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
325 }
326 }
327 } else {
328 if (defined $pbinit) {
329 my @pkgs = @ARGV;
330 @pkgs = ("pkg1") if (not @pkgs);
331
332 open(CONF,"> $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb") || die "Unable to create $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
333 print CONF << "EOF";
334#
335# Project Builder configuration file
336# For project $ENV{'PBPROJ'}
337#
338# \$Id\$
339#
340
341#
342# What is the project URL
343#
344#pburl $ENV{'PBPROJ'} = svn://svn.$ENV{'PBPROJ'}.org/$ENV{'PBPROJ'}/devel
345#pburl $ENV{'PBPROJ'} = svn://svn+ssh.$ENV{'PBPROJ'}.org/$ENV{'PBPROJ'}/devel
346#pburl $ENV{'PBPROJ'} = cvs://cvs.$ENV{'PBPROJ'}.org/$ENV{'PBPROJ'}/devel
347#pburl $ENV{'PBPROJ'} = http://www.$ENV{'PBPROJ'}.org/src/$ENV{'PBPROJ'}-devel.tar.gz
348#pburl $ENV{'PBPROJ'} = ftp://ftp.$ENV{'PBPROJ'}.org/src/$ENV{'PBPROJ'}-devel.tar.gz
349#pburl $ENV{'PBPROJ'} = file:///src/$ENV{'PBPROJ'}-devel.tar.gz
350#pburl $ENV{'PBPROJ'} = dir:///src/$ENV{'PBPROJ'}-devel
351
352# Repository
353#pbrepo $ENV{'PBPROJ'} = ftp://ftp.$ENV{'PBPROJ'}.org
354
355# Check whether project is well formed
356# when downloading from ftp/http/...
357# (containing already a directory with the project-version name)
358#pbwf $ENV{'PBPROJ'} = 1
359
360#
361# Packager label
362#
363#pbpackager $ENV{'PBPROJ'} = William Porte <bill\@$ENV{'PBPROJ'}.org>
364#
365
366# For delivery to a machine by SSH (potentially the FTP server)
367# Needs hostname, account and directory
368#
369#sshhost $ENV{'PBPROJ'} = www.$ENV{'PBPROJ'}.org
370#sshlogin $ENV{'PBPROJ'} = bill
371#sshdir $ENV{'PBPROJ'} = /$ENV{'PBPROJ'}/ftp
372#sshport $ENV{'PBPROJ'} = 22
373
374#
375# For Virtual machines management
376# Naming convention to follow: distribution name (as per ProjectBuilder::Distribution)
377# followed by '-' and by release number
378# followed by '-' and by architecture
379# a .vmtype extension will be added to the resulting string
380# a QEMU rhel-3-i286 here means that the VM will be named rhel-3-i386.qemu
381#
382#vmlist $ENV{'PBPROJ'} = mandrake-10.1-i386,mandrake-10.2-i386,mandriva-2006.0-i386,mandriva-2007.0-i386,mandriva-2007.1-i386,mandriva-2008.0-i386,redhat-7.3-i386,redhat-9-i386,fedora-4-i386,fedora-5-i386,fedora-6-i386,fedora-7-i386,fedora-8-i386,rhel-3-i386,rhel-4-i386,rhel-5-i386,suse-10.0-i386,suse-10.1-i386,suse-10.2-i386,suse-10.3-i386,sles-9-i386,sles-10-i386,gentoo-nover-i386,debian-3.1-i386,debian-4.0-i386,ubuntu-6.06-i386,ubuntu-7.04-i386,ubuntu-7.10-i386,mandriva-2007.0-x86_64,mandriva-2007.1-x86_64,mandriva-2008.0-x86_64,fedora-6-x86_64,fedora-7-x86_64,fedora-8-x86_64,rhel-4-x86_64,rhel-5-x86_64,suse-10.2-x86_64,suse-10.3-x86_64,sles-10-x86_64,gentoo-nover-x86_64,debian-4.0-x86_64,ubuntu-7.04-x86_64,ubuntu-7.10-x86_64
383
384#
385# Valid values for vmtype are
386# qemu, (vmware, xen, ... TBD)
387#vmtype $ENV{'PBPROJ'} = qemu
388
389# Hash for VM stuff on vmtype
390#vmntp default = pool.ntp.org
391
392# We suppose we can commmunicate with the VM through SSH
393#vmhost $ENV{'PBPROJ'} = localhost
394#vmlogin $ENV{'PBPROJ'} = pb
395#vmport $ENV{'PBPROJ'} = 2222
396
397# Timeout to wait when VM is launched/stopped
398#vmtmout default = 120
399
400# per VMs needed paramaters
401#vmopt $ENV{'PBPROJ'} = -m 384 -daemonize
402#vmpath $ENV{'PBPROJ'} = /home/qemu
403#vmsize $ENV{'PBPROJ'} = 5G
404
405#
406# For Virtual environment management
407# Naming convention to follow: distribution name (as per ProjectBuilder::Distribution)
408# followed by '-' and by release number
409# followed by '-' and by architecture
410# a .vetype extension will be added to the resulting string
411# a chroot rhel-3-i286 here means that the VE will be named rhel-3-i386.chroot
412#
413#velist $ENV{'PBPROJ'} = fedora-7-i386
414
415# VE params
416#vetype $ENV{'PBPROJ'} = chroot
417#ventp default = pool.ntp.org
418#velogin $ENV{'PBPROJ'} = pb
419#vepath $ENV{'PBPROJ'} = /var/lib/mock
420#veconf $ENV{'PBPROJ'} = /etc/mock
421#verebuild $ENV{'PBPROJ'} = false
422
423#
424# Global version/tag for the project
425#
426#projver $ENV{'PBPROJ'} = devel
427#projtag $ENV{'PBPROJ'} = 1
428
429# Hash of valid version names
430#version $ENV{'PBPROJ'} = devel,stable
431
432# Is it a test version or a production version
433testver $ENV{'PBPROJ'} = true
434
435# Adapt to your needs:
436# Optional if you need to overwrite the global values above
437#
438EOF
439
440 foreach my $pp (@pkgs) {
441 print CONF << "EOF";
442#pkgver $pp = stable
443#pkgtag $pp = 3
444EOF
445 }
446 foreach my $pp (@pkgs) {
447 print CONF << "EOF";
448# Hash of default package/package directory
449#defpkgdir $pp = dir-$pp
450EOF
451 }
452
453 print CONF << "EOF";
454# Hash of additional package/package directory
455#extpkgdir minor-pkg = dir-minor-pkg
456
457# List of files per pkg on which to apply filters
458# Files are mentioned relatively to pbroot/defpkgdir
459EOF
460 foreach my $pp (@pkgs) {
461 print CONF << "EOF";
462#filteredfiles $pp = Makefile.PL,configure.in,install.sh,$pp.8
463#supfiles $pp = $pp.init
464EOF
465 }
466 close(CONF);
467 pb_mkdir_p("$ENV{'PBROOTDIR'}/pbfilter") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter";
468 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/all.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/all.pbf";
469 print CONF << "EOF";
470#
471# \$Id\$
472#
473# Filter for all files
474#
475#
476# PBREPO is replaced by the root URL to access the repository
477filter PBREPO = \$pbrepo
478
479# PBSRC is replaced by the source package location after the repo
480#filter PBSRC = src/%{name}-%{version}.tar.gz
481
482# PBVER is replaced by the version (\$pbver in code)
483filter PBVER = \$pbver
484
485# PBDATE is replaced by the date (\$pbdate in code)
486filter PBDATE = \$pbdate
487
488# PBLOG is replaced by the changelog if value is yes
489#filter PBLOG = yes
490
491# PBTAG is replaced by the tag (\$pbtag in code)
492filter PBTAG = \$pbtag
493
494# PBREV is replaced by the revision (\$pbrev in code)
495filter PBREV = \$pbrev
496
497# PBPKG is replaced by the package name (\$pbpkg in code)
498filter PBPKG = \$pbpkg
499
500# PBPACKAGER is replaced by the packager name (\$pbpackager in code)
501filter PBPACKAGER = \$pbpackager
502
503# PBDESC contains the description of the package
504#filter PBDESC = "Bla-Bla"
505
506# PBURL contains the URL of the Web site of the project
507#filter PBURL = http://www.$ENV{'PBPROJ'}.org
508EOF
509 close(CONF);
510 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/rpm.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/rpm.pbf";
511 print CONF << "EOF";
512#
513# \$Id\$
514#
515# Filter for rpm build
516#
517
518# PBGRP is replaced by the RPM group of apps
519# Cf: http://fedoraproject.org/wiki/RPMGroups
520#filter PBGRP = Applications/Archiving
521
522# PBLIC is replaced by the license of the application
523# Cf: http://fedoraproject.org/wiki/Licensing
524#filter PBLIC = GPL
525
526# PBDEP is replaced by the list of dependencies
527#filter PBDEP =
528
529# PBSUF is replaced by the package suffix (\$pbsuf in code)
530filter PBSUF = \$pbsuf
531
532# PBOBS is replaced by the Obsolete line
533#filter PBOBS =
534
535EOF
536 close(CONF);
537 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/deb.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/deb.pbf";
538 print CONF << "EOF";
539#
540# \$Id\$
541#
542# Filter for debian build
543#
544# PBGRP is replaced by the group of apps
545filter PBGRP = utils
546
547# PBLIC is replaced by the license of the application
548# Cf:
549#filter PBLIC = GPL
550
551# PBDEP is replaced by the list of dependencies
552#filter PBDEP =
553
554# PBSUG is replaced by the list of suggestions
555#filter PBSUG =
556
557# PBREC is replaced by the list of recommandations
558#filter PBREC =
559
560EOF
561 close(CONF);
562 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/md.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/md.pbf";
563 print CONF << "EOF";
564# Specific group for Mandriva for $ENV{'PBPROJ'}
565# Cf: http://wiki.mandriva.com/en/Development/Packaging/Groups
566#filter PBGRP = Archiving/Backup
567
568# PBLIC is replaced by the license of the application
569# Cf: http://wiki.mandriva.com/en/Development/Packaging/Licenses
570#filter PBLIC = GPL
571
572EOF
573 close(CONF);
574 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/novell.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/novell.pbf";
575 print CONF << "EOF";
576# Specific group for SuSE for $ENV{'PBPROJ'}
577# Cf: http://en.opensuse.org/SUSE_Package_Conventions/RPM_Groups
578#filter PBGRP = Productivity/Archiving/Backup
579
580# PBLIC is replaced by the license of the application
581# Cf: http://en.opensuse.org/Packaging/SUSE_Package_Conventions/RPM_Style#1.6._License_Tag
582#filter PBLIC = GPL
583
584EOF
585 close(CONF);
586 foreach my $pp (@pkgs) {
587 pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/deb") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb";
588 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/control") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/control";
589 print CONF << "EOF";
590Source: PBPKG
591Section: PBGRP
592Priority: optional
593Maintainer: PBPACKAGER
594Build-Depends: debhelper (>= 4.2.20), PBDEP
595Standards-Version: 3.6.1
596
597Package: PBPKG
598Architecture: amd64 i386 ia64
599Section: PBGRP
600Priority: optional
601Depends: \${shlibs:Depends}, \${misc:Depends}, PBDEP
602Recommends: PBREC
603Suggests: PBSUG
604Description:
605 PBDESC
606 .
607 Homepage: PBURL
608
609EOF
610 close(CONF);
611 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/copyright") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/copyright";
612 print CONF << "EOF";
613This package is debianized by PBPACKAGER
614`date`
615
616The current upstream source was downloaded from
617PBREPO.
618
619Upstream Authors: Put their name here
620
621Copyright:
622
623 This package is free software; you can redistribute it and/or modify
624 it under the terms of the GNU General Public License as published by
625 the Free Software Foundation; version 2 dated June, 1991.
626
627 This package is distributed in the hope that it will be useful,
628 but WITHOUT ANY WARRANTY; without even the implied warranty of
629 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
630 GNU General Public License for more details.
631
632 You should have received a copy of the GNU General Public License
633 along with this package; if not, write to the Free Software
634 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
635 MA 02110-1301, USA.
636
637On Debian systems, the complete text of the GNU General
638Public License can be found in /usr/share/common-licenses/GPL.
639
640EOF
641 close(CONF);
642 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/changelog") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/changelog";
643 print CONF << "EOF";
644PBLOG
645EOF
646 close(CONF);
647 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/compat") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/compat";
648 print CONF << "EOF";
6494
650EOF
651 close(CONF);
652 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/$pp.dirs") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/$pp.dirs";
653 print CONF << "EOF";
654EOF
655 close(CONF);
656 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/$pp.docs") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/$pp.docs";
657 print CONF << "EOF";
658INSTALL
659COPYING
660AUTHORS
661NEWS
662README
663EOF
664 close(CONF);
665 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/rules") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/rules";
666 print CONF << 'EOF';
667#!/usr/bin/make -f
668# -*- makefile -*-
669# Sample debian/rules that uses debhelper.
670# GNU copyright 1997 to 1999 by Joey Hess.
671#
672# $Id$
673#
674
675# Uncomment this to turn on verbose mode.
676#export DH_VERBOSE=1
677
678# Define package name variable for a one-stop change.
679PACKAGE_NAME = PBPKG
680
681# These are used for cross-compiling and for saving the configure script
682# from having to guess our platform (since we know it already)
683DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
684DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
685
686CFLAGS = -Wall -g
687
688ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
689 CFLAGS += -O0
690else
691 CFLAGS += -O2
692endif
693ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
694 INSTALL_PROGRAM += -s
695endif
696config.status: configure
697 dh_testdir
698
699 # Configure the package.
700 CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr
701 --mandir=\$${prefix}/share/man
702
703# Build both architecture dependent and independent
704build: build-arch build-indep
705
706# Build architecture dependent
707build-arch: build-arch-stamp
708
709build-arch-stamp: config.status
710 dh_testdir
711
712 # Compile the package.
713 $(MAKE)
714
715 touch build-stamp
716
717# Build architecture independent
718build-indep: build-indep-stamp
719
720build-indep-stamp: config.status
721 # Nothing to do, the only indep item is the manual which is available as html in original source
722 touch build-indep-stamp
723
724# Clean up
725clean:
726 dh_testdir
727 dh_testroot
728 rm -f build-arch-stamp build-indep-stamp #CONFIGURE-STAMP#
729 # Clean temporary document directory
730 rm -rf debian/doc-temp
731 # Clean up.
732 -$(MAKE) distclean
733 rm -f config.log
734ifneq "$(wildcard /usr/share/misc/config.sub)" ""
735 cp -f /usr/share/misc/config.sub config.sub
736endif
737ifneq "$(wildcard /usr/share/misc/config.guess)" ""
738 cp -f /usr/share/misc/config.guess config.guess
739endif
740
741 dh_clean
742
743# Install architecture dependent and independent
744install: install-arch install-indep
745
746# Install architecture dependent
747install-arch: build-arch
748 dh_testdir
749 dh_testroot
750 dh_clean -k -s
751 dh_installdirs -s
752
753 # Install the package files into build directory:
754 # - start with upstream make install
755 $(MAKE) install prefix=$(CURDIR)/debian/$(PACKAGE_NAME)/usr mandir=$(CURDIR)/debian/$(PACKAGE_NAME)/us
756r/share/man
757 # - copy html manual to temporary location for renaming
758 mkdir -p debian/doc-temp
759 dh_install -s
760
761# Install architecture independent
762install-indep: build-indep
763 dh_testdir
764 dh_testroot
765 dh_clean -k -i
766 dh_installdirs -i
767 dh_install -i
768
769# Must not depend on anything. This is to be called by
770# binary-arch/binary-indep
771# in another 'make' thread.
772binary-common:
773 dh_testdir
774 dh_testroot
775 dh_installchangelogs ChangeLog
776 dh_installdocs
777 dh_installman
778 dh_link
779 dh_strip
780 dh_compress
781 dh_fixperms
782 dh_installdeb
783 dh_shlibdeps
784 dh_gencontrol
785 dh_md5sums
786 dh_builddeb
787
788# Build architecture independant packages using the common target.
789binary-indep: build-indep install-indep
790 $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common
791
792# Build architecture dependant packages using the common target.
793binary-arch: build-arch install-arch
794 $(MAKE) -f debian/rules DH_OPTIONS=-a binary-common
795
796# Build architecture depdendent and independent packages
797binary: binary-arch binary-indep
798.PHONY: clean binary
799
800EOF
801 close(CONF);
802 pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/rpm") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/rpm";
803 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/rpm/$pp.spec") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/rpm/$pp.spec";
804 print CONF << 'EOF';
805#
806# $Id$
807#
808
809Summary: bla-bla
810Summary(fr): french bla-bla
811
812Name: PBPKG
813Version: PBVER
814Release: PBTAGPBSUF
815License: PBLIC
816Group: PBGRP
817Url: PBURL
818Source: PBREPO/PBSRC
819BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n)
820#Requires: PBDEP
821
822%description
823PBDESC
824
825%description -l fr
826french desc
827
828%prep
829%setup -q
830
831%build
832%configure
833make %{?_smp_mflags}
834
835%install
836%{__rm} -rf $RPM_BUILD_ROOT
837make DESTDIR=$RPM_BUILD_ROOT install
838
839%clean
840%{__rm} -rf $RPM_BUILD_ROOT
841
842%files
843%defattr(-,root,root)
844%doc ChangeLog
845%doc INSTALL COPYING README AUTHORS NEWS
846
847%changelog
848PBLOG
849
850EOF
851 close(CONF);
852 pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/pbfilter") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/pbfilter";
853
854 }
855 pb_cms_add($pbconf{$ENV{'PBPROJ'}},$ENV{'PBCONFDIR'});
856 pb_cms_checkin($pbconf{$ENV{'PBPROJ'}},"$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}",$pbinit);
857 } else {
858 die "Unable to open $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
859 }
860 }
861 umask 0022;
862 return(\%filteredfiles, \%supfiles, \%defpkgdir, \%extpkgdir);
863} else {
864 # Setup the variables from what has been stored at the end of cms2build
865 my ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","pbroot");
866 $ENV{'PBROOTDIR'} = $var->{$ENV{'PBPROJ'}};
867
868 ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","projver");
869 $ENV{'PBPROJVER'} = $var->{$ENV{'PBPROJ'}};
870
871 ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","projtag");
872 $ENV{'PBPROJTAG'} = $var->{$ENV{'PBPROJ'}};
873
874 ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","pbpackager");
875 $ENV{'PBPACKAGER'} = $var->{$ENV{'PBPROJ'}};
876
877 return;
878}
879}
880
881=back
882
883=head1 WEB SITES
884
885The 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/>.
886
887=head1 USER MAILING LIST
888
889None exists for the moment.
890
891=head1 AUTHORS
892
893The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
894
895=head1 COPYRIGHT
896
897Project-Builder.org is distributed under the GPL v2.0 license
898described in the file C<COPYING> included with the distribution.
899
900=cut
901
9021;
Note: See TracBrowser for help on using the repository browser.