VirtualBox

Changeset 2489 in kBuild


Ignore:
Timestamp:
Jul 22, 2011 11:12:06 AM (14 years ago)
Author:
bird
Message:

kmk: added $(firstdefined ) and $(lastdefined ).

Location:
trunk/src/kmk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/Makefile.am

    r2266 r2489  
    129129        -DCONFIG_WITHOUT_THREADS \
    130130        -DCONFIG_WITH_VALUE_LENGTH \
     131        \
     132        -DCONFIG_WITH_ABSPATHEX \
     133        -DCONFIG_WITH_COMMANDS_FUNC \
     134        -DCONFIG_WITH_DATE \
     135        -DCONFIG_WITH_DEFINED_FUNCTIONS \
     136        -DCONFIG_WITH_EVALPLUS \
     137        -DCONFIG_WITH_FILE_SIZE \
     138        -DCONFIG_WITH_LOOP_FUNCTIONS \
     139        -DCONFIG_WITH_MATH \
     140        -DCONFIG_WITH_NANOTS \
     141        -DCONFIG_WITH_ROOT_FUNC \
    131142        -DCONFIG_WITH_RSORT \
    132         -DCONFIG_WITH_ABSPATHEX \
     143        -DCONFIG_WITH_STACK \
     144        -DCONFIG_WITH_STRING_FUNCTIONS \
     145        -DCONFIG_WITH_WHICH \
     146        -DCONFIG_WITH_XARGS \
     147        \
    133148        -DCONFIG_WITH_COMPARE \
    134         -DCONFIG_WITH_STACK \
    135         -DCONFIG_WITH_MATH \
    136         -DCONFIG_WITH_XARGS \
    137         -DCONFIG_WITH_NANOTS \
    138149        -DCONFIG_WITH_SET_CONDITIONALS \
    139150        -DCONFIG_WITH_IF_CONDITIONALS \
    140         -DCONFIG_WITH_DATE \
    141         -DCONFIG_WITH_FILE_SIZE \
    142         -DCONFIG_WITH_WHICH \
    143151        -DCONFIG_WITH_PRINTF \
    144         -DCONFIG_WITH_EVALPLUS \
    145152        -DCONFIG_WITH_MINIMAL_STATS \
    146         -DCONFIG_WITH_COMMANDS_FUNC \
    147         -DCONFIG_WITH_STRING_FUNCTIONS \
    148         -DCONFIG_WITH_LOOP_FUNCTIONS \
    149         -DCONFIG_WITH_ROOT_FUNC \
    150153        -DCONFIG_PRETTY_COMMAND_PRINTING \
    151154        -DCONFIG_WITH_PRINT_STATS_SWITCH \
  • trunk/src/kmk/Makefile.kmk

    r2462 r2489  
    154154        CONFIG_NO_DEFAULT_SUFFIX_RULES \
    155155        CONFIG_NO_DEFAULT_VARIABLES \
     156        \
     157        CONFIG_WITH_ABSPATHEX \
     158        CONFIG_WITH_COMMANDS_FUNC \
     159        CONFIG_WITH_DATE \
     160        CONFIG_WITH_DEFINED_FUNCTIONS \
     161        CONFIG_WITH_EVALPLUS \
     162        CONFIG_WITH_FILE_SIZE \
     163        CONFIG_WITH_LOOP_FUNCTIONS \
     164        CONFIG_WITH_MATH \
     165        CONFIG_WITH_NANOTS \
     166        CONFIG_WITH_ROOT_FUNC \
     167        CONFIG_WITH_RSORT \
     168        CONFIG_WITH_STACK \
     169        CONFIG_WITH_STRING_FUNCTIONS \
     170        CONFIG_WITH_WHICH \
     171        CONFIG_WITH_XARGS \
     172        \
    156173        CONFIG_WITH_EXTENDED_NOTPARALLEL \
    157174        CONFIG_WITH_INCLUDEDEP \
    158175        CONFIG_WITH_VALUE_LENGTH \
    159         CONFIG_WITH_RSORT \
    160         CONFIG_WITH_ABSPATHEX \
    161176        CONFIG_WITH_COMPARE \
    162         CONFIG_WITH_STACK \
    163         CONFIG_WITH_MATH \
    164         CONFIG_WITH_XARGS \
    165         CONFIG_WITH_NANOTS \
    166177        CONFIG_WITH_SET_CONDITIONALS \
    167178        CONFIG_WITH_IF_CONDITIONALS \
    168         CONFIG_WITH_DATE \
    169         CONFIG_WITH_FILE_SIZE \
    170         CONFIG_WITH_WHICH \
    171179        CONFIG_WITH_PRINTF \
    172         CONFIG_WITH_EVALPLUS \
    173180        CONFIG_WITH_MINIMAL_STATS \
    174         CONFIG_WITH_COMMANDS_FUNC \
    175         CONFIG_WITH_PRINTF \
    176         CONFIG_WITH_STRING_FUNCTIONS \
    177         CONFIG_WITH_LOOP_FUNCTIONS \
    178         CONFIG_WITH_ROOT_FUNC \
     181        \
    179182        CONFIG_PRETTY_COMMAND_PRINTING \
    180183        CONFIG_WITH_PRINT_STATS_SWITCH \
     
    219222        version.c \
    220223        vpath.c \
    221         remote-stub.c 
     224        remote-stub.c
    222225
    223226kmk_DEFS.freebsd.x86 = CONFIG_WITHOUT_THREADS
     
    408411        CONFIG_WITH_TOUPPER_TOLOWER \
    409412        EXPERIMENTAL
    410 #       NO_ARCHIVES 
     413#       NO_ARCHIVES
    411414
    412415kmk_gmake_SOURCES = \
  • trunk/src/kmk/function.c

    r2462 r2489  
    10211021}
    10221022
     1023#ifdef CONFIG_WITH_DEFINED_FUNCTIONS
     1024
     1025/* Used by func_firstdefined and func_lastdefined to parse the optional last
     1026   argument.  Returns 0 if the variable name is to be returned and 1 if it's
     1027   the variable value value. */
     1028static int
     1029parse_value_name_argument (const char *arg1, const char *funcname)
     1030{
     1031  const char *end;
     1032  int rc;
     1033
     1034  if (arg1 == NULL)
     1035    return 0;
     1036
     1037  end = strchr (arg1, '\0');
     1038  strip_whitespace (&arg1, &end);
     1039
     1040  if (!strncmp (arg1, "name", end - arg1))
     1041    rc = 0;
     1042  else if (!strncmp (arg1, "value", end - arg1))
     1043    rc = 1;
     1044  else
     1045    {
     1046#if 0 /* FIXME: later */
     1047      /* check the expanded form */
     1048      char *exp = expand_argument (arg1, strchr (arg1, '\0'));
     1049      arg1 = exp;
     1050      end = strchr (arg1, '\0');
     1051      strip_whitespace (&arg1, &end);
     1052
     1053      if (!strncmp (arg1, "name", end - arg1))
     1054        rc = 0;
     1055      else if (!strncmp (arg1, "value", end - arg1))
     1056        rc = 1;
     1057      else
     1058#endif
     1059        fatal (*expanding_var,
     1060               _("second argument to `%s' function must be `name' or `value', not `%s'"),
     1061               funcname, exp);
     1062#if 0
     1063      free (exp);
     1064#endif
     1065    }
     1066
     1067  return rc;
     1068}
     1069
     1070/* Given a list of variable names (ARGV[0]), returned the first variable which
     1071   is defined (i.e. value is not empty).  ARGV[1] indicates whether to return
     1072   the variable name or its value. */
     1073static char *
     1074func_firstdefined (char *o, char **argv, const char *funcname)
     1075{
     1076  unsigned int i;
     1077  const char *words = argv[0];    /* Use a temp variable for find_next_token */
     1078  const char *p;
     1079  int ret_value = parse_value_name_argument (argv[1], funcname);
     1080
     1081  /* FIXME: Optimize by not expanding the arguments, but instead expand them
     1082     one by one here.  This will require a find_next_token variant which
     1083     takes `$(' and `)' into account. */
     1084  while ((p = find_next_token (&words, &i)) != NULL)
     1085    {
     1086      struct variable *v = lookup_variable (p, i);
     1087      if (v && v->value_length)
     1088        {
     1089          if (ret_value)
     1090            variable_expand_string_2 (o, v->value, v->value_length, &o);
     1091          else
     1092            o = variable_buffer_output (o, p, i);
     1093          break;
     1094        }
     1095    }
     1096
     1097  return o;
     1098}
     1099
     1100/* Given a list of variable names (ARGV[0]), returned the last variable which
     1101   is defined (i.e. value is not empty).  ARGV[1] indicates whether to return
     1102   the variable name or its value. */
     1103static char *
     1104func_lastdefined (char *o, char **argv, const char *funcname)
     1105{
     1106  struct variable *last_v = NULL;
     1107  unsigned int i;
     1108  const char *words = argv[0];    /* Use a temp variable for find_next_token */
     1109  const char *p;
     1110  int ret_value = parse_value_name_argument (argv[1], funcname);
     1111
     1112  /* FIXME: Optimize this.  Walk from the end on unexpanded arguments. */
     1113  while ((p = find_next_token (&words, &i)) != NULL)
     1114    {
     1115      struct variable *v = lookup_variable (p, i);
     1116      if (v && v->value_length)
     1117        {
     1118          last_v = v;
     1119          break;
     1120        }
     1121    }
     1122
     1123  if (last_v != NULL)
     1124    {
     1125      if (ret_value)
     1126        variable_expand_string_2 (o, last_v->value, last_v->value_length, &o);
     1127      else
     1128        o = variable_buffer_output (o, last_v->name, last_v->length);
     1129    }
     1130  return o;
     1131}
     1132
     1133#endif /* CONFIG_WITH_DEFINED_FUNCTIONS */
    10231134
    10241135static char *
     
    51545265  { STRING_SIZE_TUPLE("filter-out"),    2,  2,  1,  func_filter_filterout},
    51555266  { STRING_SIZE_TUPLE("findstring"),    2,  2,  1,  func_findstring},
     5267#ifdef CONFIG_WITH_DEFINED_FUNCTIONS
     5268  { STRING_SIZE_TUPLE("firstdefined"),  0,  2,  1,  func_firstdefined},
     5269#endif
    51565270  { STRING_SIZE_TUPLE("firstword"),     0,  1,  1,  func_firstword},
    51575271  { STRING_SIZE_TUPLE("flavor"),        0,  1,  1,  func_flavor},
    51585272  { STRING_SIZE_TUPLE("join"),          2,  2,  1,  func_join},
     5273#ifdef CONFIG_WITH_DEFINED_FUNCTIONS
     5274  { STRING_SIZE_TUPLE("lastdefined"),   0,  2,  1,  func_lastdefined},
     5275#endif
    51595276  { STRING_SIZE_TUPLE("lastword"),      0,  1,  1,  func_lastword},
    51605277  { STRING_SIZE_TUPLE("patsubst"),      3,  3,  1,  func_patsubst},
  • trunk/src/kmk/variable.c

    r2480 r2489  
    12971297  && defined (CONFIG_WITH_ROOT_FUNC) \
    12981298  && defined (CONFIG_WITH_STRING_FUNCTIONS) \
     1299  && defined (CONFIG_WITH_DEFINED_FUNCTIONS) \
    12991300  && defined (KMK_HELPERS)
    13001301  (void) define_variable ("KMK_FEATURES", 12,
     
    13241325                          " length insert pos lastpos substr translate"
    13251326                          " kb-src-tool kb-obj-base kb-obj-suff kb-src-prop kb-src-one kb-exp-tmpl "
     1327                          " firstdefined lastdefined "
    13261328                          , o_default, 0);
    13271329# else /* MSC can't deal with strings mixed with #if/#endif, thus the slow way. */
     
    13971399  strcat (buf, " length insert pos lastpos substr translate");
    13981400#  endif
     1401#  if defined (CONFIG_WITH_DEFINED_FUNCTIONS)
     1402  strcat (buf, " firstdefined lastdefined");
     1403#  endif
    13991404#  if defined (KMK_HELPERS)
    14001405  strcat (buf, " kb-src-tool kb-obj-base kb-obj-suff kb-src-prop kb-src-one kb-exp-tmpl");
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette