Changeset 729 for trunk/src/gmake


Ignore:
Timestamp:
Dec 17, 2006, 3:12:07 AM (19 years ago)
Author:
bird
Message:

The target _PATH property should be working now.

Location:
trunk/src/gmake
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gmake/function.c

    r725 r729  
    19331933/* Return the absolute name of file NAME which does not contain any `.',
    19341934   `..' components nor any repeated path separators ('/').   */
    1935 
    1936 static char *
     1935#ifdef KMK
     1936char *
     1937#else
     1938static char *
     1939#endif
    19371940abspath (const char *name, char *apath)
    19381941{
     
    24542457  { STRING_SIZE_TUPLE("kb-obj-base"),   1,  1,  0,  func_kbuild_object_base},
    24552458  { STRING_SIZE_TUPLE("kb-obj-suff"),   1,  1,  0,  func_kbuild_object_suffix},
    2456   { STRING_SIZE_TUPLE("kb-src-prop"),   3,  3,  0,  func_kbuild_source_prop},
    2457   { STRING_SIZE_TUPLE("kb-src-one"),    1,  1,  0,  func_kbuild_source_one},
     2459  { STRING_SIZE_TUPLE("kb-src-prop"),   4,  4,  0,  func_kbuild_source_prop},
     2460  { STRING_SIZE_TUPLE("kb-src-one"),    0,  1,  0,  func_kbuild_source_one},
    24582461#endif
    24592462};
  • trunk/src/gmake/kbuild.c

    r725 r729  
    4343#endif
    4444
     45/* function.c */
     46char * abspath(const char *name, char *apath);
     47
     48/**
     49 * Applies the specified default path to any relative paths in *ppsz.
     50 *
     51 * @param   pDefPath        The default path.
     52 * @param   ppsz            Pointer to the string pointer. If we expand anything, *ppsz
     53 *                          will be replaced and the caller is responsible for calling free() on it.
     54 * @param   pcch            IN: *pcch contains the current string length.
     55 *                          OUT: *pcch contains the new string length.
     56 * @param   pcchAlloc       *pcchAlloc contains the length allocated for the string. Can be NULL.
     57 * @param   fCanFree        Whether *ppsz should be freed when we replace it.
     58 */
     59static void
     60kbuild_apply_defpath(struct variable *pDefPath, char **ppsz, int *pcch, int *pcchAlloc, int fCanFree)
     61{
     62    char *pszIterator;
     63    const char *pszInCur;
     64    unsigned int cchInCur;
     65    unsigned int cRelativePaths;
     66
     67    /*
     68     * The first pass, count the relative paths.
     69     */
     70    cRelativePaths = 0;
     71    pszIterator = *ppsz;
     72    while ((pszInCur = find_next_token(&pszIterator, &cchInCur)))
     73    {
     74        /* is relative? */
     75#ifdef HAVE_DOS_PATHS
     76        if (pszInCur[0] != '/' && pszInCur[0] != '\\' && (cchInCur < 2 || pszInCur[1] != ':'))
     77#else
     78        if (pszInCur[0] != '/')
     79#endif
     80            cRelativePaths++;
     81    }
     82
     83    /*
     84     * The second pass construct the new string.
     85     */
     86    if (cRelativePaths)
     87    {
     88        const size_t cchOut = *pcch + cRelativePaths * (pDefPath->value_length + 1) + 1;
     89        char *pszOut = xmalloc(cchOut);
     90        char *pszOutCur = pszOut;
     91        const char *pszInNextCopy = *ppsz;
     92
     93        cRelativePaths = 0;
     94        pszIterator = *ppsz;
     95        while ((pszInCur = find_next_token(&pszIterator, &cchInCur)))
     96        {
     97            /* is relative? */
     98#ifdef HAVE_DOS_PATHS
     99            if (pszInCur[0] != '/' && pszInCur[0] != '\\' && (cchInCur < 2 || pszInCur[1] != ':'))
     100#else
     101            if (pszInCur[0] != '/')
     102#endif
     103            {
     104                PATH_VAR(szAbsPathIn);
     105                PATH_VAR(szAbsPathOut);
     106
     107                if (pDefPath->value_length + cchInCur + 1 >= GET_PATH_MAX)
     108                    continue;
     109
     110                /* Create the abspath input. */
     111                memcpy(szAbsPathIn, pDefPath->value, pDefPath->value_length);
     112                szAbsPathIn[pDefPath->value_length] = '/';
     113                memcpy(&szAbsPathIn[pDefPath->value_length + 1], pszInCur, cchInCur);
     114                szAbsPathIn[pDefPath->value_length + 1 + cchInCur] = '\0';
     115
     116                if (abspath(szAbsPathIn, szAbsPathOut) != NULL)
     117                {
     118                    const size_t cchAbsPathOut = strlen(szAbsPathOut);
     119                    assert(cchAbsPathOut <= pDefPath->value_length + 1 + cchInCur);
     120
     121                    /* copy leading input */
     122                    if (pszInCur != pszInNextCopy)
     123                    {
     124                        const size_t cchCopy = pszInCur - pszInNextCopy;
     125                        memcpy(pszOutCur, pszInNextCopy, cchCopy);
     126                        pszOutCur += cchCopy;
     127                    }
     128                    pszInNextCopy = pszInCur + cchInCur;
     129
     130                    /* copy out the abspath. */
     131                    memcpy(pszOutCur, szAbsPathOut, cchAbsPathOut);
     132                    pszOutCur += cchAbsPathOut;
     133                }
     134            }
     135        }
     136        /* the final copy (includes the nil). */
     137        cchInCur = *ppsz + *pcch - pszInNextCopy;
     138        memcpy(pszOutCur, pszInNextCopy, cchInCur);
     139        pszOutCur += cchInCur;
     140        *pszOutCur = '\0';
     141        assert((size_t)(pszOutCur - pszOut) < cchOut);
     142
     143        /* set return values */
     144        if (fCanFree)
     145            free(*ppsz);
     146        *ppsz = pszOut;
     147        *pcch = pszOutCur - pszOut;
     148        if (pcchAlloc)
     149            *pcchAlloc = cchOut;
     150    }
     151}
     152
    45153
    46154/**
     
    157265}
    158266
     267/**
     268 * Looks up a variable and applies default a path to all relative paths.
     269 * The value_length field is valid upon successful return.
     270 *
     271 * @returns Pointer to the variable. NULL if not found.
     272 * @param   pDefPath    The default path.
     273 * @param   pszName     The variable name.
     274 */
     275static struct variable *
     276kbuild_lookup_variable_defpath(struct variable *pDefPath, const char *pszName)
     277{
     278    struct variable *pVar = kbuild_lookup_variable(pszName);
     279    if (pVar && pDefPath)
     280        kbuild_apply_defpath(pDefPath, &pVar->value, &pVar->value_length, &pVar->value_alloc_len, 1);
     281    return pVar;
     282}
     283
    159284/** Same as kbuild_lookup_variable except that a '%s' in the name string
    160285 * will be substituted with the values of the variables in the va list.  */
    161286static struct variable *
    162 kbuild_lookup_variable_fmt_va(const char *pszNameFmt, va_list va)
     287kbuild_lookup_variable_fmt_va(struct variable *pDefPath, const char *pszNameFmt, va_list va)
    163288{
    164289    va_list va2;
     
    206331    va_end(va2);
    207332
     333    if (pDefPath)
     334        return kbuild_lookup_variable_defpath(pDefPath, pszName);
    208335    return kbuild_lookup_variable(pszName);
    209336}
     
    212339 * will be substituted with the values of the variables in the ellipsis.  */
    213340static struct variable *
    214 kbuild_lookup_variable_fmt(const char *pszNameFmt, ...)
     341kbuild_lookup_variable_fmt(struct variable *pDefPath, const char *pszNameFmt, ...)
    215342{
    216343    struct variable *pVar;
    217344    va_list va;
    218345    va_start(va, pszNameFmt);
    219     pVar = kbuild_lookup_variable_fmt_va(pszNameFmt, va);
     346    pVar = kbuild_lookup_variable_fmt_va(pDefPath, pszNameFmt, va);
    220347    va_end(va);
    221348    return pVar;
     
    240367    PropF2.value_length = strlen(pszPropF2);
    241368
    242     if (    (pVar = kbuild_lookup_variable_fmt("%_%_%%.%.%",pTarget, pSource, pType, &PropF2, pBldTrg, pBldTrgArch))
    243         ||  (pVar = kbuild_lookup_variable_fmt("%_%_%%.%",  pTarget, pSource, pType, &PropF2, pBldTrg))
    244         ||  (pVar = kbuild_lookup_variable_fmt("%_%_%%",    pTarget, pSource, pType, &PropF2))
    245         ||  (pVar = kbuild_lookup_variable_fmt("%_%_%.%.%", pTarget, pSource, &PropF2, pBldTrg, pBldTrgArch))
    246         ||  (pVar = kbuild_lookup_variable_fmt("%_%_%.%",   pTarget, pSource, &PropF2, pBldTrg))
    247         ||  (pVar = kbuild_lookup_variable_fmt("%_%_%",     pTarget, pSource, &PropF2))
    248         ||  (pVar = kbuild_lookup_variable_fmt("%_%%.%.%",  pSource, pType, &PropF2, pBldTrg, pBldTrgArch))
    249         ||  (pVar = kbuild_lookup_variable_fmt("%_%%.%",    pSource, pType, &PropF2, pBldTrg))
    250         ||  (pVar = kbuild_lookup_variable_fmt("%_%%",      pSource, pType, &PropF2))
    251         ||  (pVar = kbuild_lookup_variable_fmt("%_%.%.%",   pSource, &PropF2, pBldTrg, pBldTrgArch))
    252         ||  (pVar = kbuild_lookup_variable_fmt("%_%.%",     pSource, &PropF2, pBldTrg))
    253         ||  (pVar = kbuild_lookup_variable_fmt("%_%",       pSource, &PropF2))
    254         ||  (pVar = kbuild_lookup_variable_fmt("%_%%.%.%",  pTarget, pType, &PropF2, pBldTrg, pBldTrgArch))
    255         ||  (pVar = kbuild_lookup_variable_fmt("%_%%.%",    pTarget, pType, &PropF2, pBldTrg))
    256         ||  (pVar = kbuild_lookup_variable_fmt("%_%%",      pTarget, pType, &PropF2))
    257         ||  (pVar = kbuild_lookup_variable_fmt("%_%.%.%",   pTarget, &PropF2, pBldTrg, pBldTrgArch))
    258         ||  (pVar = kbuild_lookup_variable_fmt("%_%.%",     pTarget, &PropF2, pBldTrg))
    259         ||  (pVar = kbuild_lookup_variable_fmt("%_%",       pTarget, &PropF2))
    260 
    261         ||  (pTool && (pVar = kbuild_lookup_variable_fmt("TOOL_%_%%.%.%",   pTool, pType, &PropF2, pBldTrg, pBldTrgArch)))
    262         ||  (pTool && (pVar = kbuild_lookup_variable_fmt("TOOL_%_%%.%",     pTool, pType, &PropF2, pBldTrg)))
    263         ||  (pTool && (pVar = kbuild_lookup_variable_fmt("TOOL_%_%%",       pTool, pType, &PropF2)))
    264         ||  (pTool && (pVar = kbuild_lookup_variable_fmt("TOOL_%_%.%.%",    pTool, &PropF2, pBldTrg, pBldTrgArch)))
    265         ||  (pTool && (pVar = kbuild_lookup_variable_fmt("TOOL_%_%.%",      pTool, &PropF2, pBldTrg)))
    266         ||  (pTool && (pVar = kbuild_lookup_variable_fmt("TOOL_%_%",        pTool, &PropF2)))
    267 
    268         ||  (pVar = kbuild_lookup_variable_fmt("%%.%.%",    pType, &PropF1, pBldTrg, pBldTrgArch))
    269         ||  (pVar = kbuild_lookup_variable_fmt("%%.%",      pType, &PropF1, pBldTrg))
    270         ||  (pVar = kbuild_lookup_variable_fmt("%%",        pType, &PropF1))
    271         ||  (pVar = kbuild_lookup_variable_fmt("%.%.%",     &PropF1, pBldTrg, pBldTrgArch))
    272         ||  (pVar = kbuild_lookup_variable_fmt("%.%",       &PropF1, pBldTrg))
     369    if (    (pVar = kbuild_lookup_variable_fmt(NULL, "%_%_%%.%.%",pTarget, pSource, pType, &PropF2, pBldTrg, pBldTrgArch))
     370        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%_%%.%",  pTarget, pSource, pType, &PropF2, pBldTrg))
     371        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%_%%",    pTarget, pSource, pType, &PropF2))
     372        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%_%.%.%", pTarget, pSource, &PropF2, pBldTrg, pBldTrgArch))
     373        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%_%.%",   pTarget, pSource, &PropF2, pBldTrg))
     374        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%_%",     pTarget, pSource, &PropF2))
     375        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%%.%.%",  pSource, pType, &PropF2, pBldTrg, pBldTrgArch))
     376        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%%.%",    pSource, pType, &PropF2, pBldTrg))
     377        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%%",      pSource, pType, &PropF2))
     378        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%.%.%",   pSource, &PropF2, pBldTrg, pBldTrgArch))
     379        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%.%",     pSource, &PropF2, pBldTrg))
     380        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%",       pSource, &PropF2))
     381        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%%.%.%",  pTarget, pType, &PropF2, pBldTrg, pBldTrgArch))
     382        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%%.%",    pTarget, pType, &PropF2, pBldTrg))
     383        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%%",      pTarget, pType, &PropF2))
     384        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%.%.%",   pTarget, &PropF2, pBldTrg, pBldTrgArch))
     385        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%.%",     pTarget, &PropF2, pBldTrg))
     386        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%_%",       pTarget, &PropF2))
     387
     388        ||  (pTool && (pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%%.%.%",   pTool, pType, &PropF2, pBldTrg, pBldTrgArch)))
     389        ||  (pTool && (pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%%.%",     pTool, pType, &PropF2, pBldTrg)))
     390        ||  (pTool && (pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%%",       pTool, pType, &PropF2)))
     391        ||  (pTool && (pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%.%.%",    pTool, &PropF2, pBldTrg, pBldTrgArch)))
     392        ||  (pTool && (pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%.%",      pTool, &PropF2, pBldTrg)))
     393        ||  (pTool && (pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%",        pTool, &PropF2)))
     394
     395        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%%.%.%",    pType, &PropF1, pBldTrg, pBldTrgArch))
     396        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%%.%",      pType, &PropF1, pBldTrg))
     397        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%%",        pType, &PropF1))
     398        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%.%.%",     &PropF1, pBldTrg, pBldTrgArch))
     399        ||  (pVar = kbuild_lookup_variable_fmt(NULL, "%.%",       &PropF1, pBldTrg))
    273400        ||  (pVar = kbuild_lookup_variable(pszPropF1))
    274401       )
     
    651778
    652779/* releases resources allocated in the kbuild_get_sdks. */
     780static void
    653781kbuild_put_sdks(struct kbuild_sdks *pSdks)
    654782{
     
    799927    {
    800928        struct variable    *pVar;
    801         size_t              cchExp;
     929        int                 cchExp;
    802930        char               *pszExp;
    803931    } *paVars;
     
    817945    iVar = 0;
    818946    /* the tool (lowest priority) */
    819     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%",      pTool, &Prop);
    820     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%.%",    pTool, &Prop, pBldType);
    821     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%.%",    pTool, &Prop, pBldTrg);
    822     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%.%",    pTool, &Prop, pBldTrgArch);
    823     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%.%.%",  pTool, &Prop, pBldTrg, pBldTrgArch);
    824     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%.%",    pTool, &Prop, pBldTrgCpu);
    825 
    826     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%%",     pTool, pType, &Prop);
    827     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%%.%",   pTool, pType, &Prop, pBldType);
    828     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%%.%",   pTool, pType, &Prop, pBldTrg);
    829     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%%.%",   pTool, pType, &Prop, pBldTrgArch);
    830     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%%.%.%", pTool, pType, &Prop, pBldTrg, pBldTrgArch);
    831     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("TOOL_%_%%.%",   pTool, pType, &Prop, pBldTrgCpu);
     947    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%",      pTool, &Prop);
     948    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%.%",    pTool, &Prop, pBldType);
     949    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%.%",    pTool, &Prop, pBldTrg);
     950    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%.%",    pTool, &Prop, pBldTrgArch);
     951    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%.%.%",  pTool, &Prop, pBldTrg, pBldTrgArch);
     952    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%.%",    pTool, &Prop, pBldTrgCpu);
     953
     954    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%%",     pTool, pType, &Prop);
     955    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%%.%",   pTool, pType, &Prop, pBldType);
     956    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%%.%",   pTool, pType, &Prop, pBldTrg);
     957    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%%.%",   pTool, pType, &Prop, pBldTrgArch);
     958    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%%.%.%", pTool, pType, &Prop, pBldTrg, pBldTrgArch);
     959    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "TOOL_%_%%.%",   pTool, pType, &Prop, pBldTrgCpu);
    832960
    833961    /* the global sdks */
     
    838966    {
    839967        struct variable *pSdk = &pSdks->pa[iSdk];
    840         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%",      pSdk, &Prop);
    841         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldType);
    842         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrg);
    843         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrgArch);
    844         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%.%",  pSdk, &Prop, pBldTrg, pBldTrgArch);
    845         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrgCpu);
    846 
    847         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%",     pSdk, pType, &Prop);
    848         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldType);
    849         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrg);
    850         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgArch);
    851         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%.%", pSdk, pType, &Prop, pBldTrg, pBldTrgArch);
    852         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgCpu);
     968        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%",      pSdk, &Prop);
     969        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldType);
     970        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrg);
     971        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrgArch);
     972        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%.%",  pSdk, &Prop, pBldTrg, pBldTrgArch);
     973        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrgCpu);
     974
     975        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%",     pSdk, pType, &Prop);
     976        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldType);
     977        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrg);
     978        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgArch);
     979        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%.%", pSdk, pType, &Prop, pBldTrg, pBldTrgArch);
     980        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgCpu);
    853981    }
    854982
    855983    /* the globals */
    856     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%",      &Prop);
    857     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%.%",    &Prop, pBldType);
    858     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%.%",    &Prop, pBldTrg);
    859     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%.%",    &Prop, pBldTrgArch);
    860     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%.%.%",  &Prop, pBldTrg, pBldTrgArch);
    861     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%.%",    &Prop, pBldTrgCpu);
    862 
    863     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%%",     pType, &Prop);
    864     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%%.%",   pType, &Prop, pBldType);
    865     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%%.%",   pType, &Prop, pBldTrg);
    866     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%%.%",   pType, &Prop, pBldTrgArch);
    867     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%%.%.%", pType, &Prop, pBldTrg, pBldTrgArch);
    868     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%%.%",   pType, &Prop, pBldTrgCpu);
     984    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%",      &Prop);
     985    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%.%",    &Prop, pBldType);
     986    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%.%",    &Prop, pBldTrg);
     987    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%.%",    &Prop, pBldTrgArch);
     988    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%.%.%",  &Prop, pBldTrg, pBldTrgArch);
     989    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%.%",    &Prop, pBldTrgCpu);
     990
     991    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%%",     pType, &Prop);
     992    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%%.%",   pType, &Prop, pBldType);
     993    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%%.%",   pType, &Prop, pBldTrg);
     994    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%%.%",   pType, &Prop, pBldTrgArch);
     995    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%%.%.%", pType, &Prop, pBldTrg, pBldTrgArch);
     996    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "%%.%",   pType, &Prop, pBldTrgCpu);
    869997
    870998    /* the target sdks */
     
    8751003    {
    8761004        struct variable *pSdk = &pSdks->pa[iSdk];
    877         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%",      pSdk, &Prop);
    878         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldType);
    879         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrg);
    880         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrgArch);
    881         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%.%",  pSdk, &Prop, pBldTrg, pBldTrgArch);
    882         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrgCpu);
    883 
    884         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%",     pSdk, pType, &Prop);
    885         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldType);
    886         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrg);
    887         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgArch);
    888         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%.%", pSdk, pType, &Prop, pBldTrg, pBldTrgArch);
    889         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgCpu);
     1005        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%",      pSdk, &Prop);
     1006        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldType);
     1007        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrg);
     1008        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrgArch);
     1009        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%.%",  pSdk, &Prop, pBldTrg, pBldTrgArch);
     1010        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrgCpu);
     1011
     1012        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%",     pSdk, pType, &Prop);
     1013        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldType);
     1014        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrg);
     1015        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgArch);
     1016        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%.%", pSdk, pType, &Prop, pBldTrg, pBldTrgArch);
     1017        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgCpu);
    8901018    }
    8911019
    8921020    /* the target */
    893     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%",      pTarget, &Prop);
    894     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%.%",    pTarget, &Prop, pBldType);
    895     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%.%",    pTarget, &Prop, pBldTrg);
    896     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%.%",    pTarget, &Prop, pBldTrgArch);
    897     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%.%.%",  pTarget, &Prop, pBldTrg, pBldTrgArch);
    898     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%.%",    pTarget, &Prop, pBldTrgCpu);
    899 
    900     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%",     pTarget, pType, &Prop);
    901     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%.%",   pTarget, pType, &Prop, pBldType);
    902     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%.%",   pTarget, pType, &Prop, pBldTrg);
    903     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%.%",   pTarget, pType, &Prop, pBldTrgArch);
    904     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%.%.%", pTarget, pType, &Prop, pBldTrg, pBldTrgArch);
    905     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%.%",   pTarget, pType, &Prop, pBldTrgCpu);
     1021    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%",      pTarget, &Prop);
     1022    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%.%",    pTarget, &Prop, pBldType);
     1023    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%.%",    pTarget, &Prop, pBldTrg);
     1024    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%.%",    pTarget, &Prop, pBldTrgArch);
     1025    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%.%.%",  pTarget, &Prop, pBldTrg, pBldTrgArch);
     1026    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%.%",    pTarget, &Prop, pBldTrgCpu);
     1027
     1028    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%",     pTarget, pType, &Prop);
     1029    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%.%",   pTarget, pType, &Prop, pBldType);
     1030    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%.%",   pTarget, pType, &Prop, pBldTrg);
     1031    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%.%",   pTarget, pType, &Prop, pBldTrgArch);
     1032    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%.%.%", pTarget, pType, &Prop, pBldTrg, pBldTrgArch);
     1033    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%.%",   pTarget, pType, &Prop, pBldTrgCpu);
    9061034
    9071035    /* the source sdks */
     
    9121040    {
    9131041        struct variable *pSdk = &pSdks->pa[iSdk];
    914         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%",      pSdk, &Prop);
    915         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldType);
    916         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrg);
    917         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrgArch);
    918         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%.%",  pSdk, &Prop, pBldTrg, pBldTrgArch);
    919         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrgCpu);
    920 
    921         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%",     pSdk, pType, &Prop);
    922         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldType);
    923         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrg);
    924         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgArch);
    925         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%.%", pSdk, pType, &Prop, pBldTrg, pBldTrgArch);
    926         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgCpu);
     1042        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%",      pSdk, &Prop);
     1043        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldType);
     1044        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrg);
     1045        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrgArch);
     1046        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%.%",  pSdk, &Prop, pBldTrg, pBldTrgArch);
     1047        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrgCpu);
     1048
     1049        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%",     pSdk, pType, &Prop);
     1050        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldType);
     1051        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrg);
     1052        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgArch);
     1053        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%.%", pSdk, pType, &Prop, pBldTrg, pBldTrgArch);
     1054        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgCpu);
    9271055    }
    9281056
    9291057    /* the source */
    930     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%",      pSource, &Prop);
    931     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%.%",    pSource, &Prop, pBldType);
    932     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%.%",    pSource, &Prop, pBldTrg);
    933     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%.%",    pSource, &Prop, pBldTrgArch);
    934     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%.%.%",  pSource, &Prop, pBldTrg, pBldTrgArch);
    935     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%.%",    pSource, &Prop, pBldTrgCpu);
    936 
    937     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%",     pSource, pType, &Prop);
    938     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%.%",   pSource, pType, &Prop, pBldType);
    939     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%.%",   pSource, pType, &Prop, pBldTrg);
    940     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%.%",   pSource, pType, &Prop, pBldTrgArch);
    941     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%.%.%", pSource, pType, &Prop, pBldTrg, pBldTrgArch);
    942     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%%.%",   pSource, pType, &Prop, pBldTrgCpu);
     1058    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%",      pSource, &Prop);
     1059    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%.%",    pSource, &Prop, pBldType);
     1060    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%.%",    pSource, &Prop, pBldTrg);
     1061    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%.%",    pSource, &Prop, pBldTrgArch);
     1062    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%.%.%",  pSource, &Prop, pBldTrg, pBldTrgArch);
     1063    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%.%",    pSource, &Prop, pBldTrgCpu);
     1064
     1065    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%",     pSource, pType, &Prop);
     1066    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%.%",   pSource, pType, &Prop, pBldType);
     1067    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%.%",   pSource, pType, &Prop, pBldTrg);
     1068    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%.%",   pSource, pType, &Prop, pBldTrgArch);
     1069    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%.%.%", pSource, pType, &Prop, pBldTrg, pBldTrgArch);
     1070    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%%.%",   pSource, pType, &Prop, pBldTrgCpu);
    9431071
    9441072
     
    9501078    {
    9511079        struct variable *pSdk = &pSdks->pa[iSdk];
    952         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%",      pSdk, &Prop);
    953         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldType);
    954         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrg);
    955         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrgArch);
    956         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%.%",  pSdk, &Prop, pBldTrg, pBldTrgArch);
    957         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%.%",    pSdk, &Prop, pBldTrgCpu);
    958 
    959         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%",     pSdk, pType, &Prop);
    960         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldType);
    961         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrg);
    962         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgArch);
    963         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%.%", pSdk, pType, &Prop, pBldTrg, pBldTrgArch);
    964         paVars[iVar++].pVar = kbuild_lookup_variable_fmt("SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgCpu);
     1080        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%",      pSdk, &Prop);
     1081        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldType);
     1082        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrg);
     1083        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrgArch);
     1084        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%.%",  pSdk, &Prop, pBldTrg, pBldTrgArch);
     1085        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%.%",    pSdk, &Prop, pBldTrgCpu);
     1086
     1087        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%",     pSdk, pType, &Prop);
     1088        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldType);
     1089        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrg);
     1090        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgArch);
     1091        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%.%", pSdk, pType, &Prop, pBldTrg, pBldTrgArch);
     1092        paVars[iVar++].pVar = kbuild_lookup_variable_fmt(NULL, "SDK_%_%%.%",   pSdk, pType, &Prop, pBldTrgCpu);
    9651093    }
    9661094
    9671095    /* the target + source */
    968     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%",      pTarget, pSource, &Prop);
    969     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%.%",    pTarget, pSource, &Prop, pBldType);
    970     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%.%",    pTarget, pSource, &Prop, pBldTrg);
    971     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%.%",    pTarget, pSource, &Prop, pBldTrgArch);
    972     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%.%.%",  pTarget, pSource, &Prop, pBldTrg, pBldTrgArch);
    973     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%.%",    pTarget, pSource, &Prop, pBldTrgCpu);
    974 
    975     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%%",     pTarget, pSource, pType, &Prop);
    976     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%%.%",   pTarget, pSource, pType, &Prop, pBldType);
    977     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%%.%",   pTarget, pSource, pType, &Prop, pBldTrg);
    978     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%%.%",   pTarget, pSource, pType, &Prop, pBldTrgArch);
    979     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%%.%.%", pTarget, pSource, pType, &Prop, pBldTrg, pBldTrgArch);
    980     paVars[iVar++].pVar = kbuild_lookup_variable_fmt("%_%_%%.%",   pTarget, pSource, pType, &Prop, pBldTrgCpu);
     1096    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%",      pTarget, pSource, &Prop);
     1097    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%.%",    pTarget, pSource, &Prop, pBldType);
     1098    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%.%",    pTarget, pSource, &Prop, pBldTrg);
     1099    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%.%",    pTarget, pSource, &Prop, pBldTrgArch);
     1100    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%.%.%",  pTarget, pSource, &Prop, pBldTrg, pBldTrgArch);
     1101    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%.%",    pTarget, pSource, &Prop, pBldTrgCpu);
     1102
     1103    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%%",     pTarget, pSource, pType, &Prop);
     1104    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%%.%",   pTarget, pSource, pType, &Prop, pBldType);
     1105    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%%.%",   pTarget, pSource, pType, &Prop, pBldTrg);
     1106    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%%.%",   pTarget, pSource, pType, &Prop, pBldTrgArch);
     1107    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%%.%.%", pTarget, pSource, pType, &Prop, pBldTrg, pBldTrgArch);
     1108    paVars[iVar++].pVar = kbuild_lookup_variable_fmt(pDefPath, "%_%_%%.%",   pTarget, pSource, pType, &Prop, pBldTrgCpu);
    9811109
    9821110    assert(cVars == iVar);
     
    10041132        }
    10051133        if (pDefPath)
    1006         {
    1007             /** @todo */
    1008         }
     1134            kbuild_apply_defpath(pDefPath, &paVars[iVar].pszExp, &paVars[iVar].cchExp, NULL,
     1135                                 paVars[iVar].pszExp != paVars[iVar].pVar->value);
    10091136        cchTotal += paVars[iVar].cchExp + 1;
    10101137    }
     
    10411168    struct variable *pTarget = kbuild_get_variable("target");
    10421169    struct variable *pSource = kbuild_get_variable("source");
     1170    struct variable *pDefPath = NULL;
    10431171    struct variable *pType = kbuild_get_variable("type");
    10441172    struct variable *pTool = kbuild_get_variable("tool");
     
    10561184    else
    10571185        fatal(NILF, _("incorrect direction argument `%s'!"), argv[2]);
     1186    if (argv[3])
     1187        pDefPath = kbuild_get_variable("defpath");
    10581188
    10591189    kbuild_get_sdks(&Sdks, pTarget, pSource, pBldType, pBldTrg, pBldTrgArch);
     
    10611191    pVar = kbuild_collect_source_prop(pTarget, pSource, pTool, &Sdks, pType,
    10621192                                      pBldType, pBldTrg, pBldTrgArch, pBldTrgCpu,
    1063                                       NULL,
     1193                                      pDefPath,
    10641194                                      argv[0], argv[1], iDirection);
    10651195    if (pVar)
     
    12121342    size_t cch;
    12131343    struct kbuild_sdks Sdks;
     1344
     1345    /*
     1346     * Gather properties.
     1347     */
    12141348    kbuild_get_sdks(&Sdks, pTarget, pSource, pBldType, pBldTrg, pBldTrgArch);
    12151349
     
    12181352    pDefs  = kbuild_collect_source_prop(pTarget, pSource, pTool, &Sdks, pType, pBldType, pBldTrg, pBldTrgArch, pBldTrgCpu, NULL,
    12191353                                        "DEFS", "defs", 1/* left-to-right */);
    1220     pIncs  = kbuild_collect_source_prop(pTarget, pSource, pTool, &Sdks, pType, pBldType, pBldTrg, pBldTrgArch, pBldTrgCpu, NULL,
     1354    pIncs  = kbuild_collect_source_prop(pTarget, pSource, pTool, &Sdks, pType, pBldType, pBldTrg, pBldTrgArch, pBldTrgCpu, pDefPath,
    12211355                                        "INCS", "incs", -1/* right-to-left */);
    1222     pFlags = kbuild_collect_source_prop(pTarget, pSource, pTool, &Sdks, pType, pBldType, pBldTrg, pBldTrgArch, pBldTrgCpu, pDefPath,
     1356    pFlags = kbuild_collect_source_prop(pTarget, pSource, pTool, &Sdks, pType, pBldType, pBldTrg, pBldTrgArch, pBldTrgCpu, NULL,
    12231357                                        "FLAGS", "flags", 1/* left-to-right */);
    12241358    pDeps  = kbuild_collect_source_prop(pTarget, pSource, pTool, &Sdks, pType, pBldType, pBldTrg, pBldTrgArch, pBldTrgCpu, pDefPath,
    12251359                                        "DEPS", "deps", 1/* left-to-right */);
     1360
     1361    /*
     1362     * If we've got a default path, we must expand the source now.
     1363     * If we do this too early, "<source>_property = stuff" won't work becuase
     1364     * our 'source' value isn't what the user expects.
     1365     */
     1366    if (pDefPath)
     1367        kbuild_apply_defpath(pDefPath, &pSource->value, &pSource->value_length, &pSource->value_alloc_len, 1 /* can free */);
    12261368
    12271369    /*
Note: See TracChangeset for help on using the changeset viewer.