ecs; ide/Project: (#1063) Fixed Windows build issues with ecs overflowing command...
authorRejean Loyer <redj@ecere.com>
Mon, 17 Feb 2014 02:00:17 +0000 (21:00 -0500)
committerJerome St-Louis <jerome@ecere.com>
Sat, 1 Mar 2014 12:27:52 +0000 (07:27 -0500)
compiler/bootstrap/ecc/bootstrap/ecc.c
compiler/bootstrap/ecp/bootstrap/ecp.c
compiler/bootstrap/ecs/bootstrap/ecs.c
compiler/ecs/ecs.ec
ecere/Makefile
ide/src/project/Project.ec

index 20e0dcb..296a004 100644 (file)
@@ -644,6 +644,8 @@ extern int strcmp(const char * , const char * );
 
 extern size_t strlen(const char * );
 
+extern char *  strcpy(char * , const char * );
+
 extern char *  PassArg(char *  output, const char *  input);
 
 extern void SetBuildingEcereCom(unsigned int b);
@@ -668,8 +670,6 @@ extern void SetStrictNameSpaces(unsigned int b);
 
 extern void SetOutputLineNumbers(unsigned int value);
 
-extern char *  strcpy(char * , const char * );
-
 extern char *  __ecereNameSpace__ecere__sys__PathCat(char *  string, char *  addedPath);
 
 extern char *  __ecereNameSpace__ecere__sys__ChangeExtension(char *  string, char *  ext, char *  output);
@@ -892,6 +892,10 @@ strcpy(cppOptions + cppOptionsLen + 1, arg);
 cppOptionsLen = newLen;
 targetBits = !strcmp(arg + 1, "m32") ? 32 : 64;
 }
+else if(!strcmp(arg + 1, "t32") || !strcmp(arg + 1, "t64"))
+{
+targetBits = !strcmp(arg + 1, "t32") ? 32 : 64;
+}
 else if(arg[1] == 'D' || arg[1] == 'I')
 {
 char * buf;
@@ -965,6 +969,17 @@ cppOptionsLen = buf - cppOptions;
 else
 valid = 0x0;
 }
