#ifndef __cmt_generator_h__
#define __cmt_generator_h__

#include "cmt_parser.h"
#include "cmt_constituent.h"

class Generator
{
public:
    // Build the MSDEV workspace file
  static int build_msdev_workspace (const Constituent::ConstituentVector& constituents);

    // Build the MSDEV project file (one per constituent)
  static int build_msdev (const Constituent& constituent);

    // Build the Make setup file
  static void build_make_setup (const cmt_string& package);

    // Build the constituents.make file
  static void build_constituents_makefile (const cmt_string& package);

    // Build the makefile fragment for one constituent
  static int build_constituent_makefile (const Constituent& constituent);
  static void build_constituent_makefile (const cmt_string& name);

  static void build_default_makefile ();

    // Build the dependencies for one module
  static cmt_string build_dependencies (const cmt_string& file_name);
  static void build_dependencies (const cmt_string& name,
                                  int argc, char* argv[]);

    // Build prototype file for one module
  static void build_prototype (const cmt_string& file_name);

    // Build README.html file
  static void build_readme (const CmtSystem::cmt_string_vector& arguments);

    // Build def files for Windows shared libraries
  static void build_windefs (const cmt_string& library_name);

    // Commit changes made to a temporary output file.
  static void commit (const cmt_string& name);
    // Commit changes made to a temporary output file only if the
    // differences are non null.
  static void check (const cmt_string& name);
};

#endif
