Subversion Repositories DevTools

Rev

Rev 267 | Rev 283 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
227 dpurdie 1
#! perl
2
########################################################################
3
# Copyright ( C ) 2004 ERG Limited, All rights reserved
4
#
5
# Module name   : jats.sh
6
# Module type   : Makefile system
7
# Compiler(s)   : n/a
8
# Environment(s): jats
9
#
10
# Description   : Provide varions functions used by the BuildVersion
11
#                 directive.
12
#
13
#                 Use only within buildlib.pl as this package assumes
14
#                 a great deal about its environment.
15
#
16
# Usage:
17
#
18
# Version   Who      Date        Description
19
#
20
#......................................................................#
21
 
255 dpurdie 22
require 5.006_001;
227 dpurdie 23
use strict;
24
use warnings;
25
 
26
our $Clobber;
27
our $CurrentYear;
28
our $CurrentTime;
29
our $Srcdir;
30
our $BuildVersion;
31
our $BUILDNAME;
32
our $BUILDNAME_PACKAGE;
33
our $BUILDNAME_VERSION;
34
our $BUILDNAME_PROJECT;
35
 
36
package BuildVersion;
37
use JatsError;
38
use JatsSystem;
39
use JatsVersionUtils;
267 dpurdie 40
use ConfigurationFile;
227 dpurdie 41
 
42
our (@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $VERSION);
43
use Exporter;
44
 
45
$VERSION = 1.00;
46
@ISA = qw(Exporter);
47
 
48
# Symbols to autoexport (:DEFAULT tag)
49
@EXPORT = qw( BuildVersionC
50
              BuildVersionCdefs
51
              BuildVersionCSharp
52
              BuildVersionWinRC
229 dpurdie 53
              BuildVersionProperties
227 dpurdie 54
            );
55
 
56
#-------------------------------------------------------------------------------
57
# Function        : BuildVersionCSharp
58
#
59
# Description     : Generate a C# versionn information file to allow
60
#                   insertion of data into an assembly
61
#
62
# Inputs          : $FileName           - Output filename (Optional)
63
#
64
# Returns         :
65
#
66
sub BuildVersionCSharp
67
{
68
    my ( $fname ) = @_;
69
    $fname = 'AssemblyVersionInfo.cs' unless $fname;
70
 
247 dpurdie 71
    #
72
    #   Store the files location for use at runtime
73
    #   It will be a file that is 'known' to JATS
74
    #
75
    $fname = ::BuildAddKnownFile ( $Srcdir, $fname );
76
    return if ( $Clobber );      # clobber mode ?
227 dpurdie 77
 
78
    #
79
    #   Determine the build version
80
    #
81
    my ($major, $minor, $patch, $build, $raw_patch) = SplitVersion($BUILDNAME_VERSION);
82
    my $vstring = "$major.$minor.$patch.$build";
83
 
84
 
247 dpurdie 85
    my $fh = ConfigurationFile::New( $fname, '--Type=CSharp' );
227 dpurdie 86
    $fh->HeaderSimple( "buildlib (Version $BuildVersion)",
87
                       "CSharp Assembly Version Definition" );
88
 
89
    $fh->Write( "\n" );
90
    $fh->Write( "using System.Reflection;\n" );
91
    $fh->Write( "using System.Runtime.CompilerServices;\n" );
92
    $fh->Write( "\n" );
93
    $fh->Write( "[assembly: AssemblyCompany(\"ERG Group\")]\n" );
94
    $fh->Write( "[assembly: AssemblyProduct(\"$BUILDNAME_PACKAGE\")]\n" );
95
    $fh->Write( "[assembly: AssemblyCopyright(\"ERG Group $CurrentYear\")]\n" );
96
    $fh->Write( "[assembly: AssemblyTrademark(\"\")]\n" );
97
    $fh->Write( "\n");
98
    $fh->Comment( "\n");
99
    $fh->Comment( "Version information for an assembly consists of the following four values:\n");
100
    $fh->Comment( "\n");
101
    $fh->Comment( "     Major Version   -ERG:Major\n");
102
    $fh->Comment( "     Minor Version  - ERG:Minor\n");
103
    $fh->Comment( "     Build Number   - ERG:Patch\n");
104
    $fh->Comment( "     Revision       - ERG:Build Number\n");
105
    $fh->Comment( "\n");
106
    $fh->Write( "\n");
107
    $fh->Write( "[assembly: AssemblyVersion(\"$vstring\")]\n" );
108
    $fh->Write( "\n");
109
 
110
    $fh->Close();
111
}
112
 
