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

Revision 547, 28.9 KB checked in by bruno, 5 years ago (diff)

First coding of pb_web_news2html which generates news from the announces DB in order to be used on the Website

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/) || ($action =~ /^web/)) {
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# Used if virtual name != real name (perl, ...)
487#filter PBSRC = src/%{srcname}-%{version}.tar.gz
488
489# PBVER is replaced by the version (\$pb->{'ver'} in code)
490filter PBVER = \$pb->{'ver'}
491
492# PBDATE is replaced by the date (\$pb->{'date'} in code)
493filter PBDATE = \$pb->{'date'}
494
495# PBLOG is replaced by the changelog if value is yes
496#filter PBLOG = yes
497
498# PBPATCHSRC is replaced by the patches names if value is yes
499#filter PBPATCHSRC = yes
500
501# PBPATCHCMD is replaced by the patches commands if value is yes
502#filter PBPATCHCMD = yes
503
504# PBTAG is replaced by the tag (\$pb->{'tag'} in code)
505filter PBTAG = \$pb->{'tag'}
506
507# PBREV is replaced by the revision (\$pb->{'rev'} in code)
508filter PBREV = \$pb->{'rev'}
509
510# PBREALPKG is replaced by the package name (\$pb->{'realpkg'} in code)
511filter PBREALPKG = \$pb->{'realpkg'}
512
513# PBPKG is replaced by the package name (\$pb->{'pkg'} in code)
514filter PBPKG = \$pb->{'pkg'}
515
516# PBPACKAGER is replaced by the packager name (\$pb->{'packager'} in code)
517filter PBPACKAGER = \$pb->{'packager'}
518
519# PBDESC contains the description of the package
520#filter PBDESC = "Bla-Bla"
521
522# PBURL contains the URL of the Web site of the project
523#filter PBURL = http://www.$ENV{'PBPROJ'}.org
524EOF
525                        close(CONF);
526                        open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/rpm.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/rpm.pbf";
527                        print CONF << "EOF";
528#
529# \$Id\$
530#
531# Filter for rpm build
532#
533
534# PBGRP is replaced by the RPM group of apps
535#filter PBGRP = Applications/Archiving
536
537# PBLIC is replaced by the license of the application
538#filter PBLIC = GPL
539
540# PBDEP is replaced by the list of dependencies
541#filter PBDEP =
542
543# PBSUF is replaced by the package suffix (\$pb->{'suf'} in code)
544filter PBSUF = \$pb->{'suf'}
545
546# PBOBS is replaced by the Obsolete line
547#filter PBOBS =
548
549EOF
550                        close(CONF);
551                        open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/fedora.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/fedora.pbf";
552                        print CONF << "EOF";
553#
554# \$Id\$
555#
556# Filter for rpm build
557#
558
559# PBGRP is replaced by the RPM group of apps
560# Cf: http://fedoraproject.org/wiki/RPMGroups
561#filter PBGRP = Applications/Archiving
562
563# PBLIC is replaced by the license of the application
564# Cf: http://fedoraproject.org/wiki/Licensing
565#filter PBLIC = GPLv2+
566
567# PBDEP is replaced by the list of dependencies
568#filter PBDEP =
569
570# PBSUF is replaced by the package suffix (\$pbsuf'} in code)
571filter PBSUF = %{dist}
572
573# PBOBS is replaced by the Obsolete line
574#filter PBOBS =
575
576EOF
577                        close(CONF);
578                        open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/deb.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/deb.pbf";
579                        print CONF << "EOF";
580#
581# \$Id\$
582#
583# Filter for debian build
584#
585# PBGRP is replaced by the group of apps
586filter PBGRP = utils
587
588# PBLIC is replaced by the license of the application
589# Cf:
590#filter PBLIC = GPL
591
592# PBDEP is replaced by the list of dependencies
593#filter PBDEP =
594
595# PBSUG is replaced by the list of suggestions
596#filter PBSUG =
597
598# PBREC is replaced by the list of recommandations
599#filter PBREC =
600
601EOF
602                        close(CONF);
603                        open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/md.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/md.pbf";
604                        print CONF << "EOF";
605# Specific group for Mandriva for $ENV{'PBPROJ'}
606# Cf: http://wiki.mandriva.com/en/Development/Packaging/Groups
607#filter PBGRP = Archiving/Backup
608
609# PBLIC is replaced by the license of the application
610# Cf: http://wiki.mandriva.com/en/Development/Packaging/Licenses
611#filter PBLIC = GPL
612
613EOF
614                        close(CONF);
615                        open(CONF,"> $ENV{'PBROOTDIR'}/pbfilter/novell.pbf") || die "Unable to create $ENV{'PBROOTDIR'}/pbfilter/novell.pbf";
616                        print CONF << "EOF";
617# Specific group for SuSE for $ENV{'PBPROJ'}
618# Cf: http://en.opensuse.org/SUSE_Package_Conventions/RPM_Groups
619#filter PBGRP = Productivity/Archiving/Backup
620
621# PBLIC is replaced by the license of the application
622# Cf: http://en.opensuse.org/Packaging/SUSE_Package_Conventions/RPM_Style#1.6._License_Tag
623#filter PBLIC = GPL
624
625EOF
626                        close(CONF);
627                        foreach my $pp (@pkgs) {
628                                pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/deb") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb";
629                                open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/control") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/control";
630                                print CONF << "EOF";
631Source: PBPKG
632Section: PBGRP
633Priority: optional
634Maintainer: PBPACKAGER
635Build-Depends: debhelper (>= 4.2.20), PBDEP
636Standards-Version: 3.6.1
637
638Package: PBPKG
639Architecture: amd64 i386 ia64
640Section: PBGRP
641Priority: optional
642Depends: \${shlibs:Depends}, \${misc:Depends}, PBDEP
643Recommends: PBREC
644Suggests: PBSUG
645Description:
646 PBDESC
647 .
648 Homepage: PBURL
649
650EOF
651                                close(CONF);
652                                open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/copyright") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/copyright";
653                                print CONF << "EOF";
654This package is debianized by PBPACKAGER
655`date`
656
657The current upstream source was downloaded from
658PBREPO.
659
660Upstream Authors: Put their name here
661
662Copyright:
663
664   This package is free software; you can redistribute it and/or modify
665   it under the terms of the GNU General Public License as published by
666   the Free Software Foundation; version 2 dated June, 1991.
667
668   This package is distributed in the hope that it will be useful,
669   but WITHOUT ANY WARRANTY; without even the implied warranty of
670   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
671   GNU General Public License for more details.
672
673   You should have received a copy of the GNU General Public License
674   along with this package; if not, write to the Free Software
675   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
676   MA 02110-1301, USA.
677
678On Debian systems, the complete text of the GNU General
679Public License can be found in /usr/share/common-licenses/GPL.
680
681EOF
682                                close(CONF);
683                                open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/changelog") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/changelog";
684                                print CONF << "EOF";
685PBLOG
686EOF
687                                close(CONF);
688                                open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/compat") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/compat";
689                                print CONF << "EOF";
6904
691EOF
692                                close(CONF);
693                                open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/$pp.dirs") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/$pp.dirs";
694                                print CONF << "EOF";
695EOF
696                                close(CONF);
697                                open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/$pp.docs") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/$pp.docs";
698                                print CONF << "EOF";
699INSTALL
700COPYING
701AUTHORS
702NEWS
703README
704EOF
705                                close(CONF);
706                                open(CONF,"> $ENV{'PBROOTDIR'}/$pp/deb/rules") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/deb/rules";
707                                print CONF << 'EOF';
708#!/usr/bin/make -f
709# -*- makefile -*-
710# Sample debian/rules that uses debhelper.
711# GNU copyright 1997 to 1999 by Joey Hess.
712#
713# $Id$
714#
715
716# Uncomment this to turn on verbose mode.
717#export DH_VERBOSE=1
718
719# Define package name variable for a one-stop change.
720PACKAGE_NAME = PBPKG
721
722# These are used for cross-compiling and for saving the configure script
723# from having to guess our platform (since we know it already)
724DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
725DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
726
727CFLAGS = -Wall -g
728
729ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
730        CFLAGS += -O0
731else
732        CFLAGS += -O2
733endif
734ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
735        INSTALL_PROGRAM += -s
736endif
737config.status: configure
738        dh_testdir
739
740        # Configure the package.
741        CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr
742 --mandir=\$${prefix}/share/man
743
744# Build both architecture dependent and independent
745build: build-arch build-indep
746
747# Build architecture dependent
748build-arch: build-arch-stamp
749
750build-arch-stamp:  config.status
751        dh_testdir
752
753        # Compile the package.
754        $(MAKE)
755
756        touch build-stamp
757
758# Build architecture independent
759build-indep: build-indep-stamp
760
761build-indep-stamp:  config.status
762        # Nothing to do, the only indep item is the manual which is available as html in original source
763        touch build-indep-stamp
764
765# Clean up
766clean:
767        dh_testdir
768        dh_testroot
769        rm -f build-arch-stamp build-indep-stamp #CONFIGURE-STAMP#
770        # Clean temporary document directory
771        rm -rf debian/doc-temp
772        # Clean up.
773        -$(MAKE) distclean
774        rm -f config.log
775ifneq "$(wildcard /usr/share/misc/config.sub)" ""
776        cp -f /usr/share/misc/config.sub config.sub
777endif
778ifneq "$(wildcard /usr/share/misc/config.guess)" ""
779        cp -f /usr/share/misc/config.guess config.guess
780endif
781
782        dh_clean
783
784# Install architecture dependent and independent
785install: install-arch install-indep
786
787# Install architecture dependent
788install-arch: build-arch
789        dh_testdir
790        dh_testroot
791        dh_clean -k -s
792        dh_installdirs -s
793
794        # Install the package files into build directory:
795        # - start with upstream make install
796        $(MAKE) install prefix=$(CURDIR)/debian/$(PACKAGE_NAME)/usr mandir=$(CURDIR)/debian/$(PACKAGE_NAME)/us
797r/share/man
798        # - copy html manual to temporary location for renaming
799        mkdir -p debian/doc-temp
800        dh_install -s
801
802# Install architecture independent
803install-indep: build-indep
804        dh_testdir
805        dh_testroot
806        dh_clean -k -i
807        dh_installdirs -i
808        dh_install -i
809
810# Must not depend on anything. This is to be called by
811# binary-arch/binary-indep
812# in another 'make' thread.
813binary-common:
814        dh_testdir
815        dh_testroot
816        dh_installchangelogs ChangeLog
817        dh_installdocs
818        dh_installman
819        dh_link
820        dh_strip
821        dh_compress
822        dh_fixperms
823        dh_installdeb
824        dh_shlibdeps
825        dh_gencontrol
826        dh_md5sums
827        dh_builddeb
828
829# Build architecture independant packages using the common target.
830binary-indep: build-indep install-indep
831        $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common
832
833# Build architecture dependant packages using the common target.
834binary-arch: build-arch install-arch
835        $(MAKE) -f debian/rules DH_OPTIONS=-a binary-common
836
837# Build architecture depdendent and independent packages
838binary: binary-arch binary-indep
839.PHONY: clean binary
840
841EOF
842                                close(CONF);
843                                pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/rpm") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/rpm";
844                                open(CONF,"> $ENV{'PBROOTDIR'}/$pp/rpm/$pp.spec") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/rpm/$pp.spec";
845                                print CONF << 'EOF';
846#
847# $Id$
848#
849# Used if virtual name != real name (perl, ...)
850#%define srcname        PBPKG
851
852Summary:        bla-bla
853Summary(fr):    french bla-bla
854
855Name:           PBREALPKG
856Version:        PBVER
857Release:        PBTAGPBSUF
858License:        PBLIC
859Group:          PBGRP
860Url:            PBURL
861Source:         PBREPO/PBSRC
862#PBPATCHSRC
863BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n)
864#Requires:       PBDEP
865
866%description
867PBDESC
868
869%description -l fr
870french desc
871
872%prep
873%setup -q
874# Used if virtual name != real name (perl, ...)
875#%setup -q -n %{srcname}-%{version}
876#PBPATCHCMD
877
878%build
879%configure
880make %{?_smp_mflags}
881
882%install
883%{__rm} -rf $RPM_BUILD_ROOT
884make DESTDIR=$RPM_BUILD_ROOT install
885
886%clean
887%{__rm} -rf $RPM_BUILD_ROOT
888
889%files
890%defattr(-,root,root)
891%doc ChangeLog
892%doc INSTALL COPYING README AUTHORS NEWS
893
894%changelog
895PBLOG
896
897EOF
898                                close(CONF);
899                                pb_mkdir_p("$ENV{'PBROOTDIR'}/$pp/pbfilter") || die "Unable to create $ENV{'PBROOTDIR'}/$pp/pbfilter";
900       
901                        }
902                        pb_cms_add($pbconf{$ENV{'PBPROJ'}},$ENV{'PBCONFDIR'});
903                        pb_cms_checkin($pbconf{$ENV{'PBPROJ'}},"$ENV{'PBDEFDIR'}/$ENV{'PBPROJ'}",$pbinit);
904                } else {
905                        die "Unable to open $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb";
906                }
907        }
908        umask 0022;
909        return(\%filteredfiles, \%supfiles, \%defpkgdir, \%extpkgdir);
910} else {
911        # Setup the variables from what has been stored at the end of cms2build
912        my ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","pbroot");
913        $ENV{'PBROOTDIR'} = $var->{$ENV{'PBPROJ'}};
914
915        ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","projver");
916        $ENV{'PBPROJVER'} = $var->{$ENV{'PBPROJ'}};
917
918        ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","projtag");
919        $ENV{'PBPROJTAG'} = $var->{$ENV{'PBPROJ'}};
920
921        ($var) = pb_conf_read("$ENV{'PBDESTDIR'}/pbrc","pbpackager");
922        $ENV{'PBPACKAGER'} = $var->{$ENV{'PBPROJ'}};
923
924        return;
925}
926}
927
928=back
929
930=head1 WEB SITES
931
932The 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/>.
933
934=head1 USER MAILING LIST
935
936None exists for the moment.
937
938=head1 AUTHORS
939
940The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>.
941
942=head1 COPYRIGHT
943
944Project-Builder.org is distributed under the GPL v2.0 license
945described in the file C<COPYING> included with the distribution.
946
947=cut
948
9491;
Note: See TracBrowser for help on using the repository browser.