code: @Override
    protected void buildDefineArguments(final CompilerDef[] defs, final Vector<String> args) {
      //
      // assume that we aren't inheriting defines from containing <cc>
      //
      UndefineArgument[] merged = defs[0].getActiveDefines();
      for (int i = 1; i < defs.length; i++) {
        //
        // if we are inheriting, merge the specific defines with the
        // containing defines
        merged = UndefineArgument.merge(defs[i].getActiveDefines(), merged);
      }
      final StringBuffer buf = new StringBuffer(30);
      for (final UndefineArgument current : merged) {
        buf.setLength(0);
        if (current.isDefine()) {
          args.addElement("-D");
          buf.append(current.getName());
          if (current.getValue() != null && current.getValue().length() > 0) {
            buf.append('=');
            buf.append(current.getValue());
          }
          args.addElement(buf.toString());
        } else {
          args.addElement("-U");
          args.addElement(current.getName());
        }
      }
    }
docs: The buildDefineArguments implementation CommandLineCCompiler is not good
  for us because os390 defines are give by -D definex instead of
  /Ddefinex, 2 args not 1! since we implement this ourslefs, we do not
  have to implement the getDefineSwitch() and the getUndefineSwitch().