LLOOP Index | GSP Language | GSP Library | Framework Classes | Component Classes

OptionsData.cpp

This is the verbatim text of the file "OptionsData.cpp" part of the LLOOP package. The copyright remains with Michel MEHL. All rights reserved.


#include "OptionsData.h"

OptionsData::OptionsData() : 
    m_bExplicitProjectNameGiven(false),
    m_bTemplateFromFile(false),
    m_bIgnoreCase(false),
    m_bUseOldStream(false),
    m_bSilentBuild(false),
    m_bGenerateTclOptionsControlPanel(false),
    m_sHOutputDir("."),
    m_sCPPOutputDir("."),
    m_sTCLOutputDir("."),
    m_sObjOutputDir("."),
    m_sOriginalHOutputDir("."),
    m_sOriginalCPPOutputDir("."),
    m_sOriginalObjOutputDir("."),
    m_sTemplateDir(".")
  {
    m_bMakeExe = false;
    m_bMakeLib = false;

    m_saImportPaths.push_back(".");
  }

OptionsData::~OptionsData() 
{
}

void OptionsData::completeWith(OptionsData& options)
{
  int i = 0;

  /* GSP OPTIONS */

  // NOTE: Specified import path must preceed default ones ! 
  mergeStringList(options.m_saGspFileNames, m_saGspFileNames);
  mergeStringList(options.m_saImportPaths, m_saImportPaths);
  mergeString(options.m_sAuthor, m_sAuthor);
  mergeString(options.m_sLicenseFile, m_sLicenseFile);
  m_bIgnoreCase = (m_bIgnoreCase || options.m_bIgnoreCase);


  /* C++ OPTION SET */

  m_bMakeExe = (m_bMakeExe || options.m_bMakeExe);
  m_bMakeLib = (m_bMakeLib || options.m_bMakeLib);

  mergeString(options.m_sPlatform, m_sPlatform);

  // If no platform defined, take the current one by default
  if (m_sPlatform.empty())
    {
#ifdef WIN32
      m_sPlatform = "windows";
#else
      m_sPlatform = "unix";
#endif 
    }     

  if (m_sHOutputDir == "." && options.m_sHOutputDir != ".")
    m_sHOutputDir = options.m_sHOutputDir;
  if (m_sCPPOutputDir == "." && options.m_sCPPOutputDir != ".")
    m_sCPPOutputDir = options.m_sCPPOutputDir;
  if (m_sObjOutputDir == "." && options.m_sObjOutputDir != ".")
    m_sObjOutputDir = options.m_sObjOutputDir;

  if (m_sOriginalHOutputDir == "." && options.m_sOriginalHOutputDir != ".")
    m_sOriginalHOutputDir = options.m_sOriginalHOutputDir;
  if (m_sOriginalCPPOutputDir == "." && options.m_sOriginalCPPOutputDir != ".")
    m_sOriginalCPPOutputDir = options.m_sOriginalCPPOutputDir;
  if (m_sOriginalObjOutputDir == "." && options.m_sOriginalObjOutputDir != ".")
    m_sOriginalObjOutputDir = options.m_sOriginalObjOutputDir;

  m_bUseOldStream = (m_bUseOldStream || options.m_bUseOldStream);

  if (! m_bExplicitProjectNameGiven)
    {
      m_bExplicitProjectNameGiven = options.m_bExplicitProjectNameGiven;
      m_sProject = options.m_sProject;
    }

  m_bTemplateFromFile = (m_bTemplateFromFile || options.m_bTemplateFromFile);
  if (m_sTemplateDir == "." && options.m_sTemplateDir != ".")
    m_sTemplateDir = options.m_sTemplateDir;


  /* TCL OPTION SET */

  m_bGenerateTclOptionsControlPanel = ( m_bGenerateTclOptionsControlPanel || options.m_bGenerateTclOptionsControlPanel);

  if (m_sTCLOutputDir == "." && options.m_sTCLOutputDir != ".")
    m_sTCLOutputDir = options.m_sTCLOutputDir;


  /* MAKEFILE OPTION SET */

  mergeString(options.m_sBuildCfg, m_sBuildCfg);
  // If no build config defined, use "debug" by default
  if (m_sBuildCfg.empty())
    m_sBuildCfg = "debug";


  m_bSilentBuild = (m_bSilentBuild || options.m_bSilentBuild);  
  mergeStringList(options.m_saAddIncPaths, m_saAddIncPaths);
  mergeStringList(options.m_saAddLibPaths, m_saAddLibPaths);
  mergeStringList(options.m_saAddLibs, m_saAddLibs);
  mergeStringList(options.m_saAddDefs, m_saAddDefs);
  mergeStringList(options.m_saAddCCFlags, m_saAddCCFlags);
  mergeStringList(options.m_saAddSources, m_saAddSources);
  mergeString(options.m_sTargetDir, m_sTargetDir);
  mergeString(options.m_sTestCmd, m_sTestCmd);

}


void OptionsData::mergeStringList(const universal::StringList& c_slIn, universal::StringList& slOut)
{
  for (unsigned long i = 0; i < c_slIn.size(); i++)
    {
      const universal::String& c_s = c_slIn[i];
      if (!c_s.matchesPattern(slOut)) slOut.push_back(c_s);
    }
}

void OptionsData::mergeString(const universal::String& c_sIn, universal::String& sOut)
{
  if (sOut.empty())
    {
      sOut = c_sIn;
    }
}

This file is part of the LLOOP Reversible Object-Oriented Parser Generator. Copyright (c) 2005-2006 Michel MEHL, France. All rights reserved. LLOOP is distributed by the company ERSA SaRL.


Copyright (c) 2005-2006 Michel MEHL, Haguenau, France
LLOOP version 1.1