+else if(!strcmp(arg + 1, "fno-diagnostics-show-caret"))
+{
+char * buf;
+int size = cppOptionsLen + 1 + strlen(arg) * 2 + 1;
+
+cppOptions = __ecereNameSpace__ecere__com__eSystem_Renew(cppOptions, sizeof(char) * (size));
+buf = cppOptions + cppOptionsLen;
+*buf++ = ' ';
+PassArg(buf, arg);
+cppOptionsLen = cppOptionsLen + 1 + strlen(buf);
+}
 else if(!strcmp(arg + 1, "symbols"))
 {
 if(c + 1 < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc)
@@ -1062,11 +1077,6 @@ struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(_
 
 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("byte"), __ecereInstance1->type = ProcessTypeString("unsigned char", 0x0), __ecereInstance1;
 }));
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
-struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
-
-__ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("_Bool"), __ecereInstance1->type = ProcessTypeString("bool", 0x0), __ecereInstance1;
-}));
 if(buildingBootStrap)
 {
 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
index f21093b..4f7f5e7 100644 (file)
@@ -817,7 +817,7 @@ struct __ecereNameSpace__ecere__com__Method * method;
 
 enum yytokentype
 {
-IDENTIFIER = 258, CONSTANT = 259, STRING_LITERAL = 260, SIZEOF = 261, PTR_OP = 262, INC_OP = 263, DEC_OP = 264, LEFT_OP = 265, RIGHT_OP = 266, LE_OP = 267, GE_OP = 268, EQ_OP = 269, NE_OP = 270, AND_OP = 271, OR_OP = 272, MUL_ASSIGN = 273, DIV_ASSIGN = 274, MOD_ASSIGN = 275, ADD_ASSIGN = 276, SUB_ASSIGN = 277, LEFT_ASSIGN = 278, RIGHT_ASSIGN = 279, AND_ASSIGN = 280, XOR_ASSIGN = 281, OR_ASSIGN = 282, TYPE_NAME = 283, TYPEDEF = 284, EXTERN = 285, STATIC = 286, AUTO = 287, REGISTER = 288, CHAR = 289, SHORT = 290, INT = 291, UINT = 292, INT64 = 293, LONG = 294, SIGNED = 295, UNSIGNED = 296, FLOAT = 297, DOUBLE = 298, CONST = 299, VOLATILE = 300, VOID = 301, VALIST = 302, STRUCT = 303, UNION = 304, ENUM = 305, ELLIPSIS = 306, CASE = 307, DEFAULT = 308, IF = 309, SWITCH = 310, WHILE = 311, DO = 312, FOR = 313, GOTO = 314, CONTINUE = 315, BREAK = 316, RETURN = 317, IFX = 318, ELSE = 319, CLASS = 320, THISCLASS = 321, CLASS_NAME = 322, PROPERTY = 323, SETPROP = 324, GETPROP = 325, NEWOP = 326, RENEW = 327, DELETE = 328, EXT_DECL = 329, EXT_STORAGE = 330, IMPORT = 331, DEFINE = 332, VIRTUAL = 333, ATTRIB = 334, PUBLIC = 335, PRIVATE = 336, TYPED_OBJECT = 337, ANY_OBJECT = 338, _INCREF = 339, EXTENSION = 340, ASM = 341, TYPEOF = 342, WATCH = 343, STOPWATCHING = 344, FIREWATCHERS = 345, WATCHABLE = 346, CLASS_DESIGNER = 347, CLASS_NO_EXPANSION = 348, CLASS_FIXED = 349, ISPROPSET = 350, CLASS_DEFAULT_PROPERTY = 351, PROPERTY_CATEGORY = 352, CLASS_DATA = 353, CLASS_PROPERTY = 354, SUBCLASS = 355, NAMESPACE = 356, NEW0OP = 357, RENEW0 = 358, VAARG = 359, DBTABLE = 360, DBFIELD = 361, DBINDEX = 362, DATABASE_OPEN = 363, ALIGNOF = 364, ATTRIB_DEP = 365, __ATTRIB = 366
+IDENTIFIER = 258, CONSTANT = 259, STRING_LITERAL = 260, SIZEOF = 261, PTR_OP = 262, INC_OP = 263, DEC_OP = 264, LEFT_OP = 265, RIGHT_OP = 266, LE_OP = 267, GE_OP = 268, EQ_OP = 269, NE_OP = 270, AND_OP = 271, OR_OP = 272, MUL_ASSIGN = 273, DIV_ASSIGN = 274, MOD_ASSIGN = 275, ADD_ASSIGN = 276, SUB_ASSIGN = 277, LEFT_ASSIGN = 278, RIGHT_ASSIGN = 279, AND_ASSIGN = 280, XOR_ASSIGN = 281, OR_ASSIGN = 282, TYPE_NAME = 283, TYPEDEF = 284, EXTERN = 285, STATIC = 286, AUTO = 287, REGISTER = 288, CHAR = 289, SHORT = 290, INT = 291, UINT = 292, INT64 = 293, LONG = 294, SIGNED = 295, UNSIGNED = 296, FLOAT = 297, DOUBLE = 298, CONST = 299, VOLATILE = 300, VOID = 301, VALIST = 302, STRUCT = 303, UNION = 304, ENUM = 305, ELLIPSIS = 306, CASE = 307, DEFAULT = 308, IF = 309, SWITCH = 310, WHILE = 311, DO = 312, FOR = 313, GOTO = 314, CONTINUE = 315, BREAK = 316, RETURN = 317, IFX = 318, ELSE = 319, CLASS = 320, THISCLASS = 321, CLASS_NAME = 322, PROPERTY = 323, SETPROP = 324, GETPROP = 325, NEWOP = 326, RENEW = 327, DELETE = 328, EXT_DECL = 329, EXT_STORAGE = 330, IMPORT = 331, DEFINE = 332, VIRTUAL = 333, ATTRIB = 334, PUBLIC = 335, PRIVATE = 336, TYPED_OBJECT = 337, ANY_OBJECT = 338, _INCREF = 339, EXTENSION = 340, ASM = 341, TYPEOF = 342, WATCH = 343, STOPWATCHING = 344, FIREWATCHERS = 345, WATCHABLE = 346, CLASS_DESIGNER = 347, CLASS_NO_EXPANSION = 348, CLASS_FIXED = 349, ISPROPSET = 350, CLASS_DEFAULT_PROPERTY = 351, PROPERTY_CATEGORY = 352, CLASS_DATA = 353, CLASS_PROPERTY = 354, SUBCLASS = 355, NAMESPACE = 356, NEW0OP = 357, RENEW0 = 358, VAARG = 359, DBTABLE = 360, DBFIELD = 361, DBINDEX = 362, DATABASE_OPEN = 363, ALIGNOF = 364, ATTRIB_DEP = 365, __ATTRIB = 366, BOOL = 367, _BOOL = 368, _COMPLEX = 369, _IMAGINARY = 370, RESTRICT = 371
 };
 
 typedef union YYSTYPE
@@ -2622,6 +2622,10 @@ strcpy(cppOptions + cppOptionsLen + 1, arg);
 cppOptionsLen = newLen;
 targetBits = !strcmp(arg + 1, "m32") ? 32 : 64;
 }
