VirtualBox

Changeset 2894 in kBuild for trunk/src/kmk/kmkbuiltin/kSubmit.c


Ignore:
Timestamp:
Sep 8, 2016 1:27:56 PM (8 years ago)
Author:
bird
Message:

Included kDepObj in kWorker as a post execution option.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/kmkbuiltin/kSubmit.c

    r2884 r2894  
    574574 * @param   pszCwd              The current directory.
    575575 * @param   fWatcomBrainDamage  The wcc/wcc386 workaround.
     576 * @param   papszPostCmdArgs    The post command and it's arguments.
     577 * @param   cPostCmdArgs        Number of post command argument, including the
     578 *                              command.  Zero if no post command scheduled.
    576579 * @param   pcbMsg              Where to return the message length.
    577580 */
    578581static void *kSubmitComposeJobMessage(const char *pszExecutable, char **papszArgs, char **papszEnvVars,
    579                                       const char *pszCwd, int fWatcomBrainDamage, uint32_t *pcbMsg)
     582                                      const char *pszCwd, int fWatcomBrainDamage,
     583                                      char **papszPostCmdArgs, uint32_t cPostCmdArgs, uint32_t *pcbMsg)
    580584{
    581585    size_t   cbTmp;
     
    613617    cbMsg += 1;
    614618
     619    cbMsg += sizeof(cPostCmdArgs);
     620    for (i = 0; i < cPostCmdArgs; i++)
     621        cbMsg += strlen(papszPostCmdArgs[i]) + 1;
     622
    615623    /*
    616624     * Compose the message.
     
    618626    pbMsg = pbCursor = xmalloc(cbMsg);
    619627
     628    /* header */
    620629    memcpy(pbCursor, &cbMsg, sizeof(cbMsg));
    621630    pbCursor += sizeof(cbMsg);
     
    623632    pbCursor += sizeof("JOB");
    624633
     634    /* executable. */
    625635    cbTmp = strlen(pszExecutable) + 1;
    626636    memcpy(pbCursor, pszExecutable, cbTmp);
    627637    pbCursor += cbTmp;
    628638
     639    /* cwd */
    629640    cbTmp = strlen(pszCwd) + 1;
    630641    memcpy(pbCursor, pszCwd, cbTmp);
    631642    pbCursor += cbTmp;
    632643
     644    /* argument */
    633645    memcpy(pbCursor, &cArgs, sizeof(cArgs));
    634646    pbCursor += sizeof(cArgs);
     
    642654    assert(i == cArgs);
    643655
     656    /* environment */
    644657    memcpy(pbCursor, &cEnvVars, sizeof(cEnvVars));
    645658    pbCursor += sizeof(cEnvVars);
     
    652665    assert(i == cEnvVars);
    653666
     667    /* flags */
    654668    *pbCursor++ = fWatcomBrainDamage != 0;
    655669
     670    /* post command */
     671    memcpy(pbCursor, &cPostCmdArgs, sizeof(cPostCmdArgs));
     672    pbCursor += sizeof(cPostCmdArgs);
     673    for (i = 0; i < cPostCmdArgs; i++)
     674    {
     675        cbTmp = strlen(papszPostCmdArgs[i]) + 1;
     676        memcpy(pbCursor, papszPostCmdArgs[i], cbTmp);
     677        pbCursor += cbTmp;
     678    }
     679    assert(i == cPostCmdArgs);
     680
    656681    assert(pbCursor - pbMsg == (size_t)cbMsg);
    657682
    658     /* done */
     683    /*
     684     * Done.
     685     */
    659686    *pcbMsg = cbMsg;
    660687    return pbMsg;
     
    13391366            "usage: %s [-Z|--zap-env] [-E|--set <var=val>] [-U|--unset <var=val>]\n"
    13401367            "           [-C|--chdir <dir>] [--wcc-brain-damage]\n"
    1341             "           [-3|--32-bit] [-6|--64-bit] [-v] -- <program> [args]\n"
     1368            "           [-3|--32-bit] [-6|--64-bit] [-v]\n"
     1369            "           [-P|--post-cmd <cmd> [args]] -- <program> [args]\n"
    13421370            "   or: %s --help\n"
    13431371            "   or: %s --version\n"
     
    13621390            "  -v,--verbose\n"
    13631391            "    More verbose execution.\n"
     1392            "  -P|--post-cmd <cmd> ...\n"
     1393            "    For running a built-in command on the output, specifying the command\n"
     1394            "    and all it's parameters.  Currently supported commands:\n"
     1395            "        kDepObj\n"
    13641396            "  -V,--version\n"
    13651397            "    Show the version number.\n"
     
    13831415    const char     *pszExecutable       = NULL;
    13841416    const char     *pszCwd              = NULL;
     1417    int             iPostCmd            = argc;
     1418    int             cPostCmdArgs        = 0;
    13851419    unsigned        cBitsWorker         = g_cArchBits;
    13861420    int             fWatcomBrainDamage  = 0;
     
    14571491                else if (strcmp(pszArg, "chdir") == 0)
    14581492                    chOpt = 'C';
     1493                else if (strcmp(pszArg, "post-cmd") == 0)
     1494                    chOpt = 'P';
    14591495                else if (strcmp(pszArg, "32-bit") == 0)
    14601496                    chOpt = '3';
     
    14891525                        else
    14901526                        {
    1491                             errx(1, "Option -%c requires an value!", chOpt);
     1527                            errx(1, "Option -%c requires a value!", chOpt);
    14921528                            return usage(stderr, argv[0]);
    14931529                        }
     
    15241560                        return rcExit;
    15251561
     1562                    case 'P':
     1563                        if (cPostCmdArgs > 0)
     1564                            return errx(1, "The -P option can only be used once!");
     1565                        if (*pszArg != '\0')
     1566                            return errx(1, "The cmd part of the -P needs to be a separate argument!");
     1567                        iPostCmd = ++iArg;
     1568                        if (iArg >= argc)
     1569                            return errx(1, "The -P option requires a command following it!");
     1570                        while (iArg < argc && strcmp(argv[iArg], "--") != 0)
     1571                            iArg++;
     1572                        cPostCmdArgs = iArg - iPostCmd;
     1573                        iArg--;
     1574                        break;
     1575
    15261576                    case '3':
    15271577                        cBitsWorker = 32;
     
    15631613        uint32_t        cbMsg;
    15641614        void           *pvMsg   = kSubmitComposeJobMessage(pszExecutable, &argv[iArg], papszEnv, szCwd,
    1565                                                            fWatcomBrainDamage, &cbMsg);
     1615                                                           fWatcomBrainDamage, &argv[iPostCmd], cPostCmdArgs, &cbMsg);
    15661616        PWORKERINSTANCE pWorker = kSubmitSelectWorkSpawnNewIfNecessary(cBitsWorker, cVerbosity);
    15671617        if (pWorker)
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