113
#-------------------------------------------------------------------------------
114
# Function        : BuildVersionWinRC
115
#
116
# Description     : Create a Windows RC file to describe the build version
117
#                   This file may be used directly
118
#
119
# Inputs          : $FileName           - Output filename (Optional)
267 dpurdie 120
#                   @opts               - Options
121
#                           --Definitions
122
#                           --Icon=path
123
#                           --Comment=text
124
#                           --Description=text
125
#                           --Product=text
126
#                           --Version=text          (Internal Use)
127
#                           --PkgName=text          (Internal Use)
128
#                           --ToolUse               (Internal Use)
129
# Returns         : Nothing
227 dpurdie 130
#
131
sub BuildVersionWinRC
132
{
267 dpurdie 133
    my ( $fname, @opts ) = @_;
134
    my $icon;
135
    my $defs;
136
    my $product = '';
137
    my $version = $BUILDNAME_VERSION || '';
138
    my $pkg_name = $BUILDNAME_PACKAGE || '';
139
    my $comment = "Build Date: $CurrentTime";
140
    my $description = '';
141
    my $used_by_tool = '';
142
 
143
    #
144
    #   Process options
145
    #
146
    foreach ( @opts )
147
    {
148
        if ( m~^--Icon=(.+)~ ) {
149
            $icon = $1;
150
        } elsif ( m~^--Definitions~ ) {
151
            $defs = 1;
152
        } elsif ( m~^--Comment=(.+)~ ) {
153
            $comment = $1;
154
        } elsif ( m~^--Description=(.+)~ ) {
155
            $description = $1;
156
        } elsif ( m~^--Product=(.+)~ ) {
157
            $product = $1;
158
        } elsif ( m~^--Version=(.+)~ ) {
159
            $version = $1;
160
        } elsif ( m~^--PkgName=(.+)~ ) {
161
            $pkg_name = $1;
162
        } elsif ( m~^--ToolUse~ ) {
163
            $used_by_tool = 1;
164
        } else {
165
            Error ("WinRC Style Version. Unknown option: $_");
166
        }
167
    }
168
 
169
    #
170
    #   Setup defaults
171
    #
227 dpurdie 172
    $fname = 'version.rc' unless $fname;
267 dpurdie 173
    Error ("WinRC: No Build Version provided") unless ( $version );
174
    Error ("WinRC: No Build Package Name provided") unless ( $pkg_name );
227 dpurdie 175
 
176
    #
247 dpurdie 177
    #   Store the files location for use at runtime
178
    #   It will be a file that is 'known' to JATS
179
    #
267 dpurdie 180
    unless ( $used_by_tool  )
181
    {
182
        $fname = ::BuildAddKnownFile ( $Srcdir, $fname );
183
        return if ( $Clobber );      # clobber mode ?
184
    }
185
 
247 dpurdie 186
    Message ("Creating Windows Resource File: $fname" );
267 dpurdie 187
 
247 dpurdie 188
    #
227 dpurdie 189
    #   Determine the build version
190
    #
267 dpurdie 191
    my ($major, $minor, $patch, $build, $raw_patch) = SplitVersion($version);
227 dpurdie 192
    my $product_version = "$major, $minor, $patch, $build";
193
 
194
 
195
    #
196
    #   Create the file
197
    #
247 dpurdie 198
    my $fh = ConfigurationFile::New( $fname, '--Type=C++' );
227 dpurdie 199
    $fh->HeaderSimple( "buildlib (Version $BuildVersion)",
200
                       "Windows Resource Version Definition" );
201
 
202
    sub prc
203
    {
204
        return "@_\n";
205
    }
206
 
207
    sub pdefs
208
    {
209
        my ($arg, $val) = @_;
267 dpurdie 210
        Error ("Undefined value for $arg") unless ( defined $val );
227 dpurdie 211
        return "#define $arg \"$val\\0\"\n";
212
    }
213
 
214
    sub pdef
215
    {
216
        my ($arg, $val) = @_;
267 dpurdie 217
        Error ("Undefined value for $arg") unless ( defined $val );
227 dpurdie 218
        return "#define $arg $val\n";
219
    }
220
 
221
    $fh->Write(prc     (""));
222
#    $fh->Write(prc     ("#include \"afxres.h\""));
223
#    $fh->Write(prc     (""));
269 dpurdie 224
 
227 dpurdie 225
    $fh->Write(prc     (""));
226
    $fh->Write(pdefs   ("RC_STR_EMPTY"         , "" ));
227
    $fh->Write(pdefs   ("RC_STR_COMPANY"       , "ERG Group" ));
267 dpurdie 228
    $fh->Write(pdefs   ("RC_STR_PRODUCTNAME"   , $product ));
229
    $fh->Write(pdefs   ("RC_STR_COMMENT"       , $comment ));
230
    $fh->Write(pdefs   ("RC_STR_DESCRIPTION"   , $description ));
231
    $fh->Write(pdefs   ("RC_STR_NAME"          , $pkg_name ));
227 dpurdie 232
    $fh->Write(pdefs   ("RC_STR_VERSION"       , $product_version ));
233
    $fh->Write(pdef    ("RC_NUM_VERSION"       , $product_version ));
234
    $fh->Write(pdefs   ("RC_STR_COPYRIGHT"     , "Copyright ERG Group $CurrentYear" ));
235
    $fh->Write(prc     ('#ifdef _DEBUG'));
236
    $fh->Write(pdefs   ("RC_STR_SPECIAL"       , "Debug Version" ));
237
    $fh->Write(prc     ('#else'));
238
    $fh->Write(pdefs   ("RC_STR_SPECIAL"       , "Production Version" ));
239
    $fh->Write(prc     ('#endif'));
240
    $fh->Write(prc     (""));
241
 
263 dpurdie 242
    unless ( $defs )
243
    {
269 dpurdie 244
        $fh->Write(prc     ('#define VS_VERSION_INFO     1'));
263 dpurdie 245
        $fh->Write(prc     (''));
246
        $fh->Write(prc     ('VS_VERSION_INFO VERSIONINFO'));
247
        $fh->Write(prc     (' FILEVERSION      RC_NUM_VERSION'));
248
        $fh->Write(prc     (' PRODUCTVERSION   RC_NUM_VERSION'));
249
        $fh->Write(prc     (' FILEFLAGSMASK 0x3fL'));
250
        $fh->Write(prc     ('#ifdef _DEBUG'));
251
        $fh->Write(prc     (' FILEFLAGS 0x1L'));
252
        $fh->Write(prc     ('#else'));
253
        $fh->Write(prc     (' FILEFLAGS 0x0L'));
254
        $fh->Write(prc     ('#endif'));
255
        $fh->Write(prc     (' FILEOS 0x40004L'));
256
        $fh->Write(prc     (' FILETYPE 0x1L'));
257
        $fh->Write(prc     (' FILESUBTYPE 0x0L'));
258
        $fh->Write(prc     ('BEGIN'));
259
        $fh->Write(prc     ('    BLOCK "StringFileInfo"'));
260
        $fh->Write(prc     ('    BEGIN'));
261
        $fh->Write(prc     ('        BLOCK "0c0904b0"'));
262
        $fh->Write(prc     ('        BEGIN'));
263
        $fh->Write(prc     ('            VALUE "Comments",         RC_STR_COMMENT'));
264
        $fh->Write(prc     ('            VALUE "CompanyName",      RC_STR_COMPANY'));
265
        $fh->Write(prc     ('            VALUE "FileDescription",  RC_STR_DESCRIPTION'));
266
        $fh->Write(prc     ('            VALUE "FileVersion",      RC_STR_VERSION'));
267
        $fh->Write(prc     ('            VALUE "InternalName",     RC_STR_NAME'));
268
        $fh->Write(prc     ('            VALUE "LegalCopyright",   RC_STR_COPYRIGHT'));
269
        $fh->Write(prc     ('            VALUE "LegalTrademarks",  RC_STR_EMPTY'));
270
        $fh->Write(prc     ('            VALUE "OriginalFilename", RC_STR_NAME'));
271
        $fh->Write(prc     ('            VALUE "PrivateBuild",     RC_STR_EMPTY'));
272
        $fh->Write(prc     ('            VALUE "ProductName",      RC_STR_PRODUCTNAME'));
273
        $fh->Write(prc     ('            VALUE "ProductVersion",   RC_STR_VERSION'));
274
        $fh->Write(prc     ('            VALUE "SpecialBuild",     RC_STR_SPECIAL'));
275
        $fh->Write(prc     ('        END'));
276
        $fh->Write(prc     ('    END'));
277
        $fh->Write(prc     ('        BLOCK "VarFileInfo"'));
278
        $fh->Write(prc     ('        BEGIN'));
279
        $fh->Write(prc     ('            VALUE "Translation", 0xc09, 1200'));
280
        $fh->Write(prc     ('        END'));
281
        $fh->Write(prc     ('END'));
282
        $fh->Write(prc     (''));
227 dpurdie 283
 
263 dpurdie 284
        if ( $icon )
285
        {
286
        $fh->Write(prc     (''));
287
        $fh->Write(prc     ('/////////////////////////////////////////////////////////////////////////////'));
288
        $fh->Write(prc     ('//'));
289
        $fh->Write(prc     ('// Icon'));
290
        $fh->Write(prc     ('//'));
291
        $fh->Write(prc     ('// Icon with lowest ID value placed first to ensure application icon'));
292
        $fh->Write(prc     ('// remains consistent on all systems.'));
293
        $fh->Write(prc     ("101       ICON    DISCARDABLE     \"$icon\""));
294
        $fh->Write(prc     (''));
295
        }
235 dpurdie 296
    }
297
 
298
 
227 dpurdie 299
    $fh->Close();
300
}
301
 
