Subversion Repositories DevTools

Rev

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