+else if(!strcmp(arg + 1, "t32") || !strcmp(arg + 1, "t64"))
+{
+targetBits = !strcmp(arg + 1, "t32") ? 32 : 64;
+}
 else if(arg[1] == 'D' || arg[1] == 'I')
 {
 char * buf;
@@ -2686,6 +2690,17 @@ cppOptionsLen = buf - cppOptions;
 else
 valid = 0x0;
 }
+else if(!strcmp(arg + 1, "fno-diagnostics-show-caret"))
+{
+char * buf;
+int size = cppOptionsLen + 1 + strlen(arg) * 2 + 1;
+
+cppOptions = __ecereNameSpace__ecere__com__eSystem_Renew(cppOptions, sizeof(char) * (size));
+buf = cppOptions + cppOptionsLen;
+*buf++ = ' ';
+PassArg(buf, arg);
+cppOptionsLen = cppOptionsLen + 1 + strlen(buf);
+}
 else if(!strcmp(arg + 1, "symbols"))
 {
 if(c + 1 < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc)
@@ -2796,11 +2811,6 @@ struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(_
 
 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("size_t"), __ecereInstance1->type = ProcessTypeString("uintsize", 0x0), __ecereInstance1;
 }));
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
-struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
-
-__ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("_Bool"), __ecereInstance1->type = ProcessTypeString("bool", 0x0), __ecereInstance1;
-}));
 {
 char * outputFilePath = GetOutputFile();
 
index c834684..547c319 100644 (file)
@@ -2451,6 +2451,8 @@ struct __ecereNameSpace__ecere__com__Instance * container;
 struct __ecereNameSpace__ecere__com__IteratorPointer * pointer;
 } __attribute__ ((gcc_struct));
 
+extern int __ecereNameSpace__ecere__sys__Tokenize(char *  string, int maxTokens, char *  tokens[], unsigned int esc);
+
 extern int strcasecmp(const char * , const char * );
 
 extern unsigned int LoadSymbols(char *  fileName, int importType, unsigned int loadDllOnly);
@@ -2588,6 +2590,10 @@ if(!strcmp(arg + 1, "m32") || !strcmp(arg + 1, "m64"))
 {
 targetBits = !strcmp(arg + 1, "m32") ? 32 : 64;
 }