302
#-------------------------------------------------------------------------------
303
# Function        : BuildVersionC
304
#
305
# Description     : Create a "C" style version.c and version.h file
306
#
307
# Inputs          : $Prefix         - Text to prefix generated variables with
308
#                                     Used to avoid namespace conflicts
309
#                   $Type           - Type of version to create
310
#                                     Only allowed value is 'array'
311
#
312
# Returns         :
313
#
314
 
315
sub BuildVersionC
316
{
317
    my( $Prefix, $Type ) = @_;
318
    my $ver;
319
 
320
    if ( $Clobber )                             # clobber mode ?
321
    {
322
        #
323
        #   Clobber common version.c and version.h
324
        #
325
        System( "$::GBE_BIN/rm -f $Srcdir/version.c $Srcdir/version.h" );
326
        return;
327
    }
328
 
329
    #
330
    #   Default prefix is none
331
    #   Set to a defined, bet empty, string
332
    #
333
    $Prefix = "" if ( ! defined( $Prefix ) );
334
    $Type   = "" if ( ! defined( $Type ) );
335
 
336
    #   src/version.c
337
    #..
338
    open( VERSIONC, ">$Srcdir/version.c" ) ||
339
        Error( "cannot create $Srcdir/version.c" );
340
 
341
    print VERSIONC
342
        "/* Please do not edit this file.\n" .
343
        " * It was auto-generated by Buildlib ($BuildVersion) on $::CurrentTime\n" .
344
        " */\n" .
345
        "#include \"version.h\"\n";
346
 
347
    print VERSIONC
348
        "\n" .
349
        "static char what[] = \"@(#) $BUILDNAME $::CurrentDate ERG\";\n" .
350
        "\n";
351
 
352
 
353
    my @PACKAGEVERS = PackageEntry::GetPackageVersionList();
354
    if ( $Type eq "array" )
355
    {                                           # new style
356
        print VERSIONC
357
           "static const char *pkgarray[] = \n" .
358
           "{\n";
359
 
360
        foreach $ver ( @PACKAGEVERS   ) {
361
            print VERSIONC "    \"$ver\",\n";
362
        }
363
 
364
        print VERSIONC
365
           "    0\n",
366
           "};\n\n";
367
 
368
        print VERSIONC
369
           "\nconst char *\n$Prefix"."VersionString(void)\n" .
370
           "{\n".
371
           "    return \"$BUILDNAME\";\n" .
372
           "}\n" .
373
           "\nconst char **\n$Prefix"."PkgStrings(void)\n" .
374
           "{\n".
375
           "    return pkgarray;\n" .
376
           "}\n" .
377
           "\nconst char *\n$Prefix"."GetModuleInfo(void)\n" .
378
           "{\n" .
379
           "    return \"$BUILDNAME_PACKAGE ($BUILDNAME_VERSION.$BUILDNAME_PROJECT) @PACKAGEVERS\";\n" .
380
           "}\n";
381
    }
382
    else
383
    {                                           # old style
384
        print VERSIONC
385
           "\nconst char *\n$Prefix"."VersionString(void)\n" .
386
           "{\n".
387
           "    return \"$BUILDNAME @PACKAGEVERS\";\n" .
388
           "}\n" .
389
           "\nconst char *\n$Prefix"."GetModuleInfo(void)\n" .
390
           "{\n" .
391
           "    return \"$BUILDNAME_PACKAGE ($BUILDNAME_VERSION.$BUILDNAME_PROJECT) @PACKAGEVERS\";\n" .
392
           "}\n";
393
    }
394
    close VERSIONC;
395
 
396
#   src/version.h
397
#..
398
    open( VERSIONH, ">$Srcdir/version.h" ) ||
399
        Error( "cannot create $Srcdir/version.h" );
400
 
401
    print VERSIONH
402
        "#ifndef VERSION_H_INCLUDED\n" .
403
        "#define VERSION_H_INCLUDED\n" .
404
        "/* Please do not edit this file.\n" .
405
        " * It was auto-generated by Buildlib ($BuildVersion) on $::CurrentTime\n" .
406
        " */\n\n" .
407
        "#define BUILDNAME     \"$BUILDNAME\"\n" .
408
        "#define BUILDDATE     \"$::CurrentTime\"\n" .
409
        "\n";
410
 
411
    print VERSIONH
412
        "#ifdef __cplusplus\n" .
413
        "    extern \"C\" {           /* force C calling convention when using C++ */\n" .
414
        "#endif\n" .
415
        "\n";
416
 
417
    if ( $Type eq "array" )
418
    {                                           # extended interface
419
        print VERSIONH
420
        "extern const char **  $Prefix"."PkgStrings(void);\n";
421
    }
422
    print VERSIONH
423
        "extern const char *   $Prefix"."VersionString(void);\n".
424
        "extern const char *   $Prefix"."GetModuleInfo(void);\n";
425
 
426
    print VERSIONH
427
        "\n" .
428
        "#ifdef __cplusplus\n" .
429
        "    } /* extern \"C\" */\n" .
430
        "#endif\n" .
431
        "\n";
432
 
433
    print VERSIONH
434
        "\n#endif /*VERSION_H_INCLUDED*/\n";
435
    close VERSIONH;
436
}
437
 
