Browse Source

Merge branch 'candidate-5.2.0'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 10 years ago
parent
commit
e9523e3bae

+ 1 - 1
docs/ECLLanguageReference/ECLR_mods/BltInFunc-KEYDIFF.xml

@@ -12,7 +12,7 @@
       <primary>KEYDIFF function</primary>
     </indexterm>(</emphasis><emphasis> index1, index2, file
   </emphasis><emphasis role="bold"> [, OVERWRITE<indexterm>
-      <primary>OVERRIGHT</primary>
+      <primary>OVERWRITE</primary>
     </indexterm> ] [</emphasis><emphasis>,</emphasis><emphasis role="bold">
   EXPIRE<indexterm>
       <primary>EXPIRE</primary>

+ 12 - 0
docs/ECLProgrammersGuide/CMakeLists.txt

@@ -17,3 +17,15 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} PrGd-Includer.xml "ECLProgrammersGuide" "PRG_Mods")
 
+set(zip_out_dir ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/docs)
+ADD_CUSTOM_COMMAND(
+	COMMAND mkdir -p ${zip_out_dir}
+	COMMAND mkdir -p ECL_Code_Files
+	COMMAND rm -rf ECL_Code_Files/*
+        COMMAND cp ${HPCC_SOURCE_DIR}/docs/ECLProgrammersGuide/PRG_Mods/"\"ECL Code Files\""/*.ecl ECL_Code_Files/
+        COMMAND zip -r  ${zip_out_dir}/ECL_Code_Files.zip ECL_Code_Files
+        OUTPUT ${zip_out_dir}/ECL_Code_Files.zip
+	)
+
+ADD_CUSTOM_TARGET(ECL_Code_Files ALL DEPENDS  ${zip_out_dir}/ECL_Code_Files.zip)
+

+ 1 - 1
docs/ECLProgrammersGuide/PRG_Mods/ECL Code Files/Soapcall1.ecl

@@ -4,7 +4,7 @@
 IMPORT $;
 
 OutRec1 := $.DeclareData.Layout_Person;
-RoxieIP := 'http://192.168.11.130:8002/WsEcl/soap/query/myroxie/roxieoverview1.1';
+RoxieIP := 'http://127.0.0.1:8002/WsEcl/soap/query/roxie/roxieoverview1.1';
 svc     := 'RoxieOverview1.1';
 
 InputRec := RECORD

+ 1 - 1
docs/ECLProgrammersGuide/PRG_Mods/ECL Code Files/Soapcall2.ecl

@@ -4,7 +4,7 @@
 IMPORT $;
 
 OutRec1 := $.DeclareData.Layout_Person;
-RoxieIP := 'http://192.168.11.130:8002/WsEcl/soap/query/myroxie/roxieoverview1.1';
+RoxieIP := 'http://127.0.0.1:8002/WsEcl/soap/query/roxie/roxieoverview1.1';
 svc     := 'RoxieOverview1.1';
 
 //recordset in, recordset out

+ 2 - 2
docs/ECLProgrammersGuide/PRG_Mods/ECL Code Files/Soapcall4.ecl

@@ -1,7 +1,7 @@
-//
+//
 //  Example code - use without restriction.  
 //
-RoxieIP := 'http://192.168.11.130:8002/WsEcl/soap/query/myroxie/soapcall3.1';			//Roxie
+RoxieIP := 'http://127.0.0.1:8002/WsEcl/soap/query/roxie/soapcall3.1';			//Roxie
 svc     := 'soapcall3.1';
 
 InRec := RECORD

+ 3 - 3
docs/ECLProgrammersGuide/PRG_Mods/PrG_SOAPCALL_fromTHOR_to_ROXIE.xml

@@ -24,7 +24,7 @@
     <programlisting>IMPORT $;
 
 OutRec1 := $.DeclareData.Layout_Person;
-RoxieIP := 'http://192.168.11.130:8002/WsEcl/soap/query/myroxie/roxieoverview1.1';
+RoxieIP := 'http://127.0.0.1:8002/WsEcl/soap/query/roxie/roxieoverview1.1';
 svc     := 'RoxieOverview1.1';
      
 InputRec := RECORD
@@ -57,7 +57,7 @@ OUTPUT(ManyRec1);</programlisting>
     <programlisting>IMPORT $;
 
 OutRec1 := $.DeclareData.Layout_Person;
-RoxieIP := 'http://192.168.11.130:8002/WsEcl/soap/query/myroxie/roxieoverview1.1';
+RoxieIP := 'http://127.0.0.1:8002/WsEcl/soap/query/roxie/roxieoverview1.1';
 svc     := 'RoxieOverview1.1';
 //recordset in, recordset out
 InRec := RECORD
@@ -259,7 +259,7 @@ END;</programlisting>
     like this (the only difference would be the IP and port you target for the
     query (contained in Soapcall4.ECL)):</para>
 
-    <programlisting>RoxieIP := 'http://192.168.11.130:8002/WsEcl/soap/query/myroxie/soapcall3.1'; //Roxie
+    <programlisting>RoxieIP := 'http://127.0.0.1:8002/WsEcl/soap/query/roxie/soapcall3.1'; //Roxie
 svc     := 'soapcall3.1';
 
 InRec := RECORD

+ 0 - 1
docs/ECLReference/CMakeLists.txt

@@ -18,7 +18,6 @@ GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
 
 SET(XSLTPROC_DEPENDENCIES)
 FOREACH(T ${Current_Targets})
-   MESSAGE("+++ ${T}")
    IF("${T}" MATCHES ".*ECLLanguageReference.*" OR
       "${T}" MATCHES ".*ECLProgrammersGuide.*" OR
       "${T}" MATCHES ".*ECLStandardLibraryReference.*")

+ 0 - 3
ecl/eclcc/eclcc.cpp

@@ -772,9 +772,6 @@ void EclCC::instantECL(EclCompileInstance & instance, IWorkUnit *wu, const char
                 if (generateOk && !optNoCompile)
                 {
                     Owned<ICppCompiler> compiler = createCompiler(processName.str());
-                    StringBuffer mainName(processName);
-                    mainName.append(".cpp");
-                    compiler->addSourceFile(mainName);
                     compiler->setSaveTemps(optSaveTemps);
 
                     bool compileOk = true;

+ 1 - 0
ecl/hqlcpp/hqlcpp.cpp

@@ -1750,6 +1750,7 @@ void HqlCppTranslator::cacheOptions()
         DebugOption(options.optimizeMax,"optimizeMax",false),
         DebugOption(options.useResultsForChildSpills,"useResultsForChildSpills",false),
         DebugOption(options.alwaysUseGraphResults,"alwaysUseGraphResults",false),
+        DebugOption(options.noConditionalLinks,"noConditionalLinks",false),
         DebugOption(options.reportAssertFilenameTail,"reportAssertFilenameTail",false),        
         DebugOption(options.newBalancedSpotter,"newBalancedSpotter",true),
         DebugOption(options.keyedJoinPreservesOrder,"keyedJoinPreservesOrder",true),

+ 1 - 0
ecl/hqlcpp/hqlcpp.ipp

@@ -740,6 +740,7 @@ struct HqlCppOptions
     bool                optimizeMax;
     bool                useResultsForChildSpills;
     bool                alwaysUseGraphResults;
+    bool                noConditionalLinks;
     bool                reportAssertFilenameTail;
     bool                newBalancedSpotter;
     bool                keyedJoinPreservesOrder;

+ 3 - 0
ecl/hqlcpp/hqlecl.cpp

@@ -500,6 +500,9 @@ void HqlDllGenerator::doExpand(HqlCppTranslator & translator)
     unsigned numExtraFiles = translator.getNumExtraCppFiles();
     bool isMultiFile = translator.spanMultipleCppFiles() && (numExtraFiles != 0);
     expandCode(MAIN_MODULE_TEMPLATE, ".cpp", code, isMultiFile, 0, translator.queryOptions().targetCompiler);
+    StringBuffer fullname;
+    fullname.append(wuname).append(".cpp");
+    sourceFiles.append(fullname);
     if (isMultiFile)
     {
         expandCode(HEADER_TEMPLATE, ".hpp", code, true, 0, translator.queryOptions().targetCompiler);

+ 1 - 1
ecl/hqlcpp/hqlresource.cpp

@@ -1944,7 +1944,7 @@ EclResourcer::EclResourcer(IErrorReceiver & _errors, IConstWorkUnit * _wu, Clust
     options.minimiseSpills = _translatorOptions.minimiseSpills;
     spillMultiCondition = _translatorOptions.spillMultiCondition;
     spotThroughAggregate = _translatorOptions.spotThroughAggregate && (targetClusterType != RoxieCluster) && (targetClusterType != ThorLCRCluster);
-    options.noConditionalLinks = (targetClusterType != HThorCluster);
+    options.noConditionalLinks = (targetClusterType == RoxieCluster) || ((targetClusterType != HThorCluster) && _translatorOptions.noConditionalLinks);
     options.hoistResourced = _translatorOptions.hoistResourced;
     options.alwaysUseGraphResults = _translatorOptions.alwaysUseGraphResults;
     options.useGraphResults = false;        // modified by later call

+ 6 - 10
ecllibrary/std/Date.ecl

@@ -613,8 +613,6 @@ EXPORT Seconds_t SecondsFromDateTimeRec(DateTime_rec datetime, BOOLEAN is_local_
     %y          year within century (00-99)
     %Y          Full year (yyyy)
     %j          Julian day (1-366)
-    %D          Same as %m/%d/%y
-    %F          Same as %Y-%m-%d
 
 Common date formats
     American    '%m/%d/%Y'  mm/dd/yyyy
@@ -656,8 +654,6 @@ EXPORT Date_t FromString(STRING date_text, VARSTRING format) :=
     %M          Minute (two digits)
     %S          Second (two digits)
     %t          Whitespace
-    %R          Same as %H:%M
-    %T          Same as %H:%M:%S
  */
 
 EXPORT Time_t FromStringToTime(STRING time_text, VARSTRING format) :=
@@ -701,12 +697,12 @@ EXPORT Time_t MatchTimeString(STRING time_text, SET OF VARSTRING formats) :=
  * @param format        The format template to use for the conversion;
  *                      see strftime() for appropriate values.  The maximum
  *                      length of the resulting string is 255 characters.
- *                      Optional; defaults to '%F' which is YYYY-MM-DD.
+ *                      Optional; defaults to '%Y-%m-%d' which is YYYY-MM-DD.
  * @return              Blank if date cannot be formatted, or the date in the
  *                      requested format.
  */
 
-EXPORT STRING DateToString(Date_t date, VARSTRING format = '%F') :=
+EXPORT STRING DateToString(Date_t date, VARSTRING format = '%Y-%m-%d') :=
     TimeLib.DateToString(date, format);
 
 
@@ -717,12 +713,12 @@ EXPORT STRING DateToString(Date_t date, VARSTRING format = '%F') :=
  * @param format        The format template to use for the conversion;
  *                      see strftime() for appropriate values.  The maximum
  *                      length of the resulting string is 255 characters.
- *                      Optional; defaults to '%T' which is HH:MM:SS.
+ *                      Optional; defaults to '%H:%M:%S' which is HH:MM:SS.
  * @return              Blank if the time cannot be formatted, or the time
  *                      in the requested format.
  */
 
-EXPORT STRING TimeToString(Time_t time, VARSTRING format = '%T') :=
+EXPORT STRING TimeToString(Time_t time, VARSTRING format = '%H:%M:%S') :=
     TimeLib.TimeToString(time, format);
 
 
@@ -733,11 +729,11 @@ EXPORT STRING TimeToString(Time_t time, VARSTRING format = '%T') :=
  * @param format        The format template to use for the conversion; see
  *                      strftime() for appropriate values.  The maximum length
  *                      of the resulting string is 255 characters.
- *                      Optional; defaults to '%FT%T' which is YYYY-MM-DDTHH:MM:SS.
+ *                      Optional; defaults to '%Y-%m-%dT%H:%M:%S' which is YYYY-MM-DDTHH:MM:SS.
  * @return              The converted seconds as a string.
  */
 
-EXPORT STRING SecondsToString(Seconds_t seconds, VARSTRING format = '%FT%T') :=
+EXPORT STRING SecondsToString(Seconds_t seconds, VARSTRING format = '%Y-%m-%dT%H:%M:%S') :=
     TimeLib.SecondsToString(seconds, format);
 
 

+ 9 - 11
ecllibrary/teststd/Date/TestFormat.ecl

@@ -7,7 +7,7 @@ IMPORT Std.Date;
 EXPORT TestFormat := MODULE
 
   SHARED DateFormats := ['%d %b %Y', '%Y %b %d', '%Y%m%d', '%Y-%m-%d', '%d/%m/%Y', '%m/%d/%Y'];
-  SHARED TimeFormats := ['%H%M%S', '%T', '%R'];
+  SHARED TimeFormats := ['%H%M%S', '%H:%M:%S', '%H:%M'];
 
   EXPORT TestConstant := [
     ASSERT(Date.FromStringToDate('19700001', '%Y%m%d') = 0, CONST);
@@ -20,11 +20,9 @@ EXPORT TestFormat := MODULE
     ASSERT(Date.FromStringToDate('31 \t jAN 12', '%d %b %Y') = 120131, CONST);
     ASSERT(Date.FromStringToDate('1 \t De   2056', '%d %b %Y') = 0, CONST);
     ASSERT(Date.FromStringToDate('1December1', '%d%b%Y') = 00011201, CONST);
-    ASSERT(Date.FromStringToDate('1970-02-01', '%F') = 19700201, CONST);
+    ASSERT(Date.FromStringToDate('1970-02-01', '%Y-%m-%d') = 19700201, CONST);
 
     ASSERT(Date.FromStringToTime('12:34:56', '%H:%M:%S') = 123456, CONST);
-    ASSERT(Date.FromStringToTime('12:34:56', '%T') = 123456, CONST);
-    ASSERT(Date.FromStringToTime('12:34', '%R') = 123400, CONST);
 
     ASSERT(TRUE)
   ];
@@ -55,19 +53,19 @@ EXPORT TestFormat := MODULE
     ASSERT(Date.MatchTimeString('12:34:56',TimeFormats) = 123456);
     ASSERT(Date.MatchTimeString('12:34',TimeFormats) = 123400);
 
-    ASSERT(Date.DateToString(19990201,'%F') = '1999-02-01');
+    ASSERT(Date.DateToString(19990201,'%Y-%m-%d') = '1999-02-01');
 
-    ASSERT(Date.TimeToString(123456,'%T') = '12:34:56');
+    ASSERT(Date.TimeToString(123456,'%H:%M:%S') = '12:34:56');
 
-    ASSERT(Date.SecondsToString(917872496,'%FT%T') = '1999-02-01T12:34:56');
+    ASSERT(Date.SecondsToString(917872496,'%Y-%m-%dT%H:%M:%S') = '1999-02-01T12:34:56');
 
-    ASSERT(Date.ConvertDateFormat('1/12/2011','%m/%d/%Y','%F') = '2011-01-12');
+    ASSERT(Date.ConvertDateFormat('1/12/2011','%m/%d/%Y','%Y-%m-%d') = '2011-01-12');
 
-    ASSERT(Date.ConvertTimeFormat('123456','%H%M%S','%T') = '12:34:56');
+    ASSERT(Date.ConvertTimeFormat('123456','%H%M%S','%H:%M:%S') = '12:34:56');
 
-    ASSERT(Date.ConvertDateFormatMultiple('1/31/2011',DateFormats,'%F') = '2011-01-31');
+    ASSERT(Date.ConvertDateFormatMultiple('1/31/2011',DateFormats,'%Y-%m-%d') = '2011-01-31');
 
-    ASSERT(Date.ConvertTimeFormatMultiple('123456',TimeFormats,'%T') = '12:34:56');
+    ASSERT(Date.ConvertTimeFormatMultiple('123456',TimeFormats,'%H:%M:%S') = '12:34:56');
 
     ASSERT(TRUE)
   ];

