private void generateStructBinding(
      Element element, Struct struct, String root, String pakage, File header) throws IOException {

    String declaredType = element.asType().toString();
    String structName = struct.name().equals(DEFAULT) ? declaredType : struct.name();

    if (generatedStructs.contains(structName)) {
      messager.printMessage(
          Kind.WARNING, "struct " + structName + " already defined elsewhere.", element);
      return;
    }

    System.out.println("generating struct accessor for struct: " + structName);

    generatedStructs.add(structName);

    String output = root + separator + outputDir;
    String config = output + separator + header.getName() + ".cfg";

    File configFile = new File(config);

    FileWriter writer = null;
    try {
      writer = new FileWriter(configFile);
      writer.write("Package " + pakage + "\n");
      writer.write("EmitStruct " + structName + "\n");
      if (!struct.name().equals(DEFAULT)) {
        writer.write("RenameJavaType " + struct.name() + " " + declaredType + "\n");
      }
    } finally {
      if (writer != null) {
        writer.close();
      }
    }

    // TODO this isn't very clean since we won't get any exceptions this way
    GlueGen.main(
        //                "-I"+path+"/build/",
        "-O" + output,
        "-E" + AnnotationProcessorJavaStructEmitter.class.getName(),
        "-C" + config,
        header.getPath());

    configFile.delete();
  }