438
#-------------------------------------------------------------------------------
439
# Function        : BuildVersionCdefs
440
#
441
# Description     : Generate a "C" style version definitions file
442
#                   This file simply contains definitions
443
#
444
# Inputs          : $Mode           - File suffix
445
#                   $ModePrefix     - Tag for all generated definitions
446
#
447
# Returns         :
448
#
449
 
450
sub BuildVersionCdefs
451
{
452
    my ( $Mode, $ModePrefix ) = @_;
453
    my $fname = "version_$Mode.h";
454
 
455
    if ( $Clobber )                             # clobber mode ?
456
    {
457
        System( "$::GBE_BIN/rm -f $Srcdir/$fname" );
458
        return;
459
    }
460
 
461
    #
462
    #   Generate version_defs.h
463
    #   This file contains ONLY definitions. It may be used by assembler
464
    #   programs (that support a preprocessor) to access version information
465
    #
466
    #   Allow for a user supplied filename fragment that will be used within
467
    #   all the definitions with in the file.
468
    #
469
    my ($major, $minor, $patch, $build, $raw_patch) = SplitVersion($BUILDNAME_VERSION);
470
    my @PACKAGEVERS = PackageEntry::GetPackageVersionList();
471
 
472
    #
473
    #   Base names on a user supplied value or a default
474
    #
475
    my $vtag = uc( "VERSION$ModePrefix" );
476
    my $guard_name = uc($fname);
477
       $guard_name =~ s~\.~_~g;
478
 
479
    open( VERSIOND, ">$Srcdir/$fname" ) ||
480
        Error( "cannot create $Srcdir/$fname" );
481
 
482
    print VERSIOND
483
        "#ifndef $guard_name\n" .
484
        "#define $guard_name\n" .
485
        "/* Please do not edit this file.\n" .
486
        " * It was auto-generated by Buildlib ($BuildVersion) on $::CurrentTime\n" .
487
        " */\n\n" .
488
        "\n".
489
        "#define ${vtag}_BUILDNAME      \"$BUILDNAME\"\n".
490
        "#define ${vtag}_BUILDDATE      \"$::CurrentTime\"\n".
491
        "\n".
492
        "#define ${vtag}_PACKAGE        \"$BUILDNAME_PACKAGE\"\n".
493
        "#define ${vtag}_VERSION        \"$BUILDNAME_VERSION\"\n".
494
        "#define ${vtag}_MAJOR_STR      \"$major\"\n".
495
        "#define ${vtag}_MINOR_STR      \"$minor\"\n".
496
        "#define ${vtag}_PATCH_STR      \"$patch\"\n".
497
        "#define ${vtag}_BUILD_STR      \"$build\"\n".
498
        "#define ${vtag}_PATCHBUILD_STR \"$raw_patch\"\n".
499
        "#define ${vtag}_PROJECT        \"$BUILDNAME_PROJECT\"\n".
500
        "#define ${vtag}_MAJOR          " . strip_zeros($major) . "\n".
501
        "#define ${vtag}_MINOR          " . strip_zeros($minor) . "\n".
502
        "#define ${vtag}_PATCH          " . strip_zeros($patch) . "\n".
503
        "#define ${vtag}_BUILD          " . strip_zeros($build) . "\n".
504
        "#define ${vtag}_PATCHBUILD     " . strip_zeros($raw_patch) . "\n".
505
        "#define ${vtag}_ALL            \"$BUILDNAME_PACKAGE ($BUILDNAME_VERSION.$BUILDNAME_PROJECT) @PACKAGEVERS\"\n".
506
        "#define ${vtag}_BUILDTIME      " . strip_zeros(time()) . "\n".
507
        "\n".
508
        "#endif /* $guard_name */\n";
509
 
510
    close VERSIOND;
511
}
512
 
