Subversion Repositories DevTools

Rev

Rev 7322 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7322 Rev 7323
Line 126... Line 126...
126
our $ScmToolsetSingleType   = 0;                # Toolset does not support Debug and Production
126
our $ScmToolsetSingleType   = 0;                # Toolset does not support Debug and Production
127
our $ScmToolsetProgSource   = ();               # Toolset Program Source
127
our $ScmToolsetProgSource   = ();               # Toolset Program Source
128
our $ScmToolsetSoName       = 0;                # 1: Shared library supports SoName
128
our $ScmToolsetSoName       = 0;                # 1: Shared library supports SoName
129
our $ScmToolsetNillLibSrc   = 0;                # 1: Librarys created without source specified
129
our $ScmToolsetNillLibSrc   = 0;                # 1: Librarys created without source specified
130
our %ScmToolsetProperties   = ();               # Toolset specific features and limitations
130
our %ScmToolsetProperties   = ();               # Toolset specific features and limitations
131
                                                # Known values: UnitTests, AutoUnitTests
131
                                                # Known values: UnitTests, AutoUnitTests, LdFlagSpace
132
our %ScmGlobalOptions       = ();               # Hash of Global(platform) options. Access via functions
132
our %ScmGlobalOptions       = ();               # Hash of Global(platform) options. Access via functions
133
our %ScmRecipeTags          = ();               # Hash of exposed recipe names
133
our %ScmRecipeTags          = ();               # Hash of exposed recipe names
134
 
134
 
135
our $ScmRoot                = "";
135
our $ScmRoot                = "";
136
our $ScmMakelib             = "";
136
our $ScmMakelib             = "";
Line 215... Line 215...
215
our @TOOLSETOBJS            = ();
215
our @TOOLSETOBJS            = ();
216
our @TOOLSETLIBS            = ();
216
our @TOOLSETLIBS            = ();
217
our @TOOLSETPROGS           = ();
217
our @TOOLSETPROGS           = ();
218
our %INSTALL_HDRS           = ();
218
our %INSTALL_HDRS           = ();
219
our %INSTALL_CLSS           = ();
219
our %INSTALL_CLSS           = ();
-
 
220
our @CLOBBERFILES           = ();
-
 
221
our @CLOBBERDIRS            = ();
220
 
222
 
221
our @TOOLSET_UTF_PRE        = ();       # Toolsets can extend rules run before all unit tests
223
our @TOOLSET_UTF_PRE        = ();       # Toolsets can extend rules run before all unit tests
222
our @TOOLSET_UTF_POST       = ();       # Toolsets can extend rules run after all unit tests
224
our @TOOLSET_UTF_POST       = ();       # Toolsets can extend rules run after all unit tests
223
our @TOOLSET_UTF_COLLATE    = ();       # Toolsets can extend rules run to collate unit tests results
225
our @TOOLSET_UTF_COLLATE    = ();       # Toolsets can extend rules run to collate unit tests results
224
 
226
 
Line 973... Line 975...
973
    Debug2( "ToolsetGenerate(@_)" );
975
    Debug2( "ToolsetGenerate(@_)" );
974
 
976
 
975
    UniquePush( \@TOOLSETGENERATED, @_ );
977
    UniquePush( \@TOOLSETGENERATED, @_ );
976
}
978
}
977
 
979
 
-
 
980
sub ToolsetClobberFile
-
 
981
{
-
 
982
    Debug( "ToolsetClobberFile(@_)" );
-
 
983
    UniquePush( \@CLOBBERFILES, @_ );
-
 
984
}
-
 
985
 
-
 
986
sub ToolsetClobberDir
-
 
987
{
-
 
988
    Debug( "ToolsetClobberDir(@_)" );
-
 
989
    UniquePush( \@CLOBBERDIRS, @_ );
-
 
990
}
978
 
991
 
