Changeset 409 in ProjectBuilder
- Timestamp:
- Apr 25, 2008, 3:13:55 PM (17 years ago)
- Location:
- devel
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
devel/pb-modules/lib/ProjectBuilder/Conf.pm
r405 r409 22 22 23 23 our @ISA = qw(Exporter); 24 our @EXPORT = qw(pb_conf_init pb_conf_read pb_conf_read_if pb_conf_get pb_conf_get_if); 24 our @EXPORT = qw(pb_conf_init pb_conf_add pb_conf_read pb_conf_read_if pb_conf_get pb_conf_get_if); 25 26 # Global list of conf files 27 our @pbconffiles = (); 25 28 26 29 =pod … … 57 60 sub pb_conf_init { 58 61 59 my @conffiles = @_; 62 @pbconffiles = @_; 63 } 64 65 =item B<pb_conf_add> 66 67 This function adds the configuration file to the list last. 68 69 =cut 70 71 sub pb_conf_add { 72 73 my $f = shift; 74 75 push(@pbconffiles,"$f"); 60 76 } 61 77 … … 84 100 85 101 $k1->{'pb'} contains 3 86 $k a->{'default'} contains 1102 $k1->{'default'} contains 1 87 103 $k2->{'pb'} contains 12,25 88 104 … … 130 146 } 131 147 132 133 # Function which returns a pointer on a table 134 # corresponding to a set of values queried in the conf file 135 # and test the returned vaue as they need to exist in that case 136 sub pb_conf_get { 137 138 my @param = @_; 139 my @return = pb_conf_get_if(@param); 140 141 die "No params found for $ENV{'PBPROJ'}" if (not @return); 142 143 foreach my $i (0..$#param) { 144 die "No $param[$i] defined for $ENV{'PBPROJ'}" if (not defined $return[$i]); 145 } 146 return(@return); 147 } 148 149 # Function which returns a pointer on a table 150 # corresponding to a set of values queried in the conf file 151 # Those value may be undef if they do not exist 148 =item B<pb_conf_get_if> 149 150 This function returns a table, corresponding to a set of values querried in the conf files or undef if it doen't exist. It takes a table of keys as an input parameter. 151 152 The format of the configurations file is as follows: 153 154 key tag = value1,value2,... 155 156 It will gather the values from all the configurations files passed to pb_conf_init, and return the values for the keys, taking in account the order of conf files, to manage overloading. 157 158 $ cat $HOME/.pbrc 159 pbver pb = 1 160 pblist pb = 4 161 $ cat $HOME/.pbrc2 162 pbver pb = 3 163 pblist default = 5 164 165 calling it like this: 166 167 pb_conf_init("$HOME/.pbrc","$HOME/.pbrc2"); 168 my ($k1, $k2) = pb_conf_get_if("pbver","pblist"); 169 170 will allow to get the mapping: 171 172 $k1->{'pb'} contains 3 173 $k2->{'pb'} contains 4 174 175 Valid chars for keys and tags are letters, numbers, '-' and '_'. 176 177 =cut 178 152 179 sub pb_conf_get_if { 153 180 181 my @param = @_; 182 183 my $ptr = undef; 184 185 # the most important conf file is first, so read them in revers order 186 foreach my $f (reverse @pbconffiles) { 187 $ptr = pb_conf_get_fromfile_if("$f",$ptr,@param); 188 } 189 190 return(@$ptr); 191 } 192 193 =item B<pb_conf_fromfile_if> 194 195 This function returns a pointer on a table, corresponding to a merge of values querried in the conf file and the pointer on another table passed as parameter. It takes a table of keys as last input parameter. 196 197 my ($k1) = pb_conf_fromfile_if("$HOME/.pbrc",undef,"pbver","pblist"); 198 my ($k2) = pb_conf_fromfile_if("$HOME/.pbrc3",$k1,"pbver","pblist"); 199 200 It is used internally by pb_conf_get_if and is not exported yet. 201 202 =cut 203 204 205 sub pb_conf_get_fromfile_if { 206 207 my $conffile = shift; 208 my $ptr2 = shift || undef; 154 209 my @param = @_; 155 210 … … 157 212 my @ptr1 = (); 158 213 my @ptr2 = (); 159 @ptr1 = pb_conf_read_if("$ENV{'PBETC'}", @param) if (defined $ENV{'PBETC'}); 160 @ptr2 = pb_conf_read_if("$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb", @param) if ((defined $ENV{'PBROOTDIR'}) and (defined $ENV{'PBPROJ'})); 214 215 # @ptr1 contains the values overloading what @ptr2 may contain. 216 @ptr1 = pb_conf_read_if("$conffile", @param) if (defined $conffile); 217 @ptr2 = @$ptr2 if (defined $ptr2); 161 218 162 219 my $p1; … … 169 226 $p1 = $ptr1[$i]; 170 227 $p2 = $ptr2[$i]; 171 # Always try to take the param from the home dir conf file in priority172 # in order to mask what could be defined under the CMS to allow for overloading228 # Always try to take the param from ptr1 229 # in order to mask what could be defined already in ptr2 173 230 if (not defined $p2) { 174 # No ref in CMS project conf file so use the home dir one.231 # No ref in p2 so use p1 175 232 $p1->{$ENV{'PBPROJ'}} = $p1->{'default'} if ((not defined $p1->{$ENV{'PBPROJ'}}) && (defined $p1->{'default'})); 176 233 } else { 177 # Ref found in CMS project conf file234 # Ref found in p2 178 235 if (not defined $p1) { 179 # No ref in home dir project conf file so use the CMS one.236 # No ref in p1 so use p2's value 180 237 $p2->{$ENV{'PBPROJ'}} = $p2->{'default'} if ((not defined $p2->{$ENV{'PBPROJ'}}) && (defined $p2->{'default'})); 181 238 $p1 = $p2; … … 196 253 } 197 254 # Now copy back into p1 all p2 content which doesn't exist in p1 198 # p1 content (local) always has priority over p2 (project)255 # p1 content always has priority over p2 199 256 foreach my $k (keys %$p2) { 200 257 $p1->{$k} = $p2->{$k} if (not defined $p1->{$k}); … … 205 262 } 206 263 pb_log(2,"DEBUG: pb_conf_get param ptr1: ".Dumper(@ptr1)."\n"); 207 return(@ptr1); 208 } 209 264 return(\@ptr1); 265 } 266 267 =item B<pb_conf_get> 268 269 This function is the same B<pb_conf_get_if>, except that it tests each returned value as they need to exist in that case. 270 271 =cut 272 273 sub pb_conf_get { 274 275 my @param = @_; 276 my @return = pb_conf_get_if(@param); 277 278 die "No params found for $ENV{'PBPROJ'}" if (not @return); 279 280 foreach my $i (0..$#param) { 281 die "No $param[$i] defined for $ENV{'PBPROJ'}" if (not defined $return[$i]); 282 } 283 return(@return); 284 } 210 285 211 286 =back -
devel/pb/bin/pb
r405 r409 551 551 if (defined $ptr) { 552 552 foreach my $f (values %bfiles,values %pkgfiles) { 553 pb_filter_file_pb("$ENV{'PBROOTDIR'}/$f",$ptr,"$dest/pbconf/$ddir-$dver/".basename($f),$dtype,$pbsuf,$ ENV{'PBPROJ'},$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$defpkgdir,$extpkgdir,$ENV{'PBPACKAGER'},$chglog);553 pb_filter_file_pb("$ENV{'PBROOTDIR'}/$f",$ptr,"$dest/pbconf/$ddir-$dver/".basename($f),$dtype,$pbsuf,$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$defpkgdir,$extpkgdir,$ENV{'PBPACKAGER'},$chglog); 554 554 } 555 555 } … … 573 573 if (defined $filteredfiles->{$pbpkg}) { 574 574 foreach my $f (split(/,/,$filteredfiles->{$pbpkg})) { 575 pb_filter_file_inplace($ptr,"$dest/$f",$ ENV{'PBPROJ'},$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$ENV{'PBPACKAGER'});575 pb_filter_file_inplace($ptr,"$dest/$f",$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$ENV{'PBPACKAGER'}); 576 576 $liste = "$f $liste"; 577 577 } … … 581 581 # Prepare the dest directory for archive 582 582 if (-x "$ENV{'PBROOTDIR'}/$pbpkg/pbinit") { 583 pb_filter_file("$ENV{'PBROOTDIR'}/$pbpkg/pbinit",$ptr,"$ENV{'PBTMP'}/pbinit",$ ENV{'PBPROJ'},$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$ENV{'PBPACKAGER'});583 pb_filter_file("$ENV{'PBROOTDIR'}/$pbpkg/pbinit",$ptr,"$ENV{'PBTMP'}/pbinit",$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$ENV{'PBPACKAGER'}); 584 584 chmod 0755,"$ENV{'PBTMP'}/pbinit"; 585 585 pb_system("cd $dest ; $ENV{'PBTMP'}/pbinit","Executing init script from $ENV{'PBROOTDIR'}/$pbpkg/pbinit"); … … 1650 1650 $ENV{'PBETC'} = "$ENV{'HOME'}/.pbrc"; 1651 1651 1652 # We only have one configuration file for now. 1653 pb_conf_init("$ENV{'PBETC'}"); 1654 1652 1655 # 1653 1656 # Check project name … … 1830 1833 } 1831 1834 1832 return if ($action =~ /^newver$/); 1835 # Adds that conf file to the list to consider 1836 pb_conf_add("$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb") if (-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb"); 1837 1838 return if ($action =~ /^newver$/); 1833 1839 1834 1840 my %version = (); … … 1839 1845 1840 1846 if ((-f "$ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb") and (not defined $pbinit)) { 1847 1841 1848 # List of pkg to build by default (mandatory) 1842 1849 my ($defpkgdir,$pbpackager, $pkgv, $pkgt) = pb_conf_get("defpkgdir","pbpackager","projver","projtag"); -
devel/pb/lib/ProjectBuilder/CMS.pm
r405 r409 29 29 30 30 our @ISA = qw(Exporter); 31 our @EXPORT = qw(pb_cms_init pb_cms_export pb_cms_get_uri pb_cms_copy pb_cms_checkout pb_cms_up pb_cms_checkin pb_cms_isdiff pb_cms_get_pkg pb_cms_compliant pb_cms_log pb_cms_create_authors);31 our @EXPORT = qw(pb_cms_init pb_cms_export pb_cms_get_uri pb_cms_copy pb_cms_checkout pb_cms_up pb_cms_checkin pb_cms_isdiff pb_cms_get_pkg pb_cms_compliant pb_cms_log); 32 32 33 33 =pod … … 35 35 =head1 NAME 36 36 37 ProjectBuilder::CMS, part of the project-builder.org - module dealing with configuration management system functions suitable for pbinit calls.37 ProjectBuilder::CMS, part of the project-builder.org 38 38 39 39 =head1 DESCRIPTION … … 41 41 This modules provides configuration management system functions suitable for pbinit calls. 42 42 43 =cut 44 45 # Setup environment for CMS system for URL passed 43 =head1 USAGE 44 45 =over 4 46 47 =item B<pb_cms_init> 48 49 This function setup the environment for the CMS system related to the URL given by the pburl configuration parameter. 50 The potential parameter indicates whether we should inititate the context or not. 51 It sets up environement variables (PBPROJDIR, PBDIR, PBREVISION, PBCMSLOGFILE) 52 53 =cut 54 46 55 sub pb_cms_init { 47 56 … … 95 104 return($scheme,$pburl->{$ENV{'PBPROJ'}}); 96 105 } 106 107 =item B<pb_cms_export> 108 109 This function exports a CMS content to a directory. 110 The first parameter is the URL of the CMS content. 111 The second parameter is the directory in which it is locally exposed (result of a checkout). 112 The third parameter is the directory where we want to deliver it (result of export). 113 114 =cut 97 115 98 116 sub pb_cms_export { … … 186 204 } 187 205 188 # This function is only called with a real CMS system 206 =item B<pb_cms_get_uri> 207 208 This function is only called with a real CMS system and gives the URL stored in the checked out directory. 209 The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...) 210 The second parameter is the directory in which it is locally exposed (result of a checkout). 211 212 =cut 213 189 214 sub pb_cms_get_uri { 190 215 … … 234 259 } 235 260 261 =item B<pb_cms_copy> 262 263 This function copies a CMS content to another. 264 The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...) 265 The second parameter is the URL of the original CMS content. 266 The third parameter is the URL of the destination CMS content. 267 268 Only coded for SVN now. 269 270 =cut 271 236 272 sub pb_cms_copy { 237 273 my $scheme = shift; … … 248 284 } 249 285 286 =item B<pb_cms_checkout> 287 288 This function checks a CMS content out to a directory. 289 The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...) 290 The second parameter is the URL of the CMS content. 291 The third parameter is the directory where we want to deliver it (result of export). 292 293 =cut 294 250 295 sub pb_cms_checkout { 251 296 my $scheme = shift; … … 264 309 } 265 310 311 =item B<pb_cms_up> 312 313 This function updates a local directory with the CMS content. 314 The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...) 315 The second parameter is the directory to update. 316 317 =cut 318 266 319 sub pb_cms_up { 267 320 my $scheme = shift; … … 272 325 } elsif ($scheme eq "flat") { 273 326 } elsif ($scheme =~ /^cvs/) { 274 } else { 275 die "cms $scheme unknown"; 276 } 277 } 327 pb_system("cvs up $dir","Updating $dir"); 328 } else { 329 die "cms $scheme unknown"; 330 } 331 } 332 333 =item B<pb_cms_checkin> 334 335 This function updates a CMS content from a local directory. 336 The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...) 337 The second parameter is the directory to update from. 338 339 =cut 278 340 279 341 sub pb_cms_checkin { … … 286 348 } elsif ($scheme eq "flat") { 287 349 } elsif ($scheme =~ /^cvs/) { 350 pb_system("cvs ci -m \"updated to $ver\" $dir","Checking in $dir"); 288 351 } else { 289 352 die "cms $scheme unknown"; … … 291 354 pb_cms_up($scheme,$dir); 292 355 } 356 357 =item B<pb_cms_isdiff> 358 359 This function returns a integer indicating the number f differences between the CMS content and the local directory where it's checked out. 360 The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...) 361 The second parameter is the directory to consider. 362 363 =cut 293 364 294 365 sub pb_cms_isdiff { … … 318 389 } 319 390 320 # 321 # Return the list of packages we are working on in a CMS action 322 # 391 =item B<pb_cms_isdiff> 392 393 This function returns the list of packages we are working on in a CMS action. 394 The first parameter is the default list of packages from the configuration file. 395 The second parameter is the optional list of packages from the configuration file. 396 397 =cut 398 323 399 sub pb_cms_get_pkg { 324 400 … … 340 416 } 341 417 342 # 343 # Check pbconf/project cms compliance 344 # 418 =item B<pb_cms_compliant> 419 420 This function checks the compliance of the project and the pbconf directory. 421 The first parameter is the key name of the value that needs to be read in the configuration file. 422 The second parameter is the environment variable this key will populate. 423 The third parameter is the location of the pbconf dir. 424 The fourth parameter is the URI of the CMS content related to the pbconf dir. 425 The fifth parameter indicates whether we should inititate the context or not. 426 427 =cut 428 345 429 sub pb_cms_compliant { 346 430 … … 403 487 } 404 488 489 =item B<pb_cms_create_authors> 490 491 This function creates a AUTHORS files for the project. It call it AUTHORS.pb if an AUTHORS file already exists. 492 The first parameter is the source file for authors information. 493 The second parameter is the directory where to create the final AUTHORS file. 494 The third parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...) 495 496 =cut 497 405 498 sub pb_cms_create_authors { 406 499 … … 411 504 return if ($authors eq "/dev/null"); 412 505 open(SAUTH,$authors) || die "Unable to open $authors"; 413 # Save a potentially existing AUTHORS file and write instead to iAUTHORS.pb506 # Save a potentially existing AUTHORS file and write instead to AUTHORS.pb 414 507 my $ext = ""; 415 508 if (-f "$dest/AUTHORS") { … … 438 531 } 439 532 533 =item B<pb_cms_log> 534 535 This function creates a ChangeLog file for the project. 536 The first parameter is the schema of the CMS systems (svn, cvs, svn+ssh, ...) 537 The second parameter is the directory where the CMS content was checked out. 538 The third parameter is the directory where to create the final ChangeLog file. 539 The fourth parameter is unused. 540 The fifth parameter is the source file for authors information. 541 542 It may use a tool like svn2cl or cvs2cl to generate it if present, or the log file from the CMS if not. 543 544 =cut 545 546 440 547 sub pb_cms_log { 441 548 … … 483 590 } 484 591 592 =back 593 594 =head1 WEB SITES 595 596 The 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/>. 597 598 =head1 USER MAILING LIST 599 600 None exists for the moment. 601 602 =head1 AUTHORS 603 604 The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>. 605 606 =head1 COPYRIGHT 607 608 Project-Builder.org is distributed under the GPL v2.0 license 609 described in the file C<COPYING> included with the distribution. 610 611 =cut 612 485 613 1; -
devel/pb/lib/ProjectBuilder/Changelog.pm
r405 r409 38 38 =head1 DESCRIPTION 39 39 40 blabla 40 This modules provides generic functions suitable for changelog management for project-builder.org 41 42 =head1 USAGE 43 44 =over 4 45 46 =item B<pb_changelog> 47 48 Function that generates the changelog used in build files, or for announcements (web, mailing-list, ...) 49 50 It takes up to 9 parameters: 51 The first parameter is the type of the distribution. 52 The second parameter is the package name generated. 53 The third parameter is the version of the package. 54 The fourth parameter is the tag of the package. 55 The fifth parameter is the suffix of the package. 56 The sixth parameter is now unused. 57 The seventh parameter is the file descriptor on which to write the changelog content. 58 The eighth parameter is a flag in the configuration file indicating whether we want changelog expansion or not. 59 The nineth parameter is the potential changelog file pbcl. 41 60 42 61 =cut … … 179 198 } 180 199 200 201 =back 202 203 =head1 WEB SITES 204 205 The 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/>. 206 207 =head1 USER MAILING LIST 208 209 None exists for the moment. 210 211 =head1 AUTHORS 212 213 The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>. 214 215 =head1 COPYRIGHT 216 217 Project-Builder.org is distributed under the GPL v2.0 license 218 described in the file C<COPYING> included with the distribution. 219 220 =cut 221 181 222 1; -
devel/pb/lib/ProjectBuilder/Filter.pm
r405 r409 35 35 =head1 NAME 36 36 37 ProjectBuilder:: Base, part of the project-builder.org - module dealing with generic functions suitable for perl project development37 ProjectBuilder::Filter, part of the project-builder.org 38 38 39 39 =head1 DESCRIPTION 40 40 41 pb helps you build various packages directly from your project sources. 42 Those sources could be handled by a CMS (Configuration Management System) 43 such as Subversion, CVS, ... or being a simple reference to a compressed tar file. 44 It's based on a set of configuration files, a set of provided macros to help 45 you keeping build files as generic as possible. For example, a single .spec 46 file should be required to generate for all rpm based distributions, even 47 if you could also have multiple .spec files if required. 48 49 =cut 50 51 # Get all filters to apply 52 # They're cumulative from less specific to most specific 53 # suffix is .pbf 41 This module provides filtering functions suitable for pbinit calls. 42 43 =item B<pb_get_filters> 44 45 This function gets all filters to apply. They're cumulative from the less specific to the most specific. 46 47 Suffix of those filters is .pbf. Filter all.pbf applies to whatever distribution. The pbfilter directory may be global under pbconf or per package, for overloading values. Then in order filters are loaded for distribution type, distribution family, distribution name, distribution name-version. 48 49 The first parameter is the package name. 50 The second parameter is the distribution type. 51 The third parameter is the distribution family. 52 The fourth parameter is the distribution name. 53 The fifth parameter is the distribution version. 54 55 The function returns a pointer on a hash of filters. 56 57 =cut 54 58 55 59 sub pb_get_filters { … … 113 117 } 114 118 115 # Function which applies filter on pb build files 119 =item B<pb_filter_file_pb> 120 121 This function applies all filters to pb build files. 122 123 It takes 15 parameters. 124 125 The first parameter is the file to filter. 126 The second parameter is the pointer on the hash of filters. 127 The third parameter is the destination file after filtering. 128 The fourth parameter is the distribution type. 129 The fifth parameter is the suffix of the distribution. 130 The sixth parameter is the package name. 131 The seventh parameter is the version of the package. 132 The eighth parameter is the tag of the package. 133 The nineth parameter is the revision of the package. 134 The tenth parameter is the current date. 135 The eleventh parameter is the list of required packages. 136 The twelveth parameter is the list of optional packages. 137 The thirteenth parameter is the packager name. 138 The fourteenth parameter is the changelog. 139 140 =cut 141 116 142 sub pb_filter_file_pb { 117 143 … … 122 148 my $dtype=shift; 123 149 my $pbsuf=shift; 124 my $pbproj=shift;125 150 my $pbpkg=shift; 126 151 my $pbver=shift; … … 163 188 } 164 189 190 =item B<pb_filter_file_inplace> 191 192 This function applies all filters to a file in place. 193 194 It takes 8 parameters. 195 196 The first parameter is the pointer on the hash of filters. 197 The second parameter is the destination file after filtering. 198 The third parameter is the package name. 199 The fourth parameter is the version of the package. 200 The fifth parameter is the tag of the package. 201 The sixth parameter is the revision of the package. 202 The seventh parameter is the current date. 203 The eighth parameter is the packager name. 204 205 =cut 206 165 207 # Function which applies filter on files (external call) 166 208 sub pb_filter_file_inplace { … … 169 211 my %filter=%$ptr; 170 212 my $destfile=shift; 171 my $pbproj=shift;172 213 my $pbpkg=shift; 173 214 my $pbver=shift; … … 180 221 copy($destfile,$cp) || die "Unable to create $cp"; 181 222 182 pb_filter_file($cp,$ptr,$destfile,$pbp roj,$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$pbpackager);223 pb_filter_file($cp,$ptr,$destfile,$pbpkg,$pbver,$pbtag,$pbrev,$pbdate,$pbpackager); 183 224 unlink $cp; 184 225 } 226 227 =item B<pb_filter_file> 228 229 This function applies all filters on a file to generate a new filtered one. 230 231 It takes 9 parameters. 232 233 The first parameter is the original file to filter. 234 The second parameter is the pointer on the hash of filters. 235 The third parameter is the destination file after filtering. 236 The fourth parameter is the package name. 237 The fifth parameter is the version of the package. 238 The sixth parameter is the tag of the package. 239 The seventh parameter is the revision of the package. 240 The eighth parameter is the current date. 241 The nineth parameter is the packager name. 242 243 =cut 244 185 245 186 246 # Function which applies filter on files (external call) … … 191 251 my %filter=%$ptr; 192 252 my $destfile=shift; 193 my $pbproj=shift;194 253 my $pbpkg=shift; 195 254 my $pbver=shift; … … 222 281 } 223 282 283 =back 284 285 =head1 WEB SITES 286 287 The 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/>. 288 289 =head1 USER MAILING LIST 290 291 None exists for the moment. 292 293 =head1 AUTHORS 294 295 The Project-Builder.org team L<http://trac.project-builder.org/> lead by Bruno Cornec L<mailto:bruno@project-builder.org>. 296 297 =head1 COPYRIGHT 298 299 Project-Builder.org is distributed under the GPL v2.0 license 300 described in the file C<COPYING> included with the distribution. 301 302 =cut 303 224 304 1;
Note:
See TracChangeset
for help on using the changeset viewer.