513
#-------------------------------------------------------------------------------
229 dpurdie 514
# Function        : BuildVersionProperties
515
#
516
# Description     : Generate a "Java" style version definitions file
517
#                   This is a simple properties file
518
#
519
# Inputs          : $FileName       - Output filename (Optional)
520
#                   $Prefix         - Tag for all generated definitions
521
#
522
# Returns         :
523
#
524
sub BuildVersionProperties
525
{
526
    my ( $fname, $Prefix ) = @_;
527
 
528
    #
529
    #   Default name of the file
530
    #
531
    $fname = 'version.properties' unless $fname;
532
 
533
    #
247 dpurdie 534
    #   Store the files location for use at runtime
535
    #   It will be a file that is 'known' to JATS
536
    #
537
    $fname = ::BuildAddKnownFile ( $Srcdir, $fname );
538
    return if ( $Clobber );      # clobber mode ?
539
 
540
    #
229 dpurdie 541
    #   Generate version properties file
542
    #
543
    #   This file contains ONLY definitions. It may be included by the ANT
544
    #   builds. Its not intended to be imported by the java code
545
 
546
 
547
    #
548
    #   Allow for a user supplied property prefix
549
    #   Not really needed as
550
    #
551
    my $vtag = '';
552
    $vtag = $Prefix . '.' if $Prefix;
553
 
554
 
555
    my ($major, $minor, $patch, $build, $raw_patch) = SplitVersion($BUILDNAME_VERSION);
556
    my @PACKAGEVERS = PackageEntry::GetPackageVersionList();
557
 
558
    #
559
    #   Create properties in the same form as for "C" definitions
560
    #   Note:
561
    #       The 'ALL' is in a format used by other software. Do not change
562
    #
247 dpurdie 563
    open( VERSIOND, ">$fname" ) ||
564
        Error( "cannot create $fname" );
229 dpurdie 565
 
566
    print VERSIOND
567
        "# Please do not edit this file.\n" .
568
        "# It was auto-generated by Buildlib ($BuildVersion) on $::CurrentTime\n" .
569
        "#\n" .
570
        "${vtag}BUILDNAME      = $BUILDNAME\n".
571
        "${vtag}BUILDDATE      = $::CurrentTime\n".
572
        "\n".
573
        "${vtag}PACKAGE        = $BUILDNAME_PACKAGE\n".
574
        "${vtag}VERSION        = $BUILDNAME_VERSION\n".
575
        "${vtag}MAJOR_STR      = $major\n".
576
        "${vtag}MINOR_STR      = $minor\n".
577
        "${vtag}PATCH_STR      = $patch\n".
578
        "${vtag}BUILD_STR      = $build\n".
579
        "${vtag}PATCHBUILD_STR = $raw_patch\n".
580
        "${vtag}PROJECT        = $BUILDNAME_PROJECT\n".
581
        "${vtag}MAJOR          = " . strip_zeros($major) . "\n".
582
        "${vtag}MINOR          = " . strip_zeros($minor) . "\n".
583
        "${vtag}PATCH          = " . strip_zeros($patch) . "\n".
584
        "${vtag}BUILD          = " . strip_zeros($build) . "\n".
585
        "${vtag}PATCHBUILD     = " . strip_zeros($raw_patch) . "\n".
586
        "${vtag}ALL            = $BUILDNAME_PACKAGE ($BUILDNAME_VERSION.$BUILDNAME_PROJECT) @PACKAGEVERS\n".
587
        "${vtag}BUILDTIME      = " . strip_zeros(time()) . "\n".
588
        "\n";
589
    #
590
    #   Create a set of definitions for each dependent package
591
    #
592
    print VERSIOND "# Dependent Packages and Versions\n".
593
                   "#\n";
594
 
595
    foreach my $tag ( PackageEntry::GetPackageList() )
596
    {
597
        my ($name, $version, $type) = PackageEntry::GetPackageData($tag);
598
#        push @attributes, "build=\"true\"" if $type =~ /Build/i;
599
        print VERSIOND "${vtag}PACKAGE.$name=$version\n";
600
    }
601
    close VERSIOND;
602
}
603
 
604
#-------------------------------------------------------------------------------
227 dpurdie 605
# Function        : stip_zeros
606
#
607
# Description     : Remove leading 0's from a string
608
#
609
# Inputs          : A string
610
#
611
# Returns         : A string without leading zeros
612
#
613
sub strip_zeros
614
{
615
    my ($text) = @_;
616
 
617
    $text =~ s~^0*~~;
618
    $text = '0' unless ( $text );
619
    return $text;
620
}
621
 
622
1;