+else if(!strcmp(arg + 1, "t32") || !strcmp(arg + 1, "t64"))
+{
+targetBits = !strcmp(arg + 1, "t32") ? 32 : 64;
+}
 else if(!strcmp(arg + 1, "o"))
 {
 if(!output && c + 1 < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc)
@@ -2677,20 +2683,45 @@ struct __ecereNameSpace__ecere__com__MapIterator it = (it.container = (void *)0,
 for(c = 1; c < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc; c++)
 {
 char * file = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argv[c];
+struct __ecereNameSpace__ecere__com__Instance * f = (((void *)0));
+char line[16384];
+int count = 0;
+char * tokens[512];
 
 if(file[0] == '-')
 {
 if(!strcmp(file, "-c"))
 c++;
 }
+else if(file[0] == '@')
+f = __ecereNameSpace__ecere__sys__FileOpen(&file[1], 1);
 else
 {
+count = 1;
+tokens[0] = file;
+}
+while(count || f)
+{
+int c;
+
+if(f)
+{
+while(!count && __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
+count = __ecereNameSpace__ecere__sys__Tokenize(line, sizeof tokens / sizeof tokens[0], tokens, 0x2);
+if(!count)
+(__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
+}
+for(c = 0; c < count; c++)
+{
 char ext[17];
 
+file = tokens[c];
 __ecereNameSpace__ecere__sys__GetExtension(file, ext);
 if(!strcmp(ext, "imp"))
 LoadImports(file);
 }
+count = 0;
+}
 }
 for(c = 1; c < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc; c++)
 {
@@ -2705,17 +2736,40 @@ c++;
 for(c = 1; c < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc; c++)
 {
 char * file = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argv[c];
+struct __ecereNameSpace__ecere__com__Instance * f = (((void *)0));
+char line[16384];
+int count = 0;
+char * tokens[512];
 
 if(file[0] == '-')
 {
 if(!strcmp(file, "-c"))
 c++;
 }
+else if(file[0] == '@')
+f = __ecereNameSpace__ecere__sys__FileOpen(&file[1], 1);
 else
 {
+count = 1;
+tokens[0] = file;
+}
+while(count || f)
+{
+int c;
+
+if(f)
+{
+while(!count && __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
+count = __ecereNameSpace__ecere__sys__Tokenize(line, sizeof tokens / sizeof tokens[0], tokens, 0x2);
+if(!count)
+(__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
+}
+for(c = 0; c < count; c++)
+{
 char ext[17];
 char moduleName[797];
 
+file = tokens[c];
 __ecereNameSpace__ecere__sys__GetExtension(file, ext);
 __ecereNameSpace__ecere__sys__GetLastDirectory(file, moduleName);
 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
@@ -2863,6 +2917,8 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa
 }
 }
 }
+count = 0;
+}
 }
 ComputeModuleClasses(privateModule);
 if(!isDynamicLibrary)
index 8d354c4..2388575 100644 (file)
@@ -1760,17 +1760,41 @@ class SymbolgenApp : Application
             for(c = 1; c<argc; c++)
             {
                char * file = argv[c];
+               File f = null;
+               char line[16384];
+               int count = 0;
+               char * tokens[512];
                if(file[0] == '-')
                {
                   if(!strcmp(file, "-c"))
                      c++;
                }
+               else if(file[0] == '@')
+                  f = FileOpen(&file[1], read);
                else
                {
-                  char ext[MAX_EXTENSION];
-                  GetExtension(file,ext);
-                  if(!strcmp(ext, "imp"))
-                     LoadImports(file);
+                  count = 1;
+                  tokens[0] = file;
+               }
+               while(count || f)
+               {
+                  int c;
+                  if(f)
+                  {
+                     while(!count && f.GetLine(line, sizeof(line)))
+                        count = Tokenize(line, sizeof(tokens)/sizeof(tokens[0]), tokens, forArgsPassing);
+                     if(!count)
+                        delete f;
+                  }
+                  for(c = 0; c < count; c++)
+                  {
+                     char ext[MAX_EXTENSION];
+                     file = tokens[c];
+                     GetExtension(file, ext);
+                     if(!strcmp(ext, "imp"))
+                        LoadImports(file);
+                  }
+                  count = 0;
                }
             }
 
@@ -1788,129 +1812,155 @@ class SymbolgenApp : Application
             for(c = 1; c<argc; c++)
             {
                char * file = argv[c];
+               File f = null;
+               char line[16384];
+               int count = 0;
+               char * tokens[512];
                if(file[0] == '-')
                {
                   // Don't even know what it does here?
                   if(!strcmp(file, "-c"))
                      c++;
                }
+               else if(file[0] == '@')
+                  f = FileOpen(&file[1], read);
                else
                {
-                  char ext[MAX_EXTENSION];
-                  char moduleName[MAX_LOCATION];
-
-                  GetExtension(file,ext);
-
-                  GetLastDirectory(file, moduleName);
-                  StripExtension(moduleName);
-                  strcat(moduleName, ".ec");
+                  count = 1;
+                  tokens[0] = file;
+               }
 
-                  if(fstrcmp(moduleName, symbolModule) && (!strcmp(ext, "sym") || !strcmp(ext, "ec")))
+               while(count || f)
+               {
+                  int c;
+                  if(f)
+                  {
+                     while(!count && f.GetLine(line, sizeof(line)))
+                        count = Tokenize(line, sizeof(tokens)/sizeof(tokens[0]), tokens, forArgsPassing);
+                     if(!count)
+                        delete f;
+                  }
+                  for(c = 0; c < count; c++)
                   {
-                     ImportedModule importedModule;
-                     ModuleInfo module { };
-                     char fileName[MAX_FILENAME];
-                     ::modules.Add(module);
+                     char ext[MAX_EXTENSION];
+                     char moduleName[MAX_LOCATION];
 
-                     GetLastDirectory(file, fileName);
+                     file = tokens[c];
 
-                     module.name = CopyString(fileName);
+                     GetExtension(file, ext);
 
-                     StripExtension(module.name);
+                     GetLastDirectory(file, moduleName);
+                     StripExtension(moduleName);
+                     strcat(moduleName, ".ec");
 
-                     for(importedModule = ::_defines.first; importedModule; importedModule = importedModule.next)
+                     if(fstrcmp(moduleName, symbolModule) && (!strcmp(ext, "sym") || !strcmp(ext, "ec")))
                      {
-                        if(importedModule.type == moduleDefinition && !strcmpi(importedModule.name, module.name) && !(importedModule.importType == remoteImport))
-                           break;
-                     }
+                        ImportedModule importedModule;
+                        ModuleInfo module { };
+                        char fileName[MAX_FILENAME];
+                        ::modules.Add(module);
 
-                     if(importedModule)
-                        module.globalInstance = importedModule.globalInstance;
-                     else
-                     {
-                        importedModule = ImportedModule
+                        GetLastDirectory(file, fileName);
+
+                        module.name = CopyString(fileName);
+
+                        StripExtension(module.name);
+
+                        for(importedModule = ::_defines.first; importedModule; importedModule = importedModule.next)
                         {
-                           name = CopyString(module.name),
-                           type = moduleDefinition,
-                           importType = normalImport
-                        };
-                        ::_defines.AddName(importedModule);
+                           if(importedModule.type == moduleDefinition && !strcmpi(importedModule.name, module.name) && !(importedModule.importType == remoteImport))
+                              break;
+                        }
 
-                        module.globalInstance = LoadSymbols(file, normalImport, false);
-                        CheckDataRedefinitions();
-                     }
+                        if(importedModule)
+                           module.globalInstance = importedModule.globalInstance;
+                        else
+                        {
+                           importedModule = ImportedModule
+                           {
+                              name = CopyString(module.name),
+                              type = moduleDefinition,
+                              importType = normalImport
+                           };
+                           ::_defines.AddName(importedModule);
+
+                           module.globalInstance = LoadSymbols(file, normalImport, false);
+                           CheckDataRedefinitions();
+                        }
 
-                     // I18n code
-                     {
-                        File f;
-                        ChangeExtension(file, "bowl", fileName);
-                        f = FileOpen(fileName, read);
-                        if(f)
+                        // I18n code
                         {
-                           static char line[65536];
-                           List<String> comments { };
-                           String msgid = null, msgstr = null, msgctxt = null;
-                           while(!f.Eof())
+                           File f;
+                           ChangeExtension(file, "bowl", fileName);
+                           f = FileOpen(fileName, read);
+                           if(f)
                            {
-                              if(f.GetLine(line, sizeof(line)))
+                              static char line[65536];
+                              List<String> comments { };
+                              String msgid = null, msgstr = null, msgctxt = null;
+                              while(!f.Eof())
                               {
-                                 int len;
-                                 TrimLSpaces(line, line);
-                                 if(line[0] == '#')
-                                 {
-                                    comments.Add(CopyString(line));
-                                 }
-                                 else if(strstr(line, "msgid \"") == line)
-                                 {
-                                    delete msgid;
-                                    msgid = CopyString(line + 7);
-                                    len = strlen(msgid);
-                                    if(len) msgid[len-1] = 0;
-                                 }
-                                 else if(strstr(line, "msgctxt \"") == line)
+                                 if(f.GetLine(line, sizeof(line)))
                                  {
-                                    delete msgctxt;
-                                    msgctxt = CopyString(line + 9);
-                                    len = strlen(msgctxt);
-                                    if(len) msgctxt[len-1] = 0;
-                                 }
-                                 else if(strstr(line, "msgstr \"") == line)
-                                 {
-                                    delete msgstr;
-                                    msgstr = CopyString(line + 8);
-                                    len = strlen(msgstr);
-                                    if(len) msgstr[len-1] = 0;
-                                 }
-
-                                 if(msgid && msgstr)
-                                 {
-                                    ContextStringPair pair { msgid, msgctxt };
-                                    i18n = true;
-                                    if(!it.Index(pair, false))
+                                    int len;
+                                    TrimLSpaces(line, line);
+                                    if(line[0] == '#')
                                     {
-                                       msgid = null; msgctxt = null;
-                                       intlStrings[pair] = comments;
-                                       comments = { };
+                                       comments.Add(CopyString(line));
                                     }
-                                    else
+                                    else if(strstr(line, "msgid \"") == line)
                                     {
-                                       for(s : comments)
-                                          it.data.Add(s);
-                                       comments.RemoveAll();
+                                       delete msgid;
+                                       msgid = CopyString(line + 7);
+                                       len = strlen(msgid);
+                                       if(len) msgid[len-1] = 0;
+                                    }
+                                    else if(strstr(line, "msgctxt \"") == line)
+                                    {
+                                       delete msgctxt;
+                                       msgctxt = CopyString(line + 9);
+                                       len = strlen(msgctxt);
+                                       if(len) msgctxt[len-1] = 0;
+                                    }
+                                    else if(strstr(line, "msgstr \"") == line)
+                                    {
+                                       delete msgstr;
+                                       msgstr = CopyString(line + 8);
+                                       len = strlen(msgstr);
+                                       if(len) msgstr[len-1] = 0;
                                     }
 
-                                    delete msgid;
-                                    delete msgctxt;
-                                    delete msgstr;
+                                    if(msgid && msgstr)
+                                    {
+                                       ContextStringPair pair { msgid, msgctxt };
+                                       i18n = true;
+                                       if(!it.Index(pair, false))
+                                       {
+                                          msgid = null; msgctxt = null;
+                                          intlStrings[pair] = comments;
+                                          comments = { };
+                                       }
+                                       else
+                                       {
+                                          for(s : comments)
+                                             it.data.Add(s);
+                                          comments.RemoveAll();
+                                       }
+
+                                       delete msgid;
+                                       delete msgctxt;
+                                       delete msgstr;
+                                    }
                                  }
                               }
+                              comments.Free();
+                              delete comments;
+                              delete f;
                            }
-                           comments.Free();
-                           delete comments;
-                           delete f;
                         }
                      }
                   }
+                  count = 0;
                }
             }
 
index 69327f4..8d61e9a 100644 (file)
@@ -517,7 +517,15 @@ objdir:
        $(if $(wildcard $(OBJ)),,$(call mkdirq,$(OBJ)))
 
 $(OBJ)$(MODULE).main.ec: $(SYMBOLS) $(COBJECTS)
-       $(ECS) $(ARCH_FLAGS) $(ECSLIBOPT) $(SYMBOLS) $(IMPORTS) -symbols obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX) -o $(OBJ)$(MODULE).main.ec
+       @$(call rmq,$(OBJ)symbols.lst)
+       @$(call touch,$(OBJ)symbols.lst)
+       @$(call echo,$(SYMBOLS1)) >> $(OBJ)symbols.lst
+       @$(call echo,$(SYMBOLS2)) >> $(OBJ)symbols.lst
+       @$(call echo,$(SYMBOLS3)) >> $(OBJ)symbols.lst
+       @$(call echo,$(IMPORTS1)) >> $(OBJ)symbols.lst
+       @$(call echo,$(IMPORTS2)) >> $(OBJ)symbols.lst
+       @$(call echo,$(IMPORTS3)) >> $(OBJ)symbols.lst
+       $(ECS) $(ARCH_FLAGS) $(ECSLIBOPT) @$(OBJ)symbols.lst -symbols obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX) -o $(OBJ)$(MODULE).main.ec
 
 $(OBJ)$(MODULE).main.c: $(OBJ)$(MODULE).main.ec
        $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.sym -symbols $(OBJ)
@@ -547,8 +555,15 @@ endif
 endif
 
 $(TARGET): $(SOURCES) $(RESOURCES) $(SYMBOLS) $(OBJECTS) | objdir
+       @$(call rmq,$(OBJ)objects.lst)
+       @$(call touch,$(OBJ)objects.lst)
+       @$(call echo,$(_OBJECTS)) >> $(OBJ)objects.lst
+       @$(call echo,$(OBJ)$(MODULE).main$(O)) >> $(OBJ)objects.lst
+       @$(call echo,$(ECOBJECTS1)) >> $(OBJ)objects.lst
+       @$(call echo,$(ECOBJECTS2)) >> $(OBJ)objects.lst
+       @$(call echo,$(ECOBJECTS3)) >> $(OBJ)objects.lst
 ifndef STATIC_LIBRARY_TARGET
-       $(CC) $(OFLAGS) $(OBJECTS) $(LIBS) -o $(TARGET) $(SONAME) $(INSTALLNAME)
+       $(CC) $(OFLAGS) @$(OBJ)objects.lst $(LIBS) -o $(TARGET) $(SONAME) $(INSTALLNAME)
 ifndef NOSTRIP
        $(STRIP) $(STRIPOPT) $(TARGET)
 endif
@@ -577,7 +592,7 @@ endif
        $(EAR) aw$(EARFLAGS) $(TARGET) locale/pt_BR/LC_MESSAGES/ecere.mo "locale/pt_BR/LC_MESSAGES"
        $(EAR) aw$(EARFLAGS) $(TARGET) locale/ru_RU/LC_MESSAGES/ecere.mo "locale/ru_RU/LC_MESSAGES"
 else
-       $(AR) rcs $(TARGET) $(OBJECTS) $(LIBS)
+       $(AR) rcs $(TARGET) @$(OBJ)objects.lst $(LIBS)
 endif
        $(call mkdirq,../$(SODESTDIR))
        $(call cpq,$(TARGET),../$(SODESTDIR))
@@ -1905,6 +1920,9 @@ cleaneceretarget: objdir
        $(call rmq,$(TARGET))
 
 cleantarget: objdir
+       $(call rmq,$(OBJ)$(MODULE).main.o $(OBJ)$(MODULE).main.c $(OBJ)$(MODULE).main.ec $(OBJ)$(MODULE).main$(I) $(OBJ)$(MODULE).main$(S))
+       $(call rmq,$(OBJ)symbols.lst)
+       $(call rmq,$(OBJ)objects.lst)
        $(call rmq,$(TARGET))
 ifdef SHARED_LIBRARY_TARGET
 ifdef LINUX_TARGET
@@ -1919,7 +1937,6 @@ endif
 
 clean: cleantarget
        $(call rmq,$(_OBJECTS))
-       $(call rmq,$(OBJ)$(MODULE).main.o $(OBJ)$(MODULE).main.c $(OBJ)$(MODULE).main.ec $(OBJ)$(MODULE).main$(I) $(OBJ)$(MODULE).main$(S))
        $(call rmq,$(ECOBJECTS1))
        $(call rmq,$(ECOBJECTS2))
        $(call rmq,$(ECOBJECTS3))
index bdb05e6..b9b5276 100644 (file)
@@ -604,15 +604,15 @@ int OutputFileList(File f, char * name, Array<String> list, Map<String, int> var
    return numOfBreaks;
 }
 
-void OutputLinkObjectActions(File f, char * name, int parts)
+void OutputFileListActions(File f, char * name, int parts, char * fileName)
 {
    if(parts > 1)
    {
       int c;
       for(c=0; c<parts; c++)
-         f.Printf("\t@$(call echo,$(%s%d)) >> $(OBJ)linkobjects.lst\n", name, c+1);
+         f.Printf("\t@$(call echo,$(%s%d)) >> %s\n", name, c+1, fileName);
    } else if(parts) {
-      f.Printf("\t@$(call echo,$(%s)) >> $(OBJ)linkobjects.lst\n", name);
+      f.Printf("\t@$(call echo,$(%s)) >> %s\n", name, fileName);
    }
 }
 
@@ -2165,7 +2165,7 @@ private:
                      {
                         if(justPrint)
                            ide.outputView.buildBox.Logf("%s\n", line);
-                        if(!error && !found && strstr(line, "echo ") == line)
+                        if(!error && !found && strstr(line, "echo ") == line && strstr(line, "ECERE_SDK_SRC"))
                         {
                            strcpy(command, line+5);
                            error = true;
@@ -3243,8 +3243,12 @@ private:
          {
             // Main Module (Linking) for ECERE C modules
             f.Puts("$(OBJ)$(MODULE).main.ec: $(SYMBOLS) $(COBJECTS)\n");
+            f.Printf("\t@$(call rmq,$(OBJ)symbols.lst)\n");
+            f.Printf("\t@$(call touch,$(OBJ)symbols.lst)\n");
+            OutputFileListActions(f, "SYMBOLS", eCsourcesParts, "$(OBJ)symbols.lst");
+            OutputFileListActions(f, "IMPORTS", eCsourcesParts, "$(OBJ)symbols.lst");
             // use of objDirExpNoSpaces used instead of $(OBJ) to prevent problematic joining of arguments in ecs
-            f.Printf("\t$(ECS)%s $(ARCH_FLAGS) $(ECSLIBOPT) $(SYMBOLS) $(IMPORTS) -symbols %s -o $(call quote_path,$@)\n",
+            f.Printf("\t$(ECS)%s $(ARCH_FLAGS) $(ECSLIBOPT) @$(OBJ)symbols.lst -symbols %s -o $(call quote_path,$@)\n",
                GetConsole(config) ? " -console" : "", objDirExpNoSpaces);
             f.Puts("\n");
             // Main Module (Linking) for ECERE C modules
@@ -3269,24 +3273,24 @@ private:
          f.Printf("$(TARGET): $(SOURCES)%s $(RESOURCES) $(SYMBOLS) $(OBJECTS) | objdir%s\n",
                rcSourcesParts ? " $(RCSOURCES)" : "", sameOrRelObjTargetDirs ? "" : " targetdir");
 
-         f.Printf("\t@$(call rmq,$(OBJ)linkobjects.lst)\n");
-         f.Printf("\t@$(call touch,$(OBJ)linkobjects.lst)\n");
-         OutputLinkObjectActions(f, "_OBJECTS", objectsParts);
+         f.Printf("\t@$(call rmq,$(OBJ)objects.lst)\n");
+         f.Printf("\t@$(call touch,$(OBJ)objects.lst)\n");
+         OutputFileListActions(f, "_OBJECTS", objectsParts, "$(OBJ)objects.lst");
          if(rcSourcesParts)
          {
             f.Puts("ifdef WINDOWS_TARGET\n");
-            OutputLinkObjectActions(f, "RCOBJECTS", rcSourcesParts);
+            OutputFileListActions(f, "RCOBJECTS", rcSourcesParts, "$(OBJ)objects.lst");
             f.Puts("endif\n");
          }
          if(numCObjects)
          {
-            f.Printf("\t@$(call echo,$(OBJ)$(MODULE).main$(O)) >> $(OBJ)linkobjects.lst\n");
-            OutputLinkObjectActions(f, "ECOBJECTS", eCsourcesParts);
+            f.Printf("\t@$(call echo,$(OBJ)$(MODULE).main$(O)) >> $(OBJ)objects.lst\n");
+            OutputFileListActions(f, "ECOBJECTS", eCsourcesParts, "$(OBJ)objects.lst");
          }
 
          f.Puts("ifndef STATIC_LIBRARY_TARGET\n");
 
-         f.Printf("\t$(%s) $(OFLAGS) @$(OBJ)linkobjects.lst $(LIBS) %s-o $(TARGET) $(INSTALLNAME)\n", containsCXX ? "CXX" : "CC", containsCXX ? "-lstdc++ " : "");
+         f.Printf("\t$(%s) $(OFLAGS) @$(OBJ)objects.lst $(LIBS) %s-o $(TARGET) $(INSTALLNAME)\n", containsCXX ? "CXX" : "CC", containsCXX ? "-lstdc++ " : "");
          if(!GetDebug(config))
          {
             f.Puts("ifndef NOSTRIP\n");
@@ -3309,7 +3313,7 @@ private:
          if(resNode.files && resNode.files.count && !noResources)
             resNode.GenMakefileAddResources(f, resNode.path, config);
          f.Puts("else\n");
-         f.Puts("\t$(AR) rcs $(TARGET) @$(OBJ)linkobjects.lst $(LIBS)\n");
+         f.Puts("\t$(AR) rcs $(TARGET) @$(OBJ)objects.lst $(LIBS)\n");
          f.Puts("endif\n");
          f.Puts("ifdef SHARED_LIBRARY_TARGET\n");
          f.Puts("ifdef LINUX_TARGET\n");
@@ -3458,9 +3462,13 @@ private:
             GenMakefilePrintMainObjectRule(f, config);
 
          f.Printf("cleantarget: objdir%s\n", sameOrRelObjTargetDirs ? "" : " targetdir");
-         f.Puts("\t$(call rmq,$(TARGET))\n");
          if(numCObjects)
+         {
             f.Printf("\t$(call rmq,%s)\n", "$(OBJ)$(MODULE).main.o $(OBJ)$(MODULE).main.c $(OBJ)$(MODULE).main.ec $(OBJ)$(MODULE).main$(I) $(OBJ)$(MODULE).main$(S)");
+            f.Printf("\t$(call rmq,$(OBJ)symbols.lst)\n");
+         }
+         f.Printf("\t$(call rmq,$(OBJ)objects.lst)\n");
+         f.Puts("\t$(call rmq,$(TARGET))\n");
          f.Puts("ifdef SHARED_LIBRARY_TARGET\n");
          f.Puts("ifdef LINUX_TARGET\n");
          f.Puts("ifdef LINUX_HOST\n");
@@ -3473,7 +3481,6 @@ private:
          f.Puts("\n");
 
          f.Puts("clean: cleantarget\n");
-         f.Printf("\t$(call rmq,$(OBJ)linkobjects.lst)\n");
          OutputCleanActions(f, "OBJECTS", objectsParts);
          if(rcSourcesParts)
          {