ide: tweak compiler config support for specifying output file extensions.
[sdk] / ide / src / IDESettings.ec
index d37ede5..53191c2 100644 (file)
@@ -237,14 +237,16 @@ CompilerConfig MakeDefaultCompiler(const char * name, bool readOnly)
    return defaultCompiler;
 }
 
-class IDESettingsContainer : GlobalSettings
-{
 #ifdef SETTINGS_TEST
-   settingsName = "ecereIDESettingsTest";
+define settingsName = "ecereIDE-SettingsTest";
 #else
-   settingsName = "ecereIDE";
+define ideSettingsName = "ecereIDE";
 #endif
 
+class IDESettingsContainer : GlobalSettings
+{
+   settingsName = ideSettingsName;
+
    virtual void OnLoad(GlobalSettingsData data);
 
    char moduleLocation[MAX_LOCATION];
@@ -270,12 +272,14 @@ private:
 
          strcpy(configFilePath, path);
          PathCat(configFilePath, "Data");
-         PathCat(configFilePath, "ecereIDE.ini");
+         PathCat(configFilePath, ideSettingsName);
+         ChangeExtension(configFilePath, "ini", configFilePath);
 
          strcpy(defaultConfigFilePath, path);
          PathCat(defaultConfigFilePath, "App");
          PathCat(defaultConfigFilePath, "DefaultData");
-         PathCat(defaultConfigFilePath, "ecereIDE.ini");
+         PathCat(defaultConfigFilePath, ideSettingsName);
+         ChangeExtension(defaultConfigFilePath, "ini", defaultConfigFilePath);
 
          if(FileExists(defaultConfigFilePath))
          {
@@ -412,8 +416,12 @@ private:
                ccfg.arCommand = arDefaultCommand;
             if(!ccfg.objectFileExt || !ccfg.objectFileExt[0])
                ccfg.objectFileExt = objectDefaultFileExt;
-            /*if(!ccfg.outputFileExt || !ccfg.outputFileExt[0])
-               ccfg.outputFileExt = outputDefaultFileExt;*/
+            /*if(!ccfg.staticLibFileExt || !ccfg.staticLibFileExt[0])
+               ccfg.staticLibFileExt = staticLibDefaultFileExt;*/
+            /*if(!ccfg.sharedLibFileExt || !ccfg.sharedLibFileExt[0])
+               ccfg.sharedLibFileExt = sharedLibDefaultFileExt;*/
+            /*if(!ccfg.executableFileExt || !ccfg.executableFileExt[0])
+               ccfg.executableFileExt = outputDefaultFileExt;*/
             incref ccfg;
          }
       }
@@ -513,6 +521,21 @@ public:
       isset { return language != null; }
    }
 
+   property Array<NamedString> findInFileFileFilters
+   {
+      set
+      {
+         findInFileFileFilters.Free();
+         if(value)
+         {
+            delete findInFileFileFilters;
+            findInFileFileFilters = value;
+         }
+      }
+      get { return findInFileFileFilters; }
+      isset { return findInFileFileFilters.count != 0; }
+   }
+
 private:
    char * docDir;
    char * ideFileDialogLocation;
@@ -522,6 +545,7 @@ private:
    char * compilerConfigsDir;
    char * defaultCompiler;
    String language;
+   Array<NamedString> findInFileFileFilters { };
 
    CompilerConfig GetCompilerConfig(const String compilerName)
    {
@@ -561,6 +585,8 @@ private:
       delete ideFileDialogLocation;
       delete ideProjectFileDialogLocation;
       delete displayDriver;
+
+      if(findInFileFileFilters) findInFileFileFilters.Free();
    }
 
    void ForcePathSeparatorStyle(bool unixStyle)
@@ -911,17 +937,30 @@ public:
       get { return ldCommand; }
       isset { return ldCommand && ldCommand[0]; }
    }
+   bool noStripTarget;
    property const char * objectFileExt
    {
       set { delete objectFileExt; if(value && value[0]) objectFileExt = CopyString(value); }
       get { return objectFileExt && objectFileExt[0] ? objectFileExt : objectDefaultFileExt ; }
       isset { return objectFileExt && objectFileExt[0] && strcmp(objectFileExt, objectDefaultFileExt); }
    }
-   property const char * outputFileExt
+   property const char * staticLibFileExt
+   {
+      set { delete staticLibFileExt; if(value && value[0]) staticLibFileExt = CopyString(value); }
+      get { return staticLibFileExt; }
+      isset { return staticLibFileExt && staticLibFileExt[0]; }
+   }
+   property const char * sharedLibFileExt
    {
-      set { delete outputFileExt; if(value && value[0]) outputFileExt = CopyString(value); }
-      get { return outputFileExt; }
-      isset { return outputFileExt && outputFileExt[0]; }
+      set { delete sharedLibFileExt; if(value && value[0]) sharedLibFileExt = CopyString(value); }
+      get { return sharedLibFileExt; }
+      isset { return sharedLibFileExt && sharedLibFileExt[0]; }
+   }
+   property const char * executableFileExt
+   {
+      set { delete executableFileExt; if(value && value[0]) executableFileExt = CopyString(value); }
+      get { return executableFileExt; }
+      isset { return executableFileExt && executableFileExt[0]; }
    }
    property const char * executableLauncher
    {
@@ -1092,6 +1131,23 @@ public:
       get { return executableLauncher; }
       isset { return false; }
    }
+   property const char * outputFileExt
+   {
+      set { delete executableFileExt; if(value && value[0]) executableFileExt = CopyString(value); }
+      get { return executableFileExt; }
+      isset { return false; }
+   }
+   // utility
+   property bool hasDocumentOutput
+   {
+      get
+      {
+         bool result = executableFileExt && executableFileExt[0] &&
+               (!strcmpi(executableFileExt, "htm") || !strcmpi(executableFileExt, "html"));
+         return result;
+      }
+      isset { return false; }
+   }
 private:
    Array<String> includeDirs { };
    Array<String> libraryDirs { };
@@ -1116,7 +1172,9 @@ private:
    char * ldCommand;
    char * arCommand;
    char * objectFileExt;
-   char * outputFileExt;
+   char * staticLibFileExt;
+   char * sharedLibFileExt;
+   char * executableFileExt;
    char * executableLauncher;
    char * distccHosts;
    char * gnuToolchainPrefix;
@@ -1140,7 +1198,9 @@ private:
       delete ldCommand;
       delete arCommand;
       delete objectFileExt;
-      delete outputFileExt;
+      delete staticLibFileExt;
+      delete sharedLibFileExt;
+      delete executableFileExt;
       delete makeCommand;
       delete executableLauncher;
       delete distccHosts;
@@ -1177,8 +1237,11 @@ public:
          cxxCommand,
          arCommand,
          ldCommand,
+         noStripTarget,
          objectFileExt,
-         outputFileExt,
+         staticLibFileExt,
+         sharedLibFileExt,
+         executableFileExt,
          executableLauncher,
          ccacheEnabled,
          distccEnabled,