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

Last change on this file since 539 was 539, checked in by Bruno Cornec, 16 years ago

First attempt to code support for real/virtual names for packages in order to support perl naming in both Debian and RPM distributions

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