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

Last change on this file since 453 was 453, checked in by Bruno Cornec, 16 years ago
  • Sort output of build files
  • adds pbrepo entry when using newproj
File size: 27.4 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# (containing already a directory with the project-version name)
357#pbwf $ENV{'PBPROJ'} = 1
358
359#
360# Packager label
361#
362#pbpackager $ENV{'PBPROJ'} = William Porte <bill\@$ENV{'PBPROJ'}.org>
363#
364
365# For delivery to a machine by SSH (potentially the FTP server)
366# Needs hostname, account and directory
367#
368#sshhost $ENV{'PBPROJ'} = www.$ENV{'PBPROJ'}.org
369#sshlogin $ENV{'PBPROJ'} = bill
370#sshdir $ENV{'PBPROJ'} = /$ENV{'PBPROJ'}/ftp
371#sshport $ENV{'PBPROJ'} = 22
372
373#
374# For Virtual machines management
375# Naming convention to follow: distribution name (as per ProjectBuilder::Distribution)
376# followed by '-' and by release number
377# followed by '-' and by architecture
378# a .vmtype extension will be added to the resulting string
379# a QEMU rhel-3-i286 here means that the VM will be named rhel-3-i386.qemu
380#
381#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
382
383#
384# Valid values for vmtype are
385# qemu, (vmware, xen, ... TBD)
386#vmtype $ENV{'PBPROJ'} = qemu
387
388# Hash for VM stuff on vmtype
389#vmntp default = pool.ntp.org
390
391# We suppose we can commmunicate with the VM through SSH
392#vmhost $ENV{'PBPROJ'} = localhost
393#vmlogin $ENV{'PBPROJ'} = pb
394#vmport $ENV{'PBPROJ'} = 2222
395
396# Timeout to wait when VM is launched/stopped
397#vmtmout default = 120
398
399# per VMs needed paramaters
400#vmopt $ENV{'PBPROJ'} = -m 384 -daemonize
401#vmpath $ENV{'PBPROJ'} = /home/qemu
402#vmsize $ENV{'PBPROJ'} = 5G
403
404#
405# For Virtual environment management
406# Naming convention to follow: distribution name (as per ProjectBuilder::Distribution)
407# followed by '-' and by release number
408# followed by '-' and by architecture
409# a .vetype extension will be added to the resulting string
410# a chroot rhel-3-i286 here means that the VE will be named rhel-3-i386.chroot
411#
412#velist $ENV{'PBPROJ'} = fedora-7-i386
413
414# VE params
415#vetype $ENV{'PBPROJ'} = chroot
416#ventp default = pool.ntp.org
417#velogin $ENV{'PBPROJ'} = pb
418#vepath $ENV{'PBPROJ'} = /var/lib/mock
419#veconf $ENV{'PBPROJ'} = /etc/mock
420#verebuild $ENV{'PBPROJ'} = false
421
422#
423# Global version/tag for the project
424#
425#projver $ENV{'PBPROJ'} = devel
426#projtag $ENV{'PBPROJ'} = 1
427
428# Hash of valid version names
429#version $ENV{'PBPROJ'} = devel,stable
430
431# Adapt to your needs:
432# Optional if you need to overwrite the global values above
433#
434EOF
435
436 foreach my $pp (@pkgs) {
437 print CONF << "EOF";
438#pkgver $pp = stable
439#pkgtag $pp = 3
440EOF
441 }
442 foreach my $pp (@pkgs) {
443 print CONF << "EOF";
444# Hash of default package/package directory
445#defpkgdir $pp = dir-$pp
446EOF
447 }
448
449 print CONF << "EOF";
450# Hash of additional package/package directory
451#extpkgdir minor-pkg = dir-minor-pkg
452
453# List of files per pkg on which to apply filters
454# Files are mentioned relatively to pbroot/defpkgdir
455EOF
456 foreach my $pp (@pkgs) {
457 print CONF << "EOF";
458#filteredfiles $pp = Makefile.PL,configure.in,install.sh,$pp.8
459#supfiles $pp = $pp.init
460EOF
461 }
462 close(CONF);
463 pb_mkdir_p("$ENV{'PBROOTDIR'}/pbfilter") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter";
464 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/all.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/all.pbf";
465 print CONF << "EOF";
466#
467# \$Id\$
468#
469# Filter for all files
470#
471#
472# PBREPO is replaced by the root URL to access the repository
473filter PBREPO = \$pbrepo
474
475# PBSRC is replaced by the source package location after the repo
476#filter PBSRC = src/%{name}-%{version}.tar.gz
477
478# PBVER is replaced by the version (\$pbver in code)
479filter PBVER = \$pbver
480
481# PBDATE is replaced by the date (\$pbdate in code)
482filter PBDATE = \$pbdate
483
484# PBLOG is replaced by the changelog if value is yes
485#filter PBLOG = yes
486
487# PBTAG is replaced by the tag (\$pbtag in code)
488filter PBTAG = \$pbtag
489
490# PBREV is replaced by the revision (\$pbrev in code)
491filter PBREV = \$pbrev
492
493# PBPKG is replaced by the package name (\$pbpkg in code)
494filter PBPKG = \$pbpkg
495
496# PBPACKAGER is replaced by the packager name (\$pbpackager in code)
497filter PBPACKAGER = \$pbpackager
498
499# PBDESC contains the description of the package
500#filter PBDESC = "Bla-Bla"
501
502# PBURL contains the URL of the Web site of the project
503#filter PBURL = http://www.$ENV{'PBPROJ'}.org
504EOF
505 close(CONF);
506 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/rpm.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/rpm.pbf";
507 print CONF << "EOF";
508#
509# \$Id\$
510#
511# Filter for rpm build
512#
513
514# PBGRP is replaced by the RPM group of apps
515# Cf: http://fedoraproject.org/wiki/RPMGroups
516#filter PBGRP = Applications/Archiving
517
518# PBLIC is replaced by the license of the application
519# Cf: http://fedoraproject.org/wiki/Licensing
520#filter PBLIC = GPL
521
522# PBDEP is replaced by the list of dependencies
523#filter PBDEP =
524
525# PBSUF is replaced by the package suffix (\$pbsuf in code)
526filter PBSUF = \$pbsuf
527
528# PBOBS is replaced by the Obsolete line
529#filter PBOBS =
530
531EOF
532 close(CONF);
533 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/deb.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/deb.pbf";
534 print CONF << "EOF";
535#
536# \$Id\$
537#
538# Filter for debian build
539#
540# PBGRP is replaced by the group of apps
541filter PBGRP = utils
542
543# PBLIC is replaced by the license of the application
544# Cf:
545#filter PBLIC = GPL
546
547# PBDEP is replaced by the list of dependencies
548#filter PBDEP =
549
550# PBSUG is replaced by the list of suggestions
551#filter PBSUG =
552
553# PBREC is replaced by the list of recommandations
554#filter PBREC =
555
556EOF
557 close(CONF);
558 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/md.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/md.pbf";
559 print CONF << "EOF";
560# Specific group for Mandriva for $ENV{'PBPROJ'}
561# Cf: http://wiki.mandriva.com/en/Development/Packaging/Groups
562#filter PBGRP = Archiving/Backup
563
564# PBLIC is replaced by the license of the application
565# Cf: http://wiki.mandriva.com/en/Development/Packaging/Licenses
566#filter PBLIC = GPL
567
568EOF
569 close(CONF);
570 open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/novell.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/novell.pbf";
571 print CONF << "EOF";
572# Specific group for SuSE for $ENV{'PBPROJ'}
573# Cf: http://en.opensuse.org/SUSE_Package_Conventions/RPM_Groups
574#filter PBGRP = Productivity/Archiving/Backup
575
576# PBLIC is replaced by the license of the application
577# Cf: http://en.opensuse.org/Packaging/SUSE_Package_Conventions/RPM_Style#1.6._License_Tag
578#filter PBLIC = GPL
579
580EOF
581 close(CONF);
582 foreach my $pp (@pkgs) {
583 pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/deb") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb";
584 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/control") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/control";
585 print CONF << "EOF";
586Source: PBPKG
587Section: PBGRP
588Priority: optional
589Maintainer: PBPACKAGER
590Build-Depends: debhelper (>= 4.2.20), PBDEP
591Standards-Version: 3.6.1
592
593Package: PBPKG
594Architecture: amd64 i386 ia64
595Section: PBGRP
596Priority: optional
597Depends: \${shlibs:Depends}, \${misc:Depends}, PBDEP
598Recommends: PBREC
599Suggests: PBSUG
600Description:
601 PBDESC
602 .
603 Homepage: PBURL
604
605EOF
606 close(CONF);
607 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/copyright") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/copyright";
608 print CONF << "EOF";
609This package is debianized by PBPACKAGER
610`date`
611
612The current upstream source was downloaded from
613PBREPO.
614
615Upstream Authors: Put their name here
616
617Copyright:
618
619 This package is free software; you can redistribute it and/or modify
620 it under the terms of the GNU General Public License as published by
621 the Free Software Foundation; version 2 dated June, 1991.
622
623 This package is distributed in the hope that it will be useful,
624 but WITHOUT ANY WARRANTY; without even the implied warranty of
625 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
626 GNU General Public License for more details.
627
628 You should have received a copy of the GNU General Public License
629 along with this package; if not, write to the Free Software
630 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
631 MA 02110-1301, USA.
632
633On Debian systems, the complete text of the GNU General
634Public License can be found in /usr/share/common-licenses/GPL.
635
636EOF
637 close(CONF);
638 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/changelog") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/changelog";
639 print CONF << "EOF";
640PBLOG
641EOF
642 close(CONF);
643 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/compat") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/compat";
644 print CONF << "EOF";
6454
646EOF
647 close(CONF);
648 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/$pp.dirs") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/$pp.dirs";
649 print CONF << "EOF";
650EOF
651 close(CONF);
652 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/$pp.docs") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/$pp.docs";
653 print CONF << "EOF";
654INSTALL
655COPYING
656AUTHORS
657NEWS
658README
659EOF
660 close(CONF);
661 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/rules") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/rules";
662 print CONF << 'EOF';
663#!/usr/bin/make -f
664# -*- makefile -*-
665# Sample debian/rules that uses debhelper.
666# GNU copyright 1997 to 1999 by Joey Hess.
667#
668# $Id$
669#
670
671# Uncomment this to turn on verbose mode.
672#export DH_VERBOSE=1
673
674# Define package name variable for a one-stop change.
675PACKAGE_NAME = PBPKG
676
677# These are used for cross-compiling and for saving the configure script
678# from having to guess our platform (since we know it already)
679DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
680DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
681
682CFLAGS = -Wall -g
683
684ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
685 CFLAGS += -O0
686else
687 CFLAGS += -O2
688endif
689ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
690 INSTALL_PROGRAM += -s
691endif
692config.status: configure
693 dh_testdir
694
695 # Configure the package.
696 CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr
697 --mandir=\$${prefix}/share/man
698
699# Build both architecture dependent and independent
700build: build-arch build-indep
701
702# Build architecture dependent
703build-arch: build-arch-stamp
704
705build-arch-stamp: config.status
706 dh_testdir
707
708 # Compile the package.
709 $(MAKE)
710
711 touch build-stamp
712
713# Build architecture independent
714build-indep: build-indep-stamp
715
716build-indep-stamp: config.status
717 # Nothing to do, the only indep item is the manual which is available as html in original source
718 touch build-indep-stamp
719
720# Clean up
721clean:
722 dh_testdir
723 dh_testroot
724 rm -f build-arch-stamp build-indep-stamp #CONFIGURE-STAMP#
725 # Clean temporary document directory
726 rm -rf debian/doc-temp
727 # Clean up.
728 -$(MAKE) distclean
729 rm -f config.log
730ifneq "$(wildcard /usr/share/misc/config.sub)" ""
731 cp -f /usr/share/misc/config.sub config.sub
732endif
733ifneq "$(wildcard /usr/share/misc/config.guess)" ""
734 cp -f /usr/share/misc/config.guess config.guess
735endif
736
737 dh_clean
738
739# Install architecture dependent and independent
740install: install-arch install-indep
741
742# Install architecture dependent
743install-arch: build-arch
744 dh_testdir
745 dh_testroot
746 dh_clean -k -s
747 dh_installdirs -s
748
749 # Install the package files into build directory:
750 # - start with upstream make install
751 $(MAKE) install prefix=$(CURDIR)/debian/$(PACKAGE_NAME)/usr mandir=$(CURDIR)/debian/$(PACKAGE_NAME)/us
752r/share/man
753 # - copy html manual to temporary location for renaming
754 mkdir -p debian/doc-temp
755 dh_install -s
756
757# Install architecture independent
758install-indep: build-indep
759 dh_testdir
760 dh_testroot
761 dh_clean -k -i
762 dh_installdirs -i
763 dh_install -i
764
765# Must not depend on anything. This is to be called by
766# binary-arch/binary-indep
767# in another 'make' thread.
768binary-common:
769 dh_testdir
770 dh_testroot
771 dh_installchangelogs ChangeLog
772 dh_installdocs
773 dh_installman
774 dh_link
775 dh_strip
776 dh_compress
777 dh_fixperms
778 dh_installdeb
779 dh_shlibdeps
780 dh_gencontrol
781 dh_md5sums
782 dh_builddeb
783
784# Build architecture independant packages using the common target.
785binary-indep: build-indep install-indep
786 $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common
787
788# Build architecture dependant packages using the common target.
789binary-arch: build-arch install-arch
790 $(MAKE) -f debian/rules DH_OPTIONS=-a binary-common
791
792# Build architecture depdendent and independent packages
793binary: binary-arch binary-indep
794.PHONY: clean binary
795
796EOF
797 close(CONF);
798 pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/rpm") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/rpm";
799 open(CONF,"> $ENV{'PBROOTDIR'}/$pp/rpm/$pp.spec") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/rpm/$pp.spec";
800 print CONF << 'EOF';
801#
802# $Id$
803#
804
805Summary: bla-bla
806Summary(fr): french bla-bla
807
808Name: PBPKG
809Version: PBVER
810Release: PBTAGPBSUF
811License: PBLIC
812Group: PBGRP
813Url: PBURL
814Source: PBREPO/PBSRC
815BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n)
816#Requires: PBDEP
817
818%description
819PBDESC
820
821%description -l fr
822french desc
823
824%prep
825%setup -q
826
827%build
828%configure
829make %{?_smp_mflags}
830
831%install
832%{__rm} -rf $RPM_BUILD_ROOT
833make DESTDIR=$RPM_BUILD_ROOT install
834
835%clean
836%{__rm} -rf $RPM_BUILD_ROOT
837
838%files
839%defattr(-,root,root)
840%doc ChangeLog
841%doc INSTALL COPYING README AUTHORS NEWS
842
843%changelog
844PBLOG
845
846EOF
847 close(CONF);
848 pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/pbfilter") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/pbfilter";
849
850 }
851 pb_cms_add($pbconf{$ENV{'PBPROJ'}},$ENV{'PBCONFDIR'});
852 pb_cms_checkin($pbconf{$ENV{'PBPROJ'}},"$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}",$pbinit);
853 } else {
854 die "Unable to open $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
855 }
856 }
857 umask 0022;
858 return(\%filteredfiles, \%supfiles, \%defpkgdir, \%extpkgdir);
859} else {
860 # Setup the variables from what has been stored at the end of cms2build
861 my ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","pbroot");
862 $ENV{'PBROOTDIR'} = $var->{$ENV{'PBPROJ'}};
863
864 ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","projver");
865 $ENV{'PBPROJVER'} = $var->{$ENV{'PBPROJ'}};
866
867 ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","projtag");
868 $ENV{'PBPROJTAG'} = $var->{$ENV{'PBPROJ'}};
869
870 ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","pbpackager");
871 $ENV{'PBPACKAGER'} = $var->{$ENV{'PBPROJ'}};
872
873 return;
874}
875}
876
877=back
878
879=head1 WEB SITES
880
881The 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/>.
882
883=head1 USER MAILING LIST
884
885None exists for the moment.
886
887=head1 AUTHORS
888
889The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
890
891=head1 COPYRIGHT
892
893Project-Builder.org is distributed under the GPL v2.0 license
894described in the file C<COPYING> included with the distribution.
895
896=cut
897
8981;
Note: See TracBrowser for help on using the repository browser.