979
sub ToolsetObj
992
sub ToolsetObj
980
{
993
{
981
    Debug2( "ToolsetObj(@_)" );
994
    Debug2( "ToolsetObj(@_)" );
982
 
995
 
Line 1529... Line 1542...
1529
 
1542
 
1530
    foreach  ( @elements )
1543
    foreach  ( @elements )
1531
    {
1544
    {
1532
        next if ( m~^--(Debug|Prod)~ );
1545
        next if ( m~^--(Debug|Prod)~ );
1533
        Warning("Use of linker flag discouraged (will be used): $_");
1546
        Warning("Use of linker flag discouraged (will be used): $_");
-
 
1547
        if ( $ScmToolsetProperties{'LdFlagSpace'} ) {
-
 
1548
            $_ =~ s/\s/\$(spacealt)/g;
-
 
1549
        }
1534
    }
1550
    }
-
 
1551
    
-
 
1552
    
-
 
1553
    
1535
    __AddFlags( "LDFLAGS", \@elements,
1554
    __AddFlags( "LDFLAGS", \@elements,
1536
                \@LDFLAGS, undef,
1555
                \@LDFLAGS, undef,
1537
                \@LDFLAGS_DEBUG, undef,
1556
                \@LDFLAGS_DEBUG, undef,
1538
                \@LDFLAGS_PROD, undef );
1557
                \@LDFLAGS_PROD, undef );
1539
    
1558
    
Line 2695... Line 2714...
2695
#
2714
#
2696
#                       --Clean[=arg]           - Call script with arg[-clean] for cleaning.
2715
#                       --Clean[=arg]           - Call script with arg[-clean] for cleaning.
2697
#                       --PreDelete             - Delete generated files before running the command
2716
#                       --PreDelete             - Delete generated files before running the command
2698
#                       --RecipeTag=Name        - Name the recipe
2717
#                       --RecipeTag=Name        - Name the recipe
2699
#                                                 Allows recipe to be called by Name and clean_Name
2718
#                                                 Allows recipe to be called by Name and clean_Name
-
 
2719
#                                                 
-
 
2720
#                       --UtfFormat=name        - Flags the program as a 'test' to be run in the Test Phase
-
 
2721
#                                                 Intended to support things like Gradle that run tests in there own world
-
 
2722
#                                                 Enables support for (Must occur first)
-
 
2723
#                           --AutoUtf           - Non interactive unit test
-
 
2724
#                           --NoAutoUtf         - Interactive unit Test
-
 
2725
#                           --UtfArg=nnn        - Argument passed into the UTF formatter
-
 
2726
#                           --UtfDir=path       - SUbdir in which the Unit Tests will be run    
-
 
2727
#                       
2700
#
2728
#
2701
#               Eg: GenerateFiles ( '*', "--Tool=mod_if.pl",
2729
#               Eg: GenerateFiles ( '*', "--Tool=mod_if.pl",
2702
#                                        "-src --Prerequisite(udh_module.cfg)",
2730
#                                        "-src --Prerequisite(udh_module.cfg)",
2703
#                                        "-direct -hdr --Generated(udp.h) -quiet" );
2731
#                                        "-direct -hdr --Generated(udp.h) -quiet" );
2704
#
2732
#
Line 2729... Line 2757...
2729
    my @has_source;
2757
    my @has_source;
2730
    my @var_opts;
2758
    my @var_opts;
2731
    my @genreq_seen;
2759
    my @genreq_seen;
2732
    my $predelete;
2760
    my $predelete;
2733
    my $recipeTag;
2761
    my $recipeTag;
-
 
2762
    my $utfAuto;
-
 
2763
    my $utfFormat;
-
 
2764
    my $utfDir;
-
 
2765
    my @utfArgs;
-
 
2766
    my $isaUtf;
-
 
2767
    my $noGenerate;
2734
 
2768
 
2735
    #
2769
    #
2736
    #   Process the first argument - this describes the program that will be used
2770
    #   Process the first argument - this describes the program that will be used
2737
    #   to generate the files. It may be:
2771
    #   to generate the files. It may be:
2738
    #       --Tool          - A Jats Tool or Plugin
2772
    #       --Tool          - A Jats Tool or Plugin
Line 2942... Line 2976...
2942
            #   Delete generated files before running the generation process
2976
            #   Delete generated files before running the generation process
2943
            #   Some programs refuse to overwrite existing files
2977
            #   Some programs refuse to overwrite existing files
2944
            #
2978
            #
2945
            $predelete = 1;
2979
            $predelete = 1;
2946
            next;
2980
            next;
2947
        }
-
 
2948
        
2981
 
2949
        if ( $arg =~ /^--NoVarTag$/ )
2982
        } elsif ( $arg =~ /^--NoVarTag$/ ) {
2950
        {
-
 
2951
            #
2983
            #
2952
            #   Modify the operation of --Var to supress the tags
2984
            #   Modify the operation of --Var to supress the tags
2953
            #   Should be used early as will only affect following --Var usage
2985
            #   Should be used early as will only affect following --Var usage
2954
            #
2986
            #
2955
            push @var_opts, "--notag";
2987
            push @var_opts, "--notag";
2956
            next;
2988
            next;
2957
        }
-
 
2958
 
2989
 
2959
        if ( $arg =~ /^--NoWarn$/ )
2990
        } elsif ( $arg =~ /^--NoWarn$/ ) {
2960
        {
-
 
2961
            #
2991
            #
2962
            #   Supress warnings - No prequisites found
2992
            #   Supress warnings - No prequisites found
2963
            #   This is acceptable, but normally a tool should take an input
2993
            #   This is acceptable, but normally a tool should take an input
2964
            #   and create some output from it.
2994
            #   and create some output from it.
2965
            #
2995
            #
2966
            $no_warn = 1;
2996
            $no_warn = 1;
2967
            next;
2997
            next;
2968
        }
-
 
2969
 
2998
 
2970
        if ( $arg =~ /^--NoGenerate$/ )
2999
        } elsif ( $arg =~ /^--NoGenerate$/ ) {
2971
        {
-
 
2972
            #
3000
            #
2973
            #   Tool does generate a definable output
3001
            #   Tool does generate a definable output
2974
            #   Should only be used internally
3002
            #       Should only be used internally
2975
            #
-
 
2976
            #   Need to create a dummy name for the rule
-
 
2977
            #   Use a base name and a number
-
 
2978
            #
3003
            #
2979
            my $dummy_target = 'generate_files_' . $NoGenIndex;
-
 
2980
            UniquePush (\@gen_files, $dummy_target );
3004
            $noGenerate = 1;
2981
            UniquePush (\@GENERATED, $dummy_target);
-
 
2982
            next;
3005
            next;
2983
        }
-
 
2984
 
3006
 
2985
        if ( $arg =~ /^--UnknownPreq/ )
3007
        } elsif ( $arg =~ /^--UnknownPreq/ ) {
2986
        {
-
 
2987
            #
3008
            #
2988
            #   Indicate that the prequisites are not known, or too complex to
3009
            #   Indicate that the prequisites are not known, or too complex to
2989
            #   describe. ie: All files in a directory. May be used by packaging
3010
            #   describe. ie: All files in a directory. May be used by packaging
2990
            #   tools.
3011
            #   tools.
2991
            #   The recipe will be run EVERY time we want to use the target.
3012
            #   The recipe will be run EVERY time we want to use the target.
2992
            #
3013
            #
2993
            $preq_unknown = 1;
3014
            $preq_unknown = 1;
2994
            $no_warn = 1;
3015
            $no_warn = 1;
2995
            next;
3016
            next;
2996
        }
-
 
2997
 
3017
 
2998
        if ( $arg =~ /^--AutoGenerate/ )
3018
        } elsif ( $arg =~ /^--AutoGenerate/ ) {
2999
        {
-
 
3000
            #
3019
            #
3001
            #   Determine when to run the tool based on the types of files that
3020
            #   Determine when to run the tool based on the types of files that
3002
            #   are generated. Existance of a source file will force the tool
3021
            #   are generated. Existance of a source file will force the tool
3003
            #   to be run during the 'generate' phase, othewise the tool will be run
3022
            #   to be run during the 'generate' phase, othewise the tool will be run
3004
            #   when the generated components are required.
3023
            #   when the generated components are required.
Line 3006... Line 3025...
3006
            $gtype = 2;
3025
            $gtype = 2;
3007
            Warning ("AutoGenerate MUST occur before options that declare generation of files",
3026
            Warning ("AutoGenerate MUST occur before options that declare generation of files",
3008
                     "Have seen:", @genreq_seen)
3027
                     "Have seen:", @genreq_seen)
3009
                if (@genreq_seen);
3028
                if (@genreq_seen);
3010
            next;
3029
            next;
3011
        }
-
 
3012
        
3030
 
3013
        if ( $arg =~ /^--Prereq=(.*)/ )
3031
        } elsif ( $arg =~ /^--Prereq=(.*)/ ) {
3014
        {
-
 
3015
            #
3032
            #
3016
            #   Specify a prerequisite file, that is not a part of the command line
3033
            #   Specify a prerequisite file, that is not a part of the command line
3017
            #   Simply add the files to the list of preq files
3034
            #   Simply add the files to the list of preq files
3018
            #
3035
            #
3019
            my $fn = LocatePreReq ($1);
3036
            my $fn = LocatePreReq ($1);
3020
            UniquePush ( \@preq_files, $fn );
3037
            UniquePush ( \@preq_files, $fn );
3021
            Debug( "GenerateFiles: ExtraPrereq: $fn" );
3038
            Debug( "GenerateFiles: ExtraPrereq: $fn" );
3022
            next;
3039
            next;
3023
        }
-
 
3024
 
3040
 
3025
        if ( $arg =~ /^--Created(.*)=(.*)/ )
3041
        } elsif ( $arg =~ /^--Created(.*)=(.*)/ ) {
3026
        {
-
 
3027
            #
3042
            #
3028
            #   Specify a generated file, that is not a part of the command line
3043
            #   Specify a generated file, that is not a part of the command line
3029
            #   Add the files to the list of generated files
3044
            #   Add the files to the list of generated files
3030
            #
3045
            #
3031
            my $type = $1;
3046
            my $type = $1;
Line 3062... Line 3077...
3062
                    push @has_source, $fn;
3077
                    push @has_source, $fn;
3063
                }
3078
                }
