Subversion Repositories DevTools

Rev

Rev 5986 | Rev 5999 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5986 Rev 5991
Line 5486... Line 5486...
5486
        #   Do not use $(GBE_TYPE) in the target name
5486
        #   Do not use $(GBE_TYPE) in the target name
5487
        #   The existing package mechanism does not handle different
5487
        #   The existing package mechanism does not handle different
5488
        #   production and debug file naming mechanism, whereas the project
5488
        #   production and debug file naming mechanism, whereas the project
5489
        #   must. Convert $(GBE_TYPE) into P or D to ensure uniquness
5489
        #   must. Convert $(GBE_TYPE) into P or D to ensure uniquness
5490
        #
5490
        #
5491
        $item = QuoteForMake($item);
-
 
5492
        $target = QuoteForMake($target);
-
 
5493
        $target =~ s~\$\(GBE_TYPE\)~$type~ if ($type);
5491
        $target =~ s~\$\(GBE_TYPE\)~$type~ if ($type);
5494
 
5492
 
5495
        #
5493
        #
5496
        #   Create a PACKAGE entry suitable for processing by the normal packaging
5494
        #   Create a PACKAGE entry suitable for processing by the normal packaging
5497
        #   routines. This is complicated because the Projects do not adhere to
5495
        #   routines. This is complicated because the Projects do not adhere to
Line 6456... Line 6454...
6456
        #
6454
        #
6457
        if ( m~^DPACKAGE$~ && $DPackageDirective ) {
6455
        if ( m~^DPACKAGE$~ && $DPackageDirective ) {
6458
            $name = 'DPACKAGE.' . $::GBE_MACHTYPE;
6456
            $name = 'DPACKAGE.' . $::GBE_MACHTYPE;
6459
        }
6457
        }
6460
 
6458
 
6461
        #
-
 
6462
        #   Allow for named files that must be quoted
-
 
6463
        $name = QuoteForMake( $name );
-
 
6464
 
-
 
6465
        if ( ! /^--(.*)/ )
6459
        if ( ! /^--(.*)/ )
