Bläddra i källkod

Merge branch 'candidate-3.8.x'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 13 år sedan
förälder
incheckning
d700652c69
100 ändrade filer med 3136 tillägg och 403 borttagningar
  1. 16 0
      CMakeLists.txt
  2. 11 52
      cmake_modules/commonSetup.cmake
  3. 1 1
      common/fileview2/CMakeLists.txt
  4. 1 1
      common/monitoring/prosysinfo/CMakeLists.txt
  5. 64 51
      dali/base/dacsds.cpp
  6. 2 0
      dali/base/dacsds.ipp
  7. 20 6
      dali/base/dasess.cpp
  8. 1 5
      dali/base/dasubs.cpp
  9. 1 1
      dali/dafilesrv/dafilesrv.cmake
  10. 1 1
      dali/dafilesrv/dafscontrol.cmake
  11. 1 1
      dali/daliadmin/CMakeLists.txt
  12. 1 1
      dali/dalidiag/CMakeLists.txt
  13. 1 1
      dali/dalistop/CMakeLists.txt
  14. 1 1
      dali/datest/datest.cmake
  15. 1 1
      dali/datest/dfuwutest.cmake
  16. 1 1
      dali/daunittest/CMakeLists.txt
  17. 1 1
      dali/dfu/dfuserver.cmake
  18. 1 1
      dali/dfuplus/CMakeLists.txt
  19. 1 1
      dali/dfuxref/CMakeLists.txt
  20. 1 1
      dali/ft/ftslave.cmake
  21. 1 1
      dali/hellodali/CMakeLists.txt
  22. 1 1
      dali/regress/CMakeLists.txt
  23. 2 2
      dali/sasha/CMakeLists.txt
  24. 1 1
      dali/server/CMakeLists.txt
  25. 1 1
      dali/treeview/CMakeLists.txt
  26. 1 1
      dali/updtdalienv/CMakeLists.txt
  27. 1 1
      deployment/configgen/CMakeLists.txt
  28. 1 1
      deployment/envgen/CMakeLists.txt
  29. 2 0
      docs/HPCCClientTools/CMakeLists.txt
  30. 142 0
      docs/HPCCClientTools/CT_Mods/CT_Overview_withoutIDE.xml
  31. 1 4
      docs/HPCCClientTools/ClientTools.xml
  32. 74 0
      docs/HPCCClientTools/TheECLIDEandHPCCClientTools.xml
  33. 13 13
      docs/HPCCDataHandling/DataHandling.xml
  34. 10 13
      docs/RDDERef/RDDERef.xml
  35. 3 3
      docs/UsingConfigManager/UsingConfigManager.xml
  36. 499 0
      docs/Visualizing/Visualizing.xml
  37. BIN
      docs/images/RM-03.jpg
  38. BIN
      docs/images/viz01.jpg
  39. BIN
      docs/images/viz02a.jpg
  40. BIN
      docs/images/viz03.jpg
  41. BIN
      docs/images/viz04.jpg
  42. BIN
      docs/images/viz05.jpg
  43. BIN
      docs/images/viz06.jpg
  44. 1 1
      ecl/agentexec/CMakeLists.txt
  45. 1 1
      ecl/agentexec/agentexec.cmake
  46. 3 3
      ecl/ecl-package/CMakeLists.txt
  47. 1 1
      ecl/eclagent/CMakeLists.txt
  48. 1 1
      ecl/eclcc/CMakeLists.txt
  49. 27 7
      ecl/eclcc/eclcc.cpp
  50. 1 1
      ecl/eclccserver/CMakeLists.txt
  51. 1 1
      ecl/eclcmd/CMakeLists.txt
  52. 2 2
      ecl/eclcmd/queries/CMakeLists.txt
  53. 1 1
      ecl/eclplus/CMakeLists.txt
  54. 1 1
      ecl/eclscheduler/CMakeLists.txt
  55. 7 0
      ecl/hqlcpp/hqlhtcpp.cpp
  56. 1 1
      ecl/scheduleadmin/CMakeLists.txt
  57. 1 1
      ecl/wutest/CMakeLists.txt
  58. 1 1
      esp/clients/WUManager/CMakeLists.txt
  59. 2 2
      esp/files/scripts/configmgr/navtree.js
  60. 1 1
      esp/platform/CMakeLists.txt
  61. 1 1
      esp/services/esp_compile_scm/CMakeLists.txt
  62. 1 1
      esp/test/httptest/CMakeLists.txt
  63. 1 1
      esp/tools/soapplus/CMakeLists.txt
  64. 1 1
      initfiles/CMakeLists.txt
  65. 52 0
      lib2/CMakeLists.txt
  66. 1 1
      plugins/dataconnectors/hdfsconnector/CMakeLists.txt
  67. 3 19
      plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/ECLEngine.java
  68. 6 53
      plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/HPCCConnection.java
  69. 29 75
      plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/HPCCDatabaseMetaData.java
  70. 2 1
      plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/test/jdbcdriver/HPCCDriverTest.java
  71. 6 3
      plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/test/jdbcdriver/HPCCDriverTestThread.java
  72. 90 26
      plugins/unicodelib/unicodelib.cpp
  73. 1 1
      roxie/roxie/CMakeLists.txt
  74. 1 1
      roxie/roxieclienttest/CMakeLists.txt
  75. 1 1
      roxie/roxiepipe/CMakeLists.txt
  76. 1 1
      roxie/udplib/udptransport.cmake
  77. 1 1
      services/runagent/frunagent.cmake
  78. 1 1
      services/runagent/frunssh.cmake
  79. 1 1
      system/mp/test/CMakeLists.txt
  80. 1 1
      system/security/test/ldapsecuritytest/CMakeLists.txt
  81. 1 1
      system/security/test/myssl/CMakeLists.txt
  82. 1 1
      system/xmllibtest/CMakeLists.txt
  83. 1293 0
      testing/ecl/key/prefixjoinu.xml
  84. 691 0
      testing/ecl/prefixjoinu.ecl
  85. 1 1
      thorlcr/master/CMakeLists.txt
  86. 1 1
      thorlcr/slave/CMakeLists.txt
  87. 1 1
      tools/backupnode/CMakeLists.txt
  88. 1 1
      tools/combine/CMakeLists.txt
  89. 1 1
      tools/copyexp/CMakeLists.txt
  90. 1 1
      tools/dumpkey/CMakeLists.txt
  91. 1 1
      tools/esdl/CMakeLists.txt
  92. 1 1
      tools/esdl/esdl.cmake
  93. 1 1
      tools/fcached/CMakeLists.txt
  94. 1 1
      tools/genht/CMakeLists.txt
  95. 1 1
      tools/hidl/CMakeLists.txt
  96. 1 1
      tools/keydiff/keydiff.cmake
  97. 1 1
      tools/keydiff/keypatch.cmake
  98. 1 1
      tools/pskill/CMakeLists.txt
  99. 1 1
      tools/pstart/CMakeLists.txt
  100. 0 0
      tools/start-stop-daemon/CMakeLists.txt

+ 16 - 0
CMakeLists.txt

@@ -121,6 +121,9 @@ if ( NOT MAKE_DOCS_ONLY )
     HPCC_ADD_SUBDIRECTORY (thorlcr "PLATFORM")
 endif()
 HPCC_ADD_SUBDIRECTORY (docs "PLATFORM")
+if (APPLE)
+  HPCC_ADD_SUBDIRECTORY (lib2)
+endif (APPLE)
 
 ###
 ## CPack install and packaging setup.
@@ -279,6 +282,19 @@ else()
     message("WARNING: CMAKE 2.8.1 or later required to create RPMs from this project")
 endif()
 
+if (APPLE)
+    set ( CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_RPM_PACKAGE_VERSION}_${version}-${stagever}-${CPACK_SYSTEM_NAME}")
+    set ( CPACK_MONOLITHIC_INSTALL TRUE )
+    set ( CPACK_PACKAGE_VENDOR "HPCC Systems" )
+    file(WRITE "${PROJECT_BINARY_DIR}/welcome.txt" 
+        "HPCC Systems - Client Tools\r"
+        "===========================\r\r"
+        "This installer will install the HPCC Systems Client Tools.")
+    set ( CPACK_RESOURCE_FILE_README "${PROJECT_BINARY_DIR}/welcome.txt" )
+    set ( CPACK_RESOURCE_FILE_LICENSE "${HPCC_SOURCE_DIR}/${LICENSE_FILE}" )
+    set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "HPCC Systems Client Tools." )
+endif()
+
 ###
 ## Below are the non-compile based install scripts required for
 ## the hpcc platform.

+ 11 - 52
cmake_modules/commonSetup.cmake

@@ -171,6 +171,10 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
     endif ()
   endif ()
 
+  macro(HPCC_ADD_EXECUTABLE target)
+    add_executable(${target} ${ARGN})
+  endmacro(HPCC_ADD_EXECUTABLE target)
+
   macro(HPCC_ADD_LIBRARY target)
     add_library(${target} ${ARGN})
   endmacro(HPCC_ADD_LIBRARY target)
@@ -473,7 +477,11 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
   ###
   ## The following sets the install directories and names.
   ###
-  set ( OSSDIR "${DIR_NAME}" )
+  if ( PLATFORM )
+    set ( OSSDIR "${DIR_NAME}" )
+  else()
+    set ( OSSDIR "${DIR_NAME}/${version}/clienttools" )
+  endif()
   set ( CPACK_INSTALL_PREFIX "${PREFIX}" )
   set ( CPACK_PACKAGING_INSTALL_PREFIX "${PREFIX}" )
   set ( CMAKE_INSTALL_PREFIX "${PREFIX}" )
@@ -481,60 +489,11 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
   SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 
   SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OSSDIR}/lib")
   SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