3064
            }
3079
            }
3065
            Debug( "GenerateFiles: ExtraCreated: $fn" );
3080
            Debug( "GenerateFiles: ExtraCreated: $fn" );
3066
            next;
3081
            next;
3067
        }
-
 
3068
 
3082
 
3069
        if ( $arg =~ /^--Clean($|=(.*))/ )
3083
        } elsif ( $arg =~ /^--Clean($|=(.*))/ ) {
3070
        {
-
 
3071
            #
3084
            #
3072
            #   Detect Clean option
3085
            #   Detect Clean option
3073
            #
3086
            #
3074
            $clean_tag = $2 ? $2 : '-clean';
3087
            $clean_tag = $2 ? $2 : '-clean';
3075
 
3088
 
Line 3078... Line 3091...
3078
            #   be run during a clean phase. They should not have any prereq
3091
            #   be run during a clean phase. They should not have any prereq
3079
            #   and should not generate any files, so simplify the interface.
3092
            #   and should not generate any files, so simplify the interface.
3080
            #
3093
            #
3081
            push @args, '--NoWarn', '--NoGenerate'
3094
            push @args, '--NoWarn', '--NoGenerate'
3082
                if ( $shell_cmds );
3095
                if ( $shell_cmds );
3083
 
-
 
3084
            next;
3096
            next;
3085
        }
-
 
3086
 
3097
 
3087
        if ( $arg =~ /^--Text=(.*)/ )
3098
        } elsif ( $arg =~ /^--Text=(.*)/ ) {
3088
        {
-
 
3089
            #
3099
            #
3090
            #   Display this text when executing commands
3100
            #   Display this text when executing commands
3091
            #
3101
            #
3092
            $text = $1;
3102
            $text = $1;
3093
            next;
3103
            next;
3094
        }
-
 
3095
 
3104
 
3096
        if ( $arg =~ /^--RecipeTag=(.*)/ )
3105
        } elsif ( $arg =~ /^--RecipeTag=(.*)/ ) {
3097
        {
-
 
3098
            #
3106
            #
3099
            #   Tag the generated Recipe
3107
            #   Tag the generated Recipe
3100
            #   Only use the last tag - allow users to overwrite system tags
3108
            #   Only use the last tag - allow users to overwrite system tags
3101
            #
3109
            #
3102
            $recipeTag = $1;
3110
            $recipeTag = $1;
3103
            Error ("Duplicate RecipeTag - $recipeTag") if ($recipeTags{$recipeTag}++ > 1);
3111
            Error ("Duplicate RecipeTag - $recipeTag") if ($recipeTags{$recipeTag}++ > 1);
3104
            next;
3112
            next;
-
 
3113
 
-
 
3114
        } elsif ( $arg =~ m/^--AutoUtf$/i) {
-
 
3115
            $utfAuto = 1;
-
 
3116
            $isaUtf = 1;
-
 
3117
            next;
-
 
3118
 
-
 
3119
        } elsif ( $arg =~ m/^--NoAutoUtf$/i ) {
-
 
3120
            $utfAuto = 0;
-
 
3121
            $isaUtf = 1;
-
 
3122
            next;
-
 
3123
 
-
 
3124
        } elsif ( $arg =~ m/^--UtfFormat=(.*)/i) {
-
 
3125
            $utfFormat = $1;
-
 
3126
            $isaUtf = 1;
-
 
3127
            next;
-
 
3128
 
-
 
3129
        } elsif ( $arg =~ m/^--UtfDir=(.*)/i) {
-
 
3130
            $utfDir = $1;
-
 
3131
            $isaUtf = 1;
-
 
3132
            next;
-
 
3133
 
-
 
3134
        } elsif ( $arg =~ m/^--UtfArg=(.*)/i) {
-
 
3135
            push @utfArgs, $1;
-
 
3136
            $isaUtf = 1;
-
 
3137
            next;
3105
        }
3138
        }
3106
 
3139
 
-
 
3140
 
3107
        #   Not an option. Must be an argument to the tool/program
3141
        #   Not an option. Must be an argument to the tool/program
3108
        #   Process the tool arguments and extract file information
3142
        #   Process the tool arguments and extract file information
3109
        #   Extract all fields of the form:
3143
        #   Extract all fields of the form:
3110
        #           --xxxxx(yyyyyy[,zzzzz])
3144
        #           --xxxxx(yyyyyy[,zzzzz])
3111
        #           --xxxxx{yyyyyyy}
3145
        #           --xxxxx{yyyyyyy}
Line 3304... Line 3338...
3304
        #   Save the tool arguments in an array
3338
        #   Save the tool arguments in an array
3305
        #
3339
        #
3306
        push @tool_args, $arg;
3340
        push @tool_args, $arg;
3307
    }
3341
    }
3308
 
3342
 
3309
 
-
 
3310
    #
3343
    #
3311
    #   Sanity test. Ensure that some file have been marked as generated
3344
    #   Sanity test. Ensure that some file have been marked as generated
3312
    #                Warn if no prerequisites found
3345
    #                Warn if no prerequisites found