6466
        {
6460
        {
6467
            $basename = StripDir( $name );
6461
            $basename = StripDir( $name );
6468
            if ( !($srcfile = $SRCS{ $basename }) ) {
6462
            if ( !($srcfile = $SRCS{ $basename }) ) {
6469
                $srcfile = $name;
6463
                $srcfile = $name;
Line 6564... Line 6558...
6564
    foreach ( @elements )
6558
    foreach ( @elements )
6565
    {
6559
    {
6566
        my %package_entry;
6560
        my %package_entry;
6567
        if ( ! /^--(.*)/ )
6561
        if ( ! /^--(.*)/ )
6568
        {
6562
        {
6569
            $name = QuoteForMake($_);
6563
            $name = $_;
6570
            $basename = StripDir( $name );
6564
            $basename = StripDir( $name );
6571
            if ( !($srcfile = $SRCS{ $basename }) ) {
6565
            if ( !($srcfile = $SRCS{ $basename }) ) {
6572
                $srcfile = $name;
6566
                $srcfile = $name;
6573
            }
6567
            }
6574
 
6568
 
Line 6710... Line 6704...
6710
            {
6704
            {
6711
                #
6705
                #
6712
                #   Allow the user to package a sourced file as a library
6706
                #   Allow the user to package a sourced file as a library
6713
                #   But must be the un-massaged name of the file.
6707
                #   But must be the un-massaged name of the file.
6714
                #
6708
                #
6715
                $package_entry{'dst'} = QuoteForMake("$dir/$org_lib");
6709
                $package_entry{'dst'} = "$dir/$org_lib";
6716
                $package_entry{'src'} = QuoteForMake($libfile);
6710
                $package_entry{'src'} = $libfile;
6717
            }
6711
            }
6718
            elsif ( $LIBS->Get($lib) )
6712
            elsif ( $LIBS->Get($lib) )
6719
            {
6713
            {
6720
                #
6714
                #
6721
                #   Package up a library known to the makefile
6715
                #   Package up a library known to the makefile
Line 6870... Line 6864...
6870
            #   installed as though it were a program
6864
            #   installed as though it were a program
6871
            #
6865
            #
6872
            my $progfile;
6866
            my $progfile;
6873
            if ( $progfile = $SRCS{$prog} )
6867
            if ( $progfile = $SRCS{$prog} )
6874
            {
6868
            {
6875
                $progfile = QuoteForMake($progfile);
6869
                $progfile = $progfile;
6876
                $prog = QuoteForMake($prog);
6870
                $prog = $prog;
6877
            }
6871
            }
6878
            else
6872
            else
6879
            {
6873
            {
6880
                $progfile = "\$(BINDIR)/$prog$ext";
6874
                $progfile = "\$(BINDIR)/$prog$ext";
6881
            }
6875
            }
Line 9833... Line 9827...
9833
EOF
9827
EOF
9834
 
9828
 
9835
#-------------------------------------------------------------------------------
9829
#-------------------------------------------------------------------------------
9836
#   Standard rules
9830
#   Standard rules
9837
#
9831
#
9838
MakeHeader ("Standard rules");
9832
    MakeHeader ("Standard rules");
9839
 
-
 
9840
print MAKEFILE <<EOF;
9833
    print MAKEFILE <<EOF;
9841
 
-
 
9842
.PHONY:		make_clean
9834
.PHONY:		make_clean
9843
make_clean:
9835
make_clean:
9844
	-\@echo "Removing generated files (objects, libraries, binaries etc)";
9836
	-\@echo "Removing generated files (objects, libraries, binaries etc)";
9845
 
9837
 
9846
.PHONY:		rmlitter
9838
.PHONY:		rmlitter
Line 10079... Line 10071...
10079
    sub InstallTarget
10071
    sub InstallTarget
10080
    {
10072
    {
10081
        my( $target, $hashp, $prereq, $fprereq ) = @_;
10073
        my( $target, $hashp, $prereq, $fprereq ) = @_;
10082
        my( $element );
10074
        my( $element );
10083
 
10075
 
10084
        MakePrint ".PHONY:\t\t"."$target\n";
10076
        my $me = MakeEntry::New( *MAKEFILE, $target, '--Phony' );
10085
        MakePrint "$target:";
-
 
10086
        MakePrint "\t$fprereq" if ($fprereq);
10077
        $me->AddDependancy( $fprereq ) if ($fprereq);
10087
 
-
 
10088
        foreach my $element ( sort keys %{$hashp} )
10078
        foreach my $element ( sort keys %{$hashp} )
10089
        {
10079
        {
10090
            #
10080
            #
10091
            #   Skip placekeepers
10081
            #   Skip placekeepers
10092
            #
10082
            #
10093
            next if ( $hashp->{$element}{'placekeeper'} );
10083
            next if ( $hashp->{$element}{'placekeeper'} );
10094
 
10084
 
10095
            #
10085
            #
10096
            #   Prepend any prerequisites (once)
10086
            #   Prepend any prerequisites (once)
10097
            #
10087
            #
10098
            if ( $prereq )
-
 
10099
            {
-
 
10100
                MakePrint " \\\n\t${prereq}";
10088
            $me->AddDependancy( $prereq ) if ( $prereq );
10101
                $prereq = 0;
10089
            $prereq = 0;
10102
            }
-
 
10103
 
10090
 
10104
            MakePrint " \\\n\t${element}";
10091
            $me->AddDependancyEscaped( $element );
10105
        }
10092
        }
10106
        MakePrint "\n\n";
10093
        $me->Print();
-
 
10094
 
10107
    }
10095
    }
10108
 
10096
 
10109
InstallTarget( "install_hdr",       \%INSTALL_HDRS );
10097
InstallTarget( "install_hdr",       \%INSTALL_HDRS );
10110
InstallTarget( "install_lib",       \%INSTALL_LIBS,  'make_mlib' );
10098
InstallTarget( "install_lib",       \%INSTALL_LIBS,  'make_mlib' );
10111
InstallTarget( "make_install_shlib",\%INSTALL_SHLIBS, '', "@shlibdep" );
10099
InstallTarget( "make_install_shlib",\%INSTALL_SHLIBS, '', "@shlibdep" );
Line 10255... Line 10243...
10255
#                       Allow files with a space in the name
10243
#                       Allow files with a space in the name
10256
#                       Allow files with a comma in the name
10244
#                       Allow files with a comma in the name
10257
#                       Allow for paths that have make-varible prefixes
10245
#                       Allow for paths that have make-varible prefixes
10258
#                           $(GBE_...)/
10246
#                           $(GBE_...)/
10259
#                           as these may be generated internally
10247
#                           as these may be generated internally
-
 
10248
#                       Allow for files with a colon in the name
-
 
10249
#                           Mode dependent
-
 
10250
#                               0 - No effect
-
 
10251
#                               T - \\\:
-
 
10252
#                               S = \:    
10260
#
10253
#
10261
#                       Must also allow $(GBE_TYPE) in the remainder
10254
#                       Must also allow $(GBE_TYPE) in the remainder
10262
#
10255
#
10263
# Inputs          : uarg                - Arg to quote
10256
# Inputs          : uarg            - Arg to quote
-
 
10257
#                   mode            - Mode of operation
-
 
10258
#                                     T - Makefile target
-
 
10259
#                                     S - Makefile source
-
 
10260
#                                     0 - Neither
10264
#
10261
#
10265
# Returns         : Quoted arg
10262
# Returns         : Quoted arg
10266
#
10263
#
10267
 
10264
 
10268
sub QuoteForMake()
10265
sub QuoteForMake($;$)
10269
{
10266
{
10270
    my ($uarg) = @_;
10267
    my ($uarg, $mode) = @_;
-
 
10268
    $mode = '0' unless defined $mode;
10271
 
10269
 
10272
    #
10270
    #
10273
    #   Split into two
10271
    #   Split into two
10274
    #       $(xxx)/             - Makefile variables
10272
    #       $(xxx)/             - Makefile variables
10275
    #       Remainder           - Stuff to quote
10273
    #       Remainder           - Stuff to quote
10276
    #
10274
    #
10277
    $uarg =~ m~^((\$\(.*?\)/)*)(.*)~;
10275
    $uarg =~ m~^((\$\(.*?\)/)*)(.*)~;
10278
    my $prefix = defined $1 ? $1 : '';
10276
    my $prefix = defined $1 ? $1 : '';
10279
    my $arg    = defined $3 ? $3 : '';
10277
    my $arg    = defined $3 ? $3 : '';
10280
 
10278
 
10281
    $arg =~ s~\$(?!\(GBE_)~\$\$~g;       # $, not followed by (GBE_ - id not $(GBE_
10279
    $arg =~ s~\$(?!\(GBE_)~\$\$~g;       # $, not followed by (GBE_ - is not $(GBE_
10282
    $arg =~ s~ ~\\ ~g;
10280
    $arg =~ s~ ~\\ ~g;
10283
    $arg =~ s~,~\$(comma)~g;
10281
    $arg =~ s~,~\$(comma)~g;
10284
    $arg =~ s~%~\\%~g;
10282
    $arg =~ s~%~\\%~g;
-
 
10283
    $arg =~ s~:~\\\\\\:~g if ($mode eq 'T');
-
 
10284
    $arg =~ s~:~\\:~g     if ($mode eq 'S');
10285
    return $prefix . $arg;
10285
    return $prefix . $arg;
10286
}
10286
}
10287
 
10287
 
10288
 
-
 
10289
#-------------------------------------------------------------------------------
10288
#-------------------------------------------------------------------------------
10290
# Function        : Maketag
10289
# Function        : Maketag
10291
#
10290
#
10292
# Description     : Create Makefile tags to speed up recursive makes
10291
# Description     : Create Makefile tags to speed up recursive makes
10293
#
10292
#
Line 10513... Line 10512...
10513
 
10512
 
10514
    foreach my $dest ( keys %{$hashp} )
10513
    foreach my $dest ( keys %{$hashp} )
10515
    {
10514
    {
10516
 
10515
 
10517
        my $entry = $hashp->{$dest};
10516
        my $entry = $hashp->{$dest};
-
 
10517
        my $destText = QuoteForMake($dest,'T');
10518
 
10518
 
10519
        #
10519
        #
10520
        #   Skip placekeepers
10520
        #   Skip placekeepers
10521
        #
10521
        #
10522
        next if ( $entry->{'placekeeper'} );
10522
        next if ( $entry->{'placekeeper'} );
Line 10525... Line 10525...
10525
        #   Some entries are not installed via this mechanism, but can be removed
10525
        #   Some entries are not installed via this mechanism, but can be removed
10526
        #   if they exist. Mark these as PHONY to keep targets happy
10526
        #   if they exist. Mark these as PHONY to keep targets happy
10527
        #
10527
        #
10528
        if ( $entry->{'RemoveOnly'} )
10528
        if ( $entry->{'RemoveOnly'} )
10529
        {
10529
        {
10530
            MakePrint ".PHONY:\t$dest\n";
10530
            MakePrint ".PHONY:\t$destText\n";
10531
            MakePrint "$dest:\n\n";
10531
            MakePrint "$destText:\n\n";
10532
            next;
10532
            next;
10533
        }
10533
        }
10534
 
10534
 
10535
        my $fname = $entry->{'src'};
10535
        my $fname = $entry->{'src'};
-
 
10536
        my $fnameText = QuoteForMake($fname,'S');
10536
        my $fmode = $entry->{'Mode'};
10537
        my $fmode = $entry->{'Mode'};
10537
        $fmode .= "+x" if ( $entry->{'exe'}  );
10538
        $fmode .= "+x" if ( $entry->{'exe'}  );
10538
        $fmode .= "+l" if ( $entry->{'symlink'}  );
10539
        $fmode .= "+l" if ( $entry->{'symlink'}  );
10539
 
10540
 
10540
        #
10541
        #
Line 10544... Line 10545...
10544
        #
10545
        #
10545
        my $udef = $entry->{'defined'};
10546
        my $udef = $entry->{'defined'};
10546
        if ( $udef )
10547
        if ( $udef )
10547
        {
10548
        {
10548
            MakePrint "ifndef $udef \n";
10549
            MakePrint "ifndef $udef \n";
10549
            MakePrint ".PHONY:\t\t$dest\n";
10550
            MakePrint ".PHONY:\t\t$destText\n";
10550
            MakePrint ".PHONY:\t\t$fname\n";
10551
            MakePrint ".PHONY:\t\t$fnameText\n";
10551
            MakePrint "$dest:\n";
10552
            MakePrint "$destText:\n";
10552
            MakePrint "else\n"
10553
            MakePrint "else\n"
10553
        }
10554
        }
10554
 
10555
 
10555
        #
10556
        #
10556
        #   File exists
10557
        #   File exists
10557
        #   Only package the file if it has been generated. ie: .exe.manifest
10558
        #   Only package the file if it has been generated. ie: .exe.manifest
10558
        #
10559
        #
10559
        my $fexist = $entry->{'Exists'};
10560
        my $fexist = $entry->{'Exists'};
10560
        if ($fexist)
10561
        if ($fexist)
10561
        {
10562
        {
10562
            MakePrint "ifeq (\"\$(wildcard $fname)\",\"\")\n";
10563
            MakePrint "ifeq (\"\$(wildcard $fnameText)\",\"\")\n";
10563
            MakePrint ".PHONY:\t\t$dest\n";
10564
            MakePrint ".PHONY:\t\t$destText\n";
10564
            MakePrint "$dest:\n";
10565
            MakePrint "$destText:\n";
10565
            MakePrint "else\n"
10566
            MakePrint "else\n"
10566
        }
10567
        }
10567
 
10568
 
10568
        #
10569
        #
10569
        #   Conditional installation for DEBUG/PRODUCTION
10570
        #   Conditional installation for DEBUG/PRODUCTION
Line 10576... Line 10577...
10576
            } elsif ( $type eq "P" ) {
10577
            } elsif ( $type eq "P" ) {
10577
                MakePrint 'ifneq "$(DEBUG)" "0"'."\n";
10578
                MakePrint 'ifneq "$(DEBUG)" "0"'."\n";
10578
            } else {
10579
            } else {
10579
                Error("INTERNAL: Unexpected packaging type: $type");
10580
                Error("INTERNAL: Unexpected packaging type: $type");
10580
            }
10581
            }
10581
            MakePrint ".PHONY:\t\t$dest\n";
10582
            MakePrint ".PHONY:\t\t$destText\n";
10582
            MakePrint "$dest:\n";
10583
            MakePrint "$destText:\n";
10583
            MakePrint "else\n"
10584
            MakePrint "else\n"
10584
        }
10585
        }
10585
 
10586
 
10586
        #
10587
        #
10587
        #   The body of the copy
10588
        #   The body of the copy
10588
        #
10589
        #
10589
        MakePadded( 4, "$dest:" );
10590
        MakePadded( 4, $destText . ':' );
10590
        MakePrint "\t$fname\n";
10591
        MakePrint "\t" . $fnameText . "\n";
10591
        MakePrint $codecmd->( $dest, $fname, $fmode );
10592
        MakePrint $codecmd->( $dest, $fname, $fmode );
10592
        MakeNewLine();
10593
        MakeNewLine();
10593
 
10594
 
10594
 
-
 
10595
        #
10595
        #
10596
        #   Unwind conditionals
10596
        #   Unwind conditionals
10597
        #
10597
        #
10598
        MakePrint "endif\n" if ( $type );
10598
        MakePrint "endif\n" if ( $type );
10599
        MakePrint "endif\n" if ( $fexist );
10599
        MakePrint "endif\n" if ( $fexist );
Line 10630... Line 10630...
10630
sub PackageSetRules
10630
sub PackageSetRules
10631
{
10631
{
10632
    foreach my $set ( sort keys %PACKAGE_SETS )
10632
    foreach my $set ( sort keys %PACKAGE_SETS )
10633
    {
10633
    {
10634
        my $me = MakeEntry::New( *MAKEFILE, "package_set$set", '--Phony' );
10634
        my $me = MakeEntry::New( *MAKEFILE, "package_set$set", '--Phony' );
10635
        $me->AddDependancy( @{$PACKAGE_SETS{$set}{LIST}} );
10635
        $me->AddDependancyEscaped( @{$PACKAGE_SETS{$set}{LIST}} );
10636
        $me->Print();
10636
        $me->Print();
10637
    }
10637
    }
10638
}
10638
}
10639
 
10639
 
10640
#-------------------------------------------------------------------------------
10640
#-------------------------------------------------------------------------------
Line 10685... Line 10685...
10685
    my( $dest, $file, $fmode ) = @_;
10685
    my( $dest, $file, $fmode ) = @_;
10686
 
10686
 
10687
    $fmode = "-w"                           # default, read-only
10687
    $fmode = "-w"                           # default, read-only
10688
        if ( !defined( $fmode ) || $fmode eq "" );
10688
        if ( !defined( $fmode ) || $fmode eq "" );
10689
 
10689
 
-
 
10690
    $dest = QuoteForMake($dest);
-
 
10691
    $file = QuoteForMake($file);
10690
    return "\t\$(call InstallFile,$dest,$file,$fmode)";
10692
    return "\t\$(call InstallFile,$dest,$file,$fmode)";
10691
}
10693
}
10692
 
10694
 
10693
sub UninstallCmd
10695
sub UninstallCmd
10694
{
10696
{
10695
    my( $file ) = @_;
10697
    my( $file ) = @_;
10696
 
-
 
-
 
10698
    $file = QuoteForMake($file);
10697
    return "\t\$(call UninstallFile,$file)";
10699
    return "\t\$(call UninstallFile,$file)";
10698
}
10700
}
10699
 
10701
 
10700
sub PackageCmd
10702
sub PackageCmd
10701
{
10703
{
10702
    my( $dest, $file, $fmode ) = @_;
10704
    my( $dest, $file, $fmode ) = @_;
10703
 
10705
 
10704
    $fmode = "-w"                           # default, read-only
10706
    $fmode = "-w"                           # default, read-only
10705
        if ( !defined( $fmode ) || $fmode eq "" );
10707
        if ( !defined( $fmode ) || $fmode eq "" );
10706
 
10708
 
-
 
10709
    $dest = QuoteForMake($dest);
-
 
10710
    $file = QuoteForMake($file);
10707
    return "\t\$(call PackageFile,$dest,$file,$fmode)";
10711
    return "\t\$(call PackageFile,$dest,$file,$fmode)";
10708
}
10712
}
10709
 
10713
 
10710
sub UnpackageCmd
10714
sub UnpackageCmd
10711
{
10715
{
10712
    my( $file ) = @_;
10716
    my( $file ) = @_;
-
 
10717
    $file = QuoteForMake($file);
10713
    return "\t\$(call UnpackageFile,$file)";
10718
    return "\t\$(call UnpackageFile,$file)";
10714
}
10719
}
10715
 
10720
 
10716
1;
10721
1;
10717
 
10722