+ 33 - 29
esp/src/eclwatch/ESPResult.js

@@ -158,43 +158,47 @@ define([
 
         rowToTable: function (cell, __row, node) {
             var table = domConstruct.create("table", { border: 1, cellspacing: 0, width: "100%" }, node);
-            if (lang.exists("Row", cell)) {
-                cell = cell.Row;
-            }
             if (Object.prototype.toString.call(cell) === '[object Object]') {
-                //  Set of Scalar  ---
-                if (cell.Item && Object.prototype.toString.call(cell.Item) === '[object Array]') {
-                    for (var i = 0; i < cell.Item.length; ++i) {
-                        var tr = domConstruct.create("tr", null, table);
-                        domConstruct.create("td", { innerHTML: cell.Item[i] }, tr);
-                    }
+                //  Set of Scalar or "Row" ---
+                for (var key in cell) {
+                    this.rowToTable(cell[key], __row, node);
                 }
             } else if (Object.prototype.toString.call(cell) === '[object Array]') {
-                //  Child Dataset  ---
                 for (var i = 0; i < cell.length; ++i) {
-                    if (i == 0) {
+                    switch (Object.prototype.toString.call(cell[i])) {
+                    case "[object Boolean]":
+                    case "[object Number]":
+                    case "[object String]":
+                        //  Item in Scalar  ---
                         var tr = domConstruct.create("tr", null, table);
-                        for (var key in cell[i]) {
-                            var th = domConstruct.create("th", { innerHTML: entities.encode(key) }, tr);
+                        domConstruct.create("td", { innerHTML: cell[i] }, tr);
+                        break;
+                    default:
+                        //  Child Dataset  ---
+                        if (i === 0) {
+                            var tr = domConstruct.create("tr", null, table);
+                            for (var key in cell[i]) {
+                                var th = domConstruct.create("th", { innerHTML: entities.encode(key) }, tr);
+                            }
                         }
-                    }
-                    var tr = domConstruct.create("tr", null, table);
-                    for (var key in cell[i]) {
-                        if (cell[i][key]) {
-                            if (Object.prototype.toString.call(cell[i][key]) === '[object Object]' || Object.prototype.toString.call(cell[i][key]) === '[object Array]') {
-                                var td = domConstruct.create("td", null, tr);
-                                this.rowToTable(cell[i][key], cell[i], td);
-                            } else if (key.indexOf("__html", key.length - "__html".length) !== -1) {
-                                var td = domConstruct.create("td", { innerHTML : cell[i][key] }, tr);
-                            } else if (key.indexOf("__javascript", key.length - "__javascript".length) !== -1) {
-                                var td = domConstruct.create("td", null, tr);
-                                this.injectJavascript(cell[i][key], cell[i], td);
+                        var tr = domConstruct.create("tr", null, table);
+                        for (var key in cell[i]) {
+                            if (cell[i][key]) {
+                                if (Object.prototype.toString.call(cell[i][key]) === '[object Object]' || Object.prototype.toString.call(cell[i][key]) === '[object Array]') {
+                                    var td = domConstruct.create("td", null, tr);
+                                    this.rowToTable(cell[i][key], cell[i], td);
+                                } else if (key.indexOf("__html", key.length - "__html".length) !== -1) {
+                                    var td = domConstruct.create("td", { innerHTML: cell[i][key] }, tr);
+                                } else if (key.indexOf("__javascript", key.length - "__javascript".length) !== -1) {
+                                    var td = domConstruct.create("td", null, tr);
+                                    this.injectJavascript(cell[i][key], cell[i], td);
+                                } else {
+                                    var val = cell[i][key];
+                                    var td = domConstruct.create("td", { innerHTML: Object.prototype.toString.call(val) === '[object String]' ? entities.encode(val) : val }, tr);
+                                }
                             } else {
-                                var val = cell[i][key];
-                                var td = domConstruct.create("td", { innerHTML: Object.prototype.toString.call(val) === '[object String]' ? entities.encode(val) : val }, tr);
+                                var td = domConstruct.create("td", { innerHTML: "" }, tr);
                             }
-                        } else {
-                            var td = domConstruct.create("td", { innerHTML: "" }, tr);
                         }
                     }
                 }

+ 1 - 1
plugins/Rembed/CMakeLists.txt

@@ -50,7 +50,7 @@ if (USE_RINSIDE)
     HPCC_ADD_LIBRARY( Rembed SHARED ${SRCS} )
     if (${CMAKE_VERSION} VERSION_LESS "2.8.9")
       message("WARNING: Cannot set NO_SONAME. shlibdeps will give warnings when package is installed")
-    elif(NOT APPLE)
+    elseif(NOT APPLE)
       set_target_properties( Rembed PROPERTIES NO_SONAME 1 )
     endif()
 

+ 1 - 1
plugins/cassandra/CMakeLists.txt

@@ -94,7 +94,7 @@ if (USE_CASSANDRA)
     HPCC_ADD_LIBRARY( cassandraembed SHARED ${SRCS} )
     if (${CMAKE_VERSION} VERSION_LESS "2.8.9")
       message("WARNING: Cannot set NO_SONAME. shlibdeps will give warnings when package is installed")
-    elif(NOT APPLE)
+    elseif(NOT APPLE)
       set_target_properties( cassandraembed PROPERTIES NO_SONAME 1 )
     endif()
 

+ 1 - 1
plugins/javaembed/CMakeLists.txt

@@ -50,7 +50,7 @@ if (USE_JNI)
     HPCC_ADD_LIBRARY( javaembed SHARED ${SRCS} )
     if (${CMAKE_VERSION} VERSION_LESS "2.8.9")
       message("WARNING: Cannot set NO_SONAME. shlibdeps will give warnings when package is installed")
-    elif(NOT APPLE)
+    elseif(NOT APPLE)
       set_target_properties( javaembed PROPERTIES NO_SONAME 1 )
     endif()
 

+ 1 - 1
plugins/memcached/CMakeLists.txt

@@ -50,7 +50,7 @@ if (USE_MEMCACHED)
     HPCC_ADD_LIBRARY( memcached SHARED ${SRCS} )
     if (${CMAKE_VERSION} VERSION_LESS "2.8.9")
       message("WARNING: Cannot set NO_SONAME. shlibdeps will give warnings when package is installed")
-    elif(NOT APPLE)
+    elseif(NOT APPLE)
       set_target_properties( memcached PROPERTIES NO_SONAME 1 )
     endif()
 

+ 1 - 1
plugins/mysql/CMakeLists.txt

@@ -48,7 +48,7 @@ if (USE_MYSQL)
     HPCC_ADD_LIBRARY( mysqlembed SHARED ${SRCS} )
     if (${CMAKE_VERSION} VERSION_LESS "2.8.9")
       message("WARNING: Cannot set NO_SONAME. shlibdeps will give warnings when package is installed")
-    elif(NOT APPLE)
+    elseif(NOT APPLE)
       set_target_properties( mysqlembed PROPERTIES NO_SONAME 1 )
     endif()
 

+ 1 - 1
plugins/pyembed/CMakeLists.txt

@@ -54,7 +54,7 @@ if (USE_PYTHON)
     HPCC_ADD_LIBRARY( pyembed SHARED ${SRCS} )
     if (${CMAKE_VERSION} VERSION_LESS "2.8.9")
       message("WARNING: Cannot set NO_SONAME. shlibdeps will give warnings when package is installed")
-    elif(NOT APPLE)
+    elseif(NOT APPLE)
       set_target_properties( pyembed PROPERTIES NO_SONAME 1 )
     endif()
 

+ 1 - 1
plugins/redis/CMakeLists.txt

@@ -49,7 +49,7 @@ if (USE_REDIS)
     HPCC_ADD_LIBRARY( redis SHARED ${SRCS} )
     if (${CMAKE_VERSION} VERSION_LESS "2.8.9")
       message("WARNING: Cannot set NO_SONAME. shlibdeps will give warnings when package is installed")
-    elif(NOT APPLE)
+    elseif(NOT APPLE)
       set_target_properties( redis PROPERTIES NO_SONAME 1 )
     endif()
 

+ 1 - 1
plugins/sqlite3/CMakeLists.txt

@@ -47,7 +47,7 @@ if (USE_SQLITE3)
     HPCC_ADD_LIBRARY( sqlite3embed SHARED ${SRCS} )
     if (${CMAKE_VERSION} VERSION_LESS "2.8.9")
       message("WARNING: Cannot set NO_SONAME. shlibdeps will give warnings when package is installed")
-    elif(NOT APPLE)
+    elseif(NOT APPLE)
       set_target_properties( sqlite3embed PROPERTIES NO_SONAME 1 )
     endif()
 

+ 1 - 1
plugins/v8embed/CMakeLists.txt

@@ -48,7 +48,7 @@ if (USE_V8)
     HPCC_ADD_LIBRARY( v8embed SHARED ${SRCS} )
     if (${CMAKE_VERSION} VERSION_LESS "2.8.9")
       message("WARNING: Cannot set NO_SONAME. shlibdeps will give warnings when package is installed")
-    elif(NOT APPLE)
+    elseif(NOT APPLE)
       set_target_properties( v8embed PROPERTIES NO_SONAME 1 )
     endif()
 

+ 12 - 5
system/jlib/jcomp.cpp

@@ -468,6 +468,9 @@ bool CppCompiler::compileFile(IThreadPool * pool, const char * filename, Semapho
         return false;
 
     StringBuffer cmdline;
+    StringBuffer basename;
+    splitFilename(filename, &basename, &basename, &basename, NULL);
+
     cmdline.append(CC_NAME[targetCompiler]);
     if (precompileHeader)
         cmdline.append(CC_OPTION_PRECOMPILEHEADER[targetCompiler]);
@@ -492,11 +495,11 @@ bool CppCompiler::compileFile(IThreadPool * pool, const char * filename, Semapho
     {
         if (targetDir.get())
             cmdline.append(" /Fo").append("\"").append(targetDir).append("\"");
-        cmdline.append(" /Fd").append("\"").append(targetDir).append(createDLL ? SharedObjectPrefix : NULL).append(filename).append(".pdb").append("\"");//MORE: prefer create a single pdb file using coreName
+        cmdline.append(" /Fd").append("\"").append(targetDir).append(createDLL ? SharedObjectPrefix : NULL).append(basename).append(".pdb").append("\"");//MORE: prefer create a single pdb file using coreName
     }
     else
     {
-        cmdline.append(" -o ").append("\"").append(targetDir).append(filename).append('.');
+        cmdline.append(" -o ").append("\"").append(targetDir).append(basename).append('.');
         if (precompileHeader)
             cmdline.append(PCH_FILE_EXT[targetCompiler]);
         else
@@ -507,7 +510,7 @@ bool CppCompiler::compileFile(IThreadPool * pool, const char * filename, Semapho
     StringBuffer expanded;
     expandRootDirectory(expanded, cmdline);
     StringBuffer logFile;
-    logFile.append(filename).append(".log.tmp");
+    logFile.append(basename).append(".log.tmp");
     logFiles.append(logFile);
 
     Owned<CCompilerThreadParam> parm;
@@ -658,7 +661,11 @@ bool CppCompiler::doLink()
     cmdline.append(stdLibs);
 
     ForEachItemIn(i0, allSources)
-        cmdline.append(" ").append("\"").append(targetDir).append(allSources.item(i0)).append(".").append(OBJECT_FILE_EXT[targetCompiler]).append("\"");
+    {
+        StringBuffer objFilename;
+        getObjectName(objFilename, allSources.item(i0));
+        cmdline.append(" ").append("\"").append(objFilename).append("\"");
+    }
 
     cmdline.append(linkerOptions);
     cmdline.append(linkerLibraries);
@@ -706,7 +713,7 @@ void CppCompiler::expandRootDirectory(StringBuffer & expanded, StringBuffer & in
 StringBuffer & CppCompiler::getObjectName(StringBuffer & out, const char * filename)
 {
     out.append(targetDir);
-    splitFilename(filename, NULL, NULL, &out, &out);
+    splitFilename(filename, NULL, NULL, &out, NULL);
     return out.append(".").append(OBJECT_FILE_EXT[targetCompiler]);
 }
 

+ 1 - 1
testing/regress/ecl/date2str.ecl

@@ -46,7 +46,7 @@ ASSERT(std.date.datetostring(20140824, '%G') = '2014', CONST);
 ASSERT(std.date.datetostring(20140824, '%g') = '14', CONST);
 
 // Test the %Y-%m-%d (the ISO 8601 date format)
-ASSERT(std.date.datetostring(20140824, '%F') = '2014-08-24', CONST);
+ASSERT(std.date.datetostring(20140824, '%Y-%m-%d') = '2014-08-24', CONST);
 
 // Test the day of the year as a decimal number (range 001 to 366)
 ASSERT(std.date.datetostring(20140824, '%j') = '236', CONST);

+ 7 - 2
testing/regress/hpcc/util/ecl/command.py

@@ -115,6 +115,7 @@ class ECLcmd(Shell):
             raise err
         finally:
             res = queryWuid(eclfile.getJobname(), eclfile.getTaskId())
+            logging.debug("%3d. in finally -> 'wuid':'%s', 'state':'%s', data':'%s', ", eclfile.getTaskId(), wuid, state, data)
             if wuid ==  'N/A':
                 logging.debug("%3d. in finally queryWuid() -> 'result':'%s', 'wuid':'%s', 'state':'%s'", eclfile.getTaskId(),  res['result'],  res['wuid'],  res['state'])
                 wuid = res['wuid']
@@ -135,10 +136,10 @@ class ECLcmd(Shell):
                     eclfile.diff += '\t'+'Aborted ( reason: '+eclfile.getAbortReason()+' )'
                     test = False
                 elif eclfile.getIgnoreResult():
-                    logging.debug("%3d. Ignore result (ecl:'%s')", eclfile.getTaskId(),  eclfile.getBaseEcl())
+                    logging.debug("%3d. Ignore result (ecl:'%s')", eclfile.getTaskId(),  eclfile.getBaseEclRealName())
                     test = True
                 elif eclfile.testFail():
-                    logging.debug("%3d. Fail is the expected result (ecl:'%s')", eclfile.getTaskId(),  eclfile.getBaseEcl())
+                    logging.debug("%3d. Fail is the expected result (ecl:'%s')", eclfile.getTaskId(),  eclfile.getBaseEclRealName())
                     test = True
                 elif eclfile.testNoKey():
                     # keyfile comparaison disabled with //nokey tag
@@ -149,6 +150,10 @@ class ECLcmd(Shell):
                         eclfile.diff = ("%3d. Test: %s\n") % (eclfile.taskId, eclfile.getBaseEclRealName())
                         eclfile.diff += data
                     test = True
+                elif (res['state'] == 'failed') and ('error' in data):
+                    eclfile.diff = ("%3d. Test: %s\n") % (eclfile.taskId, eclfile.getBaseEclRealName())
+                    eclfile.diff += data
+                    test = False
                 else:
                     test = eclfile.testResults()
             report.addResult(eclfile)