3313
    #
3346
    #
3314
    Warning( "GenerateFiles. --AutoGenerate option has no effect",
3347
    Warning( "GenerateFiles. --AutoGenerate option has no effect",
3315
             "The following files are 'source' files",  @has_source ) if ( @has_source );
3348
             "The following files are 'source' files",  @has_source ) if ( @has_source );
3316
    Warning( "No Prerequisite files found in $tool",@tool_args) unless ( $no_warn || $#preq_files >= 0 );
3349
    Warning( "No Prerequisite files found in $tool",@tool_args) unless ( $isaUtf || $no_warn || $#preq_files >= 0 );
-
 
3350
 
-
 
3351
    #
-
 
3352
    #   These would be nice tests - but break too much
-
 
3353
    #   
-
 
3354
    #    ReportError("Mixed use of --NoGenerate and generated files") if (@gen_files && $noGenerate);
3317
    Error  ( "No generated files found in $tool",@tool_args) unless ($#gen_files >= 0);
3355
    #    ReportError  ( "No generated files found in $tool",@tool_args) unless ($isaUtf || $noGenerate || $#gen_files > 0);
-
 
3356
 
-
 
3357
    #
-
 
3358
    #   Sanity test. If a UTF then we shouldn't generate files
-
 
3359
    #   
-
 
3360
    if ($isaUtf ) {
-
 
3361
        ReportError('In UTF mode generated files are not supported:', @gen_files) if @gen_files;
-
 
3362
    }
-
 
3363
 
-
 
3364
    #   Invocation does not generate and files
-
 
3365
    #       Need to create a dummy name for the rule
-
 
3366
    #       Use a base name and a number
-
 
3367
    #       
-
 
3368
    if ($noGenerate)
-
 
3369
    {
-
 
3370
        my $dummy_target = 'generate_files_' . $NoGenIndex;
-
 
3371
        UniquePush (\@gen_files, $dummy_target );
-
 
3372
        UniquePush (\@GENERATED, $dummy_target) unless $isaUtf;
-
 
3373
    }
-
 
3374
 
-
 
3375
    ErrorDoExit();
3318
 
3376
 
3319
    #
3377
    #
3320
    #   Determine the text to display while generating files
3378
    #   Determine the text to display while generating files
3321
    #   Will be either user-text or the first target file (default)
3379
    #   Will be either user-text or the first target file (default)
3322
    #   Suffix with RecipeTag, if provided
3380
    #   Suffix with RecipeTag, if provided
Line 3342... Line 3400...
3342
    $gen_data{'clean'}      = $clean_tag;
3400
    $gen_data{'clean'}      = $clean_tag;
3343
    $gen_data{'text'}       = $text;
3401
    $gen_data{'text'}       = $text;
3344
    $gen_data{'preq_sus'}   = 1 if ( $preq_unknown );
3402
    $gen_data{'preq_sus'}   = 1 if ( $preq_unknown );
3345
    $gen_data{'predelete'}  = 1 if ( $predelete );
3403
    $gen_data{'predelete'}  = 1 if ( $predelete );
3346
 
3404
 
-
 
3405
    if ($isaUtf)
-
 
3406
    {
-
 
3407
        $gen_data{'isautf'}     = 1;
-
 
3408
        $gen_data{'utfauto'}    = $utfAuto if ( $utfAuto );
-
 
3409
        $gen_data{'utfformat'}  = $utfFormat if ( $utfFormat );
-
 
3410
        $gen_data{'utfdir'}     = $utfDir if ( $utfDir );
-
 
3411
        $gen_data{'utfargs'}    = \@utfArgs;
-
 
3412
 
-
 
3413
        $TESTS_TO_RUN = 1;
-
 
3414
        $TESTS_TO_AUTORUN = 1 if ( $utfAuto );
-
 
3415
    }
-
 
3416
 
3347
    push(@GENERATE_FILES, \%gen_data);
3417
    push(@GENERATE_FILES, \%gen_data);
3348
#DebugDumpData("GenerateFiles", \%gen_data);
3418
#DebugDumpData("GenerateFiles", \%gen_data);
3349
    Debug2( "GenerateFiles: cmd: $tool @tool_args" );
3419
    Debug2( "GenerateFiles: cmd: $tool @tool_args" );
3350
}
3420
}
3351
 
3421
 
Line 3777... Line 3847...
3777
    #   Only 'CompilerPath', but it can be a pain in user land
3847
    #   Only 'CompilerPath', but it can be a pain in user land
3778
    #
3848
    #
3779
    $expansion = $ExpandGenVarConvert{$tag};
3849
    $expansion = $ExpandGenVarConvert{$tag};
3780
    unless ( defined $expansion  )
3850
    unless ( defined $expansion  )
3781
    {
3851
    {
3782
        return '' if ( $allow_none );
3852
        return '','',0,0 if ( $allow_none );
3783
        $expansion = $default_value;
3853
        $expansion = $default_value;
3784
        Error ("$dname: Expansion --Var($tag) not be supported by toolset: $ScmToolset")
3854
        Error ("$dname: Expansion --Var($tag) not be supported by toolset: $ScmToolset")
3785
            unless ( $expansion );
3855
            unless ( $expansion );
3786
    }
3856
    }
3787
 
3857
 
Line 6947... Line 7017...
6947
                $dir =~ s~//~/~g;
7017
                $dir =~ s~//~/~g;
6948
                $dir =~ s~/./~/~g;
7018
                $dir =~ s~/./~/~g;
6949
                $dir =~ s~/$~~g;
7019
                $dir =~ s~/$~~g;
6950
                $name = $basename;
7020
                $name = $basename;
6951
            }
7021
            }
6952
 
-
 
6953
            $name = StripPath($name, $strip) if ($strip);
7022
            $name = StripPath($name, $strip) if ($strip);
6954
 
7023
 
6955
            if ( $strip_base )
7024
            if ( $strip_base )