-
-  MACRO (FIXUP_MACPORTS apps dylibs)
-	foreach(dylib ${dylibs})
-		get_filename_component(dylib_path ${dylib} REALPATH)
-		install(PROGRAMS "${dylib_path}" DESTINATION "${OSSDIR}/lib2")
-	endforeach(dylib)
-	foreach(dylib ${dylibs})
-		get_filename_component(dylib_path ${dylib} REALPATH)
-		get_filename_component(dylib_name_ext ${dylib_path} NAME)
-		install(CODE "
-				execute_process(COMMAND install_name_tool -id \"@loader_path/../lib2/${dylib_name_ext}\" ${CMAKE_INSTALL_PREFIX}/${OSSDIR}/lib2/${dylib_name_ext})
-		" ) 
-		foreach(app ${apps})
-			#HACK HACK - Could be done generically with some REGEX?
-			string(REPLACE ".28.0.dylib" ".28.dylib" dylib_28_path "${dylib_path}")
-			string(REPLACE ".48.1.dylib" ".48.dylib" dylib_48_path "${dylib_path}")
-			install(CODE "
-				execute_process(COMMAND install_name_tool -change \"${dylib_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" ${EXECUTABLE_OUTPUT_PATH}/${app})
-				execute_process(COMMAND install_name_tool -change \"${dylib_28_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" ${EXECUTABLE_OUTPUT_PATH}/${app})
-				execute_process(COMMAND install_name_tool -change \"${dylib_48_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" ${EXECUTABLE_OUTPUT_PATH}/${app})
-			" ) 
-		endforeach(app)
-	endforeach(dylib)
-  ENDMACRO()
-
   if (APPLE)
-    SET(CMAKE_INSTALL_RPATH "@loader_path/../lib")
+    set(CMAKE_INSTALL_RPATH "@loader_path/../lib")
     set(CMAKE_INSTALL_NAME_DIR "@loader_path/../lib") 
-    set(APPS
-      "dafilesrv"
-      "dfuplus"
-      "ecl"
-      "ecl-package"
-      "ecl-queries"
-      "eclcc"
-      "eclplus"
-      "wuget"
-    )
-    set(DYLIBS)
-    if (USE_ICU)
-      set(DYLIBS ${DYLIBS} ${ICU_LIBRARIES})
-    endif ()
-    if (USE_BOOST_REGEX)
-      set(DYLIBS ${DYLIBS} ${BOOST_REGEX_LIBRARIES})
-    endif ()
-    if (USE_XALAN)
-      set(DYLIBS ${DYLIBS} ${XALAN_LIBRARIES})
-    endif ()
-    if (USE_XERCES)
-      set(DYLIBS ${DYLIBS} ${XERCES_LIBRARIES})
-    endif ()
-    FIXUP_MACPORTS("${APPS}" "${DYLIBS}")
   endif()
-  
+
   MACRO (FETCH_GIT_TAG workdir edition result)
       execute_process(COMMAND "${GIT_COMMAND}" describe --tags --dirty --abbrev=6 --match ${edition}*
         WORKING_DIRECTORY "${workdir}"

+ 1 - 1
common/fileview2/CMakeLists.txt

@@ -107,7 +107,7 @@ set (    SRCS
 ADD_DEFINITIONS ( -D_CONSOLE )
 
 if( PLATFORM )
-    add_executable ( fvserver ${SRCS} )
+    HPCC_ADD_EXECUTABLE ( fvserver ${SRCS} )
     set_target_properties(fvserver PROPERTIES 
         COMPILE_FLAGS -D_CONSOLE
     )

+ 1 - 1
common/monitoring/prosysinfo/CMakeLists.txt

@@ -29,5 +29,5 @@ set (    SRCS
          main.cpp 
     )
 
-add_executable ( prosysinfo ${SRCS} )
+HPCC_ADD_EXECUTABLE ( prosysinfo ${SRCS} )
 install ( TARGETS prosysinfo DESTINATION ${OSSDIR}/bin )

+ 64 - 51
dali/base/dacsds.cpp

@@ -1418,74 +1418,87 @@ IPropertyTreeIterator *CClientSDSManager::getElements(CRemoteConnection &connect
     return NULL;
 }
 
+void CClientSDSManager::noteDisconnected(CRemoteConnection &connection)
+{
+    connection.setConnected(false);
+    connections.removeExact(&connection);
+}
+
 void CClientSDSManager::commit(CRemoteConnection &connection, bool *disconnectDeleteRoot)
 {
     CriticalBlock b(crit); // if >1 commit per client concurrently would cause problems with serverId.
 
     CClientRemoteTree *tree = (CClientRemoteTree *) connection.queryRoot();
 
-    CMessageBuffer mb;
-    mb.append((int)DAMP_SDSCMD_DATA);
-    mb.append(connection.queryConnectionId());
-    if (disconnectDeleteRoot)
-    {
-        mb.append((byte)(0x80 + 1)); // kludge, high bit to indicate new client format. (for backward compat.)
-        mb.append(*disconnectDeleteRoot);
-    }
-    else
-        mb.append((byte)0x80); // kludge, high bit to indicate new client format. (for backward compat.)
-    bool lazyFetch = connection.setLazyFetch(false);
-    Owned<IPropertyTree> changes = tree->collateData();
-    connection.setLazyFetch(lazyFetch);
-
-    if (NULL == disconnectDeleteRoot && !changes) return;
-    if (changes) changes->serialize(mb);
     try
     {
-        if (!sendRequest(mb))
-            throw MakeSDSException(SDSExcpt_FailedToCommunicateWithServer, "committing");
-    }
-    catch (IDaliClient_Exception *e)
-    {
-        if (DCERR_server_closed == e->errorCode())
+        CMessageBuffer mb;
+        mb.append((int)DAMP_SDSCMD_DATA);
+        mb.append(connection.queryConnectionId());
+        if (disconnectDeleteRoot)
         {
-            if (changes)
-                WARNLOG("Dali server disconnect, failed to commit data");
-            e->Release();
-            return;
+            mb.append((byte)(0x80 + 1)); // kludge, high bit to indicate new client format. (for backward compat.)
+            mb.append(*disconnectDeleteRoot);
         }
         else
-            throw;
-    }
+            mb.append((byte)0x80); // kludge, high bit to indicate new client format. (for backward compat.)
+        bool lazyFetch = connection.setLazyFetch(false);
+        Owned<IPropertyTree> changes = tree->collateData();
+        connection.setLazyFetch(lazyFetch);
+
+        if (NULL == disconnectDeleteRoot && !changes) return;
+        if (changes) changes->serialize(mb);
+        try
+        {
+            if (!sendRequest(mb))
+                throw MakeSDSException(SDSExcpt_FailedToCommunicateWithServer, "committing");
+        }
+        catch (IDaliClient_Exception *e)
+        {
+            if (DCERR_server_closed == e->errorCode())
+            {
+                if (changes)
+                    WARNLOG("Dali server disconnect, failed to commit data");
+                e->Release();
+                if (disconnectDeleteRoot)
+                    noteDisconnected(connection);
+                return; // JCSMORE does this really help, shouldn't it just throw?
+            }
+            else
+                throw;
+        }
 
-    SdsReply replyMsg;
-    mb.read((int &)replyMsg);
-    
-    switch (replyMsg)
-    {
-        case DAMP_SDSREPLY_OK:
+        SdsReply replyMsg;
+        mb.read((int &)replyMsg);
+
+        switch (replyMsg)
         {
-            bool lazyFetch = connection.setLazyFetch(false);
-            // NOTE: this means that send collated data order and the following order have to match!
-            // JCSMORE - true but.. hmm.. (could possibly have alternative lookup scheme)
-            tree->clearCommitChanges(&mb);
-            assertex(mb.getPos() == mb.length()); // must have read it all
-            connection.setLazyFetch(lazyFetch);
-
-            if (disconnectDeleteRoot)
+            case DAMP_SDSREPLY_OK:
             {
-                connection.setConnected(false);
-                connections.removeExact(&connection);
+                bool lazyFetch = connection.setLazyFetch(false);
+                // NOTE: this means that send collated data order and the following order have to match!
+                // JCSMORE - true but.. hmm.. (could possibly have alternative lookup scheme)
+                tree->clearCommitChanges(&mb);
+                assertex(mb.getPos() == mb.length()); // must have read it all
+                connection.setLazyFetch(lazyFetch);
+                break;
             }
-            break;
+            case DAMP_SDSREPLY_EMPTY:
+                break;
+            case DAMP_SDSREPLY_ERROR:
+                throwMbException("SDS Reply Error ", mb);
+            default:
+                assertex(false);
         }
-        case DAMP_SDSREPLY_EMPTY:
-            break;
-        case DAMP_SDSREPLY_ERROR:
-            throwMbException("SDS Reply Error ", mb);
-        default:
-            assertex(false);
     }
+    catch (IException *)
+    {
+        if (disconnectDeleteRoot)
+            noteDisconnected(connection);
+        throw;
+    }
+    if (disconnectDeleteRoot)
+        noteDisconnected(connection);
 }
 
 void CClientSDSManager::changeMode(CRemoteConnection &connection, unsigned mode, unsigned timeout, bool suppressReloads)

+ 2 - 0
dali/base/dacsds.ipp

@@ -406,6 +406,8 @@ public:
     virtual bool updateEnvironment(IPropertyTree *newEnv, bool forceGroupUpdate, StringBuffer &response);
 
 private:
+    void noteDisconnected(CRemoteConnection &connection);
+
     CriticalSection crit;
     CCopyConnectionHashTable connections;
     Semaphore concurrentRequests;

+ 20 - 6
dali/base/dasess.cpp

@@ -1515,6 +1515,7 @@ void setClientAuth(IDaliClientAuthConnection *authconn)
 
 
 
+#define REG_SLEEP 5000
 bool registerClientProcess(ICommunicator *comm, IGroup *& retcoven,unsigned timeout,DaliClientRole role)
 {
     // NB doesn't use coven as not yet set up
@@ -1522,7 +1523,8 @@ bool registerClientProcess(ICommunicator *comm, IGroup *& retcoven,unsigned time
         return false;
     CTimeMon tm(timeout);
     retcoven = NULL;
-    unsigned t=5000;
+    unsigned nextLog = 0, lastNextLog = 0;
+    unsigned t=REG_SLEEP;
     unsigned remaining;
     rank_t r;
     while (!tm.timedout(&remaining)) {
@@ -1592,13 +1594,25 @@ bool registerClientProcess(ICommunicator *comm, IGroup *& retcoven,unsigned time
                 return true;
             }
         }
-        bool timedout = tm.timedout();
         StringBuffer str;
-        PROGLOG("Failed to connect to Dali Server %s%s",comm->queryGroup().queryNode(r).endpoint().getUrlStr(str).str(),timedout?"":". Retrying...");
-        if (timedout)
+        PROGLOG("Failed to connect to Dali Server %s.", comm->queryGroup().queryNode(r).endpoint().getUrlStr(str).str());
+        if (tm.timedout())
+        {
+            PROGLOG("%s", str.append(" Timed out.").str());
             break;
-        Sleep(t);
-        t *= 2;
+        }
+        else if (0 == nextLog)
+        {
+            PROGLOG("%s", str.append(" Retrying...").str());
+            if ((lastNextLog * REG_SLEEP) >= 60000) // limit to a minute between logging
+                nextLog = 60000 / REG_SLEEP;
+            else
+                nextLog = lastNextLog + 2; // wait +2 REG_SLEEP pauses before next logging
+            lastNextLog = nextLog;
+        }
+        else
+            --nextLog;
+        Sleep(REG_SLEEP);
     }
     return false;
 }

+ 1 - 5
dali/base/dasubs.cpp

@@ -465,8 +465,7 @@ public:
         }
         catch (IDaliClient_Exception *e) {
             PrintExceptionLog(e,"Dali CDaliSubscriptionManagerStub::add");
-            e->Release();
-            abort();
+            throw;
         }
     }
 
@@ -486,10 +485,7 @@ public:
         }
         catch (IDaliClient_Exception *e) {
             PrintExceptionLog(e,"Dali CDaliSubscriptionManagerStub::remove");
-            if (e->errorCode()!=DCERR_server_closed)
-                abort();
             e->Release();
-            return;
         }
         subscriptions.remove(idx);
         ids.remove(idx);

+ 1 - 1
dali/dafilesrv/dafilesrv.cmake

@@ -39,7 +39,7 @@ if (WIN32)
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
 endif()
 
-add_executable ( dafilesrv ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dafilesrv ${SRCS} )
 set_target_properties (dafilesrv PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 install ( TARGETS dafilesrv DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dafilesrv

+ 1 - 1
dali/dafilesrv/dafscontrol.cmake

@@ -40,7 +40,7 @@ include_directories (
          ./../../common/environment 
     )
 
-add_executable ( dafscontrol ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dafscontrol ${SRCS} )
 set_target_properties (dafscontrol PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 install ( TARGETS dafscontrol DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dafscontrol  

+ 1 - 1
dali/daliadmin/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( daliadmin ${SRCS} )
+HPCC_ADD_EXECUTABLE ( daliadmin ${SRCS} )
 install ( TARGETS daliadmin DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( daliadmin  
          jlib

+ 1 - 1
dali/dalidiag/CMakeLists.txt

@@ -40,7 +40,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( dalidiag ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dalidiag ${SRCS} )
 install ( TARGETS dalidiag DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dalidiag 
          jlib

+ 1 - 1
dali/dalistop/CMakeLists.txt

@@ -40,7 +40,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( dalistop ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dalistop ${SRCS} )
 install ( TARGETS dalistop DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dalistop 
          jlib

+ 1 - 1
dali/datest/datest.cmake

@@ -37,7 +37,7 @@ include_directories (
          ./../../system/jlib 
     )
 
-add_executable ( datest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( datest ${SRCS} )
 set_target_properties (datest PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 target_link_libraries ( datest 
          jlib

+ 1 - 1
dali/datest/dfuwutest.cmake

@@ -41,7 +41,7 @@ include_directories (
          ../../common/environment 
     )
 
-add_executable ( dfuwutest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dfuwutest ${SRCS} )
 set_target_properties (dfuwutest PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 target_link_libraries ( dfuwutest
          workunit

+ 1 - 1
dali/daunittest/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( daunittest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( daunittest ${SRCS} )
 target_link_libraries ( daunittest
          jlib
          mp 

+ 1 - 1
dali/dfu/dfuserver.cmake

@@ -48,7 +48,7 @@ include_directories (
          ./../../common/workunit 
     )
 
-add_executable ( dfuserver ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dfuserver ${SRCS} )
 set_target_properties ( dfuserver PROPERTIES 
         COMPILE_FLAGS "-D_CONSOLE -D_DFUSERVER"
         )

+ 1 - 1
dali/dfuplus/CMakeLists.txt

@@ -57,7 +57,7 @@ set_source_files_properties (dfuplus.cpp PROPERTIES COMPILE_FLAGS -DDAFILESRV_LO
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( dfuplus ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dfuplus ${SRCS} )
 add_dependencies ( dfuplus espscm )
 install ( TARGETS dfuplus DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dfuplus

+ 1 - 1
dali/dfuxref/CMakeLists.txt

@@ -44,7 +44,7 @@ include_directories (
 
 ADD_DEFINITIONS ( -D_CONSOLE -DMAIN_DFUXREF )
 
-add_executable ( dfuxref ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dfuxref ${SRCS} )
 install ( TARGETS dfuxref DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dfuxref 
          jlib

+ 1 - 1
dali/ft/ftslave.cmake

@@ -37,7 +37,7 @@ include_directories (
          ./../../system/jlib 
     )
 
-add_executable ( ftslave ${SRCS} )
+HPCC_ADD_EXECUTABLE ( ftslave ${SRCS} )
 set_target_properties (ftslave PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 install ( TARGETS ftslave DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( ftslave

+ 1 - 1
dali/hellodali/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( hellodali ${SRCS} )
+HPCC_ADD_EXECUTABLE ( hellodali ${SRCS} )
 install ( TARGETS hellodali DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( hellodali
          jlib

+ 1 - 1
dali/regress/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( daregress ${SRCS} )
+HPCC_ADD_EXECUTABLE ( daregress ${SRCS} )
 install ( TARGETS daregress DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( daregress  
          jlib

+ 2 - 2
dali/sasha/CMakeLists.txt

@@ -68,7 +68,7 @@ if (WIN32)
     endif ()
 endif()
 
-add_executable ( saserver ${SRCS} )
+HPCC_ADD_EXECUTABLE ( saserver ${SRCS} )
 install ( TARGETS saserver DESTINATION ${OSSDIR}/bin)
 
 
@@ -103,7 +103,7 @@ include_directories (
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 
-add_executable ( sasha ${SRCS} )
+HPCC_ADD_EXECUTABLE ( sasha ${SRCS} )
 install ( TARGETS sasha DESTINATION ${OSSDIR}/bin)
 
 target_link_libraries ( sasha 

+ 1 - 1
dali/server/CMakeLists.txt

@@ -53,7 +53,7 @@ if (WIN32)
     endif ()
 endif()
 
-add_executable ( daserver ${SRCS} )
+HPCC_ADD_EXECUTABLE ( daserver ${SRCS} )
 install ( TARGETS daserver DESTINATION ${OSSDIR}/bin)
 target_link_libraries ( daserver 
          jlib

+ 1 - 1
dali/treeview/CMakeLists.txt

@@ -45,7 +45,7 @@ if (WIN32)
         )
 
     add_definitions("-D_AFXDLL")
-    add_executable ( treeview WIN32 ${SRCS} )
+    HPCC_ADD_EXECUTABLE ( treeview WIN32 ${SRCS} )
     install ( TARGETS treeview DESTINATION ${OSSDIR}/bin )
     target_link_libraries ( treeview
              jlib

+ 1 - 1
dali/updtdalienv/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( updtdalienv ${SRCS} )
+HPCC_ADD_EXECUTABLE ( updtdalienv ${SRCS} )
 install ( TARGETS updtdalienv DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( updtdalienv  
          jlib

+ 1 - 1
deployment/configgen/CMakeLists.txt

@@ -40,7 +40,7 @@ include_directories (
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 
-add_executable ( configgen ${SRCS} )
+HPCC_ADD_EXECUTABLE ( configgen ${SRCS} )
 install ( TARGETS configgen DESTINATION ${OSSDIR}/sbin )
 target_link_libraries ( configgen 
         deploy 

+ 1 - 1
deployment/envgen/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 
-add_executable ( envgen ${SRCS} )
+HPCC_ADD_EXECUTABLE ( envgen ${SRCS} )
 install ( TARGETS envgen DESTINATION ${OSSDIR}/sbin )
 target_link_libraries ( envgen 
         deploy

+ 2 - 0
docs/HPCCClientTools/CMakeLists.txt

@@ -17,3 +17,5 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} ClientTools.xml "HPCCClientTools" "CT_Mods")
 
+DOCBOOK_TO_PDF( ${FO_XSL} TheECLIDEandHPCCClientTools.xml "TheECLIDEandHPCCClientTools" "CT_Mods")
+

+ 142 - 0
docs/HPCCClientTools/CT_Mods/CT_Overview_withoutIDE.xml

@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="CT_Overview">
+  <title><emphasis role="bold">Overview</emphasis></title>
+
+  <para>This manual contains documentation for the set of Client Tools for use
+  with the LexisNexis HPCC. These tools include:</para>
+
+  <informaltable colsep="0" frame="none" rowsep="0">
+    <tgroup cols="2">
+      <colspec align="left" colwidth="122.40pt" />
+
+      <colspec />
+
+      <tbody>
+       
+       
+        <row>
+          <entry><emphasis role="bold">ECLPlus</emphasis></entry>
+
+          <entry>Command line ECL execution tool to facilitate automation of
+          ECL Code execution.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis role="bold">ECL</emphasis></entry>
+
+          <entry>Command line ECL tool.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis role="bold">ECL Compiler</emphasis></entry>
+
+          <entry>Command line ECL Compiler</entry>
+        </row>
+
+        <row>
+          <entry><emphasis role="bold">DFUPlus</emphasis></entry>
+
+          <entry>Command line Distributed File Utility management tool,
+          facilitate automation of data file spray, despray, and other common
+          file handling tasks.</entry>
+        </row>
+      </tbody>
+    </tgroup>
+  </informaltable>
+
+  <para><emphasis role="bold"> </emphasis></para>
+
+  <sect1 id="Documentation_Conventions">
+    <title>Documentation Conventions</title>
+
+    <sect2 id="ECL_Language">
+      <title><emphasis>ECL Language</emphasis></title>
+
+      <para>Although ECL is not case-sensitive, ECL reserved keywords and
+      built-in functions in this document are always shown in ALL CAPS to make
+      them stand out for easy identification.</para>
+
+      <sect3>
+        <title>Example Code</title>
+
+        <para>All example code in this document appears in the following
+        font:</para>
+
+        <programlisting>MyECLFileName := COUNT(Person);
+// MyECLFileName is a user-defined ECL file
+// COUNT is a built-in ECL function
+// Person is the name of a dataset</programlisting>
+
+        <para>ECL file names and record set names are always shown in example
+        code as mixed-case. Run-on words may be used to explicitly identify
+        purpose in examples.</para>
+      </sect3>
+
+      <sect3>
+        <title>Actions</title>
+
+        <para>In step-by-step sections, there will be explicit actions to
+        perform. These are all shown with a bullet to differentiate action
+        steps from explanatory text, as shown here:</para>
+
+        <para><itemizedlist>
+            <listitem>
+              <para>Keyboard and mouse actions are shown in small caps, such
+              as: DOUBLE-CLICK, or press the ENTER key. word.</para>
+            </listitem>
+
+            <listitem>
+              <para>On-screen items to select are shown in boldface, such as:
+              press the <emphasis role="bold">OK </emphasis>button.</para>
+            </listitem>
+          </itemizedlist></para>
+      </sect3>
+    </sect2>
+
+    <sect2 id="Installation">
+      <title><emphasis>Installation</emphasis></title>
+
+      <para>The installation program installs all client tools, including the
+      ECLPlus, DFUPlus, and RoxieConfig. The installation program
+      provides the option to select which tools to install.</para>
+
+      <itemizedlist mark="bullet">
+        <listitem>
+          <para>From the CD, your Build Server, or your download:</para>
+        </listitem>
+
+        <listitem>
+          <para>Run <emphasis role="bold">setup.msi </emphasis>, then follow
+          the prompts</para>
+        </listitem>
+      </itemizedlist>
+
+      <para><emphasis>System Requirements</emphasis></para>
+
+      <para>The recommended system configuration is:</para>
+
+      <para>A Pentium III processor (or higher) and at least 128 megabytes
+      (MB) of RAM.</para>
+
+      <para>Microsoft Windows 2000, Windows XP, Windows Server 2003, Windows
+      Vista, Windows 7, or higher.</para>
+
+      <para>A full installation requires less than 16 MB of disk space.<!-- --></para>
+
+      <para>The optional Tutorial Data File is 100 MB.</para>
+
+      <para>In addition, you will need Internet Explorer 7 and have Active
+      Scripting support enabled (Javascript). If browser security is set to
+      High, you should add the ECLWatch IP (or DNS name) as a Trusted
+      Site.</para>
+
+      <para>Adobe Reader 5 (or higher) is required to view the documentation
+      PDF files.</para>
+
+      <para>GVC Viewer is used to display graphs in ECL Watch, and RoxieConfig GUI. 
+      It is installed automatically.</para>
+    </sect2>
+  </sect1>
+</chapter>

+ 1 - 4
docs/HPCCClientTools/ClientTools.xml

@@ -50,10 +50,7 @@
     </mediaobject>
   </bookinfo>
 
-  <xi:include href="HPCCClientTools/CT_Mods/CT_Overview.xml" xpointer="CT_Overview"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
-
-  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_IDE.xml" xpointer="The_ECL_Ide"
+  <xi:include href="HPCCClientTools/CT_Mods/CT_Overview_withoutIDE.xml" xpointer="CT_Overview"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_ECL.xml" xpointer="Command_Line_ECL"

+ 74 - 0
docs/HPCCClientTools/TheECLIDEandHPCCClientTools.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<book lang="en_US" xml:base="../">
+  <bookinfo>
+    <title>The ECL IDE and HPCC Client Tools</title>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/redswooshWithLogo3.jpg" />
+      </imageobject>
+    </mediaobject>
+
+    <author>
+      <surname>Boca Raton Documentation Team</surname>
+    </author>
+
+    <legalnotice>
+      <para>We welcome your comments and feedback about this document via
+      email to <email>docfeedback@hpccsystems.com</email> Please include
+      <emphasis role="bold">Documentation Feedback</emphasis> in the subject
+      line and reference the document name, page numbers, and current Version
+      Number in the text of the message.</para>
+
+      <para>LexisNexis and the Knowledge Burst logo are registered trademarks
+      of Reed Elsevier Properties Inc., used under license. Other products,
+      logos, and services may be trademarks or registered trademarks of their
+      respective companies. All names and example data used in this manual are
+      fictitious. Any similarity to actual persons, living or dead, is purely
+      coincidental.</para>
+
+      <para></para>
+    </legalnotice>
+
+    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="common/Version.xml" xpointer="DateVer"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <corpname>HPCC Systems</corpname>
+
+    <xi:include href="common/Version.xml" xpointer="Copyright"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <mediaobject role="logo">
+      <imageobject>
+        <imagedata fileref="images/LN_Rightjustified.jpg" />
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <xi:include href="HPCCClientTools/CT_Mods/CT_Overview.xml"
+              xpointer="CT_Overview"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_IDE.xml"
+              xpointer="The_ECL_Ide"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_ECL.xml"
+              xpointer="Command_Line_ECL"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_CLI.xml" xpointer="ECL_CLI"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="HPCCClientTools/CT_Mods/ECLCC.xml" xpointer="ECL_Compiler"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_DFU.xml"
+              xpointer="Command_Line_DFU"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+</book>

+ 13 - 13
docs/HPCCDataHandling/DataHandling.xml

@@ -1313,15 +1313,15 @@
   </chapter>
 
   <chapter>
-    <title>HPCC Data Backups</title>
+    <title><emphasis>HPCC Data Backups</emphasis></title>
 
     <sect1 id="Introduction2" role="nobrk">
       <title>Introduction</title>
 
       <para>This section covers critical system data that requires regular
-      backup procedures to prevent data loss. </para>
+      backup procedures to prevent data loss.</para>
 
-      <para>There are </para>
+      <para>There are</para>
 
       <itemizedlist>
         <listitem>
@@ -1355,21 +1355,21 @@
 
       <para>The Dali Server data is typically mirrored to its backup node.
       This location is specified in the environment configuration file using
-      the Configuration Manager. </para>
+      the Configuration Manager.</para>
 
       <para>Since the data is written simultaneously to both nodes, there is
-      no need for a manual backup procedure. </para>
+      no need for a manual backup procedure.</para>
     </sect1>
 
     <sect1>
       <title>Environment Configuration files</title>
 
       <para>There is only one active environment file, but you may have many
-      alternative configurations. </para>
+      alternative configurations.</para>
 
       <para>Configuration manager only works on files in the
       /etc/HPCCSystems/source/ folder. To make a configuration active, it is
-      copied to /etc/HPCCSystems/environment.xml on all nodes. </para>
+      copied to /etc/HPCCSystems/environment.xml on all nodes.</para>
 
       <para>Configuration Manager automatically creates backup copies in the
       /etc/HPCCSystems/source/backup/ folder.</para>
@@ -1380,7 +1380,7 @@
 
       <para>Thor clusters are normally configured to automatically replicate
       data to a secondary location known as the mirror location. Usually, this
-      is on the second drive of the subsequent node. </para>
+      is on the second drive of the subsequent node.</para>
 
       <para>If the data is not found at the primary location (for example, due
       to drive failure or because a node has been swapped out), it looks in
@@ -1427,11 +1427,11 @@
         </orderedlist>
       </sect2>
 
-      <sect2>
+      <sect2 role="brk">
         <title>Scheduled backup</title>
 
         <para>The easiest way to schedule the backup process is to create a
-        cron job. Cron is a daemon that serves as a task scheduler. </para>
+        cron job. Cron is a daemon that serves as a task scheduler.</para>
 
         <para>Cron tab (short for CRON TABle) is a text file that contains a
         the task list. To edit with the default editor, use the
@@ -1442,9 +1442,9 @@
         <para>Here is a sample cron tab entry:</para>
 
         <para><programlisting>30 23 * * * /opt/HPCCSystems/bin/start_backupnode mythor 
-</programlisting>30 represents the minute of the hour. </para>
+</programlisting>30 represents the minute of the hour.</para>
 
-        <para>23 represents the hour of the day </para>
+        <para>23 represents the hour of the day</para>
 
         <para>The asterisks (*) represent every day, month, and
         weekday.</para>
@@ -1497,7 +1497,7 @@
       <para>Attribute repositories are stored on ECL developer's local hard
       drives. They can contain a significant number of hours of work and
       therefore should be regularly backed up. In addition, we suggest using
-      some form of source version control, too. </para>
+      some form of source version control, too.</para>
     </sect1>
 
     <sect1>

+ 10 - 13
docs/RDDERef/RDDERef.xml

@@ -32,7 +32,7 @@
       <para></para>
     </legalnotice>
 
-   <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="FooterInfo"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="common/Version.xml" xpointer="DateVer"
@@ -40,7 +40,7 @@
 
     <corpname>HPCC Systems</corpname>
 
-   <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="Copyright"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -287,14 +287,12 @@
         </listitem>
       </itemizedlist>
 
-      <para>This configuration provides multiple redundant copies of data
-      files. In this example, there are six copies of each file at any given
-      time; eliminating the need to use traditional backup procedures for
-      Roxie data files.</para>
+      <para><?dbfo-need height="8.75in"?>This configuration provides multiple
+      redundant copies of data files. In this example, there are six copies of
+      each file at any given time; eliminating the need to use traditional
+      backup procedures for Roxie data files.</para>
 
-      <para></para>
-
-      <para><graphic fileref="images/RM-03.PNG" /></para>
+      <para><graphic fileref="images/RM-03.jpg" /></para>
 
       <para></para>
     </sect1>
@@ -510,7 +508,6 @@
   <chapter id="Packages">
     <title>Packages</title>
 
-   
     <para>Packages are used as a means to separate data from queries. Newer
     Package files can be copied to and loaded on a Roxie cluster without
     recompiling queries. This allows you to refresh data and ensure you are
@@ -1116,8 +1113,8 @@
           <listitem>
             <?dbfo keep-together="always"?>
 
-            <para>Press the <emphasis role="bold">Submit</emphasis> button.
-            </para>
+            <para>Press the <emphasis role="bold">Submit</emphasis>
+            button.</para>
 
             <para>The resulting page displays all the requested information,
             as shown below:</para>
@@ -1490,7 +1487,7 @@
 
         <para></para>
 
-        <?hard-pagebreak?>
+        <?hard-pagebreak ?>
 
         <itemizedlist mark="bullet">
           <listitem>

+ 3 - 3
docs/UsingConfigManager/UsingConfigManager.xml

@@ -1258,7 +1258,7 @@ sudo configmgr</programlisting>
           </sect4>
         </sect3>
 
-        <sect3 id="ECL-Agent">
+        <sect3 id="ECL-Agent" role="brk">
           <title><emphasis>ECL Agent</emphasis></title>
 
           <sect4>
@@ -1399,7 +1399,7 @@ sudo configmgr</programlisting>
           </sect4>
         </sect3>
 
-        <sect3>
+        <sect3 role="brk">
           <title>ECL CC Server Process</title>
 
           <sect4>
@@ -1727,7 +1727,7 @@ sudo configmgr</programlisting>
               </informaltable></para>
           </sect4>
 
-          <sect4>
+          <sect4 role="brk">
             <title>Esp - myesp Service BindingsTab</title>
 
             <para>This section describes the Esp - myesp Service Bindings

+ 499 - 0
docs/Visualizing/Visualizing.xml

@@ -0,0 +1,499 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book lang="en_US" xml:base="../">
+  <title>Visualizing ECL Results</title>
+
+  <bookinfo>
+    <title>Visualizing ECL Results: Technical Preview</title>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/redswooshWithLogo3.jpg" />
+      </imageobject>
+    </mediaobject>
+
+    <author>
+      <surname>Boca Raton Documentation Team</surname>
+    </author>
+
+    <legalnotice>
+      <para>We welcome your comments and feedback about this document via
+      email to <email>docfeedback@hpccsystems.com</email></para>
+
+      <para>Please include <emphasis role="bold">Documentation
+      Feedback</emphasis> in the subject line and reference the document name,
+      page numbers, and current Version Number in the text of the
+      message.</para>
+
+      <para>LexisNexis and the Knowledge Burst logo are registered trademarks
+      of Reed Elsevier Properties Inc., used under license. Other products,
+      logos, and services may be trademarks or registered trademarks of their
+      respective companies. All names and example data used in this manual are
+      fictitious. Any similarity to actual persons, living or dead, is purely
+      coincidental.</para>
+
+      <para />
+    </legalnotice>
+
+    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="common/Version.xml" xpointer="DateVer"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <corpname>HPCC Systems</corpname>
+
+    <xi:include href="common/Version.xml" xpointer="Copyright"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <mediaobject role="logo">
+      <imageobject>
+        <imagedata fileref="images/LN_Rightjustified.jpg" />
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <chapter>
+    <title>Introduction</title>
+
+    <para>The ECL compiler now supports adding external resources to a
+    Workunit using a manifest file. The manifest, in XML format, adds external
+    resources such as XSLT transformations, or other objects to the archive
+    before it is compiled and deployed to the server. In future versions, you
+    should be able to add different types of resources, for example, a
+    Cascading Style Sheet (css file).</para>
+
+    <para>In the examples we provide, we will demonstrate how to use this
+    feature to visualize ECL job results using Google Chart Tools. This
+    library provides an easy way to visualize data from ECL results.</para>
+
+    <para>See <ulink
+    url="http://code.google.com/apis/chart/interactive/docs/index.html">http://code.google.com/apis/chart/interactive/docs/index.html</ulink>
+    for more information.</para>
+
+    <para />
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <?dbfo keep-together="always"?>
+
+      <tgroup cols="2">
+        <colspec colwidth="49.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry>
+              <inlinegraphic fileref="images/caution.png" />
+            </entry>
+
+            <entry>In this version of the HPCC Platform, these features are
+            being released as a technical preview. Some planned functionality
+            has not yet been implemented, but the portions that are available
+            have been tested and are ready for use.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <sect1>
+      <title>Overview of the process</title>
+
+      <para>This section is a summary of the details in this guide. After you
+      have completed the detailed steps that follow, you can use this summary
+      to refresh your memory later.</para>
+
+      <para />
+
+      <para>
+        <informaltable colsep="1" frame="all" rowsep="1">
+          <?dbfo keep-together="always"?>
+
+          <tgroup cols="2">
+            <colspec colwidth="49.50pt" />
+
+            <colspec />
+
+            <tbody>
+              <row>
+                <entry>
+                  <inlinegraphic fileref="images/tip.jpg" />
+                </entry>
+
+                <entry>We suggest <emphasis role="bold">reading</emphasis>
+                this document in its entirety before beginning.</entry>
+              </row>
+            </tbody>
+          </tgroup>
+        </informaltable>
+      </para>
+
+      <para>To use Google Charts, you should:</para>
+
+      <orderedlist numeration="arabic">
+        <listitem>
+          <para>Write ECL Code that produces an output containing data that
+          fits the visualization you select. (In this exercise, we will use
+          the ones provided in the examples.)</para>
+        </listitem>
+
+        <listitem>
+          <para>In the code, make sure your ECL OUTPUT action has the NAMED
+          option with the desired visualization nominated, as shown
+          below.</para>
+
+          <para>
+            <programlisting>OUTPUT(dPie, NAMED('PieChart_Pie_Chart_Test'));</programlisting>
+          </para>
+        </listitem>
+
+        <listitem>
+          <para>Create an XSLT template to handle the output. (In this
+          exercise, we will use the ones provided in the examples.)</para>
+        </listitem>
+
+        <listitem>
+          <para>Create a Manifest file including the XSLT template(s). (In
+          this exercise, we will use the ones provided in the examples. The
+          example XSLT files contain code that will select a visualization
+          based on the output name used in the ECL code)</para>
+        </listitem>
+
+        <listitem>
+          <para>Using either the ECL IDE or the ECLCC command line, create an
+          archive with<emphasis role="bold">-manifest=argument</emphasis>
+          naming the manifest file.</para>
+
+          <para>For example (in the IDE’s compiler arguments):</para>
+
+          <para>
+            <programlisting>-manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
+              My Files\visualizations\google_charts\files\manifest.xml"</programlisting>
+          </para>
+
+          <para>For example (on command line):</para>
+
+          <para>
+            <programlisting>eclcc pie.ecl -E -manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
+                               My Files\visualizations\google_charts\files\manifest.xml" &gt;myarchive.xml</programlisting>
+          </para>
+        </listitem>
+
+        <listitem>
+          <para>Deploy the Archive to an ESP server. This is automatic when
+          you submit using the IDE, If you used the ECLCC command line to
+          create the archive, then you must use the ECL command line tool to
+          deploy the Archive.</para>
+
+          <para>For example:</para>
+
+          <programlisting>ecl deploy myarchive.xml --server=192.168.219.8 --cluster=thor</programlisting>
+
+          <programlisting>ecl publish &lt;WUID&gt; --server=192.168.219.8 --cluster=thor --activate--name=pie</programlisting>
+
+          <para />
+        </listitem>
+
+        <listitem>
+          <para>Run the Workunit and view the Results in ECL Watch</para>
+        </listitem>
+      </orderedlist>
+    </sect1>
+
+    <sect1>
+      <title>Get the Samples</title>
+
+      <para>The collection of visualization sample files contains a set of ECL
+      files, a set of XSLT transformation templates, and a sample manifest
+      file to use to include these XSLT files into a workunit.</para>
+
+      <itemizedlist mark="bullet">
+        <listitem>
+          <para>Get the sample code from GitHub:</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>
+        <ulink
+        url="https://github.com/hpcc-systems/ecl-samples/tree/master/visualizations/google_charts">https://github.com/hpcc-systems/ecl-samples/tree/master/visualizations/google_charts</ulink>
+      </para>
+
+      <itemizedlist mark="bullet">
+        <listitem>
+          <para>Click on the Zip button to download.</para>
+        </listitem>
+      </itemizedlist>
+
+      <figure>
+        <title>ZIP button</title>
+
+        <mediaobject>
+          <imageobject>
+            <imagedata fileref="images/viz01.jpg" />
+          </imageobject>
+        </mediaobject>
+      </figure>
+
+      <itemizedlist mark="bullet">
+        <listitem>
+          <para>Copy to the folder you use for ECL code.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para />
+    </sect1>
+  </chapter>
+
+  <chapter>
+    <title>Detailed Steps Using the IDE</title>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Open the ECL IDE and Open Preferences</para>
+      </listitem>
+
+      <listitem>
+        <para>Create a new configuration pointing to the server you wish to
+        use.</para>
+      </listitem>
+
+      <listitem>
+        <para>Add the following compiler argument:</para>
+      </listitem>
+    </itemizedlist>
+
+    <programlisting>-manifest=&lt;fullpathtomanifestfile&gt;</programlisting>
+
+    <para>For example:</para>
+
+    <programlisting>-manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
+              My Files\visualizations\google_charts\files\manifest.xml"</programlisting>
+
+    <para>If the path contains spaces, you must enclose in double
+    quotes.</para>
+
+    <figure>
+      <title>manifest path</title>
+
+      <mediaobject>
+        <imageobject>
+          <imagedata fileref="images/viz02a.jpg" />
+        </imageobject>
+      </mediaobject>
+    </figure>
+
+    <para>NOTE: This configuration includes the manifest in every submission,
+    so only use it for ECL that needs the manifest resources (Google
+    Charts).</para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Make sure you can see the new samples. (You may need to
+        refresh)</para>
+      </listitem>
+    </itemizedlist>
+
+    <figure>
+      <title>ECL samples</title>
+
+      <mediaobject>
+        <imageobject>
+          <imagedata fileref="images/viz03.jpg" />
+        </imageobject>
+      </mediaobject>
+    </figure>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Open one of the example files, for this example use pie.</para>
+      </listitem>
+
+      <listitem>
+        <para>Syntax Check the code (This is always a good idea)</para>
+      </listitem>
+
+      <listitem>
+        <para>Select <emphasis role="bold">thor</emphasis> as your target
+        cluster</para>
+      </listitem>
+
+      <listitem>
+        <para>Press the <emphasis role="bold">Submit</emphasis> button.</para>
+      </listitem>
+
+      <listitem>
+        <para>After the job completes, select the Workunit’s ECL Watch
+        view:</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>
+      <figure>
+        <title>ECL Watch view</title>
+
+        <mediaobject>
+          <imageobject>
+            <imagedata fileref="images/viz04.jpg" />
+          </imageobject>
+        </mediaobject>
+      </figure>
+    </para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Scroll down, and expand the Result section.</para>
+      </listitem>
+
+      <listitem>
+        <para>Click on the <emphasis role="bold">Google Chart by
+        Name</emphasis> link</para>
+
+        <para>The visualization displays</para>
+      </listitem>
+    </itemizedlist>
+
+    <para />
+
+    <figure>
+      <title>visualization chart</title>
+
+      <mediaobject>
+        <imageobject>
+          <imagedata fileref="images/viz05.jpg" />
+        </imageobject>
+      </mediaobject>
+    </figure>
+  </chapter>
+
+  <chapter>
+    <title>Detailed Steps using the command line tools</title>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Open a command window in the location of your ECL files.</para>
+      </listitem>
+
+      <listitem>
+        <para>Type the following command:</para>
+      </listitem>
+    </itemizedlist>
+
+    <programlisting>eclcc pie.ecl -E -manifest=&lt;mainfestfilepath&gt; &gt;myarchive.xml</programlisting>
+
+    <para>
+      <emphasis>where &lt;manifestfilepath&gt; is the location of your
+      manifest file</emphasis>
+    </para>
+
+    <para>For example:</para>
+
+    <programlisting>eclcc pie.ecl -E -manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
+                    My Files\visualizations\google_charts\files\manifest.xml" &gt;myarchive.xml</programlisting>
+
+    <para />
+
+    <para>This invokes the ECLCC compiler to create an archive named
+    myarchive.xml.</para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Type the following command:</para>
+      </listitem>
+    </itemizedlist>
+
+    <programlisting>ecl deploy myarchive.xml --server=10.239.219.8 --cluster=thor</programlisting>
+
+    <para>
+      <emphasis>where --server= is the IP address of your ESP server
+      and</emphasis>
+
+      <emphasis>--cluster= is the target cluster name.</emphasis>
+    </para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Take note of the WUID returned by the pervious command.</para>
+      </listitem>
+
+      <listitem>
+        <para>Type the following command:</para>
+      </listitem>
+    </itemizedlist>
+
+    <programlisting>ecl publish &lt;WUID&gt; --server=10.239.219.8 --cluster=thor --activate --name=pie</programlisting>
+
+    <para>
+      <emphasis>where &lt;WUID&gt; is the workuint id number, --server= is the
+      IP address of your ESP server, and --cluster= is the target cluster
+      name.</emphasis>
+    </para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>In a browser, open the URL for the WsECL service (typically
+        found on port 8002 of your ESP Server).</para>
+      </listitem>
+
+      <listitem>
+        <para>Expand the <emphasis role="bold">thor</emphasis> branch on the
+        left, then click on the <emphasis role="bold">pie</emphasis> service
+        link.</para>
+      </listitem>
+
+      <listitem>
+        <para>Press the Submit button.</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>The visualization displays.</para>
+
+    <figure>
+      <title>visualization</title>
+
+      <mediaobject>
+        <imageobject>
+          <imagedata fileref="images/viz06.jpg" />
+        </imageobject>
+      </mediaobject>
+    </figure>
+  </chapter>
+
+  <chapter>
+    <title>Next Steps</title>
+
+    <para>Try the remaining examples:</para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>geomap</para>
+      </listitem>
+
+      <listitem>
+        <para>motion</para>
+      </listitem>
+
+      <listitem>
+        <para>pie</para>
+      </listitem>
+
+      <listitem>
+        <para>scatter</para>
+      </listitem>
+
+      <listitem>
+        <para>sparkline</para>
+      </listitem>
+
+      <listitem>
+        <para>timeline</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>Try creating your own XSLT files and Manifest to use other Google
+    Charts.</para>
+
+    <para>Try creating your own XSLT files and Manifest to use other
+    third-party visualizations.</para>
+  </chapter>
+</book>

BIN
docs/images/RM-03.jpg


BIN
docs/images/viz01.jpg


BIN
docs/images/viz02a.jpg


BIN
docs/images/viz03.jpg


BIN
docs/images/viz04.jpg


BIN
docs/images/viz05.jpg


BIN
docs/images/viz06.jpg


+ 1 - 1
ecl/agentexec/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( agentexec ${SRCS} )
+HPCC_ADD_EXECUTABLE ( agentexec ${SRCS} )
 install ( TARGETS agentexec DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( agentexec
          jlib 

+ 1 - 1
ecl/agentexec/agentexec.cmake

@@ -44,7 +44,7 @@ include_directories (
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 
-add_executable ( agentexec ${SRCS} )
+HPCC_ADD_EXECUTABLE ( agentexec ${SRCS} )
 install ( TARGETS agentexec DESTINATION ${OSSDIR}/bin )
 
 target_link_libraries ( agentexec

+ 3 - 3
ecl/ecl-package/CMakeLists.txt

@@ -42,14 +42,14 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( ecl-package ${SRCS} )
+HPCC_ADD_EXECUTABLE ( ecl-package ${SRCS} )
 add_dependencies ( ecl-package espscm ws_packageprocess )
-install ( TARGETS ecl-package DESTINATION ${DIR_NAME}/bin )
+install ( TARGETS ecl-package DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( ecl-package
         jlib
         esphttp
         workunit
     )
 
-install ( PROGRAMS ecl-package.install DESTINATION ${DIR_NAME}/etc/init.d/install COMPONENT Runtime )
+install ( PROGRAMS ecl-package.install DESTINATION ${OSSDIR}/etc/init.d/install COMPONENT Runtime )
 

+ 1 - 1
ecl/eclagent/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 ADD_DEFINITIONS( -DNO_SYBASE -D_CONSOLE )
 
-add_executable ( eclagent ${SRCS} )
+HPCC_ADD_EXECUTABLE ( eclagent ${SRCS} )
 install ( TARGETS eclagent DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( eclagent
       hthor           

+ 1 - 1
ecl/eclcc/CMakeLists.txt

@@ -51,7 +51,7 @@ if (WIN32)
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:10000000 ${CMAKE_EXE_LINKER_FLAGS}")
 endif()
 
-add_executable ( eclcc ${SRCS} )
+HPCC_ADD_EXECUTABLE ( eclcc ${SRCS} )
 install ( TARGETS eclcc DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( eclcc 
          jlib

+ 27 - 7
ecl/eclcc/eclcc.cpp

@@ -42,6 +42,10 @@
 #include "build-config.h"
 #include "rmtfile.hpp"
 
+#if defined (__APPLE__)
+#include <mach-o/dyld.h>
+#endif
+
 #define INIFILE "eclcc.ini"
 #define SYSTEMCONFDIR CONFIG_DIR
 #define DEFAULTINIFILE "eclcc.ini"
@@ -405,14 +409,31 @@ void EclCC::loadOptions()
     extractOption(templatePath, globals, "ECLCC_TPL_PATH", "templatePath", syspath, ".");
     extractOption(eclLibraryPath, globals, "ECLCC_ECLLIBRARY_PATH", "eclLibrariesPath", syspath, ".\\ecllibrary");
 #else
-    StringBuffer fn(SYSTEMCONFDIR);
-    fn.append(PATHSEPSTR).append(SYSTEMCONFFILE);
-    Owned<IProperties> sysconf = createProperties(fn, true);
-    
     StringBuffer syspath;
-    sysconf->getProp("path", syspath);
-    syspath.append(PATHSEPCHAR);
+    #if defined (__APPLE__)
+        char path[PATH_MAX]; 
+        uint32_t size = sizeof(path); 
+        _NSGetExecutablePath(path, &size);
+
+        splitFilename(path, &syspath, &syspath, NULL, NULL);
+        //  Remove trailing folder (typically "/bin/")
+        removeTrailingPathSepChar(syspath);
+        for (int i = syspath.length() - 1; i >= 0; --i)
+        {
+            if (isPathSepChar(syspath.charAt(i)))
+            {
+                syspath.setLength(i + 1);
+                break;
+            }
+        }
+    #else
+        StringBuffer fn(SYSTEMCONFDIR);
+        fn.append(PATHSEPSTR).append(SYSTEMCONFFILE);
+        Owned<IProperties> sysconf = createProperties(fn, true);
 
+        sysconf->getProp("path", syspath);
+        syspath.append(PATHSEPCHAR);
+    #endif
     extractOption(compilerPath, globals, "CL_PATH", "compilerPath", "/usr", NULL);
     extractOption(libraryPath, globals, "ECLCC_LIBRARY_PATH", "libraryPath", syspath, "lib");
     extractOption(includePath, globals, "ECLCC_INCLUDE_PATH", "includePath", syspath, "componentfiles/cl/include");
@@ -420,7 +441,6 @@ void EclCC::loadOptions()
     extractOption(hooksPath, globals, "HPCC_FILEHOOKS_PATH", "filehooks", syspath, "filehooks");
     extractOption(templatePath, globals, "ECLCC_TPL_PATH", "templatePath", syspath, "componentfiles");
     extractOption(eclLibraryPath, globals, "ECLCC_ECLLIBRARY_PATH", "eclLibrariesPath", syspath, "share/ecllibrary/");
-
 #endif
 
     extractOption(stdIncludeLibraryPath, globals, "ECLCC_ECLINCLUDE_PATH", "eclIncludePath", ".", NULL);

+ 1 - 1
ecl/eclccserver/CMakeLists.txt

@@ -45,7 +45,7 @@ include_directories (
          ./../../system/jlib 
     )
 
-add_executable ( eclccserver ${SRCS} ${INCLUDES} )
+HPCC_ADD_EXECUTABLE ( eclccserver ${SRCS} ${INCLUDES} )
 install ( TARGETS eclccserver DESTINATION ${OSSDIR}/bin )
 
 target_link_libraries ( eclccserver 

+ 1 - 1
ecl/eclcmd/CMakeLists.txt

@@ -66,7 +66,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( ecl ${SRCS} )
+HPCC_ADD_EXECUTABLE ( ecl ${SRCS} )
 add_dependencies ( ecl espscm workunit ws_workunits )
 install ( TARGETS ecl DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( ecl

+ 2 - 2
ecl/eclcmd/queries/CMakeLists.txt

@@ -42,9 +42,9 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( ecl-queries ${SRCS} )
+HPCC_ADD_EXECUTABLE ( ecl-queries ${SRCS} )
 add_dependencies ( ecl-queries espscm ws_workunits )
-install ( TARGETS ecl-queries DESTINATION ${DIR_NAME}/bin )
+install ( TARGETS ecl-queries DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( ecl-queries
         jlib
         esphttp

+ 1 - 1
ecl/eclplus/CMakeLists.txt

@@ -61,7 +61,7 @@ include_directories (
 
 ADD_DEFINITIONS( -DECLPLUS_EXPORTS -D_CONSOLE )
 
-add_executable ( eclplus ${SRCS} )
+HPCC_ADD_EXECUTABLE ( eclplus ${SRCS} )
 add_dependencies ( eclplus espscm )
 install ( TARGETS eclplus DESTINATION ${OSSDIR}/bin )
 target_link_libraries (  eclplus 

+ 1 - 1
ecl/eclscheduler/CMakeLists.txt

@@ -44,7 +44,7 @@ include_directories (
          ./../../ecl/schedulectrl
     )
 
-add_executable ( eclscheduler ${SRCS} ${INCLUDES} )
+HPCC_ADD_EXECUTABLE ( eclscheduler ${SRCS} ${INCLUDES} )
 install ( TARGETS eclscheduler DESTINATION ${OSSDIR}/bin )
 
 target_link_libraries ( eclscheduler 

+ 7 - 0
ecl/hqlcpp/hqlhtcpp.cpp

@@ -11411,7 +11411,14 @@ ABoundActivity * HqlCppTranslator::doBuildActivityJoinOrDenormalize(BuildCtx & c
         HqlExprArray args;
         args.append(*lhsDsRef.mapCompound(&leftSorts.tos(), leftSelect));
         args.append(*rhsDsRef.mapCompound(&rightSorts.tos(), rightSelect));
+
         _ATOM func = prefixDiffStrAtom;
+        ITypeInfo * lhsType = args.item(0).queryType();
+        if (isUnicodeType(lhsType))
+        {
+            func = prefixDiffUnicodeAtom;
+            args.append(*createConstant(lhsType->queryLocale()->str()));
+        }
         OwnedHqlExpr compare = bindFunctionCall(func, args);
         
         buildCompareMemberLR(instance->nestedctx, "PrefixCompare", compare, dataset1, dataset2, selSeq);

+ 1 - 1
ecl/scheduleadmin/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 ADD_DEFINITIONS( -DNO_SYBASE -D_CONSOLE )
 
-add_executable ( scheduleadmin ${SRCS} )
+HPCC_ADD_EXECUTABLE ( scheduleadmin ${SRCS} )
 install ( TARGETS scheduleadmin DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( scheduleadmin 
          jlib

+ 1 - 1
ecl/wutest/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( wutest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( wutest ${SRCS} )
 target_link_libraries ( wutest 
          jlib
          remote 

+ 1 - 1
esp/clients/WUManager/CMakeLists.txt

@@ -46,7 +46,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( wumanager ${SRCS} )
+HPCC_ADD_EXECUTABLE ( wumanager ${SRCS} )
 add_dependencies ( wumanager espscm )
 #install ( TARGETS wumanager DESTINATION ${OSSDIR}/bin ) # do not install - this is an example program
 

+ 2 - 2
esp/files/scripts/configmgr/navtree.js

@@ -660,8 +660,6 @@ function createNavigationTree(navTreeData) {
     for (var idx = 0; idx < selRows.length; idx++) {
       Dom.addClass(this.getTrEl(selRows[idx]), 'outoffocus');
     }
-    if (top.document.ContextMenuCenter != null)
-      top.document.ContextMenuCenter.clearContent();
   });
 
 
@@ -1326,6 +1324,8 @@ function createNavigationTree(navTreeData) {
 
 
   var handleWindowMouseDown = function(e) {
+    if (top.document.ContextMenuCenter != null)
+      top.document.ContextMenuCenter.clearContent();
     var tabView = top.document.RightTabView;
     if (tabView) {
       var actTab = tabView.get("activeTab");

+ 1 - 1
esp/platform/CMakeLists.txt

@@ -49,7 +49,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( esp ${SRCS} )
+HPCC_ADD_EXECUTABLE ( esp ${SRCS} )
 install ( TARGETS esp DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( esp 
          jlib

+ 1 - 1
esp/services/esp_compile_scm/CMakeLists.txt

@@ -151,7 +151,7 @@ set (    SRCS
     )
 
 # OBJS = 
-add_executable ( esp_compile_scm ${SRCS} )
+HPCC_ADD_EXECUTABLE ( esp_compile_scm ${SRCS} )
 install ( TARGETS esp_compile_scm DESTINATION ${OSSDIR}/bin )
 
 

+ 1 - 1
esp/test/httptest/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( httptest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( httptest ${SRCS} )
 
 target_link_libraries ( httptest 
          jlib

+ 1 - 1
esp/tools/soapplus/CMakeLists.txt

@@ -45,7 +45,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( soapplus ${SRCS} )
+HPCC_ADD_EXECUTABLE ( soapplus ${SRCS} )
 install ( TARGETS soapplus DESTINATION ${OSSDIR}/bin COMPONENT Runtime)
 
 target_link_libraries ( soapplus 

+ 1 - 1
initfiles/CMakeLists.txt

@@ -18,7 +18,7 @@
 cmake_minimum_required(VERSION 2.8)
 PROJECT(initfiles)
 
-ADD_EXECUTABLE(processor processor.cpp)
+HPCC_ADD_EXECUTABLE(processor processor.cpp)
 
 MACRO(GENERATE_BASH processor bash-vars in out)
     GET_TARGET_PROPERTY(processorLocation processor LOCATION)

+ 52 - 0
lib2/CMakeLists.txt

@@ -0,0 +1,52 @@
+################################################################################
+#    Copyright (C) 2011 HPCC Systems.
+#
+#    All rights reserved. This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+################################################################################
+
+cmake_minimum_required(VERSION 2.8)
+PROJECT(lib2)
+
+if (APPLE)
+    set(DYLIBS ${ICU_LIBRARIES})
+    set(DYLIBS ${DYLIBS} ${BOOST_REGEX_LIBRARIES})
+    set(DYLIBS ${DYLIBS} ${XALAN_LIBRARIES})
+    set(DYLIBS ${DYLIBS} ${XERCES_LIBRARIES})
+    
+    foreach(dylib ${DYLIBS})
+        get_filename_component(dylib_path ${dylib} REALPATH)
+        get_filename_component(dylib_name_ext ${dylib_path} NAME)
+
+        set(fixupCommand "${fixupCommand}\r\nexecute_process(COMMAND install_name_tool -change \"${dylib_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" \${file})")
+
+        #HACK HACK - Should be able resolve alias's to alias's correctly?
+        string(REPLACE ".28.0.dylib" ".28.dylib" dylib_28_path "${dylib_path}")
+        if (NOT "${dylib_28_path}" STREQUAL "${dylib_path}")
+            set(fixupCommand "${fixupCommand}\r\nexecute_process(COMMAND install_name_tool -change \"${dylib_28_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" \${file})")
+        endif ()
+
+        string(REPLACE ".48.1.dylib" ".48.dylib" dylib_48_path "${dylib_path}")
+        if (NOT "${dylib_48_path}" STREQUAL "${dylib_path}")
+            set(fixupCommand "${fixupCommand}\r\nexecute_process(COMMAND install_name_tool -change \"${dylib_48_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" \${file})")
+        endif ()
+
+        install(PROGRAMS "${dylib_path}" DESTINATION "${OSSDIR}/lib2")
+        install(CODE "
+            file(GLOB files \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${OSSDIR}/bin/*\" \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${OSSDIR}/lib/*.dylib\")
+            foreach(file \${files})
+              ${fixupCommand}
+            endforeach ()
+        ")
+    endforeach(dylib)
+endif()

+ 1 - 1
plugins/dataconnectors/hdfsconnector/CMakeLists.txt

@@ -32,7 +32,7 @@ add_subdirectory (ecl)
 					${JAVA_INCLUDE_PATH2}
 					${LIBHDFS_INCLUDE_DIR}	)
 
-	add_executable( hdfsconnector ${SRC} )
+	HPCC_ADD_EXECUTABLE( hdfsconnector ${SRC} )
 
 	set ( INSTALLDIR "${OSSDIR}/bin")
 	Install ( TARGETS hdfsconnector DESTINATION ${INSTALLDIR} COMPONENT Runtime)

+ 3 - 19
plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/ECLEngine.java

@@ -84,16 +84,10 @@ public class ECLEngine
 
 			System.out.println("WSECL:executeSelect: " + urlString);
 
-			// Send data
 			long startTime = System.currentTimeMillis();
 
 			URL url = new URL(urlString);
-			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
-			conn.setInstanceFollowRedirects(false);
-			conn.setRequestProperty("Authorization", basicAuth);
-			conn.setRequestMethod("GET");
-			conn.setDoOutput(true);
-			conn.setDoInput(true);
+			HttpURLConnection conn = dbMetadata.createHPCCESPConnection(url);
 
 			return parse(conn.getInputStream(),startTime);
 		}
@@ -714,12 +708,7 @@ public class ECLEngine
 			long startTime = System.currentTimeMillis();
 
 			URL url = new URL(urlString);
-			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
-			conn.setInstanceFollowRedirects(false);
-			conn.setRequestProperty("Authorization", basicAuth);
-			conn.setRequestMethod("GET");
-			conn.setDoOutput(true);
-			conn.setDoInput(true);
+			HttpURLConnection conn = dbMetadata.createHPCCESPConnection(url);
 
 			OutputStreamWriter wr = new OutputStreamWriter(	conn.getOutputStream());
 			wr.write(sb.toString());
@@ -782,12 +771,7 @@ public class ECLEngine
 			long startTime = System.currentTimeMillis();
 			// Send data
 			URL url = new URL(urlString);
-			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
-			conn.setInstanceFollowRedirects(false);
-			conn.setRequestProperty("Authorization", basicAuth);
-			conn.setRequestMethod("GET");
-			conn.setDoOutput(true);
-			conn.setDoInput(true);
+			HttpURLConnection conn = dbMetadata.createHPCCESPConnection(url);
 
 			OutputStreamWriter wr = new OutputStreamWriter(	conn.getOutputStream());
 			wr.write(sb.toString());

+ 6 - 53
plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/HPCCConnection.java

@@ -31,9 +31,10 @@ public class HPCCConnection implements Connection
 	public static final String SERVERADDRESSDEFAULT = "localhost";
 	public static final String WSECLWATCHPORTDEFAULT = "8010";
 	public static final String WSECLPORTDEFAULT = "8002";
-	public static final String WSECLDIRECTPORTDEFAULT = "8008";
+	public static final String WSECLDIRECTPORTDEFAULT = "8010";
 	public static final int FETCHPAGESIZEDEFAULT = 100;
 	public static final String LAZYLOADDEFAULT = "true";
+	public static final int CONNECTTIMEOUTMILDEFAULT = 1000;
 
     private boolean closed;
     private HPCCDatabaseMetaData metadata;
@@ -87,6 +88,9 @@ public class HPCCConnection implements Connection
 		if (!this.props.containsKey("PageSize") || !HPCCJDBCUtils.isNumeric(this.props.getProperty("PageSize")))
 			this.props.setProperty("PageSize", String.valueOf(FETCHPAGESIZEDEFAULT));
 
+		if (!this.props.containsKey("ConnectTimeoutMilli") || !HPCCJDBCUtils.isNumeric(this.props.getProperty("ConnectTimeoutMilli")))
+			this.props.setProperty("ConnectTimeoutMilli", String.valueOf(CONNECTTIMEOUTMILDEFAULT));
+
 		boolean setdefaultreslim = false;
 		if (this.props.containsKey("EclResultLimit"))
 		{
@@ -164,257 +168,206 @@ public class HPCCConnection implements Connection
         this.metadata = metadata;
     }
 
-
     public Statement createStatement() throws SQLException {
         return new HPCCPreparedStatement(this, null);
     }
 
-
     public PreparedStatement prepareStatement(String query) throws SQLException {
         return new HPCCPreparedStatement(this, query);
     }
 
-
     public CallableStatement prepareCall(String sql) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareCall(string sql) Not supported yet.");
     }
 
-
     public String nativeSQL(String sql) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: nativeSQL(string sql) Not supported yet.");
     }
 
-
     public void setAutoCommit(boolean autoCommit) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setAutoCommit(boolean autoCommit) Not supported yet.");
     }
 
-
     public boolean getAutoCommit() throws SQLException {
         return true;
     }
 
-
     public void commit() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: commit Not supported yet.");
     }
 
-
     public void rollback() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: rollback Not supported yet.");
     }
 
-
     public void close() throws SQLException {
         closed = true;
     }
 
-
     public boolean isClosed() throws SQLException {
         return closed;
     }
 
-
     public DatabaseMetaData getMetaData() throws SQLException {
         return metadata;
     }
 
-
     public void setReadOnly(boolean readOnly) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setReadOnly Not supported yet.");
     }
 
-
     public boolean isReadOnly() throws SQLException {
         return true;
     }
 
-
     public void setCatalog(String catalog) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setCatalog Not supported yet.");
     }
 
-
     public String getCatalog() throws SQLException
     {
-    //    throw new UnsupportedOperationException("EclConnection: getCatalog Not supported yet.");
-    	return "myroxie";
+    	return props.getProperty("Cluster", CLUSTERDEFAULT);
     }
 
-
     public void setTransactionIsolation(int level) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: settransactionisolation Not supported yet.");
     }
 
-
     public int getTransactionIsolation() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: getTransactionIsolation Not supported yet.");
     }
 
-
     public SQLWarning getWarnings() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: getWarnings Not supported yet.");
     }
 
-
     public void clearWarnings() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: clearWarnings Not supported yet.");
     }
 
-
     public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
     	System.out.println("##Statement EclConnection::createStatement(resulttype, resultsetcon)##");
         return new HPCCPreparedStatement(this, null);
     }
 
-
     public PreparedStatement prepareStatement(String query, int resultSetType, int resultSetConcurrency) throws SQLException {
     	System.out.println("##EclConnection::createStatement("+ query +", resultsetype, resultsetcon)##");
         return new HPCCPreparedStatement(this, query);
     }
 
-
     public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareCall(String sql, int resultSetType, int resultSetConcurrency) Not supported yet.");
     }
 
-
     public Map<String, Class<?>> getTypeMap() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: getTypeMap Not supported yet.");
     }
 
-
     public void setTypeMap(Map<String, Class<?>> map) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setTypeMap Not supported yet.");
     }
 
-
     public void setHoldability(int holdability) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setHoldability Not supported yet.");
     }
 
-
     public int getHoldability() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: getHoldability Not supported yet.");
     }
 
-
     public Savepoint setSavepoint() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setSavepoint Not supported yet.");
     }
 
-
     public Savepoint setSavepoint(String name) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setSavepoint Not supported yet.");
     }
 
-
     public void rollback(Savepoint savepoint) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: rollback Not supported yet.");
     }
 
-
     public void releaseSavepoint(Savepoint savepoint) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: releaseSavepoint Not supported yet.");
     }
 
-
     public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createStatement Not supported yet.");
     }
 
-
     public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) Not supported yet.");
     }
 
-
     public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) Not supported yet.");
     }
 
-
     public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareStatement(String sql, int autoGeneratedKeys) Not supported yet.");
     }
 
-
     public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareStatement(String sql, int[] columnIndexes) Not supported yet.");
     }
 
-
     public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException {
         throw new UnsupportedOperationException("EclConnection:  prepareStatement(String sql, String[] columnNames) Not supported yet.");
     }
 
-
     public Clob createClob() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createClob Not supported yet.");
     }
 
-
     public Blob createBlob() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createBlob Not supported yet.");
     }
 
-
     public NClob createNClob() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createNClob Not supported yet.");
     }
 
-
     public SQLXML createSQLXML() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createSQLXML Not supported yet.");
     }
 
-
     public boolean isValid(int timeout) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: isValid Not supported yet.");
     }
 
-
     public void setClientInfo(String name, String value) throws SQLClientInfoException {
     	System.out.println("ECLCONNECTION SETCLIENTINFO");
     	clientInfo.put(name, value);
     }
 
-
     public void setClientInfo(Properties properties) throws SQLClientInfoException {
     	System.out.println("ECLCONNECTION SETCLIENTINFO");
     	clientInfo = properties;
     }
 
-
     public String getClientInfo(String name) throws SQLException {
     	System.out.println("ECLCONNECTION GETCLIENTINFO");
     	return (String)clientInfo.getProperty(name);
     }
 
-
     public Properties getClientInfo() throws SQLException {
     	System.out.println("ECLCONNECTION GETCLIENTINFO");
     	return clientInfo;
     }
 
-
     public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createArrayOf(String typeName, Object[] elements) Not supported yet.");
     }
 
-
     public Struct createStruct(String typeName, Object[] attributes) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createStruct(String typeName, Object[] attributes)Not supported yet.");
     }
 
-
     public <T> T unwrap(Class<T> iface) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: unwrap(Class<T> iface) Not supported yet.");
     }
 
-
     public boolean isWrapperFor(Class<?> iface) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: isWrapperFor(Class<?> iface) sNot supported yet.");
     }
-
 }

+ 29 - 75
plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/HPCCDatabaseMetaData.java

@@ -68,6 +68,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 	private String UserName;
 	private boolean lazyLoad;
 	private int pageSize;
+	private	int	connectTimoutMillis;
 
 	private DocumentBuilderFactory dbf;
 
@@ -86,6 +87,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 		this.basicAuth = props.getProperty("BasicAuth", HPCCConnection.createBasicAuth(this.UserName, props.getProperty("password", "")));
 		this.lazyLoad = Boolean.parseBoolean(props.getProperty("LazyLoad", HPCCConnection.LAZYLOADDEFAULT));
 		this.pageSize = HPCCJDBCUtils.stringToInt(props.getProperty("PageSize", String.valueOf(HPCCConnection.FETCHPAGESIZEDEFAULT)), HPCCConnection.FETCHPAGESIZEDEFAULT);
+		this.connectTimoutMillis = HPCCJDBCUtils.stringToInt(props.getProperty("ConnectTimeoutMilli",""), HPCCConnection.CONNECTTIMEOUTMILDEFAULT);
 
 		System.out.println("EclDatabaseMetaData ServerAddress: " + serverAddress + " Cluster: " + targetcluster + " eclwatch: " + wseclwatchaddress +":"+  wseclwatchport);
 
@@ -1890,12 +1892,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 
 				//now request the schema for each roxy query
 				URL queryschema = new URL(filedetailUrl);
-				HttpURLConnection queryschemaconnection = (HttpURLConnection)queryschema.openConnection();
-				queryschemaconnection.setInstanceFollowRedirects(false);
-				queryschemaconnection.setRequestProperty("Authorization", basicAuth);
-				queryschemaconnection.setRequestMethod("GET");
-				queryschemaconnection.setDoOutput(true);
-				queryschemaconnection.setDoInput(true);
+				HttpURLConnection queryschemaconnection = createHPCCESPConnection(queryschema);
 
 				InputStream schema = queryschemaconnection.getInputStream();
 				Document dom2 = db.parse(schema);
@@ -1918,12 +1915,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 
 					//now request the schema for each roxy query
 					URL queryfiledata = new URL(openfiledetailUrl);
-					HttpURLConnection queryfiledataconnection = (HttpURLConnection)queryfiledata.openConnection();
-					queryfiledataconnection.setInstanceFollowRedirects(false);
-					queryfiledataconnection.setRequestProperty("Authorization", basicAuth);
-					queryfiledataconnection.setRequestMethod("GET");
-					queryfiledataconnection.setDoOutput(true);
-					queryfiledataconnection.setDoInput(true);
+					HttpURLConnection queryfiledataconnection = createHPCCESPConnection(queryfiledata);
 
 					InputStream filesearchinfo = queryfiledataconnection.getInputStream();
 					Document dom3 = db.parse(filesearchinfo);
@@ -2178,14 +2170,8 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 					filename +
 					"&rawxml_";
 
-			URL dfuLogicalFilesURL;
-			dfuLogicalFilesURL = new URL(urlString);
-
-			HttpURLConnection dfulogfilesConn = (HttpURLConnection)dfuLogicalFilesURL.openConnection();
-			dfulogfilesConn.setRequestProperty("Authorization", basicAuth);
-			dfulogfilesConn.setRequestMethod("GET");
-			dfulogfilesConn.setDoOutput(true);
-			dfulogfilesConn.setDoInput(true);
+			URL dfuLogicalFilesURL = new URL(urlString);
+			HttpURLConnection dfulogfilesConn = createHPCCESPConnection(dfuLogicalFilesURL);
 
 			isSuccess = parseDFULogicalFiles(dfulogfilesConn.getInputStream(), false) > 0 ? true : false;
 		}
@@ -2233,16 +2219,8 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 					"&FirstN=" +
 					pageSize;
 
-			URL dfuLogicalFilesURL;
-			dfuLogicalFilesURL = new URL(urlString);
-
-			HttpURLConnection dfulogfilesConn = (HttpURLConnection)dfuLogicalFilesURL.openConnection();
-			dfulogfilesConn.setInstanceFollowRedirects(false);
-			System.out.println("Setting auth: " + basicAuth);
-			dfulogfilesConn.setRequestProperty("Authorization", basicAuth);
-			dfulogfilesConn.setRequestMethod("GET");
-			dfulogfilesConn.setDoOutput(true);
-			dfulogfilesConn.setDoInput(true);
+			URL dfuLogicalFilesURL = new URL(urlString);
+			HttpURLConnection dfulogfilesConn = createHPCCESPConnection(dfuLogicalFilesURL);
 
 			isSuccess = parseDFULogicalFiles(dfulogfilesConn.getInputStream(), true) > 0 ? true : false;
 		}
@@ -2326,12 +2304,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 
 				//now request the schema for each hpcc query
 				URL queryschema = new URL(queryinfourl);
-				HttpURLConnection queryschemaconnection = (HttpURLConnection)queryschema.openConnection();
-				queryschemaconnection.setInstanceFollowRedirects(false);
-				queryschemaconnection.setRequestProperty("Authorization", basicAuth);
-				queryschemaconnection.setRequestMethod("GET");
-				queryschemaconnection.setDoOutput(true);
-				queryschemaconnection.setDoInput(true);
+				HttpURLConnection queryschemaconnection = createHPCCESPConnection(queryschema);
 
 				InputStream schema = queryschemaconnection.getInputStream();
 
@@ -2389,15 +2362,8 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 								"&FilterType=Name" +
 								"&rawxml_";
 
-			URL querysetURL;
-			querysetURL = new URL(urlString);
-
-			HttpURLConnection querysetconnection = (HttpURLConnection)querysetURL.openConnection();
-			querysetconnection.setInstanceFollowRedirects(false);
-			querysetconnection.setRequestProperty("Authorization", basicAuth);
-			querysetconnection.setRequestMethod("GET");
-			querysetconnection.setDoOutput(true);
-			querysetconnection.setDoInput(true);
+			URL querysetURL = new URL(urlString);
+			HttpURLConnection querysetconnection = createHPCCESPConnection(querysetURL);
 
 			InputStream xml = querysetconnection.getInputStream();
 
@@ -2438,15 +2404,8 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 									"/WsWorkunits/WUQuerysetDetails?QuerySetName=" +
 									querysets.get(z) + "&rawxml_";
 
-				URL querysetURL;
-				querysetURL = new URL(urlString);
-
-				HttpURLConnection querysetconnection = (HttpURLConnection)querysetURL.openConnection();
-				querysetconnection.setInstanceFollowRedirects(false);
-				querysetconnection.setRequestProperty("Authorization", basicAuth);
-				querysetconnection.setRequestMethod("GET");
-				querysetconnection.setDoOutput(true);
-				querysetconnection.setDoInput(true);
+				URL querysetURL = new URL(urlString);
+				HttpURLConnection querysetconnection = createHPCCESPConnection(querysetURL);
 
 				InputStream xml = querysetconnection.getInputStream();
 
@@ -2477,13 +2436,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 			String urlString = "http://" + wseclwatchaddress + ":" + wseclwatchport + "/WsWorkunits/WUQuerysets?rawxml_";
 
 			URL cluserInfoURL = new URL(urlString);
-
-			HttpURLConnection clusterInfoConnection = (HttpURLConnection)cluserInfoURL.openConnection();
-			clusterInfoConnection.setInstanceFollowRedirects(false);
-			clusterInfoConnection.setRequestProperty("Authorization", basicAuth);
-			clusterInfoConnection.setRequestMethod("GET");
-			clusterInfoConnection.setDoOutput(true);
-			clusterInfoConnection.setDoInput(true);
+			HttpURLConnection clusterInfoConnection = createHPCCESPConnection(cluserInfoURL);
 
 			InputStream xml = clusterInfoConnection.getInputStream();
 
@@ -2523,13 +2476,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 			String urlString = "http://" + wseclwatchaddress + ":" + wseclwatchport + "/WsTopology/TpTargetClusterQuery?Type=ROOT&rawxml_&ShowDetails=0";
 
 			URL cluserInfoURL = new URL(urlString);
-
-			HttpURLConnection clusterInfoConnection = (HttpURLConnection)cluserInfoURL.openConnection();
-			clusterInfoConnection.setInstanceFollowRedirects(false);
-			clusterInfoConnection.setRequestProperty("Authorization", basicAuth);
-			clusterInfoConnection.setRequestMethod("GET");
-			clusterInfoConnection.setDoOutput(true);
-			clusterInfoConnection.setDoInput(true);
+			HttpURLConnection clusterInfoConnection = createHPCCESPConnection(cluserInfoURL);
 
 			InputStream xml = clusterInfoConnection.getInputStream();
 
@@ -2569,13 +2516,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 			String urlString = "http://" + wseclwatchaddress + ":" + wseclwatchport + "/WsSMC/Activity?rawxml_";
 
 			URL querysetURL = new URL(urlString);
-
-			HttpURLConnection querysetconnection = (HttpURLConnection)querysetURL.openConnection();
-			querysetconnection.setInstanceFollowRedirects(false);
-			querysetconnection.setRequestProperty("Authorization", basicAuth);
-			querysetconnection.setRequestMethod("GET");
-			querysetconnection.setDoOutput(true);
-			querysetconnection.setDoInput(true);
+			HttpURLConnection querysetconnection = createHPCCESPConnection(querysetURL);
 
 			InputStream xml = querysetconnection.getInputStream();
 
@@ -2911,4 +2852,17 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 
 		return file;
 	}
+
+	protected HttpURLConnection createHPCCESPConnection(URL theurl) throws IOException
+	{
+		HttpURLConnection conn = (HttpURLConnection)theurl.openConnection();
+		conn.setInstanceFollowRedirects(false);
+		conn.setRequestProperty("Authorization", basicAuth);
+		conn.setRequestMethod("GET");
+		conn.setDoOutput(true);
+		conn.setDoInput(true);
+		conn.setConnectTimeout(connectTimoutMillis);
+
+		return conn;
+	}
 }

+ 2 - 1
plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/test/jdbcdriver/HPCCDriverTest.java

@@ -550,7 +550,8 @@ public class HPCCDriverTest
 							threadsrunning = thrd.isRunning() || threadsrunning;
 						}
 						Thread.sleep(250);
-					} while (threadsrunning);
+					}
+					while (threadsrunning);
 
 					for (HPCCDriverTestThread thrd : runnables)
 					{

+ 6 - 3
plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/test/jdbcdriver/HPCCDriverTestThread.java

@@ -40,12 +40,15 @@ public class HPCCDriverTestThread extends Thread
 
 			HPCCResultSet qrs = (HPCCResultSet)((HPCCPreparedStatement)prepstatement).executeQuery();
 			HPCCDriverTest.printOutResultSet(qrs, Thread.currentThread().getId());
-			running = false;
 		}
-		catch (SQLException e)
+		catch (Exception e)
 		{
-			success = false;
 			e.printStackTrace();
+			success = false;
+		}
+		finally
+		{
+			running = false;
 		}
 	}
 

+ 90 - 26
plugins/unicodelib/unicodelib.cpp

@@ -30,7 +30,7 @@
 #include "unicode/rbbi.h"
 #include "../stringlib/wildmatch.tpp"
 
-#define UNICODELIB_VERSION "UNICODELIB 1.1.05"
+#define UNICODELIB_VERSION "UNICODELIB 1.1.06"
 
 UChar32 const u32comma = ',';
 UChar32 const u32space = ' ';
@@ -91,6 +91,7 @@ static const char * compatibleVersions[] = {
     "UNICODELIB 1.1.02", 
     "UNICODELIB 1.1.03", 
     "UNICODELIB 1.1.04", 
+    "UNICODELIB 1.1.05",
     NULL };
 
 UNICODELIB_API bool getECLPluginDefinition(ECLPluginDefinitionBlock *pb) 
@@ -277,6 +278,7 @@ inline unsigned char min3(unsigned char a, unsigned char b, unsigned char c)
     return (min<c)? min:c;
 }
 
+#define DISTANCE_ON_ERROR 999
 class CEList
 {
 private:
@@ -284,8 +286,10 @@ private:
     uint32_t* ces_;
     uint32_t  length_;
     uint32_t  capacity_;
-    inline void doCreateCEList(RuleBasedCollator& rbc, UErrorCode& status) {
-        if (U_FAILURE(status)) { return; }
+    bool invalid;
+
+    void doCreateCEList(RuleBasedCollator& rbc) {
+        UErrorCode status = U_ZERO_ERROR;
         CollationElementIterator*  ceIterator = rbc.createCollationElementIterator( ustring_ );
         if (!capacity_) {
             capacity_ = ustring_.length();
@@ -299,15 +303,14 @@ private:
             ces_[length_++] = ce;
         } while (ce != CollationElementIterator::NULLORDER); 
         delete ceIterator;
-        if (U_FAILURE(status)) { length_ = 0; capacity_ = 0; }
+        if (U_FAILURE(status)) invalid = true;
     }
 
 public:
-    CEList(RuleBasedCollator& rbc, const UnicodeString & source, UErrorCode& status, uint32_t capacity=0) 
-        : length_(0), capacity_(capacity), ustring_(source)
+    CEList(RuleBasedCollator& rbc, const UnicodeString & source, uint32_t capacity=0)
+        : length_(0), capacity_(capacity), ustring_(source), invalid(false)
     {
-        //doTrimRight(ustring_);
-        doCreateCEList(rbc, status);
+        doCreateCEList(rbc);
     }
 
     ~CEList()
@@ -322,11 +325,12 @@ public:
 
     uint32_t length() { return length_;}
     uint32_t capacity() {return capacity_;}
+    inline bool isInvalid() const { return invalid; }
 };
 
 inline unsigned mask(unsigned x) { return x & 1; }
 
-unsigned unicodeEditDistanceV2(UnicodeString & left, UnicodeString & right, RuleBasedCollator& rbc, UErrorCode &status)
+unsigned unicodeEditDistanceV2(UnicodeString & left, UnicodeString & right, RuleBasedCollator& rbc)
 {
     unsigned char i, j;
 
@@ -348,8 +352,11 @@ unsigned unicodeEditDistanceV2(UnicodeString & left, UnicodeString & right, Rule
     if (rightLen == 0)
         return leftLen;
 
-    CEList   leftCEs(rbc, left, status, leftLen);
-    CEList   rightCEs(rbc, right, status, rightLen);
+    CEList   leftCEs(rbc, left, leftLen);
+    CEList   rightCEs(rbc, right, rightLen);
+    if (leftCEs.isInvalid() || rightCEs.isInvalid())
+        return DISTANCE_ON_ERROR;
+
     leftLen = leftCEs.length();
     rightLen = rightCEs.length();
 
@@ -394,7 +401,7 @@ unsigned unicodeEditDistanceV2(UnicodeString & left, UnicodeString & right, Rule
 // * special case edit1 - you could use variables for the 6 interesting array elements, and get
 //   rid of the array completely.  You could also unwind the first (and last iterations).
 // * I suspect the early exit condition could be improved depending the lengths of the strings.
-unsigned unicodeEditDistanceV3(UnicodeString & left, UnicodeString & right, unsigned radius, RuleBasedCollator& rbc, UErrorCode &status)
+unsigned unicodeEditDistanceV3(UnicodeString & left, UnicodeString & right, unsigned radius, RuleBasedCollator& rbc)
 {
     if (radius >= 255)
         return 255;
@@ -422,8 +429,8 @@ unsigned unicodeEditDistanceV3(UnicodeString & left, UnicodeString & right, unsi
     if (rightLen == 0)
         return leftLen;
 
-    CEList   leftCEs(rbc, left, status, leftLen);
-    CEList   rightCEs(rbc, right, status, rightLen);
+    CEList   leftCEs(rbc, left, leftLen);
+    CEList   rightCEs(rbc, right, rightLen);
     leftLen = leftCEs.length();
     rightLen = rightCEs.length();
 
@@ -1012,36 +1019,93 @@ UNICODELIB_API void UNICODELIB_CALL ulUnicodeCleanAccents(unsigned & tgtLen, UCh
     source.extract(0, tgtLen, tgt);
 }
 
-UNICODELIB_API unsigned UNICODELIB_CALL ulUnicodeLocaleEditDistance(unsigned leftLen, UChar const * left, unsigned rightLen, UChar const * right, char const * localename)
+
+
+static RuleBasedCollator * createRBCollator(const char * localename)
 {
     UErrorCode status = U_ZERO_ERROR;
     Locale locale(localename);
-
-    RuleBasedCollator* rbc = (RuleBasedCollator*)RuleBasedCollator::createInstance(locale, status);
+    RuleBasedCollator * rbc = (RuleBasedCollator *)RuleBasedCollator::createInstance(locale, status);
     rbc->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
+    if (U_FAILURE(status))
+    {
+        delete rbc;
+        return NULL;
+    }
+    return rbc;
+}
+
+class RBCLocale
+{
+public:
+    RBCLocale(char const * _locale) : locale(_locale)
+    {
+        rbc = createRBCollator(locale);
+    }
+    ~RBCLocale()
+    {
+        delete rbc;
+    }
+    RuleBasedCollator * queryCollator() const { return rbc; }
+private:
+    StringAttr locale;
+    RuleBasedCollator * rbc;
+};
+
+typedef MapStringTo<RBCLocale, char const *> MapStrToRBC;
+static MapStrToRBC * localeMap;
+static CriticalSection localeCrit;
+MODULE_INIT(INIT_PRIORITY_STANDARD)
+{
+    return true;
+}
+MODULE_EXIT()
+{
+    delete localeMap;
+    localeMap = NULL;
+}
+
+static RuleBasedCollator * queryRBCollator(const char * localename)
+{
+    if (!localename) localename = "";
+    CriticalBlock b(localeCrit);
+    if (!localeMap)
+        localeMap = new MapStrToRBC;
+    RBCLocale * loc = localeMap->getValue(localename);
+    if(!loc)
+    {
+        //MORE: ECLRTL calls rtlGetNormalizedUnicodeLocaleName().  Should this be happening here?
+        const char * normalizedlocale = localename;
+        localeMap->setValue(localename, normalizedlocale);
+        loc = localeMap->getValue(localename);
+    }
+    return loc->queryCollator();
+}
+
+UNICODELIB_API unsigned UNICODELIB_CALL ulUnicodeLocaleEditDistance(unsigned leftLen, UChar const * left, unsigned rightLen, UChar const * right, char const * localename)
+{
+    RuleBasedCollator* rbc = queryRBCollator(localename);
+    if (!rbc)
+        return DISTANCE_ON_ERROR;
 
     UnicodeString uLeft(left, leftLen);
     UnicodeString uRight(right, rightLen);
 
-    unsigned distance = nsUnicodelib::unicodeEditDistanceV2(uLeft, uRight, *rbc, status);
-    delete rbc;
+    unsigned distance = nsUnicodelib::unicodeEditDistanceV2(uLeft, uRight, *rbc);
     return distance;
 }
 
 
 UNICODELIB_API bool UNICODELIB_CALL ulUnicodeLocaleEditDistanceWithinRadius(unsigned leftLen, UChar const * left, unsigned rightLen, UChar const * right, unsigned radius, char const * localename)
 {
-    UErrorCode status = U_ZERO_ERROR;
-    Locale locale(localename);
-
-    RuleBasedCollator* rbc = (RuleBasedCollator*)RuleBasedCollator::createInstance(locale, status);
-    rbc->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
+    RuleBasedCollator* rbc = queryRBCollator(localename);
+    if (!rbc)
+        return false;
 
     UnicodeString uLeft(left, leftLen);
     UnicodeString uRight(right, rightLen);
 
-    unsigned distance = nsUnicodelib::unicodeEditDistanceV3(uLeft, uRight, radius, *rbc, status);
-    delete rbc;
+    unsigned distance = nsUnicodelib::unicodeEditDistanceV3(uLeft, uRight, radius, *rbc);
     return distance <= radius;
 }
 

+ 1 - 1
roxie/roxie/CMakeLists.txt

@@ -53,7 +53,7 @@ if (WIN32)
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
 endif()
 
-add_executable ( roxie ${SRCS} )
+HPCC_ADD_EXECUTABLE ( roxie ${SRCS} )
 install ( TARGETS roxie DESTINATION ${OSSDIR}/bin )
 
 target_link_libraries ( roxie

+ 1 - 1
roxie/roxieclienttest/CMakeLists.txt

@@ -36,7 +36,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( roxieclienttest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( roxieclienttest ${SRCS} )
 target_link_libraries ( roxieclienttest 
          jlib
          roxieclient 

+ 1 - 1
roxie/roxiepipe/CMakeLists.txt

@@ -38,7 +38,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( roxiepipe ${SRCS} )
+HPCC_ADD_EXECUTABLE ( roxiepipe ${SRCS} )
 install ( TARGETS roxiepipe DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( roxiepipe
          jlib

+ 1 - 1
roxie/udplib/udptransport.cmake

@@ -39,7 +39,7 @@ include_directories (
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 
-add_executable ( udptransport ${SRCS} )
+HPCC_ADD_EXECUTABLE ( udptransport ${SRCS} )
 #install ( TARGETS udptransport DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( udptransport 
          jlib

+ 1 - 1
services/runagent/frunagent.cmake

@@ -46,7 +46,7 @@ include_directories (
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 
-add_executable ( frunagent ${SRCS} )
+HPCC_ADD_EXECUTABLE ( frunagent ${SRCS} )
 install ( TARGETS frunagent DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( frunagent 
          jlib

+ 1 - 1
services/runagent/frunssh.cmake

@@ -39,7 +39,7 @@ include_directories (
 
 ADD_DEFINITIONS ( -D_CONSOLE -DRMTSSH_LOCAL)
 
-add_executable ( frunssh ${SRCS} )
+HPCC_ADD_EXECUTABLE ( frunssh ${SRCS} )
 install ( TARGETS frunssh DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( frunssh 
          jlib 

+ 1 - 1
system/mp/test/CMakeLists.txt

@@ -39,7 +39,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( mptest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( mptest ${SRCS} )
 target_link_libraries ( mptest 
          jlib
          mp 

+ 1 - 1
system/security/test/ldapsecuritytest/CMakeLists.txt

@@ -39,7 +39,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( ldapsecuritytest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( ldapsecuritytest ${SRCS} )
 target_link_libraries ( ldapsecuritytest 
          jlib
          LdapSecurity 

+ 1 - 1
system/security/test/myssl/CMakeLists.txt

@@ -38,7 +38,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( myssl ${SRCS} )
+HPCC_ADD_EXECUTABLE ( myssl ${SRCS} )
 install ( TARGETS myssl DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( myssl 
          jlib

+ 1 - 1
system/xmllibtest/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( xmllibtest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( xmllibtest ${SRCS} )
 add_dependencies ( xmllibtest xmllib )
 install ( TARGETS xmllibtest DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( xmllibtest

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1293 - 0
testing/ecl/key/prefixjoinu.xml


+ 691 - 0
testing/ecl/prefixjoinu.ecl

@@ -0,0 +1,691 @@
+/*##############################################################################
+
+    Copyright (C) 2011 HPCC Systems.
+
+    All rights reserved. This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as
+    published by the Free Software Foundation, either version 3 of the
+    License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+############################################################################## */
+
+
+// limited prefix match join tests
+
+recL := record
+  UNICODE11      name;
+  unsigned  val;
+END;
+
+recR := record
+  UNICODE    name {MAXLENGTH(12)};
+  unsigned2     val;
+END;
+
+recB := record
+  VARUNICODE name {MAXLENGTH(12)};
+  unsigned  val;
+END;
+
+
+recO := record
+  UNICODE10  lname;
+  UNICODE11  rname;
+END;
+
+
+dsL := DATASET([
+  {'BABAK',1},
+  {'BABY',2},
+  {'BARBARB',3},
+  {'BEBO',4}
+], recL);
+
+dsR := DATASET([
+  {'BABARA',5},
+  {'BABATUNDE',6},
+  {'BABETTE',7},
+  {'BABS',8},
+  {'BARBAR',9},
+  {'BARBARBA',10},
+  {'BARBARBO',11},
+  {'BARBER',12},
+  {'BETTY',13}
+], recR);
+
+
+dsBritney := DATASET([
+{ 'britney' ,1 },
+{ 'brittany',2 },
+{ 'brittney',3 },
+{ 'britany',4 },
+{ 'britny',5 },
+{ 'briteny',6 },
+{ 'britteny',7 },
+{ 'briney',8 },
+{ 'brittny',9 },
+{ 'brintey',10 },
+{ 'britanny',11 },
+{ 'britiny',12 },
+{ 'britnet',13 },
+{ 'britiney',14 },
+{ 'britaney',15 },
+{ 'britnay',16 },
+{ 'brithney',17 },
+{ 'brtiney',18 },
+{ 'birtney',19 },
+{ 'brintney',20 },
+{ 'briteney',21 },
+{ 'bitney',22 },
+{ 'brinty',23 },
+{ 'brittaney',24 },
+{ 'brittnay',25 },
+{ 'britey',26 },
+{ 'brittiny',27 },
+{ 'brtney',28 },
+{ 'bretney',29 },
+{ 'britneys',30 },
+{ 'britne',31 },
+{ 'brytney',32 },
+{ 'breatney',33 },
+{ 'britiany',34 },
+{ 'britnney',35 },
+{ 'britnry',36 },
+{ 'breatny',37 },
+{ 'brittiney',38 },
+{ 'britty',39 },
+{ 'brotney',40 },
+{ 'brutney',41 },
+{ 'britteney',42 },
+{ 'briyney',43 },
+{ 'bittany',44 },
+{ 'bridney',45 },
+{ 'britainy',46 },
+{ 'britmey',47 },
+{ 'brietney',48 },
+{ 'brithny',49 },
+{ 'britni',50 },
+{ 'brittant',51 },
+{ 'bittney',52 },
+{ 'brithey',53 },
+{ 'brittiany',54 },
+{ 'btitney',55 },
+{ 'brietny',56 },
+{ 'brinety',57 },
+{ 'brintny',58 },
+{ 'britnie',59 },
+{ 'brittey',60 },
+{ 'brittnet',61 },
+{ 'brity',62 },
+{ 'ritney',63 },
+{ 'bretny',64 },
+{ 'britnany',65 },
+{ 'brinteny',66 },
+{ 'brittainy',67 },
+{ 'pritney',68 },
+{ 'brintany',69 },
+{ 'britnery',70 },
+{ 'briitney',71 },
+{ 'britinay',72 },
+{ 'britneay',73 },
+{ 'britner',74 },
+{ 'britneys',75 },
+{ 'britnye',76 },
+{ 'britt',77 },
+{ 'brttany',78 },
+{ 'bitany',79 },
+{ 'briny',80 },
+{ 'brirney',81 },
+{ 'britant',82 },
+{ 'britnety',83 },
+{ 'brittanny',84 },
+{ 'brttney',85 },
+{ 'birttany',86 },
+{ 'brittani',87 },
+{ 'brityney',88 },
+{ 'brtitney',89 },
+{ 'brienty',90 },
+{ 'brritney',91 },
+{ 'bbritney',92 },
+{ 'briitany',93 },
+{ 'britanney',94 },
+{ 'briterny',95 },
+{ 'britneey',96 },
+{ 'britnei',97 },
+{ 'britniy',98 },
+{ 'britbey',99 },
+{ 'britneu',100 },
+{ 'britent',101 },
+{ 'brittnany',102 },
+{ 'britttany',103 },
+{ 'btiney',104 },
+{ 'birttney',105 },
+{ 'breitney',106 },
+{ 'brinity',107 },
+{ 'britenay',108 },
+{ 'britneyt',109 },
+{ 'brittan',110 },
+{ 'brittne',111 },
+{ 'btittany',112 },
+{ 'beitney',113 },
+{ 'birteny',114 },
+{ 'brightney',115 },
+{ 'brintiny',116 },
+{ 'britanty',117 },
+{ 'britenny',118 },
+{ 'britini',119 },
+{ 'britnwy',120 },
+{ 'brittni',121 },
+{ 'brittnie',122 },
+{ 'biritney',123 },
+{ 'birtany',124 },
+{ 'biteny',125 },
+{ 'bratney',126 },
+{ 'britani',127 },
+{ 'britanie',128 },
+{ 'briteany',129 },
+{ 'brittay',130 },
+{ 'brittinay',131 },
+{ 'brtany',132 },
+{ 'brtiany',133 },
+{ 'birney',134 },
+{ 'brirtney',135 },
+{ 'britnaey',136 },
+{ 'britnee',137 },
+{ 'britony',138 },
+{ 'brittanty',139 },
+{ 'britttney',140 },
+{ 'birtny',141 },
+{ 'brieny',142 },
+{ 'brintty',143 },
+{ 'brithy',144 },
+{ 'brittanie',145 },
+{ 'brinney',146 },
+{ 'briten',147 },
+{ 'briterney',148 },
+{ 'britheny',149 },
+{ 'britneny',150 },
+{ 'brittamy',151 },
+{ 'brittmey',152 },
+{ 'brytnei',153 },
+{ 'btirney',154 },
+{ 'rittney',155 },
+{ 'brinet',156 },
+{ 'britneyy',157 },
+{ 'britten',158 },
+{ 'beritney',159 },
+{ 'bretiny',160 },
+{ 'briatny',161 },
+{ 'brieney',162 },
+{ 'brinany',163 },
+{ 'britaany',164 },
+{ 'britan',165 },
+{ 'britine',166 },
+{ 'britnea',167 },
+{ 'britnes',168 },
+{ 'britnez',169 },
+{ 'britnny',170 },
+{ 'brittenay',171 },
+{ 'brittneys',172 },
+{ 'brittony',173 },
+{ 'brteny',174 },
+{ 'btitany',175 },
+{ 'btittney',176 },
+{ 'btriney',177 },
+{ 'btritney',178 },
+{ 'rittany',179 },
+{ 'braitney',180 },
+{ 'brettney',181 },
+{ 'britamy',182 },
+{ 'britery',183 },
+{ 'britnary',184 },
+{ 'brittent',185 },
+{ 'bruttney',186 },
+{ 'pritny',187 },
+{ 'bitaney',188 },
+{ 'brenty',189 },
+{ 'bristney',190 },
+{ 'britay',191 },
+{ 'britinny',192 },
+{ 'brittaany',193 },
+{ 'brittanys',194 },
+{ 'brittini',195 },
+{ 'brittniy',196 },
+{ 'brtieny',197 },
+{ 'brutany',198 },
+{ 'bitteny',199 },
+{ 'brinttany',200 },
+{ 'britanay',201 },
+{ 'britinany',202 },
+{ 'britn',203 },
+{ 'britnew',204 },
+{ 'britneyn',205 },
+{ 'britrney',206 },
+{ 'brtiny',207 },
+{ 'brtittney',208 },
+{ 'brtny',209 },
+{ 'brytny',210 },
+{ 'rbitney',211 },
+{ 'birtiny',212 },
+{ 'bithney',213 },
+{ 'brattany',214 },
+{ 'breitny',215 },
+{ 'breteny',216 },
+{ 'brightny',217 },
+{ 'brintay',218 },
+{ 'brinttey',219 },
+{ 'briotney',220 },
+{ 'britanys',221 },
+{ 'britley',222 },
+{ 'britneyb',223 },
+{ 'britnrey',224 },
+{ 'britnty',225 },
+{ 'brittner',226 },
+{ 'brottany',227 },
+{ 'baritney',228 },
+{ 'birntey',229 },
+{ 'biteney',230 },
+{ 'bitiny',231 },
+{ 'breateny',232 },
+{ 'brianty',233 },
+{ 'brintye',234 },
+{ 'britianny',235 },
+{ 'britly',236 },
+{ 'britnej',237 },
+{ 'britneyu',238 },
+{ 'britniey',239 },
+{ 'britnnay',240 },
+{ 'brittian',241 },
+{ 'briyny',242 },
+{ 'brrittany',243 },
+{ 'brttiney',244 },
+{ 'btiteny',245 },
+{ 'btrittany',246 },
+{ 'beritny',247 },
+{ 'bhritney',248 },
+{ 'birthney',249 },
+{ 'breathney',250 },
+{ 'breaty',251 },
+{ 'bretany',252 },
+{ 'briatany',253 },
+{ 'brint',254 },
+{ 'britenney',255 },
+{ 'britian',256 },
+{ 'britinty',257 },
+{ 'brititney',258 },
+{ 'britnsy',259 },
+{ 'britrey',260 },
+{ 'britsny',261 },
+{ 'brittine',262 },
+{ 'brittnry',263 },
+{ 'brittsny',264 },
+{ 'brtanny',265 },
+{ 'brtittany',266 },
+{ 'bruttany',267 },
+{ 'brytany',268 },
+{ 'btitny',269 },
+{ 'pretny',270 },
+{ 'ritany',271 },
+{ 'bbritany',272 },
+{ 'bbrittney',273 },
+{ 'biitney',274 },
+{ 'bitny',275 },
+{ 'breathny',276 },
+{ 'breney',277 },
+{ 'brethney',278 },
+{ 'brettny',279 },
+{ 'bridny',280 },
+{ 'brigney',281 },
+{ 'briittney',282 },
+{ 'brinaty',283 },
+{ 'brinay',284 },
+{ 'brinetty',285 },
+{ 'brinitty',286 },
+{ 'brinny',287 },
+{ 'brintery',288 },
+{ 'britary',289 },
+{ 'britbney',290 },
+{ 'brithany',291 },
+{ 'britieny',292 },
+{ 'britiey',293 },
+{ 'britnt',294 },
+{ 'britnys',295 },
+{ 'britrny',296 },
+{ 'brittenny',297 },
+{ 'brittnee',298 },
+{ 'brittnt',299 },
+{ 'brney',300 },
+{ 'broitney',301 },
+{ 'brotny',302 },
+{ 'bruteny',303 },
+{ 'btiyney',304 },
+{ 'btrittney',305 },
+{ 'gritney',306 },
+{ 'spritney',307 },
+{ 'bittny',308 },
+{ 'bnritney',309 },
+{ 'brandy',310 },
+{ 'brbritney',311 },
+{ 'breatiny',312 },
+{ 'breetney',313 },
+{ 'bretiney',314 },
+{ 'brfitney',315 },
+{ 'briattany',316 },
+{ 'brieteny',317 },
+{ 'briety',318 },
+{ 'briitny',319 },
+{ 'briittany',320 },
+{ 'brinie',321 },
+{ 'brinteney',322 },
+{ 'brintne',323 },
+{ 'britaby',324 },
+{ 'britaey',325 },
+{ 'britainey',326 },
+{ 'britinie',327 },
+{ 'britinney',328 },
+{ 'britmney',329 },
+{ 'britnear',330 },
+{ 'britnel',331 },
+{ 'britneuy',332 },
+{ 'britnewy',333 },
+{ 'britnmey',334 },
+{ 'brittaby',335 },
+{ 'brittery',336 },
+{ 'britthey',337 },
+{ 'brittnaey',338 },
+{ 'brittnat',339 },
+{ 'brittneny',340 },
+{ 'brittnye',341 },
+{ 'brittteny',342 },
+{ 'briutney',343 },
+{ 'briyeny',344 },
+{ 'brnity',345 },
+{ 'brtteny',346 },
+{ 'brttiany',347 },
+{ 'bryney',348 },
+{ 'brythney',349 },
+{ 'brytne',350 },
+{ 'brytni',351 },
+{ 'brytnie',352 },
+{ 'bvritney',353 },
+{ 'dritney',354 },
+{ 'priteny',355 },
+{ 'beittany',356 },
+{ 'bichney',357 },
+{ 'biritny',358 },
+{ 'birnety',359 },
+{ 'birny',360 },
+{ 'birteney',361 },
+{ 'birthny',362 },
+{ 'birtiney',363 },
+{ 'birtteny',364 },
+{ 'birttny',365 },
+{ 'bitanny',366 },
+{ 'bitheay',367 },
+{ 'bithey',368 },
+{ 'bitrney',369 },
+{ 'breinty',370 },
+{ 'brethny',371 },
+{ 'bretne',372 },
+{ 'bretniy',373 },
+{ 'brettine',374 },
+{ 'brighty',375 },
+{ 'brihney',376 },
+{ 'brihtney',377 },
+{ 'briiney',378 },
+{ 'briitnay',379 },
+{ 'brineny',380 },
+{ 'brinte',381 },
+{ 'brintiney',382 },
+{ 'brintneey',383 },
+{ 'brinttney',384 },
+{ 'brirany',385 },
+{ 'brirtny',386 },
+{ 'brisney',387 },
+{ 'britainny',388 },
+{ 'britaniy',389 },
+{ 'britanu',390 },
+{ 'britanyy',391 },
+{ 'britatny',392 },
+{ 'britdney',393 },
+{ 'britemy',394 },
+{ 'britenty',395 },
+{ 'brither',396 },
+{ 'brithne',397 },
+{ 'brititany',398 },
+{ 'brititny',399 },
+{ 'britiy',400 },
+{ 'britmeny',401 },
+{ 'britneeey',402 },
+{ 'britnehy',403 },
+{ 'britnely',404 },
+{ 'britnesy',405 },
+{ 'britnetty',406 },
+{ 'britnex',407 },
+{ 'britneyxxx',408 },
+{ 'britnity',409 },
+{ 'britntey',410 },
+{ 'britnyey',411 },
+{ 'britterny',412 },
+{ 'brittneey',413 },
+{ 'brittnney',414 },
+{ 'brittnyey',415 },
+{ 'brityen',416 },
+{ 'briytney',417 },
+{ 'brltney',418 },
+{ 'broteny',419 },
+{ 'brtaney',420 },
+{ 'brtiiany',421 },
+{ 'brtinay',422 },
+{ 'brtinney',423 },
+{ 'brtitany',424 },
+{ 'brtiteny',425 },
+{ 'brtnet',426 },
+{ 'brytiny',427 },
+{ 'btney',428 },
+{ 'drittney',429 },
+{ 'pretney',430 },
+{ 'rbritney',431 },
+{ 'barittany',432 },
+{ 'bbbritney',433 },
+{ 'bbitney',434 },
+{ 'bbritny',435 },
+{ 'bbrittany',436 },
+{ 'beitany',437 },
+{ 'beitny',438 },
+{ 'bertney',439 },
+{ 'bertny',440 },
+{ 'betney',441 },
+{ 'betny',442 },
+{ 'bhriney',443 },
+{ 'biney',444 },
+{ 'bintey',445 },
+{ 'biretny',446 },
+{ 'biritany',447 },
+{ 'birittany',448 },
+{ 'birittny',449 },
+{ 'birnty',450 },
+{ 'birtey',451 },
+{ 'birtheny',452 },
+{ 'birtieny',453 },
+{ 'birtnay',454 },
+{ 'birtnet',455 },
+{ 'bitnet',456 },
+{ 'bitttany',457 },
+{ 'bnrittany',458 },
+{ 'bntney',459 },
+{ 'bpitney',460 },
+{ 'brandi',461 },
+{ 'brattney',462 },
+{ 'breanty',463 },
+{ 'breany',464 },
+{ 'breittany',465 },
+{ 'brently',466 },
+{ 'brentney',467 },
+{ 'brethany',468 },
+{ 'brethine',469 },
+{ 'bretnty',470 },
+{ 'bretty',471 },
+{ 'brianey',472 },
+{ 'briatney',473 },
+{ 'brickney',474 },
+{ 'bridnea',475 },
+{ 'brieatney',476 },
+{ 'brientny',477 },
+{ 'brietnet',478 },
+{ 'briettny',479 },
+{ 'briey',480 },
+{ 'brighney',481 },
+{ 'brigtney',482 },
+{ 'brigtny',483 },
+{ 'briiny',484 },
+{ 'brindey',485 },
+{ 'brindy',486 },
+{ 'bringney',487 },
+{ 'brininy',488 },
+{ 'brinitey',489 },
+{ 'brinsley',490 },
+{ 'brinthey',491 },
+{ 'brinthy',492 },
+{ 'brintiy',493 },
+{ 'brintneys',494 },
+{ 'brintry',495 },
+{ 'brinyey',496 },
+{ 'briottany',497 },
+{ 'brirrany',498 },
+{ 'brirreny',499 },
+{ 'brirtany',500 },
+{ 'brirttany',501 },
+{ 'brirttney',502 },
+{ 'britain',503 },
+{ 'britane',504 },
+{ 'britaneny',505 },
+{ 'britania',506 },
+{ 'britann',507 },
+{ 'britanna',508 },
+{ 'britannie',509 },
+{ 'britannt',510 },
+{ 'britannu',511 },
+{ 'britanyl',512 },
+{ 'britanyt',513 },
+{ 'briteeny',514 },
+{ 'britenany',515 },
+{ 'britenet',516 },
+{ 'briteniy',517 },
+{ 'britenys',518 },
+{ 'britianey',519 },
+{ 'britin',520 },
+{ 'britinary',521 },
+{ 'britmy',522 },
+{ 'britnaney',523 },
+{ 'britnat',524 },
+{ 'britnbey',525 },
+{ 'britndy',526 },
+{ 'britneh',527 },
+{ 'britneney',528 },
+{ 'britney6',529 },
+{ 'britneye',530 },
+{ 'britneyh',531 },
+{ 'britneym',532 },
+{ 'britneyyy',533 },
+{ 'britnhey',534 },
+{ 'britnjey',535 },
+{ 'britnne',536 },
+{ 'britnu',537 },
+{ 'britoney',538 },
+{ 'britrany',539 },
+{ 'britreny',540 },
+{ 'britry',541 },
+{ 'britsany',542 },
+{ 'brittanay',543 },
+{ 'brittang',544 },
+{ 'brittans',545 },
+{ 'brittanyh',546 },
+{ 'brittanyn',547 },
+{ 'brittanys',548 },
+{ 'brittanyt',549 },
+{ 'brittanyy',550 },
+{ 'brittary',551 },
+{ 'brittenie',552 },
+{ 'brittenty',553 },
+{ 'brittinney',554 },
+{ 'brittley',555 },
+{ 'brittn',556 },
+{ 'brittnery',557 },
+{ 'brittnety',558 },
+{ 'brittneys',559 },
+{ 'brittneyu',560 },
+{ 'brittnsey',561 },
+{ 'britttaney',562 },
+{ 'britttny',563 },
+{ 'brittyney',564 },
+{ 'brityne',565 },
+{ 'briyany',566 },
+{ 'brlttney',567 },
+{ 'brotaney',568 },
+{ 'brotany',569 },
+{ 'brottney',570 },
+{ 'brriney',571 },
+{ 'brrittney',572 },
+{ 'brrtney',573 },
+{ 'brthney',574 },
+{ 'brtianny',575 },
+{ 'brtineys',576 },
+{ 'brtittny',577 },
+{ 'brttiny',578 },
+{ 'brtttany',579 },
+{ 'brydney',580 },
+{ 'brynty',581 },
+{ 'brythey',582 },
+{ 'bryttney',583 },
+{ 'btiany',584 },
+{ 'btirtney',585 },
+{ 'btitiney',586 },
+{ 'btittny',587 },
+{ 'btritany',588 },
+{ 'buttney',589 },
+{ 'grittney',590 },
+{ 'hrittney',591 },     // equal excluded
+{ 'hrittney',592 },
+{ 'hrittney',593 },
+{ 'hrittney',594 },
+{ 'hrittney',595 },
+{ 'irittney',596 },             // equal included
+{ 'irittney',597 },
+{ 'irittney',598 },
+{ 'irittney',599 },
+{ 'prietny', 600 },
+{ 'pritany', 601 },
+{ 'prittany',602 }
+], recB);
+
+
+
+recO T(recL l,recR r) := TRANSFORM
+  self.lname := l.name;
+  self.rname := r.name;
+END;
+
+recO TB(recB l,recB r) := TRANSFORM
+  self.lname := l.name;
+  self.rname := r.name;
+END;
+
+sdsL := SORT(DISTRIBUTE(dsBritney(val<200),0),val,local) : Stored('TempL');
+sdsR := SORT(DISTRIBUTE(dsBritney(val>=200),0),val,local) : Stored('TempR');
+sdsS := SORT(DISTRIBUTE(dsBritney,0),val,local) : Stored('TempS');
+
+JT := JOIN(DISTRIBUTE(dsL,0),DISTRIBUTE(dsR,0),left.name[1..*]=right.name[1..*] and left.val<=right.val,T(LEFT,RIGHT), ATMOST(left.name[1..*]=right.name[1..*],3), LOCAL);
+JTB := JOIN(sdsL,sdsR,left.name[1..*]=right.name[1..*] and left.val<=right.val,TB(LEFT,RIGHT), ATMOST(left.name[1..*]=right.name[1..*],4), LOCAL);
+JTBS := JOIN(sdsS,sdsS,left.name[1..*]=right.name[1..*] and left.val<=right.val,TB(LEFT,RIGHT), ATMOST(left.name[1..*]=right.name[1..*],4), LOCAL);
+
+OUTPUT(JT);
+OUTPUT(JTB);
+OUTPUT(JTBS);

+ 1 - 1
thorlcr/master/CMakeLists.txt

@@ -65,7 +65,7 @@ if (WIN32)
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
 endif()
 
-add_executable ( thormaster_lcr ${SRCS} )
+HPCC_ADD_EXECUTABLE ( thormaster_lcr ${SRCS} )
 install ( TARGETS thormaster_lcr DESTINATION ${OSSDIR}/bin )
 target_link_libraries (  thormaster_lcr 
          jlib

+ 1 - 1
thorlcr/slave/CMakeLists.txt

@@ -63,7 +63,7 @@ if (WIN32)
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
 endif()
 
-add_executable ( thorslave_lcr ${SRCS} )
+HPCC_ADD_EXECUTABLE ( thorslave_lcr ${SRCS} )
 install ( TARGETS thorslave_lcr DESTINATION ${OSSDIR}/bin )
 target_link_libraries (  thorslave_lcr 
          jlib

+ 1 - 1
tools/backupnode/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( backupnode ${SRCS} )
+HPCC_ADD_EXECUTABLE ( backupnode ${SRCS} )
 install ( TARGETS backupnode DESTINATION ${OSSDIR}/bin )
 
 target_link_libraries (  backupnode 

+ 1 - 1
tools/combine/CMakeLists.txt

@@ -38,7 +38,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( combine ${SRCS} )
+HPCC_ADD_EXECUTABLE ( combine ${SRCS} )
 install ( TARGETS combine DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( combine
          jlib

+ 1 - 1
tools/copyexp/CMakeLists.txt

@@ -37,7 +37,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( copyexp ${SRCS} )
+HPCC_ADD_EXECUTABLE ( copyexp ${SRCS} )
 install ( TARGETS copyexp DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( copyexp
          jlib 

+ 1 - 1
tools/dumpkey/CMakeLists.txt

@@ -39,7 +39,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( dumpkey ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dumpkey ${SRCS} )
 install ( TARGETS dumpkey DESTINATION ${OSSDIR}/bin )
 
 target_link_libraries ( dumpkey 

+ 1 - 1
tools/esdl/CMakeLists.txt

@@ -52,6 +52,6 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE -O0 )
 
-add_executable ( esdl ${SRCS} )
+HPCC_ADD_EXECUTABLE ( esdl ${SRCS} )
 #install ( TARGETS esdl DESTINATION ${OSSDIR}/bin )
 

+ 1 - 1
tools/esdl/esdl.cmake

@@ -45,7 +45,7 @@ add_custom_command ( OUTPUT esdllex.cpp
 
 set ( SRCS esdlgram.cpp esdllex.cpp main.cpp esdlcomp.cpp esdl_utils.cpp )
 # esdlgram.y esdllex.l main.cpp esdlcomp.cpp esdl_utils.cpp 
-add_executable ( esdl ${SRCS} )
+HPCC_ADD_EXECUTABLE ( esdl ${SRCS} )
 install ( TARGETS esdl DESTINATION ${OSSDIR}/bin )
 #add_dependencies ( esdl esdlgram.cpp esdlgram.h esdllex.cpp )
 

+ 1 - 1
tools/fcached/CMakeLists.txt

@@ -38,7 +38,7 @@ ADD_DEFINITIONS( -DMODULE_PRIORITY=1 -D_CONSOLE )
 
 set ( SRCS fcached.cpp )
 
-add_executable ( fcached ${SRCS} )
+HPCC_ADD_EXECUTABLE ( fcached ${SRCS} )
 install ( TARGETS fcached DESTINATION ${OSSDIR}/bin )
 
 

+ 1 - 1
tools/genht/CMakeLists.txt

@@ -38,7 +38,7 @@ include_directories (
 
 ADD_DEFINITIONS( -D_CONSOLE )
 
-add_executable ( genht ${SRCS} )
+HPCC_ADD_EXECUTABLE ( genht ${SRCS} )
 target_link_libraries ( genht
         jlib 
     )

+ 1 - 1
tools/hidl/CMakeLists.txt

@@ -52,5 +52,5 @@ include_directories (
 set_source_files_properties (${CMAKE_CURRENT_BINARY_DIR}/hidlgram.cpp PROPERTIES COMPILE_FLAGS -fno-strict-aliasing)
 
 ADD_DEFINITIONS( -D_CONSOLE)
-add_executable ( hidl ${SRCS} )
+HPCC_ADD_EXECUTABLE ( hidl ${SRCS} )
 #install ( TARGETS hidl DESTINATION ${OSSDIR}/bin )

+ 1 - 1
tools/keydiff/keydiff.cmake

@@ -39,7 +39,7 @@ include_directories (
 
 ADD_DEFINITIONS ( -DNO_SYBASE -D_CONSOLE )
 
-add_executable ( keydiff ${SRCS} )
+HPCC_ADD_EXECUTABLE ( keydiff ${SRCS} )
 install ( TARGETS keydiff DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( keydiff 
          jlib

+ 1 - 1
tools/keydiff/keypatch.cmake

@@ -41,7 +41,7 @@ include_directories (
 
 ADD_DEFINITIONS ( -DNO_SYBASE -D_CONSOLE )
 
-add_executable ( keypatch ${SRCS} )
+HPCC_ADD_EXECUTABLE ( keypatch ${SRCS} )
 install ( TARGETS keypatch DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( keypatch 
          jlib

+ 1 - 1
tools/pskill/CMakeLists.txt

@@ -26,6 +26,6 @@ project( pstart )
 
 if (WIN32)
     include_directories (../../system/win32)
-    add_executable ( pskill main.cpp )
+    HPCC_ADD_EXECUTABLE ( pskill main.cpp )
     target_link_libraries ( pskill psapi.lib)
 endif ()

+ 1 - 1
tools/pstart/CMakeLists.txt

@@ -26,5 +26,5 @@ project( pstart )
 
 if (WIN32)
     include_directories (../../system/win32)
-    add_executable ( pstart main.cpp )
+    HPCC_ADD_EXECUTABLE ( pstart main.cpp )
 endif ()

+ 0 - 0
tools/start-stop-daemon/CMakeLists.txt


Vissa filer visades inte eftersom för många filer har ändrats