6956
            {
7025
            {
6957
                $name = substr $name, $strip_base;
7026
                $name = substr $name, $strip_base;
Line 8849... Line 8918...
8849
#                   To be used within another directive
8918
#                   To be used within another directive
8850
#                   ie:
8919
#                   ie:
8851
#                       AnyDirective ('*',  arg1, arg2, ...
8920
#                       AnyDirective ('*',  arg1, arg2, ...
8852
#                                           If (SomePlatform, arg1, .. ,argn))
8921
#                                           If (SomePlatform, arg1, .. ,argn))
8853
#
8922
#
8854
# Inputs          : $platform               - Active Platform speciifier
8923
# Inputs          : $platform               - Active Platform specifier
8855
#                   @args                   - Args
8924
#                   @args                   - Args
8856
#
8925
#
8857
# Returns         : @args or nothing
8926
# Returns         : @args or nothing
8858
#
8927
#
8859
sub  If
8928
sub  If
Line 9183... Line 9252...
9183
uninstall:	uninstall_dirs uninstall_class uninstall_prog uninstall_shlib \\
9252
uninstall:	uninstall_dirs uninstall_class uninstall_prog uninstall_shlib \\
9184
		uninstall_lib uninstall_hdr
9253
		uninstall_lib uninstall_hdr
9185
clean:		make_clean unmake_prog unmake_test unmake_lib unobj \\
9254
clean:		make_clean unmake_prog unmake_test unmake_lib unobj \\
9186
		undepend ungenerate rmlitter unmake_dir
9255
		undepend ungenerate rmlitter unmake_dir
9187
unbuild:	clean uninstall
9256
unbuild:	clean uninstall
9188
clobber:	unpackage unbuild
9257
clobber:	unpackage unbuild clobberfiles clobberdirs
9189
deploy:		install run_deploy
9258
deploy:		install run_deploy
9190
 
9259
 
9191
#--------- Macros --------------------------------------------------------------
9260
#--------- Macros --------------------------------------------------------------
9192
 
9261
 
9193
OBJDIR		= \$(GBE_PLATFORM)\$(GBE_TYPE).OBJ
9262
OBJDIR		= \$(GBE_PLATFORM)\$(GBE_TYPE).OBJ
Line 9871... Line 9940...
9871
        #   A bit of a kludge for 'googletest'
9940
        #   A bit of a kludge for 'googletest'
9872
        #       If we have another kludge like then then consider placing this work into a module based on the filter name
9941
        #       If we have another kludge like then then consider placing this work into a module based on the filter name
9873
        #       with some sort of interface to allow the ENVvars and format and command line args to be massaged
9942
        #       with some sort of interface to allow the ENVvars and format and command line args to be massaged
9874
        #       
9943
        #       
9875
        #   For googletest
9944
        #   For googletest
9876
        #       Set EnvVar and then prost process with junit
9945
        #       Set EnvVar and then post process with junit
9877
        #
9946
        #
9878
        if ($pEntry->{'utfformat'})
9947
        if ($pEntry->{'utfformat'})
9879
        {
9948
        {
9880
            if ($pEntry->{'utfformat'} eq 'gtest') {
9949
            if ($pEntry->{'utfformat'} eq 'gtest') {
9881
                $pEntry->{'utfformat'} = 'junit';
9950
                $pEntry->{'utfformat'} = 'junit';
Line 9952... Line 10021...
9952
        push @cmdline, "-dir=$tdir";
10021
        push @cmdline, "-dir=$tdir";
9953
        push @cmdline, '-target=$(GBE_PLATFORM)';
10022
        push @cmdline, '-target=$(GBE_PLATFORM)';
9954
        push @cmdline, '-pkgdir=$(PKGDIR)';
10023
        push @cmdline, '-pkgdir=$(PKGDIR)';
9955
        push @cmdline, '-local=$(LOCALDIR)';
10024
        push @cmdline, '-local=$(LOCALDIR)';
9956
        push @cmdline, '-interface=$(INTERFACEDIR)';
10025
        push @cmdline, '-interface=$(INTERFACEDIR)';
9957
        foreach my $entry (@{$pEntry->{'utfargs' }})
10026
        push @cmdline, "-rcfile=$tdir/utf.\$\${GBE_UTFUID}.rc";
9958
        {
-
 
9959
            push @cmdline, '-arg=' . $entry;
10027
        push @cmdline, map { '-arg='. $_ } @{$pEntry->{'utfargs' }};
9960
        }
-
 
9961
        
10028
        
9962
        #
10029
        #
9963
        #   Insert commands to post process the test results according to the specified formatter
10030
        #   Insert commands to post process the test results according to the specified formatter
9964
        #
10031
        #
9965
        $me->NewSection     ();
10032
        $me->NewSection     ();
9966
        $me->SectionIfDef   ('UTF_POSTPROCESS');
10033
        $me->SectionIfDef   ('UTF_POSTPROCESS');
9967
        $me->RecipePrefix   ('$(XX_PRE)');
10034
        $me->RecipePrefix   ('$(XX_PRE)');
9968
        $me->AddRecipe      ( "\$(GBE_PERL) -Mjats_runutf -e processUtf " . join(" \\\n\t\t\t", @cmdline)  );
10035
        $me->AddOneRecipe   ( "\$(GBE_PERL) -Mjats_runutf -e processUtf", @cmdline );
9969
 
10036
 
9970
        $me->Print();
10037
        $me->Print();
9971
 
10038
 
9972
 
10039
 
9973
        #
10040
        #
Line 10048... Line 10115...
10048
#-------------------------------------------------------------------------------
10115
#-------------------------------------------------------------------------------
10049
#   Generated Files
10116
#   Generated Files
10050
#
10117
#
10051
    MakeHeader ("Generated Files");
10118
    MakeHeader ("Generated Files");
10052
    MakePrint ("\n.PHONY: phony_generate\n\n" );
10119
    MakePrint ("\n.PHONY: phony_generate\n\n" );
10053
    
10120
    my $generateMustAddTestPostProcess;
10054
    foreach my $i ( @GENERATE_FILES )
10121
    foreach my $i ( @GENERATE_FILES )
10055
    {
10122
    {
10056
        my $gen_tag = $i->{'index'};
10123
        my $gen_tag = $i->{'index'};
-
 
10124
        my $genName = 'generate_' . $gen_tag;
-
 
10125
 
-
 
10126
        my $me = MakeEntry::New( *MAKEFILE );
-
 
10127
        $me->AddComment    ('Generate Files');
-
 
10128
        $me->AddName(@{$i->{'gen'}});
-
 
10129
 
10057
        #
10130
        #
10058
        #   Generate user-provided recipe names to allow the rule to be called by name.
10131
        #   Generate user-provided recipe names to allow the rule to be called by name.
10059
        #
10132
        #
10060
        my $recipeTag = $i->{'recipeTag'} || '';
10133
        my $recipeTag = $i->{'recipeTag'} || '';
10061
        my $recipeName = '';
10134
        my $recipeName = '';
Line 10066... Line 10139...
10066
            $recipeCleanName = 'clean_' . $recipeTag;
10139
            $recipeCleanName = 'clean_' . $recipeTag;
10067
 
10140
 
10068
            # for 'jats make help'
10141
            # for 'jats make help'
10069
            $ScmRecipeTags{$recipeTag} = defined $i->{'clean'} ? 1 : 0;
10142
            $ScmRecipeTags{$recipeTag} = defined $i->{'clean'} ? 1 : 0;
10070
 
10143
 
-
 
10144
            $me->Phony() ;
10071
            MakePrint( ".PHONY: $recipeName $recipeCleanName\n"); 
10145
            $me->AddName($recipeName);
10072
        }
10146
        }
10073
 
10147
 
10074
        #
10148
        #
10075
        #   If predelete is enabled, then create a list of files to delete
10149
        #   If predelete is enabled, then create a list of files to delete
10076
        #
10150
        #
10077
        if ( $i->{'predelete'}  )
10151
        if ( $i->{'predelete'}  ) {
10078
        {
-
 
10079
            MakeDefEntry( "generate_gen_$gen_tag", "=",  $i->{'gen'} );
10152
            $me->AddDefn("generate_gen_$gen_tag", join(' ', @{$i->{'gen'}} )  );
10080
            MakePrint("\n")
-
 
10081
        }
10153
        }
10082
 
10154
 
-
 
10155
        my $target = join (' ', @{$i->{'gen'}}, $recipeName);
-
 
10156
 
-
 
10157
        #
-
 
10158
        #   If a UnitTest then insert runtime defs
-
 
10159
        #
-
 
10160
        if ($i->{'isautf'})
-
 
10161
        {
-
 
10162
            my $test_name = $i->{'gen'}[0];
-
 
10163
            $generateMustAddTestPostProcess = 1;
-
 
10164
 
-
 
10165
            push @TESTPROJECT_TO_URUN, $test_name;
-
 
10166
            push @TESTPROJECT_TO_ARUN, $test_name if ($i->{'utfauto'} );
-
 
10167
 
-
 
10168
            $me->AddComment    ('  This is a Unit Test');
-
 
10169
            $me->AddDefn('export GBE_UTFNAME', $test_name );
-
 
10170
            $me->AddDefn('export GBE_UTFUID', 'G$(MAKEFILEUID)' . '_' . $i->{'index'});
-
 
10171
            $me->AddDefn('export GBE_UTFFILE','$(UTFDIR_PKG)/$(GBE_PLATFORM)-$(GBE_TYPE)-$(GBE_UTFUID)' . '.xml');
-
 
10172
            $me->AddDefn('export GBE_UTFTEST','TEST-$(GBE_UTFNAME)-$(GBE_TYPE)-$(GBE_UTFUID)' );
-
 
10173
        }
10083
 
10174
 
10084
        #
10175
        #
10085
        #   Generate the basic generate rule and recipe
10176
        #   Generate the basic generate rule and recipe
10086
        #   together with the prerequisites
10177
        #   together with the prerequisites
10087
        #
10178
        #
10088
        MakeEntry ( "", ":", "", " ", @{$i->{'gen'}}, $recipeName );
-
 
10089
 
-
 
10090
        unless ( $i->{'clean'} && $i->{'shell'} )
10179
        unless ( $i->{'clean'} && $i->{'shell'} )
10091
        {
10180
        {
10092
            MakeEntry ( "", "", " \\\n\t\t", "", @{$i->{'preq'}} );
10181
            $me->AddDependancy(@{$i->{'preq'}});
10093
            MakeEntry ( "", "", " \\\n\t\t", "", "phony_generate" ) if $i->{'preq_sus'};
10182
            $me->AddDependancy("phony_generate") if $i->{'preq_sus'};
10094
            MakeEntry ( "", "", " \\\n\t\t", "", "\$(SCM_MAKEFILE)" );
10183
            $me->AddDependancy("\$(SCM_MAKEFILE)");
-
 
10184
            $me->RecipePrefix   ('$(AA_PRE)');
-
 
10185
            $me->AddRecipe("\$(echo) '[$i->{'text'}] generating..'");
-
 
10186
            $me->RecipePrefix   ('$(XX_PRE)');
-
 
10187
            $me->AddRecipe("\$(call RmFiles,generate_gen_$gen_tag)") if ( $i->{'predelete'}  );
-
 
10188
 
-
 
10189
            if ($i->{'isautf'}) {
-
 
10190
                my $filter = $i->{'utfformat'} || 'internal';
-
 
10191
                my $uargs = join(' ', map { '-arg='. $_ } @{$i->{'utfargs' }});
-
 
10192
                my $tdir = $i->{'utfdir'} || '.';
-
 
10193
                $me->AddShellRecipe (  [
-
 
10194
                                       "PATH=.\\$::ScmPathSep\$(BINDIR_LOCAL_PATH)\\$::ScmPathSep\$\$PATH",
-
 
10195
                                       "\$(call $genName,)"
-
 
10196
                                       ] , 
-
 
10197
                                       'echo $$? > ${INTERFACEDIR}/utf.$${GBE_UTFUID}.rc',
-
 
10198
                                       "\$(call UtfPostProcess,$filter,$tdir,$uargs)" );
10095
 
10199
 
10096
            MakePrint ("\n\t" . "\@\$(echo) '[$i->{'text'}] generating..'" );
-
 
10097
            if ( $i->{'predelete'}  )
-
 
10098
            {
10200
            } else {
10099
                MakePrint ("\n\t" . "\$(XX_PRE)\$(call RmFiles,generate_gen_$gen_tag)" );
10201
                $me->AddRecipe("\$(call $genName,)");
10100
            }
10202
            }
10101
            MakePrint ("\n\t" . "\$(XX_PRE)\$(call generate_$gen_tag,)" );
-
 
10102
        }
10203
        }
-
 
10204
        $me->Print();
10103
 
10205
 
10104
        #
10206
        #
10105
        #   Generate 'clean' rules and recipes
10207
        #   Generate 'clean' rules and recipes
10106
        #
10208
        #
10107
        if ( $i->{'clean'} )
10209
        if ( $i->{'clean'} )
10108
        {
10210
        {
10109
            MakePrint ("\n\nPHONY: clean_generate_$gen_tag" );
10211
            my $me = MakeEntry::New( *MAKEFILE, "clean_$genName", '--Phony' );
10110
            MakePrint ("\nclean_generate_$gen_tag $recipeCleanName:" );
10212
            $me->AddName($recipeCleanName) if $recipeCleanName;
-
 
10213
            $me->RecipePrefix('$(XX_PRE)');
10111
            MakePrint ("\n\t" . "\$(XX_PRE)-\$(call generate_$gen_tag,$i->{'clean'})" );
10214
            $me->AddRecipe("-\$(call $genName,$i->{'clean'})");
-
 
10215
            $me->Print();
10112
        }
10216
        }
10113
 
10217
 
10114
        #
10218
        #
10115
        #   Define a function to contain the body of the generation call
10219
        #   Define a function to contain the body of the generation call
10116
        #   The first argument will be a 'clean' argument
10220
        #   The first argument will be a 'clean' argument
10117
        #
10221
        #
10118
        MakePrint ("\n\ndefine generate_$gen_tag" );
10222
        my $md = MakeEntry::New( *MAKEFILE, $genName, '--Define' );
10119
        if ( $i->{'shell'} )
10223
        if ( $i->{'shell'} ) {
10120
        {
-
 
10121
            MakeEntry ("\n\t(" , "\\\n\t)\n", " \\\n\t", ";" , @{$i->{'toolargs'}} );
10224
            $md->AddShellRecipe( @{$i->{'toolargs'}} );
10122
        }
10225
 
10123
        else
10226
        } else {
10124
        {
-
 
10125
            MakeEntry ("\n\t" . $i->{'tool'} . ' $1', "\n", " \\\n\t\t", "" , @{$i->{'toolargs'}} );
10227
            $md->AddOneRecipe( $i->{'tool'} . ' $1' ,@{$i->{'toolargs'}} );
10126
        }
10228
        }
-
 
10229
        $md->Print();
-
 
10230
    }
-
 
10231
 
-
 
10232
    if ($generateMustAddTestPostProcess)
-
 
10233
    {
-
 
10234
        #
-
 
10235
        #   Define the UTF post processing
-
 
10236
        #   Define amacro thattakes two arguments
-
 
10237
        #       $1 - name of the filter
-
 
10238
        #       $2 - Directory to process
-
 
10239
        #       $3 - additional arguments
-
 
10240
        #
-
 
10241
 
-
 
10242
        #
-
 
10243
        #   Create the basic command line for 'jats_runutf'
-
 
10244
        #       Use the simplistic 'internal' filter unless the user has provided one
-
 
10245
        #
-
 
10246
        my @cmdline;
-
 
10247
        push @cmdline, '--';
-
 
10248
        push @cmdline, '$(VERBOSE_OPT)';
-
 
10249
        push @cmdline, '-filter=$1';
-
 
10250
        push @cmdline, '-root=$(GBE_ROOT_ABS)' ;
-
 
10251
        push @cmdline, '-dir=$2';
-
 
10252
        push @cmdline, '-target=$(GBE_PLATFORM)';
-
 
10253
        push @cmdline, '-pkgdir=$(PKGDIR)';
-
 
10254
        push @cmdline, '-local=$(LOCALDIR)';
-
 
10255
        push @cmdline, '-interface=$(INTERFACEDIR)';
-
 
10256
        push @cmdline, '-rcfile=${INTERFACEDIR}/utf.$${GBE_UTFUID}.rc';
-
 
10257
        push @cmdline, '$3';
-
 
10258
 
-
 
10259
        #
-
 
10260
        #   Insert commands to post process the test results according to the specified formatter
-
 
10261
        #
-
 
10262
        my $me = MakeEntry::New( *MAKEFILE, 'UtfPostProcess', '--Define' );
-
 
10263
        $me->AddComment    ('Post Process a UNIT TEST');
-
 
10264
        $me->AddComment    ('  arg1 - utffile name');
-
 
10265
        $me->AddComment    ('  arg2 - Directory to start scan for Unit Test Results');
-
 
10266
        $me->AddComment    ('  arg3 - Additional arguments to the filter');
-
 
10267
        $me->SectionIfDef  ('UTF_POSTPROCESS');
-
 
10268
        $me->AddOneRecipe  ("\$(GBE_PERL) -Mjats_runutf -e processUtf", @cmdline );
10127
        MakePrint ("endef\n\n" );
10269
        $me->Print();
10128
    }
10270
    }
10129
 
10271
 
-
 
10272
 
10130
#-------------------------------------------------------------------------------
10273
#-------------------------------------------------------------------------------
10131
#   Toolset Post Processing
10274
#   Toolset Post Processing
10132
#   Allow the toolset to perform any post processing, before we finally write
10275
#   Allow the toolset to perform any post processing, before we finally write
10133
#   out any definitions.
10276
#   out any definitions.
10134
#
10277
#
Line 10211... Line 10354...
10211
MakeDefEntry( "TOOLSETOBJS",          "=", \@TOOLSETOBJS )      if ( @TOOLSETOBJS );
10354
MakeDefEntry( "TOOLSETOBJS",          "=", \@TOOLSETOBJS )      if ( @TOOLSETOBJS );
10212
MakeDefEntry( "TOOLSETLIBS",          "=", \@TOOLSETLIBS )      if ( @TOOLSETLIBS );
10355
MakeDefEntry( "TOOLSETLIBS",          "=", \@TOOLSETLIBS )      if ( @TOOLSETLIBS );
10213
MakeDefEntry( "TOOLSETPROGS",         "=", \@TOOLSETPROGS )     if ( @TOOLSETPROGS );
10356
MakeDefEntry( "TOOLSETPROGS",         "=", \@TOOLSETPROGS )     if ( @TOOLSETPROGS );
10214
MakeDefEntry( "TOOLSETDIRS",          "=", \@TOOLSETDIRS )      if ( @TOOLSETDIRS );
10357
MakeDefEntry( "TOOLSETDIRS",          "=", \@TOOLSETDIRS )      if ( @TOOLSETDIRS );
10215
MakeDefEntry( "TOOLSETDIRTREES",      "=", \@TOOLSETDIRTREES )  if ( @TOOLSETDIRTREES );
10358
MakeDefEntry( "TOOLSETDIRTREES",      "=", \@TOOLSETDIRTREES )  if ( @TOOLSETDIRTREES );
-
 
10359
MakeDefEntry( "TOOLSETCLOBFILES",      "=", \@CLOBBERFILES )    if ( @CLOBBERFILES );
-
 
10360
MakeDefEntry( "TOOLSETCLOBDIRS",       "=", \@CLOBBERDIRS )      if ( @CLOBBERDIRS );
-
 
10361
 
10216
 
10362
 
10217
#--------- Determine compiler flag groups to use ----------------------------
10363
#--------- Determine compiler flag groups to use ----------------------------
10218
#
10364
#
10219
#   Allows the compiler options to be controlled for both the debug and
10365
#   Allows the compiler options to be controlled for both the debug and
10220
#   the production builds. Allows control over
10366
#   the production builds. Allows control over
Line 10500... Line 10646...
10500
#   Dependencies for 'ungenerate'
10646
#   Dependencies for 'ungenerate'
10501
#
10647
#
10502
my @ungeneratedep;
10648
my @ungeneratedep;
10503
push @ungeneratedep, '$(GENERATEDCLEAN)';
10649
push @ungeneratedep, '$(GENERATEDCLEAN)';
10504
 
10650
 
-
 
10651
#
-
 
10652
#   Actions for clobberfiles
-
 
10653
#   
-
 
10654
my @clobberfiles;
-
 
10655
push @clobberfiles, RmFilesCmd('TOOLSETCLOBFILES') if (@CLOBBERFILES); 
-
 
10656
 
10505
#-------------------------------------------------------------------------------
10657
#-------------------------------------------------------------------------------
10506
# Function        : PrintPhonyRule
10658
# Function        : PrintPhonyRule
10507
#
10659
#
10508
# Description     : Helper function to print some internal phony makefile targets
10660
# Description     : Helper function to print some internal phony makefile targets
10509
#                   These are used to hold the basic makefile together
10661
#                   These are used to hold the basic makefile together
Line 10558... Line 10710...
10558
PrintPhonyRule ('make_test',            "make_script @testprogdep" );
10710
PrintPhonyRule ('make_test',            "make_script @testprogdep" );
10559
PrintPhonyRule ('unmake_test',          "unmake_script", \@untestprogact );
10711
PrintPhonyRule ('unmake_test',          "unmake_script", \@untestprogact );
10560
PrintPhonyRule ('preprocess_tests',     '$(AUTOUNITTESTS_PRE)' );
10712
PrintPhonyRule ('preprocess_tests',     '$(AUTOUNITTESTS_PRE)' );
10561
PrintPhonyRule ('postprocess_tests',    '$(AUTOUNITTESTS_POST)' );
10713
PrintPhonyRule ('postprocess_tests',    '$(AUTOUNITTESTS_POST)' );
10562
PrintPhonyRule ('collate_test_results', '$(AUTOUNITTESTS_COLLATE)' );
10714
PrintPhonyRule ('collate_test_results', '$(AUTOUNITTESTS_COLLATE)' );
-
 
10715
PrintPhonyRule ('clobberfiles',         "",\@clobberfiles );
10563
 
10716
 
10564
#-------------------------------------------------------------------------------
10717
#-------------------------------------------------------------------------------
10565
#   Package and Installation Summary
10718
#   Package and Installation Summary
10566
#
10719
#
10567
    MakeHeader ("Package and Installation Summary");
10720
    MakeHeader ("Package and Installation Summary");
Line 10674... Line 10827...
10674
        MkdirRule( $path, '', '--NoCreate' , '--RemoveAll');
10827
        MkdirRule( $path, '', '--NoCreate' , '--RemoveAll');
10675
    }
10828
    }
10676
    
10829
    
10677
    MakeHeader ("Subdir deletion");
10830
    MakeHeader ("Subdir deletion");
10678
    RmdirRules();
10831
    RmdirRules();
-
 
10832
    ClobberDirsRule();
10679
    MakeNewLine();
10833
    MakeNewLine();
10680
 
10834
 
10681
#--------- Toolset Rules -------------------------------------------------------
10835
#--------- Toolset Rules -------------------------------------------------------
10682
    MakeHeader ("Toolset Rules");
10836
    MakeHeader ("Toolset Rules");
10683
    MakePrintList ( \@TOOLSETRULES );
10837
    MakePrintList ( \@TOOLSETRULES );
Line 10948... Line 11102...
10948
        $txt = '';
11102
        $txt = '';
10949
    }
11103
    }
10950
}
11104
}
10951
 
11105
 
10952
#-------------------------------------------------------------------------------
11106
#-------------------------------------------------------------------------------
-
 
11107
# Function        : ClobberDirsRule 
-
 
11108
#
-
 
11109
# Description     : Create the body of a recipe to delete the directories that
-
 
11110
#                   will be removed in a clobber
-
 
11111
#
-
 
11112
#                   Use JatsFileUtil rather than shell script
-
 
11113
#                       Faster under windows (and others)
-
 
11114
#                       Solved long pathname issues
-
 
11115
#                       Simpler to use and control
-
 
11116
#
-
 
11117
# Inputs          : @CLOBBERDIRS
-
 
11118
#
-
 
11119
# Returns         : Nothing.
-
 
11120
#                   Prints to the makefile
-
 
11121
#
-
 
11122
sub ClobberDirsRule
-
 
11123
{
-
 
11124
    MakeNewLine();
-
 
11125
    MakePrint( ".PHONY:\tclobberdirs\n" );
-
 
11126
    MakePrint( "clobberdirs:\n" );
-
 
11127
 
-
 
11128
    #
-
 
11129
    #   Determine the list of directories to delete
-
 
11130
    #   Sort such that subdirs are deleted first
-
 
11131
    #
-
 
11132
    my $txt = 'Removing toolset directories';
-
 
11133
    foreach my $subdir ( reverse sort @CLOBBERDIRS )
-
 
11134
    {
-
 
11135
        my @args = $subdir;
-
 
11136
        MakePrint ("\t-\$(AA_PRE)JatsFileUtil ", QuoteArray( 'T0', $txt, @args ), "\n");
-
 
11137
        $txt = '';
-
 
11138
    }
-
 
11139
}
-
 
11140
 
-
 
11141
#-------------------------------------------------------------------------------
10953
# Function        : CreateMkdirRules
11142
# Function        : CreateMkdirRules
10954
#
11143
#
10955
# Description     : Create Rules to make dirs at runtime
11144
# Description     : Create Rules to make dirs at runtime
10956
#                   This function is called to instantiate those entries
11145
#                   This function is called to instantiate those entries
10957
#                   That have been requested before the makefile has has
11146
#                   That have been requested before the makefile has has