From d9904f7ff3e87d82347311c61b53d3127f587fe0 Mon Sep 17 00:00:00 2001 From: aguerre Date: Tue, 28 May 2013 15:59:43 +0000 Subject: [PATCH] merge from BR_KERNEL_REFACTORING --- CMakeLists.txt | 108 ++++++ Makefile.am | 2 +- bin/CMakeLists.txt | 64 ++++ bin/Makefile.am | 30 +- bin/NSparam.py | 22 +- bin/ORBConfigFile.py | 84 +++++ bin/appli_gen.py | 13 +- bin/appli_install.sh | 89 ----- bin/appliskel/.bashrc | 23 +- bin/appliskel/CMakeLists.txt | 38 ++ bin/appliskel/Makefile.am | 7 +- bin/appliskel/getAppliPath.py | 34 +- bin/appliskel/runRemote.sh | 13 +- bin/appliskel/runSession | 52 ++- bin/appliskel/runTests | 90 ----- bin/appliskel/salome.py | 74 ++++ bin/appliskel/searchFreePort.sh | 62 ---- bin/config_appli.xml | 21 -- bin/killSalome.py | 1 - bin/killSalomeWithPort.py | 50 ++- bin/launchConfigureParser.py | 63 ++-- bin/launchSalome.py | 114 ------ bin/orbmodule.py | 20 +- bin/parseConfigFile.py | 301 ++++++++++++++++ bin/{createAppli.sh => runConsole.py} | 35 +- bin/runNS.py | 121 ------- bin/runNS.sh | 66 ---- bin/runSalome | 54 --- bin/runSalome.bat | 23 -- bin/runSalome.ksh | 98 ----- bin/runSalome.py | 231 +++--------- bin/runSession.py | 106 ++++++ bin/salome.launch | 29 -- bin/salomeConsole.py | 6 +- bin/salomeRunner.py | 294 +++++++++++++++ bin/salome_session.py | 54 +-- bin/salome_utils.py | 7 +- bin/searchFreePort.py | 111 ++++++ bin/setenv.py | 3 +- bin/shutdownSalome.py | 11 +- configure.ac | 4 +- bin/runSalome.csh => doc/CMakeLists.txt | 9 +- doc/Makefile.am | 2 +- doc/docutils/CMakeLists.txt | 66 ++++ doc/docutils/Makefile.am | 2 +- doc/docutils/archives/KERNEL_Services.txt | 16 +- doc/docutils/archives/SALOME_Application.txt | 14 +- doc/docutils/archives/txt2html.sh | 1 + doc/docutils/archives/userguide.txt | 19 +- bin/waitNS.sh => doc/salome/CMakeLists.txt | 16 +- doc/salome/Makefile.am | 4 +- doc/salome/gui/CMakeLists.txt | 35 ++ doc/salome/gui/Makefile.am | 2 +- doc/salome/gui/images/icon_about.png | Bin 465999 -> 467476 bytes doc/salome/kernel_salome.dox | 47 ++- doc/salome/main.dox | 5 +- doc/salome/running_salome.dox | 115 ++++++ doc/salome/tui/CMakeLists.txt | 36 ++ doc/salome/tui/Makefile.am | 2 +- doc/salome/tui/doxyfile.in | 143 ++++---- idl/CMakeLists.txt | 95 +++++ idl/Makefile.am | 2 +- idl/SALOMEDS_Attributes.idl | 21 ++ idl/SALOME_Component.idl | 11 + resources/CMakeLists.txt | 40 +++ resources/Makefile.am | 2 +- salome_adm/CMakeLists.txt | 24 ++ salome_adm/Makefile.am | 23 ++ salome_adm/SALOMEconfig.ref.in | 65 ++++ salome_adm/cmake_files/CMakeLists.txt | 50 +++ salome_adm/cmake_files/FindCPPUNIT.cmake | 10 +- salome_adm/cmake_files/FindLIBBATCH.cmake | 3 +- salome_adm/cmake_files/FindMPI.cmake | 12 +- salome_adm/cmake_files/FindPLATFORM.cmake | 54 ++- salome_adm/cmake_files/FindPTHREADS.cmake | 3 +- salome_adm/cmake_files/FindSPHINX.cmake | 9 +- salome_adm/cmake_files/Makefile.am | 1 + salome_adm/cmake_files/SalomeMacros.cmake | 163 +++++++++ salome_adm/cmake_files/UseOMNIORB.cmake | 15 +- salome_adm/cmake_files/am2cmake.py | 179 ++++----- .../cmake_files/prepare_generating_doc.py | 76 +++- salome_adm/unix/CMakeLists.txt | 35 ++ salome_adm/unix/Makefile.am | 22 -- salome_adm/unix/config_files/CMakeLists.txt | 84 +++++ salome_adm/unix/config_files/check_boost.m4 | 4 +- salome_adm/unix/config_files/check_cas.m4 | 4 +- salome_adm/unix/make_common_starter.am | 8 +- src/Basics/Basics_Utils.cxx | 12 + src/Basics/Basics_Utils.hxx | 4 + src/Basics/CMakeLists.txt | 41 +++ src/Basics/Test/CMakeLists.txt | 20 ++ src/CMakeLists.txt | 119 ++++++ src/Communication/CMakeLists.txt | 76 ++++ src/Communication/Makefile.am | 2 +- src/Communication_SWIG/CMakeLists.txt | 62 ++++ src/Communication_SWIG/Makefile.am | 2 +- src/Container/CMakeLists.txt | 120 +++++++ src/Container/Component_i.cxx | 17 + src/Container/Makefile.am | 9 +- src/Container/SALOME_ComponentPy.py | 6 + src/Container/SALOME_Component_i.hxx | 3 + src/Container/SALOME_ContainerManager.cxx | 16 +- src/Container/SALOME_ContainerPy.py | 339 ------------------ src/DF/CMakeLists.txt | 50 +++ src/DSC/CMakeLists.txt | 45 +++ src/DSC/DSC_Basic/CMakeLists.txt | 64 ++++ src/DSC/DSC_Python/CMakeLists.txt | 67 ++++ src/DSC/DSC_Python/Makefile.am | 2 +- src/DSC/DSC_Python/calcium.i | 2 + src/DSC/DSC_User/Basic/CMakeLists.txt | 45 +++ src/DSC/DSC_User/CMakeLists.txt | 58 +++ src/DSC/DSC_User/Datastream/CMakeLists.txt | 58 +++ .../Datastream/Calcium/CMakeLists.txt | 114 ++++++ .../DSC_User/Datastream/Calcium/CalciumC.c | 12 + .../Datastream/Calcium/CalciumCInterface.cxx | 3 + .../Datastream/Calcium/CalciumCInterface.hxx | 3 + .../DSC_User/Datastream/Calcium/Makefile.am | 2 +- src/DSC/DSC_User/Datastream/Calcium/calcium.h | 39 ++ .../DSC_User/Datastream/Calcium/calciumf.c | 20 ++ .../DSC_User/Datastream/Calcium/calciumf.h | 2 + .../DSC_User/Datastream/Palm/CMakeLists.txt | 44 +++ src/DSC/Makefile.am | 4 +- src/DSC/ParallelDSC/CMakeLists.txt | 54 +++ src/GenericObj/CMakeLists.txt | 35 ++ src/HDFPersist/CMakeLists.txt | 84 +++++ src/HDFPersist/HDFascii.cc | 2 +- src/HDFPersist/Makefile.am | 2 +- src/KERNEL_PY/CMakeLists.txt | 49 +++ src/KERNEL_PY/kernel/CMakeLists.txt | 49 +++ .../kernel/parametric/CMakeLists.txt | 28 ++ src/KERNEL_PY/salome.py | 189 ---------- src/KERNEL_PY/salome_study.py | 21 ++ src/KernelHelpers/CMakeLists.txt | 65 ++++ src/KernelHelpers/Test/CMakeLists.txt | 68 ++++ .../Test/KernelHelpersUnitTests.hxx | 12 +- src/Launcher/BatchTest.cxx | 2 + src/Launcher/CMakeLists.txt | 122 +++++++ src/Launcher/Launcher.cxx | 3 + src/Launcher/Launcher_Job_Command.cxx | 3 +- src/Launcher/Launcher_Job_SALOME.cxx | 3 +- src/LifeCycleCORBA/CMakeLists.txt | 67 ++++ src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx | 9 +- src/LifeCycleCORBA/Test/CMakeLists.txt | 72 ++++ .../Test/LifeCycleCORBATest.cxx | 3 + .../Test/LifeCycleCORBATest.hxx | 12 +- src/LifeCycleCORBA_SWIG/CMakeLists.txt | 57 +++ src/LifeCycleCORBA_SWIG/Makefile.am | 2 +- src/LifeCycleCORBA_SWIG/Test/CMakeLists.txt | 27 ++ src/Logger/CMakeLists.txt | 53 +++ src/Logger/Test/CMakeLists.txt | 21 ++ src/MPIContainer/CMakeLists.txt | 69 ++++ src/MPIContainer/MPIContainer_i.cxx | 5 + src/Makefile.am | 5 +- src/ModuleCatalog/CMakeLists.txt | 68 ++++ src/ModuleGenerator/CMakeLists.txt | 25 ++ src/ModuleGenerator/Makefile.am | 2 +- src/NOTIFICATION_SWIG/CMakeLists.txt | 50 +++ src/NOTIFICATION_SWIG/Makefile.am | 2 +- src/NamingService/CMakeLists.txt | 45 +++ src/NamingService/Test/CMakeLists.txt | 70 ++++ src/NamingService/Test/NamingServiceTest.cxx | 5 + src/NamingService/Test/NamingServiceTest.hxx | 14 +- src/Notification/CMakeLists.txt | 49 +++ src/ParallelContainer/CMakeLists.txt | 106 ++++++ src/Registry/CMakeLists.txt | 53 +++ src/ResourcesManager/CMakeLists.txt | 64 ++++ .../SALOME_ResourcesCatalog_Handler.cxx | 7 + .../SALOME_ResourcesCatalog_Parser.cxx | 2 + .../SALOME_ResourcesCatalog_Parser.hxx | 2 +- .../SALOME_ResourcesManager.cxx | 6 +- src/SALOMEDS/CMakeLists.txt | 269 ++++++++++++++ src/SALOMEDS/Makefile.am | 1 - .../SALOMEDS_AttributeStudyProperties.cxx | 46 +++ .../SALOMEDS_AttributeStudyProperties.hxx | 4 +- .../SALOMEDS_AttributeStudyProperties_i.cxx | 31 ++ .../SALOMEDS_AttributeStudyProperties_i.hxx | 4 + src/SALOMEDS/SALOMEDS_Driver_i.cxx | 78 ++-- src/SALOMEDS/SALOMEDS_Driver_i.hxx | 6 +- src/SALOMEDS/SALOMEDS_StudyBuilder.cxx | 3 +- src/SALOMEDS/SALOMEDS_StudyManager.cxx | 2 +- src/SALOMEDS/SALOMEDS_StudyManager_i.cxx | 2 +- src/SALOMEDS/SALOME_DriverPy.py | 6 + src/SALOMEDS/Test/CMakeLists.txt | 87 +++++ src/SALOMEDS/Test/Makefile.am | 2 +- src/SALOMEDS/Test/SALOMEDSTest.hxx | 14 +- src/SALOMEDS/Test/TestSALOMEDS.cxx | 12 +- src/SALOMEDSClient/CMakeLists.txt | 33 ++ ...ALOMEDSClient_AttributeStudyProperties.hxx | 4 +- src/SALOMEDSImpl/CMakeLists.txt | 169 +++++++++ .../SALOMEDSImpl_AttributeStudyProperties.cxx | 153 +++++++- .../SALOMEDSImpl_AttributeStudyProperties.hxx | 24 +- src/SALOMEDSImpl/SALOMEDSImpl_Driver.hxx | 1 + .../SALOMEDSImpl_StudyManager.cxx | 163 +++++++-- .../SALOMEDSImpl_UseCaseBuilder.cxx | 2 +- src/SALOMEDSImpl/Test/CMakeLists.txt | 79 ++++ src/SALOMEDSImpl/Test/SALOMEDSImplTest.hxx | 12 +- src/SALOMELocalTrace/CMakeLists.txt | 49 +++ src/SALOMELocalTrace/Test/CMakeLists.txt | 42 +++ .../Test/SALOMELocalTraceTest.cxx | 16 +- .../Test/SALOMELocalTraceTest.hxx | 12 +- src/SALOMETraceCollector/CMakeLists.txt | 36 ++ src/SALOMETraceCollector/Test/CMakeLists.txt | 52 +++ .../Test/SALOMETraceCollectorTest.cxx | 7 + .../Test/SALOMETraceCollectorTest.hxx | 12 +- src/TOOLSDS/CMakeLists.txt | 38 ++ src/TestContainer/CMakeLists.txt | 73 ++++ src/TestContainer/Makefile.am | 3 +- src/TestContainer/TestComponentPy.py | 73 ---- src/TestMPIContainer/CMakeLists.txt | 65 ++++ src/UnitTests/CMakeLists.txt | 96 +++++ src/Utils/CMakeLists.txt | 53 +++ src/Utils/Test/CMakeLists.txt | 55 +++ src/Utils/Test/TestUtils.py | 2 +- src/Utils/Test/UtilsTest.cxx | 4 + src/Utils/Test/UtilsTest.hxx | 12 +- 215 files changed, 7135 insertions(+), 2194 deletions(-) create mode 100755 CMakeLists.txt create mode 100755 bin/CMakeLists.txt create mode 100644 bin/ORBConfigFile.py delete mode 100644 bin/appli_install.sh create mode 100755 bin/appliskel/CMakeLists.txt delete mode 100755 bin/appliskel/runTests create mode 100755 bin/appliskel/salome.py delete mode 100755 bin/appliskel/searchFreePort.sh delete mode 100644 bin/config_appli.xml delete mode 100755 bin/launchSalome.py create mode 100644 bin/parseConfigFile.py rename bin/{createAppli.sh => runConsole.py} (65%) mode change 100755 => 100644 delete mode 100755 bin/runNS.py delete mode 100755 bin/runNS.sh delete mode 100755 bin/runSalome delete mode 100644 bin/runSalome.bat delete mode 100644 bin/runSalome.ksh create mode 100644 bin/runSession.py delete mode 100644 bin/salome.launch create mode 100644 bin/salomeRunner.py create mode 100644 bin/searchFreePort.py rename bin/runSalome.csh => doc/CMakeLists.txt (75%) create mode 100755 doc/docutils/CMakeLists.txt rename bin/waitNS.sh => doc/salome/CMakeLists.txt (68%) create mode 100755 doc/salome/gui/CMakeLists.txt create mode 100644 doc/salome/running_salome.dox create mode 100755 doc/salome/tui/CMakeLists.txt create mode 100755 idl/CMakeLists.txt create mode 100755 resources/CMakeLists.txt create mode 100755 salome_adm/CMakeLists.txt create mode 100755 salome_adm/SALOMEconfig.ref.in create mode 100755 salome_adm/cmake_files/CMakeLists.txt create mode 100755 salome_adm/cmake_files/SalomeMacros.cmake create mode 100755 salome_adm/unix/CMakeLists.txt create mode 100755 salome_adm/unix/config_files/CMakeLists.txt create mode 100755 src/Basics/CMakeLists.txt create mode 100755 src/Basics/Test/CMakeLists.txt create mode 100755 src/CMakeLists.txt create mode 100755 src/Communication/CMakeLists.txt create mode 100755 src/Communication_SWIG/CMakeLists.txt create mode 100755 src/Container/CMakeLists.txt delete mode 100755 src/Container/SALOME_ContainerPy.py create mode 100755 src/DF/CMakeLists.txt create mode 100755 src/DSC/CMakeLists.txt create mode 100755 src/DSC/DSC_Basic/CMakeLists.txt create mode 100755 src/DSC/DSC_Python/CMakeLists.txt create mode 100755 src/DSC/DSC_User/Basic/CMakeLists.txt create mode 100755 src/DSC/DSC_User/CMakeLists.txt create mode 100755 src/DSC/DSC_User/Datastream/CMakeLists.txt create mode 100755 src/DSC/DSC_User/Datastream/Calcium/CMakeLists.txt create mode 100755 src/DSC/DSC_User/Datastream/Palm/CMakeLists.txt create mode 100755 src/DSC/ParallelDSC/CMakeLists.txt create mode 100755 src/GenericObj/CMakeLists.txt create mode 100755 src/HDFPersist/CMakeLists.txt create mode 100755 src/KERNEL_PY/CMakeLists.txt create mode 100755 src/KERNEL_PY/kernel/CMakeLists.txt create mode 100755 src/KERNEL_PY/kernel/parametric/CMakeLists.txt delete mode 100755 src/KERNEL_PY/salome.py create mode 100755 src/KernelHelpers/CMakeLists.txt create mode 100755 src/KernelHelpers/Test/CMakeLists.txt create mode 100755 src/Launcher/CMakeLists.txt create mode 100755 src/LifeCycleCORBA/CMakeLists.txt create mode 100755 src/LifeCycleCORBA/Test/CMakeLists.txt create mode 100755 src/LifeCycleCORBA_SWIG/CMakeLists.txt create mode 100755 src/LifeCycleCORBA_SWIG/Test/CMakeLists.txt create mode 100755 src/Logger/CMakeLists.txt create mode 100755 src/Logger/Test/CMakeLists.txt create mode 100755 src/MPIContainer/CMakeLists.txt create mode 100755 src/ModuleCatalog/CMakeLists.txt create mode 100755 src/ModuleGenerator/CMakeLists.txt create mode 100755 src/NOTIFICATION_SWIG/CMakeLists.txt create mode 100755 src/NamingService/CMakeLists.txt create mode 100755 src/NamingService/Test/CMakeLists.txt create mode 100755 src/Notification/CMakeLists.txt create mode 100755 src/ParallelContainer/CMakeLists.txt create mode 100755 src/Registry/CMakeLists.txt create mode 100755 src/ResourcesManager/CMakeLists.txt create mode 100755 src/SALOMEDS/CMakeLists.txt create mode 100755 src/SALOMEDS/Test/CMakeLists.txt create mode 100755 src/SALOMEDSClient/CMakeLists.txt create mode 100755 src/SALOMEDSImpl/CMakeLists.txt create mode 100755 src/SALOMEDSImpl/Test/CMakeLists.txt create mode 100755 src/SALOMELocalTrace/CMakeLists.txt create mode 100755 src/SALOMELocalTrace/Test/CMakeLists.txt create mode 100755 src/SALOMETraceCollector/CMakeLists.txt create mode 100755 src/SALOMETraceCollector/Test/CMakeLists.txt create mode 100755 src/TOOLSDS/CMakeLists.txt create mode 100755 src/TestContainer/CMakeLists.txt delete mode 100755 src/TestContainer/TestComponentPy.py create mode 100755 src/TestMPIContainer/CMakeLists.txt create mode 100755 src/UnitTests/CMakeLists.txt create mode 100755 src/Utils/CMakeLists.txt create mode 100755 src/Utils/Test/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 000000000..326f97bba --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,108 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +CMAKE_MINIMUM_REQUIRED(VERSION 2.4.7 FATAL_ERROR) + +IF(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) +ENDIF(COMMAND cmake_policy) + +# Temporary step instead Find Calcium.cmake +SET(CALCIUM_IDL_INT_F77 long) +SET(CALCIUM_CORBA_INT_F77 CORBA::Long) +SET(LONG_OR_INT int) + +# Temporary definitions +SET(DOXYGEN_IS_OK 0) +IF(WINDOWS) + SET(CPPUNIT_IS_OK 0) +ENDIF(WINDOWS) +SET(WITH_LOCAL 1) +SET(WITH_BATCH 1) + +ENABLE_TESTING() +SET(VERSION "7.0.0") +SET(VERSION_DEV "1") + +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindPLATFORM.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindPYTHON.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindMPI.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindOMNIORB.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindPTHREADS.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindHDF5.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindBOOST.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindLIBXML2.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindSWIG.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindCPPUNIT.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindDOXYGEN.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindLIBBATCH.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindSPHINX.cmake) +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/SalomeMacros.cmake) + +EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import sys; t=sys.argv[-1].split(\".\") ; t[:]=(int(elt) for elt in t) ; sys.stdout.write(\"0x%02x%02x%02x\"%tuple(t))" ${VERSION} + OUTPUT_VARIABLE XVERSION) + +SET(KERNEL_salomebin_BINS bin/salome) + +SET(KERNEL_salomelib_LIBS lib/salome) + +SET(KERNEL_salomeidl_IDLS idl/salome) + +SET(KERNEL_salomeinclude_HEADERS include/salome) + +SET(KERNEL_salomeres_DATA share/salome/resources/kernel) + +SET(KERNEL_salomeres_SCRIPTS share/salome/resources/kernel) + +SET(KERNEL_salomescript_SCRIPTS bin/salome) + +SET(KERNEL_salomescript_DATA bin/salome) + +SET(KERNEL_salomescript_PYTHON bin/salome) + +SET(KERNEL_appliskel_SCRIPTS bin/salome/appliskel) + +SET(KERNEL_appliskel_PYTHON bin/salome/appliskel) + +SET(KERNEL_pythondir lib/python${PYTHON_VERSION}/site-packages) + +SET(KERNEL_salomepythondir ${KERNEL_pythondir}/salome) + +SET(KERNEL_sharedpkgpython_PYTHON ${KERNEL_salomepythondir}/shared_modules) + +SET(KERNEL_salomeadmcmake salome_adm/cmake_files) + +IF(CORBA_GEN) + ADD_SUBDIRECTORY(idl) +ENDIF(CORBA_GEN) + +ADD_SUBDIRECTORY(src) +ADD_SUBDIRECTORY(resources) + +IF(NOT WITHONLYLAUNCHER) + ADD_SUBDIRECTORY(bin) + ADD_SUBDIRECTORY(salome_adm) + ADD_SUBDIRECTORY(doc) +ENDIF(NOT WITHONLYLAUNCHER) + +SET(input ${CMAKE_CURRENT_SOURCE_DIR}/KERNEL_version.h.in) +SET(output ${CMAKE_CURRENT_BINARY_DIR}/KERNEL_version.h) +MESSAGE(STATUS "Creation of ${output}") +CONFIGURE_FILE(${input} ${output} @ONLY) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/KERNEL_version.h DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/Makefile.am b/Makefile.am index 471d18f5d..abfd02f99 100644 --- a/Makefile.am +++ b/Makefile.am @@ -45,7 +45,7 @@ DISTCLEANFILES = a.out local-install.sh hack_libtool aclocal.m4 configure salome salomeinclude_DATA = KERNEL_version.h -EXTRA_DIST = \ +EXTRA_DIST += \ build_cmake \ build_cmake.bat \ build_configure \ diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt new file mode 100755 index 000000000..693a2a7d8 --- /dev/null +++ b/bin/CMakeLists.txt @@ -0,0 +1,64 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +ADD_SUBDIRECTORY(appliskel) + +CONFIGURE_FILE(VERSION.in VERSION @ONLY) + +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/VERSION DESTINATION ${KERNEL_salomebin_BINS}) + +# =============================================================== +# Files to be installed +# =============================================================== + +# These files are data, module or lib files +#INSTALL(FILES salome.launch DESTINATION ${KERNEL_salomescript_DATA}) + +# These files are executable scripts +SET(SCRIPTS + appli_clean.sh + runIDLparser + addToKillList.py + appli_gen.py + envSalome.py + killSalome.py + killSalomeWithPort.py + launchConfigureParser.py + nameserver.py + NSparam.py + orbmodule.py + ORBConfigFile.py + parseConfigFile.py + runSalome.py + runSession.py + runConsole.py + salomeConsole.py + salomeRunner.py + salome_session.py + salome_utils.py + searchFreePort.py + server.py + setenv.py + showNS.py + shutdownSalome.py + virtual_salome.py + waitContainers.py + waitNS.py + ) +SALOME_INSTALL_SCRIPTS("${SCRIPTS}" ${KERNEL_salomescript_SCRIPTS}) diff --git a/bin/Makefile.am b/bin/Makefile.am index 039f9b468..1f5a870de 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -20,7 +20,7 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -# -* Makefile *- +# -* Makefile *- # Author : Guillaume Boulant (CSSI) # Module : KERNEL # $Header$ @@ -36,9 +36,7 @@ SUBDIRS = appliskel # # These files are data, module or lib files -dist_salomescript_DATA = \ - config_appli.xml \ - salome.launch +dist_salomescript_DATA = nodist_salomescript_DATA = \ VERSION @@ -46,15 +44,7 @@ nodist_salomescript_DATA = \ # These files are executable scripts dist_salomescript_SCRIPTS = \ appli_clean.sh \ - appli_install.sh \ - createAppli.sh \ - runIDLparser \ - runNS.sh \ - runSalome \ - runSalome.csh \ - runSalome.ksh \ - runSalome.bat \ - waitNS.sh + runIDLparser # These files are python files dist_salomescript_PYTHON = \ @@ -64,15 +54,19 @@ dist_salomescript_PYTHON = \ killSalome.py \ killSalomeWithPort.py \ launchConfigureParser.py \ - launchSalome.py \ nameserver.py \ NSparam.py \ orbmodule.py \ - runNS.py \ + ORBConfigFile.py \ + parseConfigFile.py \ runSalome.py \ + runSession.py \ + runConsole.py \ salomeConsole.py \ + salomeRunner.py \ salome_session.py \ - salome_utils.py \ + salome_utils.py \ + searchFreePort.py \ server.py \ setenv.py \ showNS.py \ @@ -83,5 +77,5 @@ dist_salomescript_PYTHON = \ install-data-hook: @for f in $(dist_salomescript_PYTHON) ; do \ - chmod -f a+x $(DESTDIR)$(salomescriptdir)/$$f ; \ - done + chmod -f a+x $(DESTDIR)$(salomescriptdir)/$$f ; \ + done diff --git a/bin/NSparam.py b/bin/NSparam.py index bd35a3a71..f1c79a831 100755 --- a/bin/NSparam.py +++ b/bin/NSparam.py @@ -37,38 +37,40 @@ def getNSparams(info=""): from salome_utils import getORBcfgInfo my_version, my_host, my_port = getORBcfgInfo() if info=='host': - # keep print, stdout used in shell - print my_host os.environ['NSHOST']=my_host return my_host pass elif info=='port': - # keep print, stdout used in shell - print my_port os.environ['NSPORT']=my_port return my_port pass else: - # keep print, stdout used in shell - print my_host, my_port return my_host, my_port pass +# # ------------------------------------------------------------------------ if __name__ == "__main__": - if len(sys.argv) >1: + if len(sys.argv) >1: if sys.argv[1]=='host': - getNSparams('host') + my_host = getNSparams('host') + # keep print, stdout used in shell + print my_host pass elif sys.argv[1]=='port': - getNSparams('port') + my_port = getNSparams('port') + # keep print, stdout used in shell + print my_port pass else: - getNSparams() + my_host, my_port = getNSparams() pass pass else: getNSparams() + # keep print, stdout used in shell + print my_host, my_port pass pass +# diff --git a/bin/ORBConfigFile.py b/bin/ORBConfigFile.py new file mode 100644 index 000000000..58b6c208e --- /dev/null +++ b/bin/ORBConfigFile.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# IMPORTANT NOTE: do not add any print call (cf. note at the bottom of the file) +def writeORBConfigFile(path, host, port, kwargs={}): + + from salome_utils import generateFileName + omniorb_config = generateFileName(path, prefix="omniORB", + extension="cfg", + hidden=True, + with_hostname=True, + with_port=port, + **kwargs) + import os + os.environ['OMNIORB_CONFIG'] = omniorb_config + os.environ['NSPORT'] = "%s"%(port) + os.environ['NSHOST'] = "%s"%(host) + + from omniORB import CORBA + prefix = "" if CORBA.ORB_ID == "omniORB4" else "ORB" + + GIOP_MaxMsgSize=2097152000 # 2 GBytes + + orbdata = [] + orbdata.append("%sInitRef = NameService=corbaname::%s:%s"%(prefix,host,port)) + orbdata.append("%sgiopMaxMsgSize = %s # 2 GBytes"%(prefix,GIOP_MaxMsgSize)) + orbdata.append("%straceLevel = 0 # critical errors only"%(prefix)) + orbdata.append("") + + f = open(omniorb_config, "w") + f.write("\n".join(orbdata)) + f.close() + + return [ omniorb_config, GIOP_MaxMsgSize ] + +# ----------------------------------------------------------------------------- + +if __name__ == "__main__": + import sys, getopt + + path = sys.argv[1] + host = sys.argv[2] + port = sys.argv[3] + argv = sys.argv[4:] + + kwargs = {} + for a in argv: + alist = str(a).split("=", 1) + opt = str(alist[0]) + arg = alist[1] + kwargs[opt] = arg + pass + + [ filename, msgSize ] = writeORBConfigFile(path, host, port, kwargs) + + # :TRICKY: print values so they can be read from caller bash script + # Example of bash script: + # RETURN_VALUES=$(python ORBConfigFile.py path host port) + # RETURN_VALUE_1=$(echo ${RETURN_VALUES} | cut -d' ' -f1) + # RETURN_VALUE_2=$(echo ${RETURN_VALUES} | cut -d' ' -f2) + # ... + # IMPORTANT NOTE: this print call MUST BE the first one!! + print filename, msgSize diff --git a/bin/appli_gen.py b/bin/appli_gen.py index 648656c83..fd5dd371b 100644 --- a/bin/appli_gen.py +++ b/bin/appli_gen.py @@ -185,15 +185,16 @@ def install(prefix,config_file,verbose=0): for fn in ('envd', 'getAppliPath.py', - 'searchFreePort.sh', + 'kill_remote_containers.py', +# 'searchFreePort.sh', # REMOVED + 'runAppli', # OBSOLETE (replaced by salome.py) + 'runConsole', # OBSOLETE (replaced by salome.py) 'runRemote.sh', - 'runAppli', - 'runConsole', - 'runSession', 'runSalomeScript', - 'runTests', + 'runSession', # OBSOLETE (replaced by salome.py) +# 'runTests', # REMOVED + 'salome.py', 'update_catalogs.py', - 'kill_remote_containers.py', '.bashrc', ): virtual_salome.symlink("./bin/salome/appliskel/"+fn,os.path.join(home_dir, fn)) diff --git a/bin/appli_install.sh b/bin/appli_install.sh deleted file mode 100644 index 4778d4ddc..000000000 --- a/bin/appli_install.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -SALOME_ROOT=${HOME}/SALOME2 -INSTALL_ROOT=${SALOME_ROOT}/Install - -APPLI_ROOT=`pwd` - -# --- clean appli -rm -rf bin lib share doc envd getAppliPath.py searchFreePort.sh runAppli runConsole runSession env.d - -# --- install appli - -mkdir -p env.d -ln -fs bin/salome/appliskel/envd . -ln -fs bin/salome/appliskel/getAppliPath.py . -ln -fs bin/salome/appliskel/searchFreePort.sh . -ln -fs bin/salome/appliskel/runRemote.sh . -ln -fs bin/salome/appliskel/runAppli . -ln -fs bin/salome/appliskel/runConsole . -ln -fs bin/salome/appliskel/runSession . -ln -fs bin/salome/appliskel/runTests . -ln -fs bin/salome/appliskel/.bashrc . - -# --- prerequisites - -if [ x${PREREQUISITE_SH} != x ]; then - cp ${PREREQUISITE_SH} env.d/envProducts.sh; -else - # --- unless PREREQUISITE_SH defines the prerequisite script, - # edit and uncomment the following line to set it, and comment the echo and exit lines - #ln -fs myPathForSalomePrerequisiteScriptToBeSourced env.d/envProducts.sh - echo "The file to source for SALOME prerequisite definition is not known:" - echo "--> Edit the corresponding line in " $0 ",Comment this message and the following exit command," - exit 1; -fi - -# --- symbolic links creation, from modules_root_dir - -VERSION=V3_2_0 - -for module in KERNEL MED GUI GEOM SMESH VISU LIGHT NETGENPLUGIN PYCALCULATOR; -do - echo " ========= " ${module}; - python virtual_salome.py -v --prefix="." --module=$INSTALL_ROOT/${module}_${VERSION} - echo "export ${module}_ROOT_DIR=$APPLI_ROOT" >> env.d/configSalome.sh -done - -# --- HELLO module - -echo " ========= HELLO1"; -python virtual_salome.py -v --prefix="." --module=$INSTALL_ROOT/HELLO1_${VERSION} -echo "export HELLO_ROOT_DIR=$APPLI_ROOT" >> env.d/configSalome.sh - -# --- PYHELLO module - -echo " ========= PYHELLO1"; -python virtual_salome.py -v --prefix="." --module=$INSTALL_ROOT/PYHELLO1_${VERSION} -echo "export PYHELLO_ROOT_DIR=$APPLI_ROOT" >> env.d/configSalome.sh - -# --- GUI config - -echo "export config_var=$APPLI_ROOT:$APPLI_ROOT/share/salome/resources/gui" >> env.d/configGUI.sh - -# --- SAMPLES directory - -echo "export DATA_DIR=$INSTALL_ROOT/SAMPLES/${VERSION}/SAMPLES_SRC" >> env.d/configSalome.sh - -# --- diff --git a/bin/appliskel/.bashrc b/bin/appliskel/.bashrc index 5405c993f..21f1a4e9a 100644 --- a/bin/appliskel/.bashrc +++ b/bin/appliskel/.bashrc @@ -26,4 +26,25 @@ [ -z "$PS1" ] && return # prefix prompt with naming server hostname and port -export PS1='[NS='${NSHOST}':'${NSPORT}']'${PS1} +#export PS1='[NS='${NSHOST}':'${NSPORT}']'${PS1} + +NO_COLOR="\[\033[0m\]" +RED="\[\033[0;31m\]" +DARK_RED="\[\033[1;31m\]" +GREEN="\[\033[0;32m\]" +DARK_GREEN="\[\033[1;32m\]" +BROWN="\[\033[0;33m\]" +DARK_BROWN="\[\033[1;33m\]" +BLUE="\[\033[0;34m\]" +DARK_BLUE="\[\033[1;34m\]" +PURPLE="\[\033[0;35m\]" +DARK_PURPLE="\[\033[1;35m\]" +CYAN="\[\033[0;36m\]" +DARK_CYAN="\[\033[1;36m\]" + +NS_COLOR=${BROWN} +HOST_COLOR=${BLUE} +PORT_COLOR=${PURPLE} +DEFAULT_COLOR=${NO_COLOR} + +export PS1="${DEFAULT_COLOR}[${NS_COLOR}NS=${HOST_COLOR}${NSHOST}${NS_COLOR}:${PORT_COLOR}${NSPORT}${NS_COLOR}${DEFAULT_COLOR}]\$ " diff --git a/bin/appliskel/CMakeLists.txt b/bin/appliskel/CMakeLists.txt new file mode 100755 index 000000000..c0c7b89ed --- /dev/null +++ b/bin/appliskel/CMakeLists.txt @@ -0,0 +1,38 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# =============================================================== +# Files to be installed +# =============================================================== + +# These files are executable scripts +SET(SCRIPTS + envd + runRemote.sh + runAppli + runConsole + runSession + runSalomeScript + getAppliPath.py + update_catalogs.py + kill_remote_containers.py + salome.py +) + +SALOME_INSTALL_SCRIPTS("${SCRIPTS}" ${KERNEL_salomescript_SCRIPTS}/appliskel) diff --git a/bin/appliskel/Makefile.am b/bin/appliskel/Makefile.am index 06285247a..9e9bac6a0 100644 --- a/bin/appliskel/Makefile.am +++ b/bin/appliskel/Makefile.am @@ -20,7 +20,7 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -# -* Makefile *- +# -* Makefile *- # Author : Renaud Barate (EDF R&D) # Module : KERNEL # $Header$ @@ -37,20 +37,19 @@ appliskeldir = $(salomescriptdir)/appliskel # These files are executable scripts dist_appliskel_SCRIPTS = \ envd \ - searchFreePort.sh \ runRemote.sh \ runAppli \ runConsole \ runSession \ runSalomeScript \ - runTests \ .bashrc # These files are python files dist_appliskel_PYTHON = \ getAppliPath.py \ update_catalogs.py \ - kill_remote_containers.py + kill_remote_containers.py \ + salome.py install-data-hook: @for f in $(dist_appliskel_PYTHON) ; do \ diff --git a/bin/appliskel/getAppliPath.py b/bin/appliskel/getAppliPath.py index 24cd69653..de2a17218 100755 --- a/bin/appliskel/getAppliPath.py +++ b/bin/appliskel/getAppliPath.py @@ -24,32 +24,14 @@ import os -def relpath(target, base): - """ Find relative path from base to target - if target== "/local/chris/appli" and base== "/local/chris" the result is appli - if target== /tmp/appli and base /local/chris the result is ../../tmp/appli - """ - target=target.split(os.path.sep) - base=base.split(os.path.sep) - for i in xrange(len(base)): - if base[i] != target[i]: - i=i-1 - #not in base - break - p=['..']*(len(base)-i-1)+target[i+1:] - if p == []: - return '.' - return os.path.join( *p ) +def get_appli_path(filePath=None): + if filePath is None: + filePath = os.path.realpath(os.path.dirname(__file__)) -def set_var(VAR, strpath): - """Set VAR environment variable """ - value = "%r" % strpath - shell = os.getenv('SHELL') - if shell and shell.endswith('csh'): - return "setenv %s %s" % (VAR, value) - else: - return "export %s=%s" % (VAR, value) + homePath = os.path.realpath(os.getenv('HOME')) + applipath = os.path.relpath(filePath, homePath) + return applipath if __name__ == "__main__": - applipath=relpath(os.path.realpath(os.path.dirname(__file__)),os.path.realpath(os.getenv('HOME'))) - print applipath + applipath = get_appli_path() + print applipath diff --git a/bin/appliskel/runRemote.sh b/bin/appliskel/runRemote.sh index dead646a7..717085068 100755 --- a/bin/appliskel/runRemote.sh +++ b/bin/appliskel/runRemote.sh @@ -50,15 +50,12 @@ export APPLI=`${APPLI_HOME}/getAppliPath.py` . ${HOME}/${APPLI}/envd ${HOME}/${APPLI} # --- set the OMNIORB_CONFIG file and environment relative to this run of SALOME +export NSHOST=$1 +export NSPORT=$2 -OMNIORB_CONFIG=${HOME}/${APPLI}/USERS/.omniORB_${USER}_$1_$2.cfg -export OMNIORB_CONFIG -NSHOST=$1 -export NSHOST -NSPORT=$2 -export NSPORT -initref="NameService=corbaname::"$1":$2" -echo "InitRef = $initref" > $OMNIORB_CONFIG +# Get (in bash) the configuration filename from (Python) ORBConfigFile return values +RETURN_VALUES=$(${KERNEL_ROOT_DIR}/bin/salome/envSalome.py python ${KERNEL_ROOT_DIR}/bin/salome/ORBConfigFile.py ${HOME}/${APPLI}/USERS ${NSHOST} ${NSPORT} with_username=${USER}) +export OMNIORB_CONFIG=$(echo ${RETURN_VALUES} | cut -d' ' -f1) #go to the requested working directory if any if test "x$3" == "xWORKINGDIR"; then diff --git a/bin/appliskel/runSession b/bin/appliskel/runSession index f12e53c21..e1616f18b 100755 --- a/bin/appliskel/runSession +++ b/bin/appliskel/runSession @@ -68,6 +68,23 @@ export APPLI=`${APPLI_HOME}/getAppliPath.py` . ${HOME}/${APPLI}/envd ${HOME}/${APPLI} +# --- set the OMNIORB_CONFIG file and environment relative to this run of SALOME +# Usage: writeConfigFile PORT HOST +function writeConfigFile +{ + if [ $# -ne 2 ]; then + echo "Usage: $0 PORT HOST" + return + fi + export NSPORT=$1 + export NSHOST=$2 + + # Get (in bash) the configuration filename from (Python) ORBConfigFile return values + RETURN_VALUES=$(${KERNEL_ROOT_DIR}/bin/salome/envSalome.py python ${KERNEL_ROOT_DIR}/bin/salome/ORBConfigFile.py ${HOME}/${APPLI}/USERS ${NSHOST} ${NSPORT} with_username=${USER}) + export OMNIORB_CONFIG=$(echo ${RETURN_VALUES} | cut -d' ' -f1) +} + + if test "x${NSPORT}" == "xlast"; then #PORT is not given if test "x${NSHOST}" == "xlocalhost"; then @@ -75,47 +92,28 @@ if test "x${NSPORT}" == "xlast"; then # --- set omniORB configuration to current session if any fileOmniConfig=${HOME}/${APPLI}/USERS/.omniORB_${USER}_last.cfg if [ -f $fileOmniConfig ]; then - OMNIORB_CONFIG=${HOME}/${APPLI}/USERS/.omniORB_${USER}_last.cfg - export OMNIORB_CONFIG + export OMNIORB_CONFIG=${HOME}/${APPLI}/USERS/.omniORB_${USER}_last.cfg # --- set environment variables for port and hostname of NamingService - NSHOST=`${KERNEL_ROOT_DIR}/bin/salome/NSparam.py host` - NSPORT=`${KERNEL_ROOT_DIR}/bin/salome/NSparam.py port` - export NSPORT - export NSHOST + export NSHOST=`${KERNEL_ROOT_DIR}/bin/salome/NSparam.py host` + export NSPORT=`${KERNEL_ROOT_DIR}/bin/salome/NSparam.py port` fi else #MACHINE is given PORT is not given - NSPORT=2810 - OMNIORB_CONFIG=${HOME}/${APPLI}/USERS/.omniORB_${USER}_${NSHOST}_${NSPORT}.cfg - export OMNIORB_CONFIG - #if omniorb config file exists do not override (perhaps too conservative) - if [ ! -f ${OMNIORB_CONFIG} ]; then - echo "InitRef = NameService=corbaname::${NSHOST}:${NSPORT}" > ${OMNIORB_CONFIG} - fi - export NSPORT - export NSHOST + writeConfigFile 2810 ${NSHOST} fi else #PORT is given if test "x${NSHOST}" == "xlocalhost"; then #MACHINE is not given PORT is given - NSHOST=`hostname` + NSHOST=`hostname` fi - OMNIORB_CONFIG=${HOME}/${APPLI}/USERS/.omniORB_${USER}_${NSHOST}_${NSPORT}.cfg - export OMNIORB_CONFIG - #if omniorb config file exists do not override (perhaps too conservative) - if [ ! -f ${OMNIORB_CONFIG} ]; then - echo "InitRef = NameService=corbaname::${NSHOST}:${NSPORT}" > ${OMNIORB_CONFIG} - fi - export NSPORT - export NSHOST + writeConfigFile ${NSPORT} ${NSHOST} fi # --- invoke shell with or without args if [ $# -ne 0 ] ; then - ${KERNEL_ROOT_DIR}/bin/salome/envSalome.py -exec $* + ${KERNEL_ROOT_DIR}/bin/salome/envSalome.py -exec $* else - - ${KERNEL_ROOT_DIR}/bin/salome/envSalome.py /bin/bash --rcfile ${HOME}/${APPLI}/.bashrc + ${KERNEL_ROOT_DIR}/bin/salome/envSalome.py /bin/bash --rcfile ${HOME}/${APPLI}/.bashrc fi diff --git a/bin/appliskel/runTests b/bin/appliskel/runTests deleted file mode 100755 index 352daad91..000000000 --- a/bin/appliskel/runTests +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/bash -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- retrieve APPLI path, relative to $HOME, set ${APPLI} - -APPLI_HOME=`dirname $0` -export APPLI=`${APPLI_HOME}/getAppliPath.py` - -# --- set the SALOME environment (prerequisites, MODULES_ROOT_DIR...) - -. ${HOME}/${APPLI}/envd ${HOME}/${APPLI} - -# --- define port for CORBA naming service - -searchFreePort() { - echo -n "Searching for a free port for naming service: " - export NSPORT=2810 - local limit=$NSPORT - let limit=limit+100 - while [ 1 ] - do - aRes=`netstat -ltn | grep -E :${NSPORT}` - if [ -z "$aRes" ]; then - echo ${NSPORT} - Ok - local myhost=`hostname` - OMNIORB_CONFIG=${HOME}/${APPLI}/USERS/.omniORB_${USER}_${myhost}_${NSPORT}.cfg - export OMNIORB_CONFIG - export NSPORT - NSHOST=${myhost} - export NSHOST - local initref="NameService=corbaname::"`hostname`":$NSPORT" - #echo "ORBInitRef $initref" > $OMNIORB_CONFIG - echo "InitRef = $initref" > $OMNIORB_CONFIG - LAST_RUNNING_CONFIG=${HOME}/${APPLI}/USERS/.omniORB_${USER}_${myhost}_test.cfg - export LAST_RUNNING_CONFIG - rm ${LAST_RUNNING_CONFIG} - ln -s ${OMNIORB_CONFIG} ${LAST_RUNNING_CONFIG} - break - fi - echo -n "${NSPORT} " - if [[ $NSPORT -eq $limit ]] ; then - echo - echo "Can't find a free port to launch omniNames" - echo "Try to kill the running servers and then launch SALOME again." - exit - fi - let NSPORT=NSPORT+1 - done -} - -# --- if mpi lam, start lam (seems safe to be done several times) -# arret manuel avec lamhalt - -if [ "$LAMBHOST" ]; then - lamboot -fi - -# --- invoque shell with or without args - -searchFreePort - -if [ $# -ne 0 ] ; then - ${KERNEL_ROOT_DIR}/bin/salome/envSalome.py /bin/bash --rcfile ${HOME}/${APPLI}/.bashrc -c "$*" -else - - ${KERNEL_ROOT_DIR}/bin/salome/envSalome.py /bin/bash --rcfile ${HOME}/${APPLI}/.bashrc -fi - -rm ${OMNIORB_CONFIG} -rm ${LAST_RUNNING_CONFIG} diff --git a/bin/appliskel/salome.py b/bin/appliskel/salome.py new file mode 100755 index 000000000..a4f525b8c --- /dev/null +++ b/bin/appliskel/salome.py @@ -0,0 +1,74 @@ +#! /usr/bin/env python + +import os +import sys + +# Preliminary work to initialize path to SALOME Python modules +def __initialize(): + currentPath = os.path.dirname(__file__) + homePath = os.path.realpath(os.environ['HOME']) + appliPath = os.path.relpath(currentPath, homePath) + absoluteAppliPath = homePath+os.sep+appliPath + os.environ['APPLI'] = appliPath # needed to convert .sh environment files + os.environ['ABSOLUTE_APPLI_PATH'] = absoluteAppliPath + + sys.path[:0] = [absoluteAppliPath+'/bin/salome'] +# End of preliminary work + +def __getConfigFileNamesDefault(): + import glob + + absoluteAppliPath = os.environ['ABSOLUTE_APPLI_PATH'] + envdDir = absoluteAppliPath + '/env.d' + if os.path.isdir(envdDir): + configFileNames = glob.glob(envdDir+os.sep+'*.cfg') + glob.glob(envdDir+os.sep+'*.sh') + configFileNames = [os.path.basename(x) for x in configFileNames] + else: + configFileNames = [] + + configFileNames = [envdDir+'/'+x for x in configFileNames] + return configFileNames +# + +def __getConfigFileNames(args): + # special case: configuration files are provided by user + # Search for command-line argument(s) --config=file1,file2,..., filen + configOptionPrefix = "--config=" + configArgs = [ str(x) for x in args if str(x).startswith(configOptionPrefix) ] + + if len(configArgs) == 0: + return __getConfigFileNamesDefault(), args + + args = [ x for x in args if not x.startswith(configOptionPrefix) ] + files = [ x.replace(configOptionPrefix, '') for x in configArgs ] + configFileNames = [] + for x in files: + configFileNames += x.split(',') + + return configFileNames, args +# + +if __name__ == "__main__": + args = sys.argv[1:] + + # Identify application path then locate configuration files + __initialize() + configFileNames, args = __getConfigFileNames(args) + + # Create a SalomeRunner which parses configFileNames to initialize environment + from salomeRunner import SalomeRunner + runner = SalomeRunner(configFileNames) + + + # Here set specific variables, if needed + # runner.addToPath('mypath') + # runner.addToLdLibraryPath('myldlibrarypath') + # runner.addToPythonPath('mypythonpath') + # runner.setEnviron('myvarname', 'value') + + + # Start SALOME, parsing command line arguments + runner.go(args) + + print 'Thank you for using SALOME!' +# diff --git a/bin/appliskel/searchFreePort.sh b/bin/appliskel/searchFreePort.sh deleted file mode 100755 index 8d0346561..000000000 --- a/bin/appliskel/searchFreePort.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# --- define port for CORBA naming service - -searchFreePort() { - echo -n "Searching for a free port for naming service: " - NSPORT=2810 - export NSPORT - local limit=$NSPORT - let limit=limit+100 - while [ 1 ] - do - aRes=`netstat -ltn | grep -E :${NSPORT}` - if [ -z "$aRes" ]; then - echo ${NSPORT} - Ok - local myhost=`hostname` - OMNIORB_CONFIG=${HOME}/${APPLI}/USERS/.omniORB_${USER}_${myhost}_${NSPORT}.cfg - export OMNIORB_CONFIG - export NSPORT - NSHOST=${myhost} - export NSHOST - local initref="NameService=corbaname::"`hostname`":$NSPORT" - #echo "ORBInitRef $initref" > $OMNIORB_CONFIG - echo "InitRef = $initref" > $OMNIORB_CONFIG - LAST_RUNNING_CONFIG=${HOME}/${APPLI}/USERS/.omniORB_${USER}_last.cfg - export LAST_RUNNING_CONFIG - rm ${LAST_RUNNING_CONFIG} - ln -s ${OMNIORB_CONFIG} ${LAST_RUNNING_CONFIG} - break - fi - echo -n "${NSPORT} " - if [[ $NSPORT -eq $limit ]] ; then - echo - echo "Can't find a free port to launch omniNames" - echo "Try to kill the running servers and then launch SALOME again." - exit - fi - let NSPORT=NSPORT+1 - done -} - diff --git a/bin/config_appli.xml b/bin/config_appli.xml deleted file mode 100644 index 027a166f4..000000000 --- a/bin/config_appli.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/bin/killSalome.py b/bin/killSalome.py index 020f7ed44..26dc0bb6f 100755 --- a/bin/killSalome.py +++ b/bin/killSalome.py @@ -96,4 +96,3 @@ def killAllPorts(): if __name__ == "__main__": killAllPorts() pass - diff --git a/bin/killSalomeWithPort.py b/bin/killSalomeWithPort.py index 57729aa88..c6c128b23 100755 --- a/bin/killSalomeWithPort.py +++ b/bin/killSalomeWithPort.py @@ -117,7 +117,7 @@ def appliCleanOmniOrbConfig(port): os.remove(omniorb_config) pass - if os.path.lexists(last_running_config):return + if os.path.lexists(last_running_config):return #try to relink last.cfg to an existing config file if any files = glob.glob(os.path.join(os.environ["HOME"],Utils_Identity.getapplipath(), @@ -137,21 +137,21 @@ def appliCleanOmniOrbConfig(port): ########## kills all salome processes with the given port ########## -def shutdownMyPort(port): +def shutdownMyPort(port, cleanup=True): """ Shutdown SALOME session running on the specified port. Parameters: - port - port number """ if not port: return - + from salome_utils import generateFileName # set OMNIORB_CONFIG variable to the proper file home = os.getenv("HOME") appli = os.getenv("APPLI") kwargs = {} - if appli is not None: + if appli is not None: home = os.path.join(os.path.realpath(home), appli,"USERS") kwargs["with_username"]=True pass @@ -162,22 +162,29 @@ def shutdownMyPort(port): with_port=port, **kwargs) os.environ['OMNIORB_CONFIG'] = omniorb_config + os.environ['NSPORT'] = str(port) # give the chance to the servers to shutdown properly try: import time - import salome_kernel - orb, lcc, naming_service, cm = salome_kernel.salome_kernel_init() + from omniORB import CORBA + from LifeCycleCORBA import LifeCycleCORBA # shutdown all + orb = CORBA.ORB_init([''], CORBA.ORB_ID) + lcc = LifeCycleCORBA(orb) lcc.shutdownServers() # give some time to shutdown to complete time.sleep(1) # shutdown omniNames and notifd - salome_kernel.LifeCycleCORBA.killOmniNames() + if cleanup: + lcc.killOmniNames() + time.sleep(1) + pass + pass except: pass pass - + def killMyPort(port): """ Kill SALOME session running on the specified port. @@ -185,12 +192,12 @@ def killMyPort(port): - port - port number """ from salome_utils import getShortHostName, getHostName - + # try to shutdown session nomally import threading, time - threading.Thread(target=shutdownMyPort, args=(port,)).start() + threading.Thread(target=shutdownMyPort, args=(port,False)).start() time.sleep(3) # wait a little, then kill processes (should be done if shutdown procedure hangs up) - + # new-style dot-prefixed pidict file filedict = getPiDict(port, hidden=True) # provide compatibility with old-style pidict file (not dot-prefixed) @@ -218,7 +225,7 @@ def killMyPort(port): suffix="Pid_omniNames", extension="log", with_port=port) - if not sys.platform == 'win32': + if not sys.platform == 'win32': cmd = 'pid=`ps -eo pid,command | egrep "[0-9] omniNames -start %s"` ; echo $pid > %s' % ( str(port), fpidomniNames ) a = os.system(cmd) pass @@ -255,7 +262,7 @@ def killMyPort(port): try: if sys.platform == "win32": import win32pm - win32pm.killpid(int(pid),0) + win32pm.killpid(int(pid),0) else: os.kill(int(pid),signal.SIGKILL) pass @@ -285,7 +292,7 @@ def killMyPort(port): # appliCleanOmniOrbConfig(port) pass - + def killNotifdAndClean(port): """ Kill notifd daemon and clean application running on the specified port. @@ -355,10 +362,19 @@ def killMyPortSpy(pid, port): return if __name__ == "__main__": + if len(sys.argv) < 2: + print "Usage: " + print " %s " % os.path.basename(sys.argv[0]) + print + print "Kills SALOME session running on specified ." + sys.exit(1) + pass if sys.argv[1] == "--spy": - pid = sys.argv[2] - port = sys.argv[3] - killMyPortSpy(pid, port) + if len(sys.argv) > 3: + pid = sys.argv[2] + port = sys.argv[3] + killMyPortSpy(pid, port) + pass sys.exit(0) pass for port in sys.argv[1:]: diff --git a/bin/launchConfigureParser.py b/bin/launchConfigureParser.py index 5ffb99b98..7e092ac91 100755 --- a/bin/launchConfigureParser.py +++ b/bin/launchConfigureParser.py @@ -80,7 +80,7 @@ script_nam = "pyscript" # possible choices for the "embedded" and "standalone" parameters embedded_choices = [ "registry", "study", "moduleCatalog", "cppContainer", "SalomeAppEngine" ] -standalone_choices = [ "registry", "study", "moduleCatalog", "cppContainer", "pyContainer"] +standalone_choices = [ "registry", "study", "moduleCatalog", "cppContainer"] # values of boolean type (must be '0' or '1'). # xml_parser.boolValue() is used for correct setting @@ -122,11 +122,18 @@ def version_id(fname): if len(vers) > 0: major = int(vers[0]) if len(vers) > 1: minor = int(vers[1]) if len(vers) > 2: - mr = re.search(r'^([0-9]+)([A-Za-z]?)([0-9]*)',vers[2]) + mr = re.search(r'^([0-9]+)([A-Z]|RC)?([0-9]*)',vers[2], re.I) if mr: release = int(mr.group(1)) - if mr.group(2).strip(): dev1 = ord(mr.group(2).strip()) - if mr.group(3).strip(): dev2 = int(mr.group(3).strip()) + if mr.group(2): + tag = mr.group(2).strip().lower() + if tag == "rc": + dev1 = 49 # release candidate + elif tag: + dev1 = ord(tag)-ord('a')+1 + pass + if mr.group(3): + dev2 = int(mr.group(3).strip()) pass pass dev = dev1 * 100 + dev2 @@ -134,15 +141,15 @@ def version_id(fname): ver = ver * 100 + minor ver = ver * 100 + release ver = ver * 10000 - if dev > 0: ver = ver - 10000 + dev + if dev > 0: ver = ver - dev return ver ### # Get default user configuration file name # For SALOME, it is: -# - on Linux: ~/.config/salome/.SalomeApprc.[version] -# - on Windows: ~/SalomeApp.xml.[version] -# where [version] is a version number +# - on Linux: ~/.config/salome/SalomeApprc[.] +# - on Windows: ~/SalomeApp.xml[.] +# where is an optional version number ### def defaultUserFile(appname=salomeappname, cfgname=salomecfgname): v = version() @@ -151,7 +158,7 @@ def defaultUserFile(appname=salomeappname, cfgname=salomecfgname): filename = os.path.join(getHomeDir(), "%s.xml%s" % (appname, v)) else: if cfgname: - filename = os.path.join(getHomeDir(), ".config", cfgname, ".%src%s" % (appname, v)) + filename = os.path.join(getHomeDir(), ".config", cfgname, "%src%s" % (appname, v)) pass else: filename = os.path.join(getHomeDir(), ".%src%s" % (appname, v)) @@ -166,11 +173,11 @@ def userFile(appname, cfgname): # get app version v = version() if not v: return None # unknown version - + # get default user file name filename = defaultUserFile(appname, cfgname) if not filename: return None # default user file name is bad - + # check that default user file exists if os.path.exists(filename): return filename # user file is found @@ -179,24 +186,31 @@ def userFile(appname, cfgname): # ... calculate default version id id0 = version_id(v) if not id0: return None # bad version id -> can't detect appropriate file - + # ... get all existing user preferences files if sys.platform == "win32": files = glob.glob(os.path.join(getHomeDir(), "%s.xml.*" % appname)) else: files = [] - if cfgname: files += glob.glob(os.path.join(getHomeDir(), ".config", cfgname, ".%src.*" % appname)) - files += glob.glob(os.path.join(getHomeDir(), ".%src.*" % appname)) + if cfgname: + # Since v6.6.0 - in ~/.config/salome directory, without dot prefix + files += glob.glob(os.path.join(getHomeDir(), ".config", cfgname, "%src.*" % appname)) + # Since v6.5.0 - in ~/.config/salome directory, dot-prefixed (backward compatibility) + files += glob.glob(os.path.join(getHomeDir(), ".config", cfgname, ".%src.*" % appname)) + pass + # old style (before v6.5.0) - in ~ directory, dot-prefixed + files += glob.glob(os.path.join(getHomeDir(), ".%src.*" % appname)) pass # ... loop through all files and find most appopriate file (with closest id) appr_id = -1 appr_file = "" for f in files: + ff = os.path.basename( f ) if sys.platform == "win32": - match = re.search( r'%s\.xml\.([a-zA-Z0-9.]+)$'%appname, f ) + match = re.search( r'^%s\.xml\.([a-zA-Z0-9.]+)$'%appname, ff ) else: - match = re.search( r'\.%src\.([a-zA-Z0-9.]+)$'%appname, f ) + match = re.search( r'^\.?%src\.([a-zA-Z0-9.]+)$'%appname, ff ) if match: ver = version_id(match.group(1)) if not ver: continue # bad version id -> skip file @@ -204,6 +218,9 @@ def userFile(appname, cfgname): appr_id = ver appr_file = f pass + elif abs(appr_id-id0) == abs(ver-id0): + if not os.path.basename(f).startswith("."): appr_file = f + pass pass pass return appr_file @@ -284,11 +301,11 @@ class xml_parser: def startElement(self, name, attrs): self.space.append(name) self.current = None - + # if we are importing file if self.space == [doc_tag, import_tag] and nam_att in attrs.getNames(): self.importFile( attrs.getValue(nam_att) ) - + # if we are analyzing "section" element and its "name" attribute is # either "launch" or module name -- set section_name if self.space == [doc_tag, sec_tag] and nam_att in attrs.getNames(): @@ -349,14 +366,14 @@ class xml_parser: def endDocument(self): self.read = None pass - + def importFile(self, fname): # get absolute name if os.path.isabs (fname) : absfname = fname else: absfname = os.path.join(os.path.dirname(self.fileName), fname) - + # check existing and registry file for ext in ["", ".xml", ".XML"] : if os.path.exists(absfname + ext) : @@ -369,7 +386,7 @@ class xml_parser: else: if verbose(): print "Configure parser: Error : file %s does not exist" % absfname return - + # importing file try: # copy current options @@ -387,7 +404,7 @@ class xml_parser: except: if verbose(): print "Configure parser: Error : can not read configuration file %s" % absfname pass - + # ----------------------------------------------------------------------------- @@ -859,7 +876,7 @@ def get_env(theAdditionalOptions=[], appname=salomeappname, cfgname=salomecfgnam # Process --print-port option if cmd_opts.print_port: - from runSalome import searchFreePort + from searchFreePort import searchFreePort searchFreePort({}) print "port:%s"%(os.environ['NSPORT']) sys.exit(0) diff --git a/bin/launchSalome.py b/bin/launchSalome.py deleted file mode 100755 index 9fe2af56b..000000000 --- a/bin/launchSalome.py +++ /dev/null @@ -1,114 +0,0 @@ -#! /usr/bin/env python -# -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -import socket -import os -import sys -import shutil - -##################################################################### -def findFreePort(startPort, step) : - - currentPort = startPort; - if step < 1: - step = 1; - - serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM); - - portFound = 0; - while (portFound != 1 and currentPort < 65536): - try : - serversocket.bind((socket.gethostname(), currentPort)); - portFound = 1; - print str(currentPort) + ": " + "OK"; -# serversocket.shutdown(0); -# serversocket.close(); - except Exception, inst: - print str(currentPort) + ": " + str(inst.args); - currentPort = currentPort+step; - - - - - if (portFound != 1) : - currentPort = -1; - return currentPort; -##################################################################### - - - -## 1. Generate config file for omniORB: -# content: -# InitRef = NameService=corbaname::[HOST_NAME]:[PORT_NUMBER] - -freePort = findFreePort(2810, 1); -hostName = socket.gethostname(); - -if (len(sys.argv) > 1) and sys.argv[1] == "-nothing" : - print "port:" + str(freePort); - sys.exit(0) - - - - -if freePort < 0 : - print - print "Can't find a free port to launch omniNames" - print "Try to kill the running servers and then launch SALOME again." - print - sys.exit(0) - -else : - omniCfgFileContent = "InitRef = NameService=corbaname::" + str(hostName) + ":" + str(freePort); - omniCfgFilePath = os.environ.get('HOME') + "/" + ".omniORB_" + str(hostName) + "_" + str(freePort) + ".cfg"; - - omni_file = file(omniCfgFilePath,'w+'); - omni_file.write(omniCfgFileContent); - omni_file.write("\n"); - omni_file.close(); - - if (len(sys.argv) > 1) and sys.argv[1] == "--save-config" : - omniCfgCurrent = os.environ.get('HOME') + "/.omniORB_current.cfg"; - if os.name == "posix" : - #make a symbolic link - symlink(omniCfgFilePath, omniCfgCurrent); - else : - #copy the file - shutil.copy(omniCfgFilePath, omniCfgCurrent); - - omniCfgFilePath = omniCfgCurrent; - - - - - ## 2. Set the OMNIORB_CONFIG environment variable - os.environ['OMNIORB_CONFIG']=omniCfgFilePath; - - - ## 3. execute the file runSalome.py - runSalomePyFilePath = os.environ.get('KERNEL_ROOT_DIR') + "/bin/salome/runSalome.py"; - - if os.path.isfile(runSalomePyFilePath) : - execfile(runSalomePyFilePath); - diff --git a/bin/orbmodule.py b/bin/orbmodule.py index 0499db75b..507c68c39 100755 --- a/bin/orbmodule.py +++ b/bin/orbmodule.py @@ -41,10 +41,9 @@ class client: """Client for SALOME""" def __init__(self,args=None): - #set GIOP message size for bug 10560: impossible to get field values in TUI mode - sys.argv.extend(["-ORBgiopMaxMsgSize", "104857600"]) ## = 100 * 1024 * 1024 # Initialise the ORB self.orb=CORBA.ORB_init(sys.argv, CORBA.ORB_ID) + # Initialise the Naming Service self.initNS(args or {}) @@ -59,7 +58,7 @@ class client: except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE): self.rootContext = None if verbose(): print "Launch Naming Service++", - + # On lance le Naming Server (doit etre dans le PATH) test = True if args['wake_up_session']: @@ -142,14 +141,14 @@ class client: count += 1 if count > maxcount : raise RuntimeError, "Impossible de trouver %s" % name obj=self.Resolve(name) - if obj : + if obj : print " found in %s seconds " % ((count-1)*delta) break else: sys.stdout.write('+') sys.stdout.flush() time.sleep(delta) - + if typobj is None:return obj nobj = obj._narrow(typobj) @@ -170,7 +169,7 @@ class client: raise RuntimeError, "Process %d for %s not found" % (thePID,theName) aCount += 1 anObj = self.Resolve(theName) - if anObj: + if anObj: print " found in %s seconds " % ((aCount-1)*aDelta) break else: @@ -179,7 +178,7 @@ class client: time.sleep(aDelta) pass pass - + if theTypObj is None: return anObj @@ -206,7 +205,7 @@ class client: except (CORBA.TRANSIENT,CORBA.OBJECT_NOT_EXIST,CORBA.COMM_FAILURE): obj = None return obj - + # -------------------------------------------------------------------------- def waitLogger(self,name,typobj=None,maxcount=40): @@ -217,18 +216,17 @@ class client: count += 1 if count > maxcount : raise RuntimeError, "Impossible de trouver %s" % name obj=self.ResolveLogger(name) - if obj : + if obj : print " found in %s seconds " % ((count-1)*delta) break else: sys.stdout.write('+') sys.stdout.flush() time.sleep(delta) - + if typobj is None:return obj nobj = obj._narrow(typobj) if nobj is None: print "%s exists but is not a %s" % (name,typobj) return nobj - diff --git a/bin/parseConfigFile.py b/bin/parseConfigFile.py new file mode 100644 index 000000000..38f8f2dbf --- /dev/null +++ b/bin/parseConfigFile.py @@ -0,0 +1,301 @@ +import ConfigParser +import os +import logging +import re +from io import StringIO + +logging.basicConfig() +logConfigParser = logging.getLogger(__name__) + +RESERVED_PREFIX = 'ADD_TO_' + + +# :TRICKY: So ugly solution... +class MultiOptSafeConfigParser(ConfigParser.SafeConfigParser): + def __init__(self): + ConfigParser.SafeConfigParser.__init__(self) + + # copied from python 2.6.8 Lib.ConfigParser.py + # modified (see code comments) to handle duplicate keys + def _read(self, fp, name): + """Parse a sectioned setup file. + + The sections in setup file contains a title line at the top, + indicated by a name in square brackets (`[]'), plus key/value + options lines, indicated by `name: value' format lines. + Continuations are represented by an embedded newline then + leading whitespace. Blank lines, lines beginning with a '#', + and just about everything else are ignored. + """ + cursect = None # None, or a dictionary + optname = None + lineno = 0 + e = None # None, or an exception + while True: + line = fp.readline() + if not line: + break + lineno = lineno + 1 + # comment or blank line? + if line.strip() == '' or line[0] in '#;': + continue + if line.split(None, 1)[0].lower() == 'rem' and line[0] in "rR": + # no leading whitespace + continue + # continuation line? + if line[0].isspace() and cursect is not None and optname: + value = line.strip() + if value: + cursect[optname].append(value) + # a section header or option header? + else: + # is it a section header? + mo = self.SECTCRE.match(line) + if mo: + sectname = mo.group('header') + if sectname in self._sections: + cursect = self._sections[sectname] + elif sectname == ConfigParser.DEFAULTSECT: + cursect = self._defaults + else: + cursect = self._dict() + cursect['__name__'] = sectname + self._sections[sectname] = cursect + # So sections can't start with a continuation line + optname = None + # no section header in the file? + elif cursect is None: + raise MissingSectionHeaderError(fpname, lineno, line) + # an option line? + else: + mo = self.OPTCRE.match(line) + if mo: + optname, vi, optval = mo.group('option', 'vi', 'value') + optname = self.optionxform(optname.rstrip()) + # This check is fine because the OPTCRE cannot + # match if it would set optval to None + if optval is not None: + if vi in ('=', ':') and ';' in optval: + # ';' is a comment delimiter only if it follows + # a spacing character + pos = optval.find(';') + if pos != -1 and optval[pos-1].isspace(): + optval = optval[:pos] + optval = optval.strip() + # allow empty values + if optval == '""': + optval = '' + # REPLACE following line (original): + #cursect[optname] = [optval] + # BY THESE LINES: + # Check if this optname already exists + if (optname in cursect) and (cursect[optname] is not None): + cursect[optname][0] += ','+optval + else: + cursect[optname] = [optval] + # END OF SUBSITUTION + else: + # valueless option handling + cursect[optname] = optval + else: + # a non-fatal parsing error occurred. set up the + # exception but keep going. the exception will be + # raised at the end of the file and will contain a + # list of all bogus lines + if not e: + e = ParsingError(fpname) + e.append(lineno, repr(line)) + # if any parsing errors occurred, raise an exception + if e: + raise e + + # join the multi-line values collected while reading + all_sections = [self._defaults] + all_sections.extend(self._sections.values()) + for options in all_sections: + for name, val in options.items(): + if isinstance(val, list): + options[name] = '\n'.join(val) + # + + +# Parse configuration file +# Input: filename, and a list of reserved keywords (environment variables) +# Output: a list of pairs (variable, value), and a dictionary associating a list of user-defined values to each reserved keywords +# Note: Does not support duplicate keys in a same section +def parseConfigFile(filename, reserved = []): + config = MultiOptSafeConfigParser() + config.optionxform = str # case sensitive + + # :TODO: test file existence + + # Read config file + try: + config.read(filename) + except ConfigParser.MissingSectionHeaderError: + logConfigParser.error("No section found in file: %s"%(filename)) + return [] + + return _processConfigFile(config, reserved) +# + +def _processConfigFile(config, reserved = []): + # :TODO: may detect duplicated variables in the same section (raise a warning) + # or even duplicate sections + + outputVariables = [] + # Get raw items for each section, and make some processing for environment variables management + reservedKeys = [RESERVED_PREFIX+str(x) for x in reserved] # produce [ 'ADD_TO_reserved_1', 'ADD_TO_reserved_2', ..., ADD_TO_reserved_n ] + reservedValues = dict([str(i),[]] for i in reserved) # create a dictionary in which keys are the 'ADD_TO_reserved_i' and associated values are empty lists: { 'reserved_1':[], 'reserved_2':[], ..., reserved_n:[] } + sections = config.sections() + for section in sections: + entries = config.items(section, raw=False) # use interpolation + if len(entries) == 0: # empty section + logConfigParser.warning("Empty section: %s in file: %s"%(section, filename)) + pass + for key,val in entries: + if key in reserved: + logConfigParser.error("Invalid use of reserved variable: %s in file: %s"%(key, filename)) + else: + expandedVal = os.path.expandvars(val) # expand environment variables + # Search for not expanded variables (i.e. non-existing environment variables) + pattern = re.compile('\${ ( [^}]* ) }', re.VERBOSE) # string enclosed in ${ and } + expandedVal = pattern.sub(r'', expandedVal) # remove matching patterns + # Trim colons + expandedVal = _trimColons(expandedVal) + + if key in reservedKeys: + shortKey = key[len(RESERVED_PREFIX):] + vals = expandedVal.split(',') + reservedValues[shortKey] += vals + # remove left&right spaces on each element + vals = [v.strip(' \t\n\r') for v in vals] + else: + outputVariables.append((key, expandedVal)) + pass + pass # end if key + pass # end for key,val + pass # end for section + + return outputVariables, reservedValues +# + +def _trimColons(var): + v = var + # Remove leading and trailing colons (:) + pattern = re.compile('^:+ | :+$', re.VERBOSE) + v = pattern.sub(r'', v) # remove matching patterns + # Remove multiple colons + pattern = re.compile('::+', re.VERBOSE) + v = pattern.sub(r':', v) # remove matching patterns + return v +# + +# This class is used to parse .sh environment file +# It deals with specific treatments: +# - virtually add a section to configuration file +# - process shell keywords (if, then...) +class EnvFileConverter(object): + def __init__(self, fp, section_name, reserved = [], outputFile=None): + self.fp = fp + self.sechead = '[' + section_name + ']\n' + self.reserved = reserved + self.outputFile = outputFile + self.allParsedVariableNames=[] + # exclude line that begin with: + self.exclude = [ 'if', 'then', 'fi', '#' ] + # discard the following keywords if at the beginning of line: + self.discard = [ 'export' ] + + def readline(self): + if self.sechead: + try: + if self.outputFile is not None: + self.outputFile.write(self.sechead) + return self.sechead + finally: + self.sechead = None + else: + line = self.fp.readline() + # trim whitespaces + line = line.strip(' \t\n\r') + # line of interest? (not beginning by a keyword of self.exclude) + for k in self.exclude: + if line.startswith(k): + return '\n' + # look for substrinsg beginning with sharp charcter ('#') + line = re.sub(r'#.*$', r'', line) + # line to be pre-processed? (beginning by a keyword of self.discard) + for k in self.discard: + if line.startswith(k): + line = line[len(k):] + line = line.strip(' \t\n\r') + # process reserved keywords + for k in self.reserved: + if line.startswith(k) and "=" in line: + variable, value = line.split('=') + value = self._purgeValue(value, k) + line = RESERVED_PREFIX + k + ": " + value + # Update list of variable names + if "=" in line: + variable, value = line.split('=') + self.allParsedVariableNames.append(variable) + # Self-extending variables that are not in reserved keywords + # Example: FOO=something:${FOO} + # :TODO: + # + # replace "${FOO}" and "$FOO" and ${FOO} and $FOO by %(FOO)s if FOO is + # defined in current file (i.e. it is not an external environment variable) + for k in self.allParsedVariableNames: + key = r'\$\{?'+k+'\}?' + pattern = re.compile(key, re.VERBOSE) + line = pattern.sub(r'%('+k+')s', line) + # Remove quotes + pattern = re.compile(r'\"', re.VERBOSE) + line = pattern.sub(r'', line) + # + # Replace `shell_command` by its result + def myrep(obj): + obj = re.sub('`', r'', obj.group(0)) # remove quotes + import subprocess + res = subprocess.Popen([obj], stdout=subprocess.PIPE).communicate()[0] + res = res.strip(' \t\n\r') # trim whitespaces + return res + # + line = re.sub('`[^`]+`', myrep, line) + # + if self.outputFile is not None: + self.outputFile.write(line+'\n') + return line + + def _purgeValue(self, value, name): + # Replace foo:${PATTERN}:bar or foo:$PATTERN:bar by foo:bar + key = r'\$\{?'+name+'\}?' + pattern = re.compile(key, re.VERBOSE) + value = pattern.sub(r'', value) + + # trim colons + value = _trimColons(value) + + return value + # + +# Convert .sh environment file to configuration file format +def convertEnvFileToConfigFile(envFilename, configFilename): + #reserved=['PATH', 'LD_LIBRARY_PATH', 'PYTHONPATH'] + reserved=['PATH', 'LD_LIBRARY_PATH', 'PYTHONPATH', 'MANPATH', 'R_LIBS', 'PV_PLUGIN_PATH'] + fileContents = open(envFilename, 'r').read() + + pattern = re.compile('\n[\n]+', re.VERBOSE) # multiple '\n' + fileContents = pattern.sub(r'\n', fileContents) # replace by a single '\n' + + finput = StringIO(unicode(fileContents)) + foutput = open(configFilename, 'w') + + config = MultiOptSafeConfigParser() + config.optionxform = str # case sensitive + config.readfp(EnvFileConverter(finput, 'SALOME Configuration', reserved, outputFile=foutput)) + foutput.close() + + logConfigParser.info('Configuration file generated: %s'%configFilename) +# diff --git a/bin/createAppli.sh b/bin/runConsole.py old mode 100755 new mode 100644 similarity index 65% rename from bin/createAppli.sh rename to bin/runConsole.py index 2103a4601..72d73c77b --- a/bin/createAppli.sh +++ b/bin/runConsole.py @@ -1,4 +1,4 @@ -#!/bin/sh +# -*- coding: iso-8859-1 -*- # Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE # # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, @@ -21,19 +21,22 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -comName=`which $0` -rep=`dirname $comName` +def __prompt(vars = None, commands=[], message = "Connecting to SALOME"): + if vars is None: + vars = globals() + import code + import rlcompleter + import readline + readline.parse_and_bind("tab: complete") + # calling this with globals ensures we can see the environment + print message + shell = code.InteractiveConsole(vars) + for cmd in commands: + shell.push(cmd) + return shell.interact +# -if [ $# -ne 1 ]; then - echo "--- usage:" - echo $0 AppliName - echo "--- In which AppliName is a directory to create with SALOME application scripts" -elif [ -d $1 ]; then - echo $1 "directory already exists, nothing done" -else - mkdir -p $1 - mkdir -p $1/USERS - cp -r $rep/appliskel/* $1 - cp $rep/appliskel/.bashrc $1 - chmod +x $1/*.sh $1/run* $1/envd -fi +def connect(args=[]): + p = __prompt(commands=["import salomeConsole"]) + p() +# diff --git a/bin/runNS.py b/bin/runNS.py deleted file mode 100755 index 95e6c1788..000000000 --- a/bin/runNS.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env python -# -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -#log files localization -# -import os, commands, sys, re, string, socket -from Utils_Identity import getShortHostName - -if sys.platform == "win32": - # temporarily using home directory for Namning Service logs - # to be replaced with TEMP later... - os.environ["BaseDir"]=os.environ["HOME"] -else: - os.environ["BaseDir"]="/tmp" - -os.environ["Username"]=os.environ["USER"] - -# kill OmniNames if exists - -#killall -q -9 omniNames - -# clear log files - -def startOmni(): - try: - os.mkdir(os.environ["BaseDir"] + "/logs") - os.chmod(os.environ["BaseDir"] + "/logs", 0777) - except: - #print "Can't create " + os.environ["BaseDir"] + "/logs" - pass - - upath = os.environ["BaseDir"] + "/logs/" + os.environ["Username"] - - try: - os.mkdir(upath) - except: - #print "Can't create " + upath - pass - - #os.system("touch " + upath + "/dummy") - for fname in os.listdir(upath): - try: - if not fname.startswith("."): os.remove(upath + "/" + fname) - except: - pass - #os.system("rm -f " + upath + "/omninames* " + upath + "/dummy " + upath + "/*.log") - - print "Name Service... " - #hname=os.environ["HOST"] #commands.getoutput("hostname") - if sys.platform == "win32": - hname=getShortHostName() - else: - hname=socket.gethostname() - - print "hname=",hname - - f=open(os.environ["OMNIORB_CONFIG"]) - ss=re.findall("NameService=corbaname::" + hname + ":\d+", f.read()) - print "ss = ", ss - f.close() - aPort=re.findall("\d+", ss[0])[0] - - #aSedCommand="s/.*NameService=corbaname::" + hname + ":\([[:digit:]]*\)/\1/" - #print "sed command = ", aSedCommand - #aPort = commands.getoutput("sed -e\"" + aSedCommand + "\"" + os.environ["OMNIORB_CONFIG"]) - global process_id - print "port=", aPort - if sys.platform == "win32": - #import win32pm - #command = ['omniNames -start ' , aPort , ' -logdir ' , '\"' + upath + '\"'] - #os.system("start omniNames -start " + aPort + " -logdir " + "\"" + upath + "\"" ) - command = "start omniNames -start " + aPort + " -logdir " + "\"" + upath + "\"" - #print command - pid = win32pm.spawnpid( string.join(command, " "), -nc ) - process_id[pid]=command - else: - os.system("omniNames -start " + aPort + " -logdir " + upath + " &") - - print "ok" - print "to list contexts and objects bound into the context with the specified name : showNS " - -# In LifeCycleCORBA, FactoryServer is started with rsh on the requested -# computer if this Container does not exist. Default is localhost. -# Others Containers are started with start_impl method of FactoryServer Container. -# For using rsh it is necessary to have in the ${HOME} directory a .rhosts file -# Warning : on RedHat the file /etc/hosts contains by default a line like : -# 127.0.0.1 bordolex bordolex.paris1.matra-dtv.fr localhost.localdomain localhost -# (bordolex is the station name). omniNames on bordolex will be accessible from other -# computers only if the computer name is removed on that line like : -# 127.0.0.1 bordolex.paris1.matra-dtv.fr localhost.localdomain localhost - -# To start dynamically Containers on several computers you need to -# put in the ${OMNIORB_CONFIG} file a computer name instead of "localhost" -# example : ORBInitRef NameService=corbaname::dm2s0017 - -# If you need to use several omniNames running on the same computer, you have to : -#1. put in your ${OMNIORB_CONFIG} file a computer name and port number -# example : ORBInitRef NameService=corbaname::dm2s0017:1515 -#2. start omninames with this port number in runNS.sh -# example : omniNames -start 1515 -logdir ${BaseDir}/logs/${Username} & diff --git a/bin/runNS.sh b/bin/runNS.sh deleted file mode 100755 index 61d4bd33d..000000000 --- a/bin/runNS.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/sh -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -#log files localization -# -BaseDir=/tmp -Username=`/usr/bin/whoami` - -# kill OmniNames if exists - -#killall -q -9 omniNames - -# clear log files - -mkdir -m 777 ${BaseDir}/logs -mkdir ${BaseDir}/logs/${Username} -touch ${BaseDir}/logs/${Username}/dummy -\rm -f ${BaseDir}/logs/${Username}/omninames* ${BaseDir}/logs/${Username}/dummy ${BaseDir}/logs/${Username}/*.log - -echo "Name Service... " -aSedCommand="s/.*NameService=corbaname::`hostname`:\([[:digit:]]*\)/\1/" -aPort=`cat $OMNIORB_CONFIG | grep NameService | sed -e"$aSedCommand"` -omniNames -start $aPort -logdir ${BaseDir}/logs/${Username} & - -# In LifeCycleCORBA, FactoryServer is started with rsh on the requested -# computer if this Container does not exist. Default is localhost. -# Others Containers are started with start_impl method of FactoryServer Container. -# For using rsh it is necessary to have in the ${HOME} directory a .rhosts file -# Warning : on RedHat the file /etc/hosts contains by default a line like : -# 127.0.0.1 bordolex bordolex.paris1.matra-dtv.fr localhost.localdomain localhost -# (bordolex is the station name). omniNames on bordolex will be accessible from other -# computers only if the computer name is removed on that line like : -# 127.0.0.1 bordolex.paris1.matra-dtv.fr localhost.localdomain localhost - -# To start dynamically Containers on several computers you need to -# put in the ${OMNIORB_CONFIG} file a computer name instead of "localhost" -# example : ORBInitRef NameService=corbaname::dm2s0017 - -# If you need to use several omniNames running on the same computer, you have to : -#1. put in your ${OMNIORB_CONFIG} file a computer name and port number -# example : ORBInitRef NameService=corbaname::dm2s0017:1515 -#2. start omninames with this port number in runNS.sh -# example : omniNames -start 1515 -logdir ${BaseDir}/logs/${Username} & - -echo ok -echo "to list contexts and objects bound int the context with the specified name : showNS " diff --git a/bin/runSalome b/bin/runSalome deleted file mode 100755 index af8082153..000000000 --- a/bin/runSalome +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -${KERNEL_ROOT_DIR}/bin/salome/envSalome.py python ${KERNEL_ROOT_DIR}/bin/salome/runSalome.py $* - -# ----------------------------------------------------------------------------- -# examples: -# --------- -# $: ${KERNEL_ROOT_DIR}/bin/salome/runSalome -# -# - parameters for launching are taken from SalomeApp.xml; -# - if the config file does not exist, it is created with default values. -# -# -# $: ${KERNEL_ROOT_DIR}/bin/salome/runSalome --modules=GEOM,SMESH,VISU,MED --embedded=registry,study,moduleCatalog,cppContainer --standalone=pyContainer --xterm --killall -# -# parameters from command line supersede those from SalomeApp.xml -# -# Some CORBA servers can be launched in the SALOME_Session_Server's process -# (embedded = same process) or in a separate process (standalone): -# --> registry,study,moduleCatalog,cppContainer -# Other CORBA servers could only be launched in separate process (standalone): -# --> pyContainer -# -# $: ${KERNEL_ROOT_DIR}/bin/salome/runSalome -h -# help -# ----------------------------------------------------------------------------- -# -# l'option -i permet de garder l'interpreteur python ouvert : -# par defaut, les differents serveurs ouvrent des fenêtres xterm -# (cf. runSalome.py) -# le serveur Logger n'est pas obligatoire (commenté dans runSalome.py) -# -# ----------------------------------------------------------------------------- diff --git a/bin/runSalome.bat b/bin/runSalome.bat deleted file mode 100644 index 60e7198a5..000000000 --- a/bin/runSalome.bat +++ /dev/null @@ -1,23 +0,0 @@ -@REM Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -@REM -@REM Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -@REM CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -@REM -@REM This library is free software; you can redistribute it and/or -@REM modify it under the terms of the GNU Lesser General Public -@REM License as published by the Free Software Foundation; either -@REM version 2.1 of the License. -@REM -@REM This library is distributed in the hope that it will be useful, -@REM but WITHOUT ANY WARRANTY; without even the implied warranty of -@REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -@REM Lesser General Public License for more details. -@REM -@REM You should have received a copy of the GNU Lesser General Public -@REM License along with this library; if not, write to the Free Software -@REM Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -@REM -@REM See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -@REM - -@"%PYTHONBIN%" "%KERNEL_ROOT_DIR%\bin\salome\envSalome.py" "%PYTHONBIN%" "%KERNEL_ROOT_DIR%\bin\salome\runSalome.py" %* diff --git a/bin/runSalome.ksh b/bin/runSalome.ksh deleted file mode 100644 index 57804f295..000000000 --- a/bin/runSalome.ksh +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/ksh -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -searchFreePort() { - echo -n "Searching for a free port for naming service: " - NSPORT=2810 - export NSPORT - local limit=$NSPORT - let limit=limit+100 - while [ 1 ] - do - aRes=`netstat -ltn | grep -E :${NSPORT}` - if [ -z "$aRes" ]; then - echo ${NSPORT} - Ok - local myhost=`hostname` - OMNIORB_CONFIG=${HOME}/.omniORB_${myhost}_${NSPORT}.cfg - export OMNIORB_CONFIG - local initref="NameService=corbaname::"`hostname`":$NSPORT" - export NSPORT - if [[ `python -c "import CORBA; print CORBA.ORB_ID"` = "omniORB4" ]]; then - echo "InitRef = $initref" > $OMNIORB_CONFIG - else - echo "ORBInitRef $initref" > $OMNIORB_CONFIG - fi - break - fi - echo -n "${NSPORT} " - if [[ $NSPORT -eq $limit ]] ; then - echo - echo "Can't find a free port to launch omniNames" - echo "Try to kill the running servers and then launch SALOME again." - exit - fi - let NSPORT=NSPORT+1 - done -} - -searchFreePort - -if [[ "$*" = "-nothing" ]]; then - echo "port:$NSPORT" -elif [ $# -ne 0 ] ; then - python ${KERNEL_ROOT_DIR}/bin/salome/runSalome.py $* -else - python ${KERNEL_ROOT_DIR}/bin/salome/runSalome.py -fi - -# ----------------------------------------------------------------------------- -# examples: -# --------- -# $: ${KERNEL_ROOT_DIR}/bin/salome/runSalome -# -# - parameters for launching are taken from SalomeApp.xml; -# - if the config file does not exist, it is created with default values. -# -# -# $: ${KERNEL_ROOT_DIR}/bin/salome/runSalome --modules=GEOM,SMESH,VISU,MED --embedded=registry,study,moduleCatalog,cppContainer --standalone=pyContainer --xterm --killall -# -# parameters from command line supersede those from SalomeApp.xml -# -# Some CORBA servers can be launched in the SALOME_Session_Server's process -# (embedded = same process) or in a separate process (standalone): -# --> registry,study,moduleCatalog,cppContainer -# Other CORBA servers could only be launched in separate process (standalone): -# --> pyContainer -# -# $: ${KERNEL_ROOT_DIR}/bin/salome/runSalome -h -# help -# ----------------------------------------------------------------------------- -# -# l'option -i permet de garder l'interpreteur python ouvert : -# par defaut, les differents serveurs ouvrent des fenêtres xterm -# (cf. runSalome.py) -# le serveur Logger n'est pas obligatoire (commenté dans runSalome.py) -# -# ----------------------------------------------------------------------------- -# Example on CCRT (without ihm) : -# ${KERNEL_ROOT_DIR}/bin/salome/runSalome.py --terminal --modules=MED,CALCULATOR,COMPONENT --standalone=registry,study,moduleCatalog,cppContainer,pyContainer --killall diff --git a/bin/runSalome.py b/bin/runSalome.py index c56da55cf..0389622f6 100755 --- a/bin/runSalome.py +++ b/bin/runSalome.py @@ -32,11 +32,6 @@ import setenv from launchConfigureParser import verbose from server import process_id, Server -if sys.platform == "win32": - SEP = ";" -else: - SEP = ":" - # ----------------------------------------------------------------------------- from killSalome import killAllPorts @@ -46,7 +41,7 @@ def killLocalPort(): kill servers from a previous SALOME exection, if needed, on the CORBA port given in args of runSalome """ - + from killSalomeWithPort import killMyPort my_port=str(args['port']) try: @@ -55,13 +50,13 @@ def killLocalPort(): print "problem in killLocalPort()" pass pass - + def givenPortKill(port): """ kill servers from a previous SALOME exection, if needed, on the same CORBA port """ - + from killSalomeWithPort import killMyPort my_port=port try: @@ -96,7 +91,7 @@ class InterpServer(Server): self.CMD=['xterm', '-e']+ env_ld_library_path + ['python'] else: self.CMD=['cmd', '/c', 'start cmd.exe', '/K', 'python'] - + def run(self): global process_id command = self.CMD @@ -132,7 +127,7 @@ def get_cata_path(list_modules,modules_root_dir): cata_path.append(cata_file) modules_cata[module]=cata_file - for path in os.getenv("SALOME_CATALOGS_PATH","").split(SEP): + for path in os.getenv("SALOME_CATALOGS_PATH","").split(os.pathsep): if os.path.exists(path): for cata_file in glob.glob(os.path.join(path,"*Catalog.xml")): module_name= os.path.basename(cata_file)[:-11] @@ -152,7 +147,7 @@ class CatalogServer(Server): self.SCMD2=[] home_dir=os.getenv('HOME') if home_dir is not None: - self.SCMD2=['-personal',os.path.join(home_dir,'Salome/resources/CatalogModulePersonnel.xml')] + self.SCMD2=['-personal',os.path.join(home_dir,'Salome/resources/CatalogModulePersonnel.xml')] def setpath(self,modules_list,modules_root_dir): list_modules = modules_list[:] @@ -200,17 +195,6 @@ class ContainerCPPServer(Server): # --- -class ContainerPYServer(Server): - def __init__(self,args): - self.args=args - self.initArgs() - if sys.platform == "win32": - self.CMD=[os.environ["PYTHONBIN"], '\"'+os.environ["KERNEL_ROOT_DIR"] + '/bin/salome/SALOME_ContainerPy.py'+'\"','FactoryServerPy'] - else: - self.CMD=['SALOME_ContainerPy.py','FactoryServerPy'] - -# --- - class LoggerServer(Server): def __init__(self,args): self.args=args @@ -250,7 +234,7 @@ class SessionServer(Server): self.SCMD1+=['--with','ModuleCatalog','(','-common'] home_dir=os.getenv('HOME') if home_dir is not None: - self.SCMD2+=['-personal',os.path.join(home_dir,'Salome/resources/CatalogModulePersonnel.xml')] + self.SCMD2+=['-personal',os.path.join(home_dir,'Salome/resources/CatalogModulePersonnel.xml')] self.SCMD2+=[')'] if 'study' in self.args['embedded']: self.SCMD2+=['--with','SALOMEDS','(',')'] @@ -258,11 +242,11 @@ class SessionServer(Server): self.SCMD2+=['--with','Container','(','FactoryServer',')'] if 'SalomeAppEngine' in self.args['embedded']: self.SCMD2+=['--with','SalomeAppEngine','(',')'] - + if 'cppContainer' in self.args['standalone'] or 'cppContainer' in self.args['embedded']: self.SCMD2+=['CPP'] if 'pyContainer' in self.args['standalone'] or 'pyContainer' in self.args['embedded']: - self.SCMD2+=['PY'] + raise Exception('Python containers no longer supported') if self.args['gui']: session_gui = True if self.args.has_key('session_gui'): @@ -276,6 +260,10 @@ class SessionServer(Server): self.SCMD2+=['--study-hdf=%s'%self.args['study_hdf']] pass pass + if self.args.has_key('pyscript') and len(self.args['pyscript']) > 0: + self.SCMD2+=['--pyscript=%s'%(",".join(self.args['pyscript']))] + pass + pass pass if self.args['noexcepthandler']: self.SCMD2+=['noexcepthandler'] @@ -294,9 +282,8 @@ class SessionServer(Server): list_modules.insert(0,m) list_modules.reverse() self.SCMD2+=['--modules (%s)' % ":".join(list_modules)] - - if self.args.has_key('pyscript') and len(self.args['pyscript']) > 0: - self.SCMD2+=['--pyscript=%s'%(",".join(self.args['pyscript']))] + pass + pass def setpath(self,modules_list,modules_root_dir): list_modules = modules_list[:] @@ -333,7 +320,7 @@ class SessionServer(Server): self.CMD = ["xterm", "-e", "gdb", "--command=.gdbinit4salome", self.CMD[0]] pass pass - + if self.args["valgrind_session"]: l = ["valgrind"] val = os.getenv("VALGRIND_OPTIONS") @@ -342,7 +329,7 @@ class SessionServer(Server): pass self.CMD = l + self.CMD pass - + # --- class LauncherServer(Server): @@ -406,7 +393,7 @@ def startGUI(clt): import SALOME_Session_idl session=clt.waitNS("/Kernel/Session",SALOME.Session) session.GetInterface() - + # ----------------------------------------------------------------------------- def startSalome(args, modules_list, modules_root_dir): @@ -414,13 +401,13 @@ def startSalome(args, modules_list, modules_root_dir): init_time = os.times() if verbose(): print "startSalome ", args - + # # Set server launch command # if args.has_key('server_launch_mode'): Server.set_server_launch_mode(args['server_launch_mode']) - + # # Wake up session option # @@ -430,7 +417,7 @@ def startSalome(args, modules_list, modules_root_dir): home = os.getenv("HOME") appli = os.getenv("APPLI") kwargs={} - if appli is not None: + if appli is not None: home = os.path.join(os.path.realpath(home), appli,"USERS") kwargs["with_username"] = True pass @@ -442,11 +429,11 @@ def startSalome(args, modules_list, modules_root_dir): os.environ['OMNIORB_CONFIG'] = last_running_config pass pass - + # # Initialisation ORB and Naming Service # - + clt=orbmodule.client(args) # @@ -478,7 +465,7 @@ def startSalome(args, modules_list, modules_root_dir): session.GetInterface() args["session_object"] = session return clt - + # Save Naming service port name into # the file args["ns_port_log_file"] if args.has_key('ns_port_log_file'): @@ -505,7 +492,7 @@ def startSalome(args, modules_list, modules_root_dir): if sys.platform != "win32": if verbose(): print "Notify Server to launch" - + myServer=NotifyServer(args,modules_root_dir) myServer.run() @@ -563,7 +550,7 @@ def startSalome(args, modules_list, modules_root_dir): # # Launch LauncherServer # - + myCmServer = LauncherServer(args) myCmServer.setpath(modules_list,modules_root_dir) myCmServer.run() @@ -577,7 +564,7 @@ def startSalome(args, modules_list, modules_root_dir): from Utils_Identity import getShortHostName - + if os.getenv("HOSTNAME") == None: if os.getenv("HOST") == None: os.environ["HOSTNAME"]=getShortHostName() @@ -585,13 +572,13 @@ def startSalome(args, modules_list, modules_root_dir): os.environ["HOSTNAME"]=os.getenv("HOST") theComputer = getShortHostName() - + # # Launch local C++ Container (FactoryServer), # and wait until it is registered in naming service # - if ('cppContainer' in args['standalone']) | (args["gui"] == 0) : + if ('cppContainer' in args['standalone']) | (args["gui"] == 0) : myServer=ContainerCPPServer(args) myServer.run() if sys.platform == "win32": @@ -605,19 +592,14 @@ def startSalome(args, modules_list, modules_root_dir): # if 'pyContainer' in args['standalone']: - myServer=ContainerPYServer(args) - myServer.run() - if sys.platform == "win32": - clt.waitNS("/Containers/" + theComputer + "/FactoryServerPy") - else: - clt.waitNSPID("/Containers/" + theComputer + "/FactoryServerPy",myServer.PID) + raise Exception('Python containers no longer supported') # # Wait until Session Server is registered in naming service # - + if args["gui"]: -##---------------- +##---------------- import Engines import SALOME import SALOMEDS @@ -641,7 +623,7 @@ def startSalome(args, modules_list, modules_root_dir): # additionnal external python interpreters # nbaddi=0 - + try: if 'interp' in args: nbaddi = args['interp'] @@ -651,7 +633,7 @@ def startSalome(args, modules_list, modules_root_dir): print "-------------------------------------------------------------" print "-- to get an external python interpreter:runSalome --interp=1" print "-------------------------------------------------------------" - + if verbose(): print "additional external python interpreters: ", nbaddi if nbaddi: for i in range(nbaddi): @@ -666,7 +648,7 @@ def startSalome(args, modules_list, modules_root_dir): import readline except ImportError: pass - + return clt # ----------------------------------------------------------------------------- @@ -678,7 +660,7 @@ def useSalome(args, modules_list, modules_root_dir): show registered objects in Naming Service. """ global process_id - + clt=None try: clt = startSalome(args, modules_list, modules_root_dir) @@ -688,7 +670,7 @@ def useSalome(args, modules_list, modules_root_dir): print print print "--- Error during Salome launch ---" - + #print process_id from addToKillList import addToKillList @@ -702,28 +684,28 @@ def useSalome(args, modules_list, modules_root_dir): if verbose(): print """ Saving of the dictionary of Salome processes in %s To kill SALOME processes from a console (kill all sessions from all ports): - python killSalome.py + python killSalome.py To kill SALOME from the present interpreter, if it is not closed : killLocalPort() --> kill this session (use CORBA port from args of runSalome) - givenPortKill(port) --> kill a specific session with given CORBA port + givenPortKill(port) --> kill a specific session with given CORBA port killAllPorts() --> kill all sessions - + runSalome, with --killall option, starts with killing the processes resulting from the previous execution. """%filedict - + # # Print Naming Service directory list # - + if clt != None: if verbose(): print print " --- registered objects tree in Naming Service ---" clt.showNS() pass - + if not args['gui'] or not args['session_gui']: if args['shutdown_servers']: class __utils__(object): @@ -739,7 +721,7 @@ def useSalome(args, modules_list, modules_root_dir): args['shutdown_servers'] = __utils__(args['port']) pass pass - + # run python scripts, passed via --execute option toimport = [] if args.has_key('pyscript'): @@ -781,7 +763,7 @@ def useSalome(args, modules_list, modules_root_dir): pass pass return clt - + def execScript(script_path): print 'executing', script_path sys.path.insert(0, os.path.dirname(script_path)) @@ -809,112 +791,6 @@ def registerEnv(args, modules_list, modules_root_dir): # ----------------------------------------------------------------------------- -def searchFreePort(args, save_config=1): - print "Searching for a free port for naming service:", - # - if sys.platform == "win32": - tmp_file = os.getenv('TEMP'); - else: - tmp_file = '/tmp' - tmp_file = os.path.join(tmp_file, '.netstat_%s'%os.getpid()) - # - ###status = os.system("netstat -ltn | grep -E :%s > /dev/null 2>&1"%(NSPORT)) - os.system( "netstat -a -n > %s" % tmp_file ); - f = open( tmp_file, 'r' ); - ports = f.readlines(); - f.close(); - os.remove( tmp_file ); - # - def portIsUsed(port, data): - regObj = re.compile( ".*tcp.*:([0-9]+).*:.*listen", re.IGNORECASE ); - for item in data: - try: - p = int(regObj.match(item).group(1)) - if p == port: return True - pass - except: - pass - pass - return False - # - NSPORT=2810 - limit=NSPORT+100 - # - while 1: - if not portIsUsed(NSPORT, ports): - print "%s - OK"%(NSPORT) - # - from salome_utils import generateFileName, getHostName - hostname = getHostName() - # - home = os.getenv("HOME") - appli = os.getenv("APPLI") - kwargs={} - if appli is not None: - home = os.path.join(os.path.realpath(home), appli,"USERS") - kwargs["with_username"]=True - # - omniorb_config = generateFileName(home, prefix="omniORB", - extension="cfg", - hidden=True, - with_hostname=True, - with_port=NSPORT, - **kwargs) - orbdata = [] - initref = "NameService=corbaname::%s:%s"%(hostname, NSPORT) - from omniORB import CORBA - if CORBA.ORB_ID == "omniORB4": - orbdata.append("InitRef = %s"%(initref)) - orbdata.append("giopMaxMsgSize = 2097152000 # 2 GBytes") - orbdata.append("traceLevel = 0 # critical errors only") - else: - orbdata.append("ORBInitRef %s"%(initref)) - orbdata.append("ORBgiopMaxMsgSize = 2097152000 # 2 GBytes") - orbdata.append("ORBtraceLevel = 0 # critical errors only") - pass - orbdata.append("") - f = open(omniorb_config, "w") - f.write("\n".join(orbdata)) - f.close() - # - os.environ['OMNIORB_CONFIG'] = omniorb_config - os.environ['NSPORT'] = "%s"%(NSPORT) - os.environ['NSHOST'] = "%s"%(hostname) - args['port'] = os.environ['NSPORT'] - # - if save_config: - last_running_config = generateFileName(home, prefix="omniORB", - suffix="last", - extension="cfg", - hidden=True, - **kwargs) - try: - if sys.platform == "win32": - import shutil - shutil.copyfile(omniorb_config, last_running_config) - else: - try: - os.remove(last_running_config) - except OSError: - pass - os.symlink(omniorb_config, last_running_config) - pass - pass - except: - pass - break - print "%s"%(NSPORT), - if NSPORT == limit: - msg = "\n" - msg += "Can't find a free port to launch omniNames\n" - msg += "Try to kill the running servers and then launch SALOME again.\n" - raise RuntimeError, msg - NSPORT=NSPORT+1 - pass - return - -# ----------------------------------------------------------------------------- - def no_main(): """Salome Launch, when embedded in other application""" fileEnv = os.environ["SALOME_LAUNCH_CONFIG"] @@ -922,6 +798,7 @@ def no_main(): args, modules_list, modules_root_dir = pickle.load(fenv) fenv.close() kill_salome(args) + from searchFreePort import searchFreePort searchFreePort(args, 0) clt = useSalome(args, modules_list, modules_root_dir) return clt @@ -933,6 +810,7 @@ def main(): from salome_utils import getHostName print "runSalome running on %s" % getHostName() args, modules_list, modules_root_dir = setenv.get_config() + kill_salome(args) save_config = True if args.has_key('save_config'): @@ -943,6 +821,7 @@ def main(): test = False pass if test: + from searchFreePort import searchFreePort searchFreePort(args, save_config) pass # -- @@ -992,7 +871,7 @@ def foreGround(clt, args): server.CMD = [os.getenv("PYTHONBIN"), "-m", "killSalomeWithPort", "--spy", "%s"%(os.getpid()), "%s"%(port)] else: server.CMD = ["killSalomeWithPort.py", "--spy", "%s"%(os.getpid()), "%s"%(port)] - server.run() + server.run() # os.system("killSalomeWithPort.py --spy %s %s &"%(os.getpid(), port)) # -- dt = 1.0 @@ -1012,10 +891,9 @@ def foreGround(clt, args): killMyPort(port) pass return +# -# ----------------------------------------------------------------------------- - -if __name__ == "__main__": +def runSalome(): import user clt,args = main() # -- @@ -1043,3 +921,10 @@ if __name__ == "__main__": pass # -- pass +# + +# ----------------------------------------------------------------------------- + +if __name__ == "__main__": + runSalome() +# diff --git a/bin/runSession.py b/bin/runSession.py new file mode 100644 index 000000000..0e2fd7ce1 --- /dev/null +++ b/bin/runSession.py @@ -0,0 +1,106 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +import os +import sys +from optparse import OptionParser +from NSparam import getNSparams + +# Use to display newlines (\n) in epilog +class MyParser(OptionParser): + def format_epilog(self, formatter): + return self.epilog +# + +def configureSession(args=[]): + usage = "Usage: %prog [options]" + epilog = """\nIf the command is not given a shell is opened. +If PORT and MACHINE are not given, try to connect to the last active session on the local machine. +If PORT and MACHINE are given, try to connect to the remote session associated with PORT on MACHINE. +If MACHINE is not given, try to connect to the session associated to PORT on the local machine. +If PORT is not given, try to connect to the remote session associated to port 2810 on MACHINE.\n\n""" + parser = MyParser(usage=usage, epilog=epilog) + parser.add_option("-p", "--port", metavar="", default=0, + action="store", type="int", dest="port", + help="The port to connect to." + ) + parser.add_option("-m", "--machine", metavar="", default=0, + action="store", type="int", dest="machine", + help="The machine to connect to." + ) + try: + (options, args) = parser.parse_args(args) + except Exception, e: + print e + return + + port = options.port + machine = options.machine + + # :GLITCH: this code defines specific environment variables (OMNIORB_CONFIG, NSPORT, + # NSHOST) which are later used by other modules. Working, but not really "safe"... + if not port: + if not machine: + # neither MACHINE nor PORT are given + # --- set omniORB configuration to current session if any + absoluteAppliPath = os.environ['ABSOLUTE_APPLI_PATH'] + fileOmniConfig = absoluteAppliPath + '/USERS/.omniORB_' + os.environ['USER'] + '_last.cfg' + if os.path.isfile(fileOmniConfig): + os.environ['OMNIORB_CONFIG'] = fileOmniConfig + # --- set environment variables for port and hostname of NamingService + host, port = getNSparams() + os.environ['NSHOST'] = host + os.environ['NSPORT'] = port + else: + # No running session + os.environ['NSHOST'] = "no_host" + os.environ['NSPORT'] = "no_port" + pass + else: + # only MACHINE is given + _writeConfigFile(2810, os.environ['NSHOST']) + # + else: + if not machine: + # only PORT is given + os.environ['NSHOST'] = `hostname` + pass + # both MACHINE and PORT are given + _writeConfigFile(os.environ['NSPORT'], os.environ['NSHOST']) + # +# + +# --- set the OMNIORB_CONFIG file and environment relative to this run of SALOME +def _writeConfigFile(port, host): + os.environ['NSPORT'] = port + os.environ['NSHOST'] = host + + absoluteAppliPath = os.environ['ABSOLUTE_APPLI_PATH'] + path = absoluteAppliPath + '/USERS' + kwargs = {'with_username' : os.environ['USER']} + + from ORBConfigFile import writeORBConfigFile + [ filename, msgSize ] = writeORBConfigFile(path, host, port, kwargs) + + os.environ['OMNIORB_CONFIG'] = filename +# diff --git a/bin/salome.launch b/bin/salome.launch deleted file mode 100644 index 5c71df7ef..000000000 --- a/bin/salome.launch +++ /dev/null @@ -1,29 +0,0 @@ - - - yes - no - no - yes - no - - - - - - - - - - - - - - registry - study - moduleCatalog - cppContainer - - - pyContainer - - diff --git a/bin/salomeConsole.py b/bin/salomeConsole.py index a8c4a60a4..8f95798df 100755 --- a/bin/salomeConsole.py +++ b/bin/salomeConsole.py @@ -67,18 +67,18 @@ else: if rep == "y": filename=f break - + if filename != "": os.environ['OMNIORB_CONFIG']=filename else: rep= raw_input("Do you want to try a local session on port 2810 ? [y|n]") if rep == "y": # Try a local session running on port 2810 - sys.argv=sys.argv+['-ORBInitRef','NameService=corbaname::localhost:2810'] + sys.argv=sys.argv+['-ORBInitRef','NameService=corbaname::localhost:2810']#+['-ORBgiopMaxMsgSize','2097152000'] # 2 GBytes else: sys.exit(1) -print sys.argv +#print sys.argv #direct adress from clt.orb.object_to_string(clt.rootContext) #sys.argv=sys.argv+['-ORBInitRef','NameService=IOR:010000000100000000000000010000000000000023000000010100000a0000006c6f63616c686f737400fa0a0b0000004e616d6553657276696365'] diff --git a/bin/salomeRunner.py b/bin/salomeRunner.py new file mode 100644 index 000000000..9b9343a63 --- /dev/null +++ b/bin/salomeRunner.py @@ -0,0 +1,294 @@ +import os +import sys +import logging + +from parseConfigFile import parseConfigFile +from parseConfigFile import convertEnvFileToConfigFile + +import tempfile +import pickle +import subprocess +import platform + +""" +The SalomeRunner class in an API to configure SALOME environment then +start SALOME using a single python command. + +""" +class SalomeRunner: + """ + Initialize environment from a list of configuration files + identified by their names. + These files should be in appropriate (new .cfg) format. + However you can give old .sh environment files; in this case, + the SalomeRunner class will try to automatically convert them + to .cfg format before setting the environment. + """ + def __init__(self, configFileNames=[]): + for filename in configFileNames: + basename, extension = os.path.splitext(filename) + if extension == ".cfg": + self.__setEnvironmentFromConfigFile(filename) + elif extension == ".sh": + temp = tempfile.NamedTemporaryFile(suffix='.cfg') + try: + convertEnvFileToConfigFile(filename, temp.name) + self.__setEnvironmentFromConfigFile(temp.name) + finally: + # Automatically cleans up the file + temp.close() + else: + self._getLogger().warning("Unrecognized extension for configuration file: %s", filename) + # + + def go(self, args): + # Run this module as a script, in order to use appropriate Python interpreter + # according to current path (initialized from environment files). + absoluteAppliPath = os.environ['ABSOLUTE_APPLI_PATH'] + proc = subprocess.Popen(['python', absoluteAppliPath+'/bin/salome/salomeRunner.py', pickle.dumps(self), pickle.dumps(args)], shell=False, close_fds=True) + proc.wait() + # + + """Append value to PATH environment variable""" + def addToPath(self, value): + self.__addToReserved( 'PATH', value) + # + + """Append value to LD_LIBRARY_PATH environment variable""" + def addToLdLibraryPath(self, value): + self.__addToReserved('LD_LIBRARY_PATH', value) + # + + """Append value to PYTHONPATH environment variable""" + def addToPythonPath(self, value): + self.__addToReserved('PYTHONPATH', value) + # + + """Set environment variable to value""" + def setEnviron(self, name, value, overwrite=False): + env = os.getenv(name, '') + if env and not overwrite: + self._getLogger().warning("Environment variable already existing and not overwritten: %s", name) + return + + if env: + self._getLogger().info("Overwriting environment variable: %s", name) + + value = os.path.expandvars(value) # expand environment variables + self._getLogger().debug("Set environment variable: %s=%s", name, value) + os.environ[name] = value + # + + ################################### + # This begins the private section # + ################################### + + def _usage(self, unused=[]): + exeName = os.path.splitext(os.path.basename(__file__))[0] + + msg = '''\ +Usage: %s [command] [options] [--config=file1,...,filen] + +Commands: + start Launches SALOME virtual application [DEFAULT] + shell Executes a script under SALOME application environment + connect Connects a Python console to the active SALOME session + killall Kill all SALOME running sessions + info Display some information about SALOME + help Show this message + coffee Yes! SALOME can also make coffee!!"\ + +'''%exeName + + print msg + # + + def __parseArguments(self, args): + if len(args) == 0 or args[0].startswith("-"): + return None, args + + command = args[0] + options = args[1:] + + availableCommands = { + 'start' : '_runAppli', + 'shell' : '_runSession', + 'connect' : '_runConsole', + 'killall': '_killAll', + 'info': '_showInfo', + 'help': '_usage', + 'coffee' : '_makeCoffee' + } + + if not command in availableCommands.keys(): + self._getLogger().error("Unrecognized command: %s.", command) + self._usage() + sys.exit(1) + + return availableCommands[command], options + # + + """ + Run SALOME! + Args consist in a mandatory command followed by optionnal parameters. + See usage for details on commands. + """ + def _getStarted(self, args): + command, options = self.__parseArguments(args) + sys.argv = options + + if command is None: + if args and args[0] in ["-h","--help","help"]: + self._usage() + sys.exit(0) + # try to default to "start" command + command = "_runAppli" + + try: + getattr(self, command)(options) # run appropriate method + except AttributeError: + self._getLogger().error("Method %s is not implemented.", command) + sys.exit(1) + # + + def __setEnvironmentFromConfigFile(self, filename): + configVars, reservedDict = parseConfigFile(filename, reserved=['PATH', 'LD_LIBRARY_PATH', 'PYTHONPATH']) + + # set environment + for reserved in reservedDict: + a = filter(None, reservedDict[reserved]) # remove empty elements + reformattedVals = ':'.join(a) + self.__addToReserved(reserved, reformattedVals) + pass + + for key,val in configVars: + self.setEnviron(key, val, overwrite=True) + pass + + sys.path[:0] = os.environ['PYTHONPATH'].split(':') + # + + def __addToReserved(self, name, value): + if value == '': + return + + value = os.path.expandvars(value) # expand environment variables + self._getLogger().debug("Add to %s: %s", name, value) + env = os.getenv(name, None) + if env is None: + os.environ[name] = value + else: + os.environ[name] = value + os.pathsep + env + # + + def _runAppli(self, args=[]): + # Initialize SALOME environment + sys.argv = ['runSalome'] + args + import setenv + setenv.main(True) + + import runSalome + runSalome.runSalome() + # + + def _runSession(self, args=[]): + sys.argv = ['runSession'] + args + import runSession + runSession.configureSession(args) + + import setenv + setenv.main(True) + + if args: + exe = args[0] + # if exe does not contain any slashes (/), search in PATH + # if exe contains slashes: + # if exe begins with a slash, use this absolute path + # else build absolute path relative to current working directory + if (os.sep in exe) and (exe[0] is not os.sep): + args[0] = os.getcwd() + os.sep + exe + + proc = subprocess.Popen(args, shell=False, close_fds=True) + proc.wait() + else: + absoluteAppliPath = os.environ['ABSOLUTE_APPLI_PATH'] + cmd = ["/bin/bash", "--rcfile", absoluteAppliPath + "/.bashrc" ] + proc = subprocess.Popen(cmd, shell=False, close_fds=True) + proc.wait() + # + + def _runConsole(self, args=[]): + # Initialize SALOME environment + sys.argv = ['runConsole'] + args + import setenv + setenv.main(True) + + import runConsole + runConsole.connect() + # + + def _killAll(self, args=[]): + #self._runAppli(['-k'] + args) + from killSalome import killAllPorts + killAllPorts() + # + + def _showInfo(self, args=[]): + print "Running with python", platform.python_version() + self._runAppli(["--version"]) + # + + def _makeCoffee(self, args=[]): + print " (" + print " ) (" + print " ___...(-------)-....___" + print " .-\"\" ) ( \"\"-." + print " .-\'``\'|-._ ) _.-|" + print " / .--.| `\"\"---...........---\"\"` |" + print " / / | |" + print " | | | |" + print " \\ \\ | |" + print " `\\ `\\ | |" + print " `\\ `| |" + print " _/ /\\ /" + print " (__/ \\ /" + print " _..---\"\"` \\ /`\"\"---.._" + print " .-\' \\ / \'-." + print " : `-.__ __.-\' :" + print " : ) \"\"---...---\"\" ( :" + print " \'._ `\"--...___...--\"` _.\'" + print " \\\"\"--..__ __..--\"\"/" + print " \'._ \"\"\"----.....______.....----\"\"\" _.\'" + print " `\"\"--..,,_____ _____,,..--\"\"`" + print " `\"\"\"----\"\"\"`" + sys.exit(0) + # + + # Add the following two methods since logger is not pickable + # Ref: http://stackoverflow.com/questions/2999638/how-to-stop-attributes-from-being-pickled-in-python + def __getstate__(self): + d = dict(self.__dict__) + del d['_logger'] + return d + # + def __setstate__(self, d): + self.__dict__.update(d) # I *think* this is a safe way to do it + # + # Excluding self._logger from pickle operation imply using the following method to access logger + def _getLogger(self): + if not hasattr(self, '_logger'): + self._logger = logging.getLogger(__name__) + #self._logger.setLevel(logging.DEBUG) + return self._logger; + # + +### +import pickle +if __name__ == "__main__": + if len(sys.argv) == 3: + runner = pickle.loads(sys.argv[1]) + args = pickle.loads(sys.argv[2]) + runner._getStarted(args) + else: + SalomeRunner()._usage() +# diff --git a/bin/salome_session.py b/bin/salome_session.py index d2ca5b094..17e984b9e 100644 --- a/bin/salome_session.py +++ b/bin/salome_session.py @@ -36,6 +36,7 @@ _session = None def startSession(modules=[]): global _session if _session: return + from searchFreePort import searchFreePort searchFreePort() _session = SalomeSession(modules) return @@ -51,59 +52,6 @@ def getShortHostName(): from salome_utils import getShortHostName return getShortHostName() -def searchFreePort(): - """ - Search free port for SALOME session. - Returns first found free port number. - """ - print "Searching a free port for naming service:", - from salome_utils import generateFileName, getHostName - hostname = getHostName() - NSPORT = 2810 - limit = NSPORT+100 - while 1: - print "%s "%(NSPORT), - status = os.system("netstat -ltn | grep -E :%s"%(NSPORT)) - if status: - home = os.getenv("HOME") - appli = os.getenv("APPLI") - kwargs={} - if appli is not None: - home = os.path.join(os.path.realpath(home), appli,"USERS") - kwargs["with_username"]=True - omniorb_config = generateFileName(home, prefix="omniORB", - extension="cfg", - hidden=True, - with_hostname=True, - with_port=NSPORT, - **kwargs) - f = open(omniorb_config, "w") - f.write("ORBInitRef NameService=corbaname::%s:%s\n"%(hostname, NSPORT)) - f.close() - os.environ['OMNIORB_CONFIG'] = omniorb_config - last_running_config = generateFileName(home, prefix="omniORB", - suffix="last", - extension="cfg", - hidden=True, - **kwargs) - os.environ['LAST_RUNNING_CONFIG'] = last_running_config - if os.access(last_running_config,os.F_OK): - os.unlink(last_running_config) - pass - os.symlink(omniorb_config,last_running_config) - print "- Ok" - break - if NSPORT == limit: - msg = "" - msg += "Can not find a free port to launch omniNames\n" - msg += "Kill the running servers and try again.\n" - raise RuntimeError, msg - NSPORT = NSPORT+1 - pass - os.environ['NSHOST'] = hostname - os.environ['NSPORT'] = str(NSPORT) - return NSPORT - class SalomeSession(object): """Salome session launcher""" diff --git a/bin/salome_utils.py b/bin/salome_utils.py index 95e87f42c..295b05d24 100644 --- a/bin/salome_utils.py +++ b/bin/salome_utils.py @@ -194,8 +194,11 @@ def getPortNumber(use_default=True): return int( os.getenv( "NSPORT" ) ) except: pass - port = getPortFromORBcfg() - if port is not None: return port + try: + port = int( getPortFromORBcfg() ) + if port is not None: return port + except: + pass if use_default: return 2809 # '2809' is default port number return None diff --git a/bin/searchFreePort.py b/bin/searchFreePort.py new file mode 100644 index 000000000..32d858f31 --- /dev/null +++ b/bin/searchFreePort.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +def searchFreePort(args={}, save_config=1): + """ + Search free port for SALOME session. + Returns first found free port number. + """ + import sys, os, re, shutil + print "Searching for a free port for naming service:", + + # :NOTE: Under windows: + # netstat options -l and -t are unavailable + # grep command is unavailable + + from subprocess import Popen, PIPE + (stdout, stderr) = Popen(['netstat','-an'], stdout=PIPE).communicate() + import StringIO + buf = StringIO.StringIO(stdout) + ports = buf.readlines() + + # + def portIsUsed(port, data): + regObj = re.compile( ".*tcp.*:([0-9]+).*:.*listen", re.IGNORECASE ); + for item in data: + try: + p = int(regObj.match(item).group(1)) + if p == port: return True + pass + except: + pass + pass + return False + # + NSPORT=2810 + limit=NSPORT+100 + # + + while 1: + if not portIsUsed(NSPORT, ports): + print "%s - OK"%(NSPORT) + # + from salome_utils import generateFileName, getHostName + hostname = getHostName() + # + home = os.getenv("HOME") + appli = os.getenv("APPLI") + kwargs={} + if appli is not None: + home = os.path.join(os.path.realpath(home), appli,"USERS") + kwargs["with_username"]=True + # + from ORBConfigFile import writeORBConfigFile + omniorb_config, giopsize = writeORBConfigFile(home, hostname, NSPORT, kwargs) + + args['port'] = os.environ['NSPORT'] + # + if save_config: + last_running_config = generateFileName(home, prefix="omniORB", + suffix="last", + extension="cfg", + hidden=True, + **kwargs) + os.environ['LAST_RUNNING_CONFIG'] = last_running_config + try: + if sys.platform == "win32": + import shutil + shutil.copyfile(omniorb_config, last_running_config) + else: + try: + if os.access(last_running_config, os.F_OK): + os.remove(last_running_config) + except OSError: + pass + os.symlink(omniorb_config, last_running_config) + pass + pass + except: + pass + # + break + print "%s"%(NSPORT), + if NSPORT == limit: + msg = "\n" + msg += "Can't find a free port to launch omniNames\n" + msg += "Try to kill the running servers and then launch SALOME again.\n" + raise RuntimeError, msg + NSPORT=NSPORT+1 + pass + return diff --git a/bin/setenv.py b/bin/setenv.py index 44ac6dbe7..46bc337be 100755 --- a/bin/setenv.py +++ b/bin/setenv.py @@ -172,7 +172,8 @@ def set_env(args, modules_list, modules_root_dir, silent=False): for module in modules_list : if modules_root_dir.has_key(module): module_root_dir = modules_root_dir[module] - modules_root_dir_list[:0] = [module_root_dir] + if module_root_dir not in modules_root_dir_list: + modules_root_dir_list[:0] = [module_root_dir] if sys.platform == "win32": add_path(os.path.join(module_root_dir,get_lib_dir(),salome_subdir), "PATH") diff --git a/bin/shutdownSalome.py b/bin/shutdownSalome.py index b7d319696..ed81e00e8 100755 --- a/bin/shutdownSalome.py +++ b/bin/shutdownSalome.py @@ -27,9 +27,12 @@ # import time -import salome_kernel -orb, lcc, naming_service, cm = salome_kernel.salome_kernel_init() +from omniORB import CORBA +from LifeCycleCORBA import * + +orb = CORBA.ORB_init([''], CORBA.ORB_ID) +lcc = LifeCycleCORBA(orb) lcc.shutdownServers() -#give some time to shutdown to complete time.sleep(1) -salome_kernel.LifeCycleCORBA.killOmniNames() +LifeCycleCORBA.killOmniNames() +time.sleep(1) diff --git a/configure.ac b/configure.ac index 719c66a7d..d3200df43 100644 --- a/configure.ac +++ b/configure.ac @@ -25,7 +25,7 @@ # ================================================================ #AC_PREREQ(2.59) # -AC_INIT([Salome2 Project], [6.5.0], [paul.rascle@edf.fr], [SalomeKERNEL]) +AC_INIT([Salome2 Project], [7.0.0], [paul.rascle@edf.fr], [SalomeKERNEL]) # AC_CONFIG_AUX_DIR defines an alternative directory where to find the auxiliary # scripts such as config.guess, install-sh, ... @@ -532,7 +532,7 @@ sed -i "s%\(\s*\)\(for searchdir in \$searchdirs; do\)%\1for sss in \$searchdirs # This could be helpfull to update de configuration. AC_OUTPUT([ \ KERNEL_version.h \ - salome_adm/unix/SALOMEconfig.ref \ + salome_adm/SALOMEconfig.ref \ salome_adm/Makefile \ salome_adm/cmake_files/Makefile \ salome_adm/unix/Makefile \ diff --git a/bin/runSalome.csh b/doc/CMakeLists.txt similarity index 75% rename from bin/runSalome.csh rename to doc/CMakeLists.txt index a4606fc1d..b7c2d2d0e 100755 --- a/bin/runSalome.csh +++ b/doc/CMakeLists.txt @@ -1,8 +1,4 @@ -#!/bin/csh -f -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -21,4 +17,5 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -runSalome --gui --modules=GEOM,SMESH,VISU,MED --killall +ADD_SUBDIRECTORY(salome) +ADD_SUBDIRECTORY(docutils) \ No newline at end of file diff --git a/doc/Makefile.am b/doc/Makefile.am index 2cdd838a3..bce7733f8 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -29,7 +29,7 @@ include $(top_srcdir)/salome_adm/unix/make_common_starter.am SUBDIRS = salome docutils -EXTRA_DIST = configuration_examples README.cluster-CCRT +EXTRA_DIST += configuration_examples README.cluster-CCRT docs: usr_docs diff --git a/doc/docutils/CMakeLists.txt b/doc/docutils/CMakeLists.txt new file mode 100755 index 000000000..71b6d67fb --- /dev/null +++ b/doc/docutils/CMakeLists.txt @@ -0,0 +1,66 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +SET(SPHINXOPTS +) +SET(SOURCEDIR + ${CMAKE_CURRENT_SOURCE_DIR} +) +SET(PAPEROPT_a4 + -D + latex_paper_size=a4 +) +SET(ALLSPHINXOPTS + -d + doctrees + ${PAPEROPT_a4} + ${SPHINXOPTS} + ${SOURCEDIR} +) + +SALOME_CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in" "${CMAKE_CURRENT_BINARY_DIR}/conf.py") + +IF(WINDOWS) + STRING(REPLACE "/" "\\" SCR "@SET PYTHONPATH=${CMAKE_INSTALL_PREFIX}\\lib\\python2.6\\site-packages\\salome\;%PYTHONPATH% + @SET PYTHONPATH=${CMAKE_INSTALL_PREFIX}\\bin\\salome\;%PYTHONPATH% + @SET PATH=${CMAKE_INSTALL_PREFIX}\\lib\\salome\;%PATH% + @SET PYTHONPATH=${OMNIORB_ROOT_USER}\\lib\\x86_win32\;%PYTHONPATH% + @SET PYTHONPATH=${OMNIORB_ROOT_USER}\\lib\\python\;%PYTHONPATH% + @SET PATH=${OMNIORB_ROOT_USER}\\lib\\x86_win32\;%PATH% + ") + SET(EXT "bat") + SET(CALL_STR "call") +ELSE(WINDOWS) + SET(SCR "export PYTHONPATH=${CMAKE_INSTALL_PREFIX}/lib/python2.6/site-packages/salome:\${PYTHONPATH} + export PYTHONPATH=${CMAKE_INSTALL_PREFIX}/bin/salome:\${PYTHONPATH} + export LD_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX}/lib/salome:\${LD_LIBRARY_PATH} + export PYTHONPATH=${OMNIORB_ROOT_USER}/lib:\${PYTHONPATH} + export PYTHONPATH=${OMNIORB_ROOT_USER}/lib/python2.6/site-packages:\${PYTHONPATH} + export LD_LIBRARY_PATH=${OMNIORB_ROOT_USER}/lib:\${LD_LIBRARY_PATH} + ") + SET(EXT "sh") + SET(CALL_STR ".") +ENDIF(WINDOWS) + +FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/env_s.${EXT} "${SCR}") + +ADD_CUSTOM_TARGET(html_docs ${CALL_STR} ${CMAKE_CURRENT_BINARY_DIR}/env_s.${EXT} && ${SPHINX_EXECUTABLE} -c ${CMAKE_BINARY_DIR}/doc/docutils -b html ${ALLSPHINXOPTS} html + COMMAND ${PYTHON_EXECUTABLE} -c \"import shutil\;shutil.rmtree('''${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/KERNEL/docutils''', True)\;shutil.copytree('''${CMAKE_CURRENT_BINARY_DIR}/html''', '''${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/KERNEL/docutils''')\" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) diff --git a/doc/docutils/Makefile.am b/doc/docutils/Makefile.am index 9764cb727..36acceb96 100644 --- a/doc/docutils/Makefile.am +++ b/doc/docutils/Makefile.am @@ -33,7 +33,7 @@ RSTFILES = \ kernel.rst \ parametric.rst -EXTRA_DIST = archives $(RSTFILES) +EXTRA_DIST += archives $(RSTFILES) SPHINXOPTS = SOURCEDIR = $(srcdir) diff --git a/doc/docutils/archives/KERNEL_Services.txt b/doc/docutils/archives/KERNEL_Services.txt index c848838ee..51bbf9da8 100644 --- a/doc/docutils/archives/KERNEL_Services.txt +++ b/doc/docutils/archives/KERNEL_Services.txt @@ -18,13 +18,13 @@ This document corresponds to SALOME2 3.2.0 ------------------------------------------------------------------------------- In a SALOME application, distributed components, servers and clients use -the CORBA middleware for comunication. CORBA interfaces are defined via idl +the CORBA middleware for communication. CORBA interfaces are defined via idl files. All the different CORBA interfaces are available for users in Python, see CORBA interfaces below. For some general purpose services, CORBA interfaces have been encapsulated in order to provide a simple interface (encapsulation is generally done in -C++ classes, and a Python SWIG interface is also generated from C++, to +C++ classes, and a Python SWIG interface is also generated from C++, to ensure a consistent behavior between C++ modules and Python modules or user script). @@ -53,7 +53,7 @@ In the embedded interpreter, it is already done, but there is no problem to do it several times, so it is preferable to add these instructions systematically in your scripts, to allow them to work in all configurations. -Container and component instanciation +Container and component instantiation ------------------------------------- See LifeCycleCORBA_ for the C++ interface (Python interface obtained with SWIG @@ -67,21 +67,21 @@ in the local container, "FactoryServer", created when SALOME starts:: import salome salome.salome_init() - + import LifeCycleCORBA lcc = LifeCycleCORBA.LifeCycleCORBA() obj=lcc.FindOrLoad_Component("FactoryServer","SalomeTestComponent") - + import Engines comp=obj._narrow(Engines.TestComponent) - + comp.Coucou(1) The answer is something like:: 'TestComponent_i : L = 1' - -The _narrow() instruction is not always mandatory in Python, but sometimes + +The _narrow() instruction is not always mandatory in Python, but sometimes useful to be sure you have got the right type of object. Here, Testcomponent_ interface is defined in CORBA module Engines. With this example, it works also without the _narrow() instruction:: diff --git a/doc/docutils/archives/SALOME_Application.txt b/doc/docutils/archives/SALOME_Application.txt index 0abcaed1e..c77bd6da2 100644 --- a/doc/docutils/archives/SALOME_Application.txt +++ b/doc/docutils/archives/SALOME_Application.txt @@ -26,7 +26,7 @@ General principles A SALOME application is defined by a set of modules (GEOM, SMESH, ASTER...). A SALOME User can define several SALOME Applications. These applications are -runnable from the same user account. These applications may share the same +runnable from the same user account. These applications may share the same KERNEL and modules. Thus, the application configuration is independant of KERNEL and must not be put in KERNEL_ROOT_DIR. @@ -62,7 +62,7 @@ First way - references to different module directories '''''''''''''''''''''''''''''''''''''''''''''''''''''' The script createAppli.sh in ${KERNEL_ROOT_DIR}/bin/salome creates an -application directory with the given path in parameter. ${APPLI} is a path +application directory with the given path in parameter. ${APPLI} is a path relative to ${HOME}. The directory is only a skeleton, the user has to edit several files to @@ -91,7 +91,7 @@ creates a virtual installation of SALOME in the application directory ${APPLI} (bin, lib, doc, share...), with, for each file (executable, script, data, library, resources...), symbolic links to the actual file. -Providing an existing an existing script for SALOME prerequisites (the same one +Providing an existing script for SALOME prerequisites (the same one used for modules compilation, or given with the modules installation), the installation works without further modification for a single computer (unless some modules needs a special environment not defined in the above script). @@ -109,7 +109,7 @@ following the computers). The ${APPLI} directory contains scripts for environment and runs. Environment scripts must be configured (by the user) on each computer. All the environment -scripts are in the ${APPLI}/env.d directory. +scripts are in the ${APPLI}/env.d directory. The script ${APPLI}/envd sources **all** the files (\*.sh) in ${APPLI}/env.d in alphanumeric order (after edition, think to remove backup files). the envd @@ -139,8 +139,8 @@ envSALOME.sh export SalomeAppConfig=${HOME}/${APPLI} - where SalomeAppConfig designates the directory containing SalomeApp.xml. - Note that ${APPLI} is already defined by the calling scripts when + where SalomeAppConfig designates the directory containing SalomeApp.xml. + Note that ${APPLI} is already defined by the calling scripts when env.d/envSalome.sh is sourced. User run scripts @@ -291,7 +291,7 @@ Add an external Python interpretor to a running session It's often easier to develop and try Python scripts outside the GUI embedded Python interpreter. Imagine, for instance, you are writing a script involving geometry and mesh modules. -first, launch a SALOME session with gui, then, on another terminal:: +First, launch a SALOME session with gui, then, on another terminal:: ./runSession python diff --git a/doc/docutils/archives/txt2html.sh b/doc/docutils/archives/txt2html.sh index 45db3d9bf..c6150772e 100755 --- a/doc/docutils/archives/txt2html.sh +++ b/doc/docutils/archives/txt2html.sh @@ -42,6 +42,7 @@ FILELIST="index SALOME_Application INSTALL kernel_resources + KERNEL_Services userguide" STYLESHEET=rst.css diff --git a/doc/docutils/archives/userguide.txt b/doc/docutils/archives/userguide.txt index b7134e840..119aa1581 100644 --- a/doc/docutils/archives/userguide.txt +++ b/doc/docutils/archives/userguide.txt @@ -44,7 +44,7 @@ Module Container definition of a container - + General concepts ================ @@ -92,24 +92,19 @@ Developer's guide - managing the development space - personalisation des procédures de construction Developer' guide - integration tools -==================================== -- Guide de l'intégrateur (développeur de nouveaux modules) -(on lui montre ici le principe de construction et les ressources à -disposition pour faire le travail) +==================================== +- Guide de l'intégrateur (développeur de nouveaux modules) : (on lui montre ici le principe de construction et les ressources à disposition pour faire le travail) - création d'un modules - intégration code boîte noire (perfect, solver) - - intégration bibliothèque de fonctions (hxx2salome, voir avec - N.Crouzet) - - intégration de modèles de données (xdata) + - intégration bibliothèque de fonctions (hxx2salome, voir avec N.Crouzet) + - intégration de modèles de données (xdata) End user's guide ================ - Guide de l'utilisateur - concept d'application (renvoie doc Paul) - - commandes avancées (showNS, exemple de contact de la - session, d'un engine, utilisation du lifeCycle, du module salome, - des modules geompy et smesh) + - commandes avancées (showNS, exemple de contact de la session, d'un engine, utilisation du lifeCycle, du module salome, des modules geompy et smesh) - utilisation en mode distribué (doc de B. Sechet) - GUI and TUI documentation @@ -130,7 +125,7 @@ End user's guide RST Exemples ============ -See INSTALL_ for general information on required configuration and +See INSTALL_ for general information on required configuration and prerequisites, compilation procedure, setting environment principles. .. _INSTALL: ./INSTALL.html diff --git a/bin/waitNS.sh b/doc/salome/CMakeLists.txt similarity index 68% rename from bin/waitNS.sh rename to doc/salome/CMakeLists.txt index b35ab3c28..19bbb94b0 100755 --- a/bin/waitNS.sh +++ b/doc/salome/CMakeLists.txt @@ -1,8 +1,4 @@ -#! /bin/sh -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -21,11 +17,5 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -status=1 -while [ $status -ne 0 ]; do - ls $HOME/$APPLI/USERS/.omniORB_${USER}_last.cfg 2> /dev/null - status=$? - sleep 1 - echo -n "#" -done -./runSession waitNS.py +ADD_SUBDIRECTORY(gui) +ADD_SUBDIRECTORY(tui) \ No newline at end of file diff --git a/doc/salome/Makefile.am b/doc/salome/Makefile.am index a4d7dd4ec..d683bac5a 100644 --- a/doc/salome/Makefile.am +++ b/doc/salome/Makefile.am @@ -39,8 +39,8 @@ dev_docs: echo "Making dev_docs in tui"; \ (cd tui && $(MAKE) $(AM_MAKEFLAGS) dev_docs) -EXTRA_DIST= main.dox install.dox \ +EXTRA_DIST+= main.dox install.dox \ kernel_resources.dox kernel_services.dox kernel_services_cpphelpers.dox \ salome_application.dox unittests.dox \ - salome_file.dox kernel_salome.dox \ + salome_file.dox kernel_salome.dox running_salome.dox \ examples diff --git a/doc/salome/gui/CMakeLists.txt b/doc/salome/gui/CMakeLists.txt new file mode 100755 index 000000000..8bd8df903 --- /dev/null +++ b/doc/salome/gui/CMakeLists.txt @@ -0,0 +1,35 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +SET(top_builddir ${CMAKE_BINARY_DIR}) +SET(top_srcdir ${CMAKE_SOURCE_DIR}) +SET(srcdir ${CMAKE_CURRENT_SOURCE_DIR}) +SET(builddir ${CMAKE_CURRENT_BINARY_DIR}) +SET(datadir ${CMAKE_INSTALL_PREFIX}/share) +SET(docdir ${datadir}/doc/salome) + +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/doxyfile) +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/static/header.html.in ${CMAKE_CURRENT_BINARY_DIR}/static/header.html) + +ADD_CUSTOM_TARGET(usr_docs ${DOXYGEN_EXECUTABLE} + COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/gui/KERNEL''', True); shutil.copytree(r'''${CMAKE_CURRENT_BINARY_DIR}/KERNEL''', r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/gui/KERNEL'''); shutil.copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/head.png''', r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/gui/KERNEL''')" + VERBATIM + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) +ADD_DEPENDENCIES(usr_docs html_docs) diff --git a/doc/salome/gui/Makefile.am b/doc/salome/gui/Makefile.am index f5f8a47db..13cc6565e 100644 --- a/doc/salome/gui/Makefile.am +++ b/doc/salome/gui/Makefile.am @@ -22,7 +22,7 @@ include $(top_srcdir)/salome_adm/unix/make_common_starter.am -EXTRA_DIST = images static/footer.html static/doxygen.css +EXTRA_DIST += images static/footer.html static/doxygen.css guidocdir = $(docdir)/gui/KERNEL guidoc_DATA = images/head.png diff --git a/doc/salome/gui/images/icon_about.png b/doc/salome/gui/images/icon_about.png index fd6640bda76027cc00ef489ac39842148ef6d642..dfdc7e618906cfabcfa9ce8b4ab44b4ab688ec31 100755 GIT binary patch delta 424039 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�~_ultdyRK_F8|Q*Z=$O43&g&?==M@f97Zkbn?% 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

LNh}0EXWd&2PCnIr9qZxDBXxK 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

4WF}N9 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 m-|BDmxB6TCt^WU}|L*|bqgXVQIRK*o0000How to launch %SALOME in a %SALOME application\n - See \ref SALOME_Application. +-# How to launch %SALOME: + - In a %SALOME application, see \ref SALOME_Application. + - Using \c runSalome script, see \subpage running_salome_page -# How to use KERNEL services in Python scripts\n The %SALOME KERNEL offers a list of services available in Python. See \subpage KERNEL_Services. -# How to use KERNEL services from a C++ context\n diff --git a/doc/salome/running_salome.dox b/doc/salome/running_salome.dox new file mode 100644 index 000000000..d6713a336 --- /dev/null +++ b/doc/salome/running_salome.dox @@ -0,0 +1,115 @@ +/*! + +\page running_salome_page Running Salome + +There are two ways to run %SALOME: + +1) Using Salome Application Concept approach. + +For more details see \ref SALOME_Application. + +2) Using \c %runSalome script supplied with %SALOME KERNEL module distribution. + +To launch %SALOME using \c %runSalome script, you have first to +set-up proper environment for %SALOME. If you installed %SALOME using +%SALOME Installation Wizard (Linux), you can use \c salome.sh or +\c salome.csh script (that is located in the \c KERNEL_<version> +directory of your %SALOME installation), for example: + +\code +cd /home/user/salome_6.5.0/KERNEL_6.5.0 +source salome.csh +\endcode + +Launch %SALOME session using the \c %runSalome script located +in the \c SALOME/KERNEL/bin/salome directory: + +\code +runSalome [options] [STUDY_FILE] [PYTHON_FILE [PYTHON_FILE ...]] +\endcode + +Optionally, you can specify in the command line: +- Study (document) file to be opened in %SALOME session passing; +- One or more Python scripts to be executed after %SALOME + start-up. Python scripts will be executed in the new or opened study + in the order they appear in the command line. + +The \c %runSalome script supports large set of options that allow +specifying the way to launch %SALOME session. Complete description of +all options can be obtained using \c --help or -h option: + +\code +runSalome --help +\endcode + +Here below is a description of most important options: + +- \c --help or \c -h + +Print detail help information on the \c %runSalome script. + +- \c --version + +Print version of %SALOME platform. + +- \c --gui or \c -g + +Launch %SALOME sesssion in GUI mode (with GUI desktop). + +- \c --terminal or \c -t + +Launch %SALOME session in terminal mode (without GUI). + +- \c --resources=<file> or \c -r \c <file> + +Parse application settings from the <file> instead of default resource +file. Default resource file is situated in user's home directory; for +example, for %SALOME version 6.5.0, the file is ${HOME}/.config/salome/.SalomeApprc.6.5.0 + +- \c --modules=module1,module2,... or \c -m=module1,module2,... + +Specify the list of modules which will be used in the %SALOME session +being launched. Note, that list of modules is separated be comma +symbols, with no any spaces. + +- \c --xterm or \c -x + +The servers open in separate terminal window and log messages are displayed in this window. + +- --embedded=registry,study,moduleCatalog,cppContainer/ or + -e=registry,study,moduleCatalog,cppContainer + +Run listed %SALOME servers in the GUI embedded mode (default value is +registry,study,moduleCatalog,cppContainer). Note that logger, +pyContainer, and supervContainer servers cannot be embedded to +GUI. Note, that this option implies running %SALOME in GUI mode (\c -g +option); in terminal mode all servers are running in standalone mode. + +- --standalone=registry,study,moduleCatalog,cppContainer,pyContainer,supervContainer or + -s=registry,study,moduleCatalog,cppContainer,pyContainer,supervContainer + +Standalone CORBA servers (default: pyContainer,supervContainer). + +- \c --portkill or \c -p + +Kill %SALOME session launched with the current port. + +- \c --killall or \c -k + +Kill (stop) all running %SALOME sessions before launching new session. + +- \c --splash=<1/0> or \c -z <1/0> + +Use 1 to display splash screen [default] at start-up, 0 to disable +splash screen. This option is ignored in the terminal mode. + +- \c --pinter + +Launch with interactive Python console. + +- --interp=n or -i=n + +Number of additional Python interpreters to open, with session +environment propely set-up. + +*/ diff --git a/doc/salome/tui/CMakeLists.txt b/doc/salome/tui/CMakeLists.txt new file mode 100755 index 000000000..51ce739b3 --- /dev/null +++ b/doc/salome/tui/CMakeLists.txt @@ -0,0 +1,36 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +SET(top_builddir ${CMAKE_BINARY_DIR}) +SET(top_srcdir ${CMAKE_SOURCE_DIR}) +SET(srcdir ${CMAKE_CURRENT_SOURCE_DIR}) +SET(builddir ${CMAKE_CURRENT_BINARY_DIR}) +SET(datadir ${CMAKE_INSTALL_PREFIX}/share) +SET(docdir ${datadir}/doc/salome) + +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/doxyfile) +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/static/header.html.in ${CMAKE_CURRENT_BINARY_DIR}/static/header.html) + +ADD_CUSTOM_TARGET(dev_docs ${DOXYGEN_EXECUTABLE} -u + COMMAND ${DOXYGEN_EXECUTABLE} + COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.remove(r'''${CMAKE_CURRENT_BINARY_DIR}/doxyfile.bak''')" + COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/KERNEL''', True); shutil.copytree(r'''${CMAKE_CURRENT_BINARY_DIR}/KERNEL''', r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/KERNEL'''); shutil.copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/head.png''', r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/KERNEL''')" + VERBATIM + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) diff --git a/doc/salome/tui/Makefile.am b/doc/salome/tui/Makefile.am index eb465301e..d6ea2af93 100644 --- a/doc/salome/tui/Makefile.am +++ b/doc/salome/tui/Makefile.am @@ -27,7 +27,7 @@ # include $(top_srcdir)/salome_adm/unix/make_common_starter.am -EXTRA_DIST = images input static/footer.html static/doxygen.css +EXTRA_DIST += images input static/footer.html static/doxygen.css tuidocdir = $(docdir)/tui/KERNEL tuidoc_DATA = images/head.png diff --git a/doc/salome/tui/doxyfile.in b/doc/salome/tui/doxyfile.in index ae335beb4..973656204 100644 --- a/doc/salome/tui/doxyfile.in +++ b/doc/salome/tui/doxyfile.in @@ -1,32 +1,53 @@ -# Doxyfile 1.4.6 +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "SALOME KERNEL Developer" -PROJECT_NUMBER = +PROJECT_NUMBER = OUTPUT_DIRECTORY = KERNEL CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English USE_WINDOWS_ENCODING = NO BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = NO -ABBREVIATE_BRIEF = +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = ALWAYS_DETAILED_SEC = YES INLINE_INHERITED_MEMB = YES FULL_PATH_NAMES = YES -STRIP_FROM_PATH = @top_builddir@ @top_srcdir@ -STRIP_FROM_INC_PATH = +STRIP_FROM_PATH = @top_srcdir@ @top_builddir@ +STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES +QT_AUTOBRIEF = YES MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 5 -ALIASES = +ALIASES = OPTIMIZE_OUTPUT_FOR_C = YES -OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_OUTPUT_JAVA = YES BUILTIN_STL_SUPPORT = @DOXYGEN_SUPPORT_STL@ DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES @@ -48,18 +69,18 @@ CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES -SORT_MEMBER_DOCS = NO +SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_BY_SCOPE_NAME = YES -GENERATE_TODOLIST = NO -GENERATE_TESTLIST = NO -GENERATE_BUGLIST = NO -GENERATE_DEPRECATEDLIST= NO -ENABLED_SECTIONS = +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 25 SHOW_USED_FILES = NO SHOW_DIRECTORIES = NO -FILE_VERSION_FILTER = +FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages @@ -75,39 +96,41 @@ WARN_LOGFILE = log.txt #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = \ - @top_srcdir@/src/DSC \ - @srcdir@/input -FILE_PATTERNS = *.dox *.idl *.cxx *.hxx *.h *.hh *.i *c *.cc @DOXYGEN_PYTHON_EXTENSION@ +INPUT = @top_srcdir@/src \ + @top_srcdir@/bin \ + @top_srcdir@/idl \ + @top_builddir@/bin \ + @srcdir@/input +FILE_PATTERNS = *.idl *.hxx *.cxx *.h *.c *.hh *.cc @DOXYGEN_PYTHON_EXTENSION@ *.doc RECURSIVE = YES -EXCLUDE = +EXCLUDE = EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXAMPLE_PATH = -EXAMPLE_PATTERNS = +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = EXAMPLE_RECURSIVE = NO -IMAGE_PATH = -INPUT_FILTER = -FILTER_PATTERNS = -FILTER_SOURCE_FILES = NO +IMAGE_PATH = @srcdir@/images +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = YES #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- -SOURCE_BROWSER = NO -INLINE_SOURCES = NO +SOURCE_BROWSER = YES +INLINE_SOURCES = YES STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = NO +REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES -USE_HTAGS = NO +#USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES -COLS_IN_ALPHA_INDEX = 3 -IGNORE_PREFIX = +COLS_IN_ALPHA_INDEX = 2 +IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output @@ -120,8 +143,8 @@ HTML_FOOTER = @srcdir@/static/footer.html HTML_STYLESHEET = @srcdir@/static/doxygen.css HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO -CHM_FILE = -HHC_LOCATION = +CHM_FILE = +HHC_LOCATION = GENERATE_CHI = NO BINARY_TOC = YES TOC_EXPAND = YES @@ -139,8 +162,8 @@ LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = +EXTRA_PACKAGES = +LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO @@ -153,8 +176,8 @@ GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output @@ -169,8 +192,8 @@ MAN_LINKS = NO #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = +XML_SCHEMA = +XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- @@ -184,59 +207,59 @@ GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = +PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- -# Configuration options related to the preprocessor +# Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = -EXPAND_AS_DEFINED = +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = NO #--------------------------------------------------------------------------- -# Configuration::additions related to external references +# Configuration::additions related to external references #--------------------------------------------------------------------------- -TAGFILES = -GENERATE_TAGFILE = +TAGFILES = +GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- -# Configuration options related to the dot tool +# Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES HIDE_UNDOC_RELATIONS = NO HAVE_DOT = YES CLASS_GRAPH = YES -COLLABORATION_GRAPH = YES -GROUP_GRAPHS = NO -UML_LOOK = YES +COLLABORATION_GRAPH = NO +GROUP_GRAPHS = YES +UML_LOOK = NO TEMPLATE_RELATIONS = YES INCLUDE_GRAPH = YES -INCLUDED_BY_GRAPH = NO +INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_FONTNAME = Arial -DOT_PATH = -DOTFILE_DIRS = +DOT_PATH = +DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1200 +MAX_DOT_GRAPH_HEIGHT = 1000 MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO -GENERATE_LEGEND = NO +GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- -# Configuration::additions related to the search engine +# Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO diff --git a/idl/CMakeLists.txt b/idl/CMakeLists.txt new file mode 100755 index 000000000..8dc0b75a9 --- /dev/null +++ b/idl/CMakeLists.txt @@ -0,0 +1,95 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/UseOMNIORB.cmake) + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_CURRENT_BINARY_DIR} +) + +CONFIGURE_FILE(Calcium_Ports.idl.in Calcium_Ports.idl @ONLY) + +SET(SalomeIDLKernel_IDLSOURCES + SALOME_Exception.idl + SALOME_Comm.idl + SALOME_ModuleCatalog.idl + SALOME_RessourcesCatalog.idl + SALOMEDS.idl + SALOMEDS_Attributes.idl + SALOME_Component.idl + SALOME_ContainerManager.idl + SALOME_Registry.idl + Logger.idl + SALOME_GenericObj.idl + SALOME_Types.idl + SALOME_Session.idl + nstest.idl + DSC_Engines.idl + SALOME_Ports.idl + SALOME_PyNode.idl + Palm_Ports.idl + SALOME_PACOExtension.idl + SALOME_ParamPorts.idl + SALOME_Parametric.idl + SALOME_MPIObject.idl + SALOME_TestComponent.idl + SALOME_TestModuleCatalog.idl + ${CMAKE_CURRENT_BINARY_DIR}/Calcium_Ports.idl +) + +IF(MPI_IS_OK) + SET(SalomeIDLKernel_IDLSOURCES ${SalomeIDLKernel_IDLSOURCES} SALOME_MPIContainer.idl SALOME_TestMPIComponent.idl) +ENDIF(MPI_IS_OK) + +SET(IDL_INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} +) + +SET(COMMON_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +SET(TYPE) +IF(WINDOWS) + SET(COMMON_FLAGS "${COMMON_FLAGS} -DNOGDI") + SET(TYPE STATIC) +ELSE(WINDOWS) + SET(TYPE SHARED) +ENDIF(WINDOWS) + +OMNIORB_ADD_MODULE(SalomeIDLKernel "${SalomeIDLKernel_IDLSOURCES}" "${IDL_INCLUDE_DIRS}" ${TYPE}) +TARGET_LINK_LIBRARIES(SalomeIDLKernel ${CORBA_LIBS}) +SET_TARGET_PROPERTIES(SalomeIDLKernel PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") + +INSTALL(TARGETS SalomeIDLKernel DESTINATION ${KERNEL_salomelib_LIBS}) + +IF(WITH_PACO_PARALLEL) + SET(SalomeParallelIDLKernel_IDLSOURCES + SALOME_ComponentPaCO.idl + SALOME_PortsPaCO.idl + DSC_EnginesPaCO.idl + SALOME_ParamPortsPaCO.idl + SALOME_PACOExtensionPaCO.idl + SALOME_GenericObjPaCO.idl + ) + OMNIORB_ADD_MODULE(SalomeParallelIDLKernel "${SalomeIDLKernel_IDLSOURCES}" "${IDL_INCLUDE_DIRS}") + TARGET_LINK_LIBRARIES(SalomeParallelIDLKernel ${CORBA_LIBS}) + SET_TARGET_PROPERTIES(SalomeParallelIDLKernel PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") + + INSTALL(TARGETS SalomeParallelIDLKernel DESTINATION ${KERNEL_salomelib_LIBS}) +ENDIF(WITH_PACO_PARALLEL) diff --git a/idl/Makefile.am b/idl/Makefile.am index 1347ad5e0..cf953c8e7 100644 --- a/idl/Makefile.am +++ b/idl/Makefile.am @@ -69,7 +69,7 @@ OTHER_IDL_FILES = \ TypeData.idl # all the idl files are needed for make dist -EXTRA_DIST= $(BASEIDL_FILES) $(MPIIDL_FILES) $(OTHER_IDL_FILES) \ +EXTRA_DIST += $(BASEIDL_FILES) $(MPIIDL_FILES) $(OTHER_IDL_FILES) \ SALOME_Component.xml DSC_Engines.xml SALOME_Ports.xml \ SALOME_PACOExtension.xml SALOME_ParamPorts.xml \ SALOME_GenericObj.xml SALOME_Exception.xml diff --git a/idl/SALOMEDS_Attributes.idl b/idl/SALOMEDS_Attributes.idl index fbc70d655..9941794cb 100644 --- a/idl/SALOMEDS_Attributes.idl +++ b/idl/SALOMEDS_Attributes.idl @@ -1650,6 +1650,27 @@ module SALOMEDS \return units */ string GetUnits(); + + /*! + \brief Returns list of components which data was stored + (after previous sessions) in the study. + \return list of component names + */ + StringSeq GetStoredComponents(); + + /*! + \brief Returns version of component data stored in the study + \param comp component name + \return version of stored component data + */ + string GetComponentVersion( in string comp ); + + /*! + \brief Returns all versions of component data stored in the study + \param comp component name + \return versions of stored component data + */ + StringSeq GetComponentVersions( in string comp ); }; //========================================================================== diff --git a/idl/SALOME_Component.idl b/idl/SALOME_Component.idl index 9d55e154b..4a1701ddf 100644 --- a/idl/SALOME_Component.idl +++ b/idl/SALOME_Component.idl @@ -453,6 +453,17 @@ module Engines \return an information about the given object. */ string getObjectInfo(in long studyId, in string entry); + + //! Get version of the component + /*! + This method is supposed to be implemented in all derived classes; default implementation + returns "unknown" string that means that no version information about the component is available. + \note The version of the component is stored to the study, as a part of general persistence + mechanism; once stored, version information in the study cannot be changed. + + \return string containing component's version, e.g. "1.0" + */ + string getVersion(); } ; /*! diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt new file mode 100755 index 000000000..d14075949 --- /dev/null +++ b/resources/CMakeLists.txt @@ -0,0 +1,40 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# =============================================================== +# Files to be installed +# =============================================================== + +# These files are data, module or lib files +INSTALL(FILES CatalogModulePersonnel.xml_skel DESTINATION ${KERNEL_salomeres_DATA}) + +CONFIGURE_FILE(CatalogResources.xml.in CatalogResources.xml @ONLY) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/CatalogResources.xml DESTINATION ${KERNEL_salomeres_DATA}) + +IF(NOT WITHONLYLAUNCHER) + INSTALL(FILES channel.cfg SALOMEDS_Resources DESTINATION ${KERNEL_salomeres_DATA}) + + CONFIGURE_FILE(KERNELCatalog.xml.in KERNELCatalog.xml @ONLY) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/KERNELCatalog.xml DESTINATION ${KERNEL_salomeres_DATA}) + +ENDIF(NOT WITHONLYLAUNCHER) + + + + diff --git a/resources/Makefile.am b/resources/Makefile.am index 1e746e530..1881203ef 100644 --- a/resources/Makefile.am +++ b/resources/Makefile.am @@ -52,4 +52,4 @@ else KERNELCatalog.xml endif -EXTRA_DIST = CatalogDataType.xml +EXTRA_DIST += CatalogDataType.xml diff --git a/salome_adm/CMakeLists.txt b/salome_adm/CMakeLists.txt new file mode 100755 index 000000000..6085559b6 --- /dev/null +++ b/salome_adm/CMakeLists.txt @@ -0,0 +1,24 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +ADD_SUBDIRECTORY(unix) +ADD_SUBDIRECTORY(cmake_files) + +SALOME_CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/SALOMEconfig.ref.in" "${CMAKE_CURRENT_BINARY_DIR}/SALOMEconfig.h" INSTALL ${KERNEL_salomeinclude_HEADERS}) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/SALOMEconfig.ref.in DESTINATION salome_adm/unix RENAME SALOMEconfig.h.in) \ No newline at end of file diff --git a/salome_adm/Makefile.am b/salome_adm/Makefile.am index 01b7790d5..c58a20c5a 100644 --- a/salome_adm/Makefile.am +++ b/salome_adm/Makefile.am @@ -19,6 +19,29 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +include $(top_srcdir)/salome_adm/unix/make_common_starter.am SUBDIRS = unix cmake_files AUTOMAKE_OPTIONS=filename-length-max=255 + +# rules for install and build (see make_common_starter.am) +salomeadmux_DATA = SALOMEconfig.h.in +salomeinclude_DATA = SALOMEconfig.h +BUILT_SOURCES=SALOMEconfig.ref SALOMEconfig.h SALOMEconfig.h.in + +mostlyclean-local: + -rm -rf SALOMEconfig.h SALOMEconfig.h.in + +SALOMEconfig.h.in : SALOMEconfig.ref.in + cp -pf $< $@; + +# test if SALOMEconfig.ref has changed (contents), at build time +SALOMEconfig.h: $(top_builddir)/salome_adm/SALOMEconfig.ref + @if ! [ -a $@ ]; then \ + echo cp -pf $< $@; \ + cp -pf $< $@; \ + fi; \ + if ! cmp -s $< $@; then \ + echo cp -pf $< $@; \ + cp -pf $< $@; \ + fi; diff --git a/salome_adm/SALOMEconfig.ref.in b/salome_adm/SALOMEconfig.ref.in new file mode 100755 index 000000000..8db6100ef --- /dev/null +++ b/salome_adm/SALOMEconfig.ref.in @@ -0,0 +1,65 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +/* Debug mode ??? */ +#ifndef DEBUG +# define DEBUG +#endif + +/* CORBA headers include rules */ +#ifndef CORBA_CLIENT_HEADER +# define QUOTE(x) #x +# define CORBA_CLIENT_HEADER(x) QUOTE(x@IDL_CLN_H@) +# define CORBA_SERVER_HEADER(x) QUOTE(x@IDL_SRV_H@) +#endif + +/* Platform definition */ +#ifndef @MACHINE@ + #define @MACHINE@ +#endif + +// This is only to suppress warning messages with defines redefined (cause of omniORB that exports these names) +#ifdef PACKAGE +#undef PACKAGE +#endif +#ifdef PACKAGE_BUGREPORT +#undef PACKAGE_BUGREPORT +#endif +#ifdef PACKAGE_NAME +#undef PACKAGE_NAME +#endif +#ifdef PACKAGE_STRING +#undef PACKAGE_STRING +#endif +#ifdef PACKAGE_TARNAME +#undef PACKAGE_TARNAME +#endif +#ifdef PACKAGE_VERSION +#undef PACKAGE_VERSION +#endif +#ifdef VERSION +#undef VERSION +#endif + +#ifdef _POSIX_C_SOURCE +#undef _POSIX_C_SOURCE +#endif diff --git a/salome_adm/cmake_files/CMakeLists.txt b/salome_adm/cmake_files/CMakeLists.txt new file mode 100755 index 000000000..d78a6f18d --- /dev/null +++ b/salome_adm/cmake_files/CMakeLists.txt @@ -0,0 +1,50 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# =============================================================== +# Files to be installed +# =============================================================== + +# These files are data, module or lib files +SET(DATA + am2cmake.py + FindBOOST.cmake + FindCPPUNIT.cmake + FindDOXYGEN.cmake + FindHDF5.cmake + FindKERNEL.cmake + FindLIBBATCH.cmake + FindLIBXML2.cmake + FindMPI.cmake + FindOMNIORB.cmake + UseOMNIORB.cmake + FindPLATFORM.cmake + FindPTHREADS.cmake + FindPYTHON.cmake + FindSWIG.cmake + FindSPHINX.cmake + install_python_from_idl.cmake + install_and_compile_python_file.cmake + InstallAndCompilePythonFile.cmake + SalomeMacros.cmake +) +INSTALL(FILES ${DATA} DESTINATION ${KERNEL_salomeadmcmake}) + +# These files are executable scripts +SALOME_INSTALL_SCRIPTS(prepare_generating_doc.py ${KERNEL_salomescript_SCRIPTS}) diff --git a/salome_adm/cmake_files/FindCPPUNIT.cmake b/salome_adm/cmake_files/FindCPPUNIT.cmake index 4193644cd..91594a7f8 100644 --- a/salome_adm/cmake_files/FindCPPUNIT.cmake +++ b/salome_adm/cmake_files/FindCPPUNIT.cmake @@ -52,9 +52,13 @@ ENDIF(WITHOUT_CPPUNIT OR WITH_CPPUNIT STREQUAL 0) IF(CPPUNIT_STATUS) IF(WITH_CPPUNIT) SET(CPPUNIT_ROOT_USER ${WITH_CPPUNIT}) - ELSE(WITH_CPPUNIT) - SET(CPPUNIT_ROOT_USER $ENV{CPPUNIT_ROOT}) ENDIF(WITH_CPPUNIT) + IF(NOT CPPUNIT_ROOT_USER) + SET(CPPUNIT_ROOT_USER $ENV{CPPUNIT_ROOT}) + ENDIF(NOT CPPUNIT_ROOT_USER) + IF(NOT CPPUNIT_ROOT_USER) + SET(CPPUNIT_ROOT_USER $ENV{CPPUNITHOME}) + ENDIF(NOT CPPUNIT_ROOT_USER) ENDIF(CPPUNIT_STATUS) # ----- @@ -92,7 +96,7 @@ IF(CPPUNIT_STATUS) IF(CPPUNIT_ROOT_USER) MESSAGE(STATUS "${CPPUNIT_INCLUDE_TO_FIND} not found in ${CPPUNIT_INCLUDE_PATHS}, check your CPPUNIT installation.") ELSE(CPPUNIT_ROOT_USER) - MESSAGE(STATUS "${CPPUNIT_INCLUDE_TO_FIND} not found on system, try to use WITH_CPPUNIT option or CPPUNIT_ROOT environment variable.") + MESSAGE(STATUS "${CPPUNIT_INCLUDE_TO_FIND} not found on system, try to use WITH_CPPUNIT option or CPPUNIT_ROOT (or CPPUNITHOME) environment variable.") ENDIF(CPPUNIT_ROOT_USER) ENDIF(CPPUNIT_INCLUDE_DIR) ENDIF(CPPUNIT_STATUS) diff --git a/salome_adm/cmake_files/FindLIBBATCH.cmake b/salome_adm/cmake_files/FindLIBBATCH.cmake index 6ebfb6891..aee305de4 100644 --- a/salome_adm/cmake_files/FindLIBBATCH.cmake +++ b/salome_adm/cmake_files/FindLIBBATCH.cmake @@ -79,7 +79,8 @@ IF(LIBBATCH_STATUS) FIND_PATH(LIBBATCH_INCLUDE_DIR ${LIBBATCH_INCLUDE_TO_FIND} PATHS ${LIBBATCH_INCLUDE_PATHS} ${LIBBATCH_FIND_PATHS_OPTION}) IF(LIBBATCH_INCLUDE_DIR) IF(LIBBATCH_ROOT_USER) - SET(LIBBATCH_INCLUDES -I${LIBBATCH_INCLUDE_DIR}) + SET(LIBBATCH_INCLUDES -I${LIBBATCH_INCLUDE_DIR}) # to be removed + SET(LIBBATCH_INCLUDE_DIRS ${LIBBATCH_INCLUDE_DIR}) ENDIF(LIBBATCH_ROOT_USER) MESSAGE(STATUS "${LIBBATCH_INCLUDE_TO_FIND} found in ${LIBBATCH_INCLUDE_DIR}") ELSE(LIBBATCH_INCLUDE_DIR) diff --git a/salome_adm/cmake_files/FindMPI.cmake b/salome_adm/cmake_files/FindMPI.cmake index 8818c5fac..a0b4af227 100644 --- a/salome_adm/cmake_files/FindMPI.cmake +++ b/salome_adm/cmake_files/FindMPI.cmake @@ -81,12 +81,14 @@ IF(MPI_STATUS) ENDIF(NOT MPI_INCLUDES) GET_FILENAME_COMPONENT(MPI_ROOT ${MPI_INCLUDES} PATH) ENDIF(MPI_ROOT_USER) - - MESSAGE(STATUS "MPI include ${MPI_INCLUDE_TO_FIND} found in ${MPI_INCLUDES}") - SET(MPI_INCLUDE_DIR ${MPI_INCLUDES}) - SET(MPI_INCLUDE_DIRS ${MPI_INCLUDES}) - SET(MPI_INCLUDES -I${MPI_INCLUDES})# to remove + IF(MPI_INCLUDES) + MESSAGE(STATUS "MPI include ${MPI_INCLUDE_TO_FIND} found in ${MPI_INCLUDES}") + + SET(MPI_INCLUDE_DIR ${MPI_INCLUDES}) + SET(MPI_INCLUDE_DIRS ${MPI_INCLUDES}) + SET(MPI_INCLUDES -I${MPI_INCLUDES})# to remove + ENDIF(MPI_INCLUDES) # ------ diff --git a/salome_adm/cmake_files/FindPLATFORM.cmake b/salome_adm/cmake_files/FindPLATFORM.cmake index b6a36caca..fa06d0ec3 100644 --- a/salome_adm/cmake_files/FindPLATFORM.cmake +++ b/salome_adm/cmake_files/FindPLATFORM.cmake @@ -79,29 +79,55 @@ IF(CMAKE_BUILD_TYPE) ENDIF(WINDOWS) ENDIF(CMAKE_BUILD_TYPE) -SET(PLATFORM_CPPFLAGS) -SET(PLATFORM_LDFLAGS) -SET(PLATFORM_LIBADD) +SET(PLATFORM_CPPFLAGS) # to be removed +SET(PLATFORM_LDFLAGS) # to be removed +SET(PLATFORM_LIBADD) # to be removed + +SET(PLATFORM_LIBS) +SET(PLATFORM_DEFINITIONS) + IF(WINDOWS) - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} /W0) - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_CRT_SECURE_NO_WARNINGS) # To disable windows warnings for strcpy, fopen, ... - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_SCL_SECURE_NO_WARNINGS) # To disable windows warnings std::copy, std::transform, ... - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -DWNT) - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -DPPRO_NT) # For medfile - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_USE_MATH_DEFINES) # At least for MEDMEM - SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_WIN32_WINNT=0x0500) # Windows 2000 or later API is required - SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} Ws2_32.lib) - SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} Userenv.lib) # At least for GEOM suit + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} /W0) # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_CRT_SECURE_NO_WARNINGS) # To disable windows warnings for strcpy, fopen, ... # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_SCL_SECURE_NO_WARNINGS) # To disable windows warnings std::copy, std::transform, ... # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -DWNT) # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -DPPRO_NT) # For medfile # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_USE_MATH_DEFINES) # At least for MEDMEM # to be removed + SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -D_WIN32_WINNT=0x0500) # Windows 2000 or later API is required # to be removed + SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} Ws2_32.lib) # to be removed + SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} Userenv.lib) # At least for GEOM suit # to be removed + + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} /W0") + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -D_CRT_SECURE_NO_WARNINGS") # To disable windows warnings for strcpy, fopen, ... + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -D_SCL_SECURE_NO_WARNINGS") # To disable windows warnings std::copy, std::transform, ... + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -DWNT") + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -DPPRO_NT") # For medfile + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -D_USE_MATH_DEFINES") # At least for MEDMEM + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -D_WIN32_WINNT=0x0500") # Windows 2000 or later API is required + SET(PLATFORM_LIBS ${PLATFORM_LIBS} Ws2_32.lib) + SET(PLATFORM_LIBS ${PLATFORM_LIBS} Userenv.lib) # At least for GEOM suit + + IF("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") # if platform is Windows 64 bit + SET(PLATFORM_CPPFLAGS "${PLATFORM_CPPFLAGS} -D_SECURE_SCL=0 -D_SECURE_SCL_THROWS=0 -D_HAS_ITERATOR_DEBUGGING=0") # To avoid runtime error during checking iterators # to be removed + SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -D_SECURE_SCL=0 -D_SECURE_SCL_THROWS=0 -D_HAS_ITERATOR_DEBUGGING=0") # To avoid runtime error during checking iterators + ENDIF("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") ELSE(WINDOWS) # SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -Wparentheses) # SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -Wreturn-type) # SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -Wmissing-declarations) # SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -Wunused) # SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -Wall) - SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} -ldl) + SET(PLATFORM_LIBADD ${PLATFORM_LIBADD} -ldl) # to be removed + SET(PLATFORM_LIBS ${PLATFORM_LIBS} -ldl) ENDIF(WINDOWS) -SET(PLATFORM_CPPFLAGS ${PLATFORM_CPPFLAGS} -DSIZEOF_FORTRAN_INTEGER=4 -DSIZEOF_LONG=${CMAKE_SIZEOF_VOID_P} -DSIZEOF_INT=4) +SET(SIZE_OF_LONG ${CMAKE_SIZEOF_VOID_P}) # set sizeof(long) the same as size of pointers, because on all memory models (EXCLUDING WINDOWS 64 bit) it is equivalent values +IF("${CMAKE_SIZEOF_VOID_P}" EQUAL "8" AND WINDOWS) # if it platform Windows 64 bit + SET(SIZE_OF_LONG "4") # set sizeof(long) to 4 byte +ENDIF("${CMAKE_SIZEOF_VOID_P}" EQUAL "8" AND WINDOWS) + +SET(PLATFORM_CPPFLAGS "${PLATFORM_CPPFLAGS} -DSIZEOF_FORTRAN_INTEGER=4 -DSIZEOF_LONG=${SIZE_OF_LONG} -DSIZEOF_INT=4") # to be removed +SET(PLATFORM_DEFINITIONS "${PLATFORM_DEFINITIONS} -DSIZEOF_FORTRAN_INTEGER=4 -DSIZEOF_LONG=${SIZE_OF_LONG} -DSIZEOF_INT=4") SET(COMPILATION_WITH_CMAKE ON) diff --git a/salome_adm/cmake_files/FindPTHREADS.cmake b/salome_adm/cmake_files/FindPTHREADS.cmake index f9ba97e55..ce8231e4a 100644 --- a/salome_adm/cmake_files/FindPTHREADS.cmake +++ b/salome_adm/cmake_files/FindPTHREADS.cmake @@ -79,7 +79,8 @@ IF(PTHREADS_STATUS) FIND_PATH(PTHREADS_INCLUDE_DIR ${PTHREADS_INCLUDE_TO_FIND} PATHS ${PTHREADS_INCLUDE_PATHS} ${PTHREADS_FIND_PATHS_OPTION}) IF(PTHREADS_INCLUDE_DIR) IF(PTHREADS_ROOT_USER) - SET(PTHREAD_CFLAGS -I${PTHREADS_INCLUDE_DIR}) + SET(PTHREAD_CFLAGS -I${PTHREADS_INCLUDE_DIR}) # to remove + SET(PTHREAD_INCLUDE_DIRS ${PTHREADS_INCLUDE_DIR}) ENDIF(PTHREADS_ROOT_USER) MESSAGE(STATUS "${PTHREADS_INCLUDE_TO_FIND} found in ${PTHREADS_INCLUDE_DIR}") ELSE(PTHREADS_INCLUDE_DIR) diff --git a/salome_adm/cmake_files/FindSPHINX.cmake b/salome_adm/cmake_files/FindSPHINX.cmake index 354b8194d..b8f972b17 100755 --- a/salome_adm/cmake_files/FindSPHINX.cmake +++ b/salome_adm/cmake_files/FindSPHINX.cmake @@ -75,7 +75,14 @@ IF(SPHINX_STATUS) FIND_PROGRAM(SPHINX_EXECUTABLE ${SPHINX_EXECUTABLE_TO_FIND}) ENDIF(SPHINX_ROOT_USER) IF(SPHINX_EXECUTABLE) - MESSAGE(STATUS "${SPHINX_EXECUTABLE_TO_FIND} found: ${SPHINX_EXECUTABLE}") + EXECUTE_PROCESS(COMMAND ${SPHINX_EXECUTABLE} -v ERROR_VARIABLE STATUS_CHECK_SPHINX) + STRING(REGEX MATCH "^Sphinx v[0-9]+\\.[0-9]+\\.[0-9]+" IS_SPHINX_USABLE ${STATUS_CHECK_SPHINX}) + IF(IS_SPHINX_USABLE) + MESSAGE(STATUS "${SPHINX_EXECUTABLE_TO_FIND} found: ${SPHINX_EXECUTABLE}") + ELSE(IS_SPHINX_USABLE) + MESSAGE(STATUS "${SPHINX_EXECUTABLE_TO_FIND} found but NOT usable ! Check coherency between your python and Sphinx ! Sphinx DISABLED !") + SET(SPHINX_STATUS 0) + ENDIF(IS_SPHINX_USABLE) ELSE(SPHINX_EXECUTABLE) MESSAGE(STATUS "${SPHINX_EXECUTABLE_TO_FIND} not found, try to use WITH_SPHINX option or SPHINX_ROOT (or SPHINXHOME) environment variable") SET(SPHINX_STATUS 0) diff --git a/salome_adm/cmake_files/Makefile.am b/salome_adm/cmake_files/Makefile.am index b21d38c4e..22ede73e6 100644 --- a/salome_adm/cmake_files/Makefile.am +++ b/salome_adm/cmake_files/Makefile.am @@ -39,6 +39,7 @@ FindPTHREADS.cmake \ FindPYTHON.cmake \ FindSWIG.cmake \ FindSPHINX.cmake \ +SalomeMacros.cmake \ install_python_from_idl.cmake \ install_and_compile_python_file.cmake \ InstallAndCompilePythonFile.cmake diff --git a/salome_adm/cmake_files/SalomeMacros.cmake b/salome_adm/cmake_files/SalomeMacros.cmake new file mode 100755 index 000000000..b96926dff --- /dev/null +++ b/salome_adm/cmake_files/SalomeMacros.cmake @@ -0,0 +1,163 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +#---------------------------------------------------------------------------- +# LIST_CONTAINS is a macro useful for determining whether a list has a +# particular entry +#---------------------------------------------------------------------------- +MACRO(LIST_CONTAINS var value) + SET(${var}) + FOREACH(value2 ${ARGN}) + IF(${value} STREQUAL "${value2}") + SET(${var} TRUE) + ENDIF (${value} STREQUAL "${value2}") + ENDFOREACH (value2) +ENDMACRO(LIST_CONTAINS) + +#---------------------------------------------------------------------------- +# The PARSE_ARGUMENTS macro will take the arguments of another macro and +# define several variables. +# +# USAGE: PARSE_ARGUMENTS(prefix arg_names options arg1 arg2...) +# +# ARGUMENTS: +# +# prefix: IN: a prefix to put on all variables it creates. +# +# arg_names: IN: a list of names. +# For each item in arg_names, PARSE_ARGUMENTS will create a +# variable with that name, prefixed with prefix_. Each variable will be filled +# with the arguments that occur after the given arg_name is encountered +# up to the next arg_name or the end of the arguments. All options are +# removed from these lists. PARSE_ARGUMENTS also creates a +# prefix_DEFAULT_ARGS variable containing the list of all arguments up +# to the first arg_name encountered. +# +# options: IN: a list of options. +# For each item in options, PARSE_ARGUMENTS will create a +# variable with that name, prefixed with prefix_. So, for example, if prefix is +# MY_MACRO and options is OPTION1;OPTION2, then PARSE_ARGUMENTS will +# create the variables MY_MACRO_OPTION1 and MY_MACRO_OPTION2. These +# variables will be set to true if the option exists in the command line +# or false otherwise. +# arg_names and options lists should be quoted. +# +# The rest of PARSE_ARGUMENTS are arguments from another macro to be parsed. +#---------------------------------------------------------------------------- +MACRO(PARSE_ARGUMENTS prefix arg_names option_names) + SET(DEFAULT_ARGS) + FOREACH(arg_name ${arg_names}) + SET(${prefix}_${arg_name}) + ENDFOREACH(arg_name) + FOREACH(option ${option_names}) + SET(${prefix}_${option} FALSE) + ENDFOREACH(option) + SET(current_arg_name DEFAULT_ARGS) + SET(current_arg_list) + FOREACH(arg ${ARGN}) + LIST_CONTAINS(is_arg_name ${arg} ${arg_names}) + IF (is_arg_name) + SET(${prefix}_${current_arg_name} ${current_arg_list}) + SET(current_arg_name ${arg}) + SET(current_arg_list) + ELSE (is_arg_name) + LIST_CONTAINS(is_option ${arg} ${option_names}) + IF (is_option) + SET(${prefix}_${arg} TRUE) + ELSE (is_option) + SET(current_arg_list ${current_arg_list} ${arg}) + ENDIF (is_option) + ENDIF (is_arg_name) + ENDFOREACH(arg) + SET(${prefix}_${current_arg_name} ${current_arg_list}) +ENDMACRO(PARSE_ARGUMENTS) + +#---------------------------------------------------------------------------- +# SALOME_INSTALL_SCRIPTS is a macro useful for installing scripts. +# +# USAGE: SALOME_INSTALL_SCRIPTS(file_list path [WORKING_DIRECTORY dir] [DEF_PERMS]) +# +# ARGUMENTS: +# file_list: IN : list of files to be installed. This list should be quoted. +# path: IN : full pathname for installing. +# +# By default files to be installed as executable scripts. +# If DEF_PERMS option is provided, than permissions for installed files are +# only OWNER_WRITE, OWNER_READ, GROUP_READ, and WORLD_READ. +#---------------------------------------------------------------------------- +MACRO(SALOME_INSTALL_SCRIPTS file_list path) + PARSE_ARGUMENTS(SALOME_INSTALL_SCRIPTS "WORKING_DIRECTORY" "DEF_PERMS" ${ARGN}) + SET(PERMS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) + IF(NOT SALOME_INSTALL_SCRIPTS_DEF_PERMS) + SET(PERMS ${PERMS} OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE) + ENDIF(NOT SALOME_INSTALL_SCRIPTS_DEF_PERMS) + FOREACH(file ${file_list}) + SET(PREFIX "") + IF(SALOME_INSTALL_SCRIPTS_WORKING_DIRECTORY) + SET(PREFIX "${SALOME_INSTALL_SCRIPTS_WORKING_DIRECTORY}/") + ENDIF(SALOME_INSTALL_SCRIPTS_WORKING_DIRECTORY) + INSTALL(FILES ${PREFIX}${file} DESTINATION ${path} PERMISSIONS ${PERMS}) + GET_FILENAME_COMPONENT(ext ${file} EXT) + IF(ext STREQUAL .py) + INSTALL(CODE "MESSAGE(STATUS \"py compiling ${CMAKE_INSTALL_PREFIX}/${path}/${file}\")") + INSTALL(CODE "SET(CMD \"import py_compile ; py_compile.compile('${CMAKE_INSTALL_PREFIX}/${path}/${file}')\")") + INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c \"\${CMD}\")") + INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -O -c \"\${CMD}\")") + ENDIF(ext STREQUAL .py) + ENDFOREACH(file ${file_list}) +ENDMACRO(SALOME_INSTALL_SCRIPTS) + +#---------------------------------------------------------------------------- +# SALOME_INSTALL_SCRIPTS is a macro useful for installing executable scripts. +# ARGUMENTS: +# PYFILE2COMPINST: IN : list of python files to be installed. +# PYFILELOC: IN : full pathname for installing. +# Permissions of installed files: OWNER_WRITE, OWNER_READ, GROUP_READ, and WORLD_READ +#---------------------------------------------------------------------------- +MACRO(INSTALL_AND_COMPILE_PYTHON_FILE PYFILE2COMPINST PYFILELOC) + INSTALL(CODE "SET(PYTHON_FILE ${f})") + FOREACH(input ${PYFILE2COMPINST}) + GET_FILENAME_COMPONENT(inputname ${input} NAME) + INSTALL(FILES ${input} DESTINATION ${CMAKE_INSTALL_PREFIX}/${PYFILELOC}) + INSTALL(CODE "MESSAGE(STATUS \"py compiling ${CMAKE_INSTALL_PREFIX}/${PYFILELOC}/${inputname}\")") + INSTALL(CODE "SET(CMD \"import py_compile ; py_compile.compile('${CMAKE_INSTALL_PREFIX}/${PYFILELOC}/${inputname}')\")") + INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c \"\${CMD}\")") + INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -O -c \"\${CMD}\")") + ENDFOREACH(input ${PYFILE2COMPINST}) +ENDMACRO(INSTALL_AND_COMPILE_PYTHON_FILE PYFILE2COMPINST PYFILELOC) + +#---------------------------------------------------------------------------- +# SALOME_CONFIGURE_FILE is a macro useful for copying a file to another location +# and modify its contents. +# +# USAGE: SALOME_CONFIGURE_FILE(in_file out_file [INSTALL dir]) +# +# ARGUMENTS: +# in_file: IN : input file with full paths. +# out_file: IN : output file with full paths. +# If INSTALL is specified, then 'out_file' will be installed to the 'dir' directory. +#---------------------------------------------------------------------------- +MACRO(SALOME_CONFIGURE_FILE IN_FILE OUT_FILE) + MESSAGE(STATUS "Creation of ${OUT_FILE}") + CONFIGURE_FILE(${IN_FILE} ${OUT_FILE} @ONLY) + PARSE_ARGUMENTS(SALOME_CONFIGURE_FILE "INSTALL" "" ${ARGN}) + IF(SALOME_CONFIGURE_FILE_INSTALL) + INSTALL(FILES ${OUT_FILE} DESTINATION ${SALOME_CONFIGURE_FILE_INSTALL}) + ENDIF(SALOME_CONFIGURE_FILE_INSTALL) +ENDMACRO(SALOME_CONFIGURE_FILE) \ No newline at end of file diff --git a/salome_adm/cmake_files/UseOMNIORB.cmake b/salome_adm/cmake_files/UseOMNIORB.cmake index 9cfcbb35b..d6f8e6f9c 100644 --- a/salome_adm/cmake_files/UseOMNIORB.cmake +++ b/salome_adm/cmake_files/UseOMNIORB.cmake @@ -36,19 +36,25 @@ ENDMACRO(OMNIORB_COMPILE_IDL_FORPYTHON_ON_INSTALL)") # MYMODULE is a string that will be used to create a target with sources containing *.cc coming from the compilation of ${MYIDLFILES} # MYIDLFILES containing all idl files to be compiled. # MYIDLCXXFLAGS containing all directories (only directories) where to find *.idl which depend ${MYIDLFILES}. -MACRO(OMNIORB_ADD_MODULE MYMODULE MYIDLFILES MYIDLCXXFLAGS) +# TYPE contains type of the library +MACRO(OMNIORB_ADD_MODULE MYMODULE MYIDLFILES MYIDLCXXFLAGS TYPE) SET(MYSOURCES) FOREACH(input ${MYIDLFILES}) - STRING(REGEX REPLACE ".idl" "" base ${input}) + GET_FILENAME_COMPONENT(base ${input} NAME_WE) +# STRING(REGEX REPLACE ".idl" "" base ${input}) SET(OMNIORB_IDLCXXFLAGS2 "${OMNIORB_IDLCXXFLAGS}") SET(src ${CMAKE_CURRENT_BINARY_DIR}/${base}SK.cc) SET(MYSOURCES ${MYSOURCES} ${src}) SET(outputs ${src}) SET(dynsrc ${CMAKE_CURRENT_BINARY_DIR}/${base}DynSK.cc) + SET(MYSOURCES ${MYSOURCES} ${dynsrc}) SET(outputs ${outputs} ${dynsrc}) SET(inc ${CMAKE_CURRENT_BINARY_DIR}/${base}.hh) SET(outputs ${outputs} ${inc}) - SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input}) + GET_FILENAME_COMPONENT(path ${input} PATH) + IF(NOT path) + SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input}) + ENDIF(NOT path) SET(flags ${OMNIORB_IDLCXXFLAGS2}) STRING(REGEX MATCH "-bcxx" ISBCXX ${flags}) IF(NOT ISBCXX) @@ -76,5 +82,6 @@ MACRO(OMNIORB_ADD_MODULE MYMODULE MYIDLFILES MYIDLCXXFLAGS) STRING(REPLACE "\\" "/" IDLPYFLAGS ${IDLPYFLAGS}) INSTALL(CODE "OMNIORB_COMPILE_IDL_FORPYTHON_ON_INSTALL( \"${OMNIORB_IDL_PYTHON}\" \"${IDLPYFLAGS}\" \"${input}\" \"${CMAKE_INSTALL_PREFIX}/\${INSTALL_PYIDL_DIR}\" )") ENDFOREACH(input ${MYIDLFILES}) - ADD_LIBRARY(${MYMODULE} SHARED ${MYSOURCES}) + ADD_LIBRARY(${MYMODULE} ${TYPE} ${MYSOURCES}) + ENDMACRO(OMNIORB_ADD_MODULE) diff --git a/salome_adm/cmake_files/am2cmake.py b/salome_adm/cmake_files/am2cmake.py index 20f0e9c7b..afb446bb0 100644 --- a/salome_adm/cmake_files/am2cmake.py +++ b/salome_adm/cmake_files/am2cmake.py @@ -370,6 +370,7 @@ class CMakeFile(object): "MEFISTO2D", "MeshDriverDAT", "MeshDriverMED", + "MeshDriverGMF", "MeshDriver", "MeshDriverSTL", "MeshDriverUNV", @@ -618,7 +619,7 @@ class CMakeFile(object): INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake) INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake) INCLUDE(${SMESH_ROOT_DIR}/adm_local/cmake_files/FindSMESH.cmake) - INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindBLSURF.cmake) + INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindCADSURF.cmake) """) pass if self.module in ["ghs3dplugin", "hexoticplugin"]: @@ -655,6 +656,11 @@ class CMakeFile(object): INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSPHINX.cmake) """) pass + if self.module == "jobmanager": + newlines.append(""" + INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSPHINX.cmake) + """) + pass if self.module == "hxx2salome": newlines.append(""" SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR}) @@ -796,9 +802,10 @@ class CMakeFile(object): pass # -- newlines.append(""" - set(VERSION 6.5.0) - set(SHORT_VERSION 6.5) - set(XVERSION 0x060500) + set(VERSION 7.0.0) + set(SHORT_VERSION 7.0) + set(XVERSION 0x070000) + set(VERSION_DEV 1) """) pass # -- @@ -826,8 +833,8 @@ class CMakeFile(object): ''') elif self.module == "kernel": newlines.append(r''' - SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${CMAKE_BINARY_DIR}/salome_adm/unix -include SALOMEconfig.h) - SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${CMAKE_BINARY_DIR}/salome_adm/unix -include SALOMEconfig.h) + SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${CMAKE_BINARY_DIR}/salome_adm -include SALOMEconfig.h) + SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${CMAKE_BINARY_DIR}/salome_adm -include SALOMEconfig.h) ''') else: if self.module not in ["yacs"]: @@ -1112,7 +1119,7 @@ class CMakeFile(object): ) ''') self.files.append("static/header.html.in") - elif self.root[-len(mod):] == upmod and operator.contains(self.root, 'doc') or mod in ['kernel', 'gui', 'geom', 'med', 'smesh', 'visu'] and self.root[-len('tui'):] == 'tui': + elif self.root[-len(mod):] == upmod and operator.contains(self.root, 'doc') or mod in ['kernel', 'gui', 'geom', 'med', 'smesh', 'visu', 'blsurfplugin'] and self.root[-len('tui'):] == 'tui' or operator.contains(self.root, 'doc') and mod in ['pyhello']: newlines.append(r''' SET(top_builddir ${CMAKE_BINARY_DIR} @@ -1133,7 +1140,8 @@ class CMakeFile(object): ${datadir}/doc/salome ) ''') - self.files.append("static/header.html.in") + if mod not in ['blsurfplugin']: + self.files.append("static/header.html.in") if mod in ['geom', 'smesh', 'visu','netgenplugin','blsurfplugin','hexoticplugin','ghs3dplugin',"ghs3dprlplugin"] and self.root[-len(mod):] == upmod: self.files.append("static/header_py.html.in") @@ -1212,7 +1220,7 @@ class CMakeFile(object): WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )"""%(input, doc_gui_destination, doc_source, doc_gui_destination, head_source, doc_gui_destination)) from os import path - if mod in ['geom', 'smesh', 'visu', 'netgenplugin','blsurfplugin','hexoticplugin','ghs3dplugin','ghs3dprlplugin'] and self.root[-len(mod):] == upmod and operator.contains(self.root, 'doc'): + if mod in ['geom', 'smesh', 'visu', 'netgenplugin','blsurfplugin','hexoticplugin','ghs3dplugin','ghs3dprlplugin','pyhello'] and self.root[-len(mod):] == upmod and operator.contains(self.root, 'doc') or mod in ['pyhello'] and operator.contains(self.root, 'doc'): ign = r"""'*usr_docs*', '*CMakeFiles*', '*.cmake', 'doxyfile*', '*.vcproj', 'static', 'Makefile*'""" if mod in ['geom', 'smesh']: if mod == 'geom': @@ -1235,19 +1243,20 @@ class CMakeFile(object): VERBATIM WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )"""%(prepare_generating_doc_src, prepare_generating_doc_src, tmp, upmod, tmp, tmp, input, tmp, doc_gui_destination, doc_gui_destination, ign, head_source, doc_gui_destination)) + newlines.append(r"""ADD_DEPENDENCIES(usr_docs html_docs)""") else: config_f = "" if mod in ['netgenplugin','blsurfplugin','hexoticplugin','ghs3dplugin', "ghs3dprlplugin"] : - config_f = "doxyfile_py" - else: - config_f = "doxyfile_idl" - newlines.append("""\t ADD_CUSTOM_TARGET(usr_docs ${DOXYGEN_EXECUTABLE} %s + config_f = "${DOXYGEN_EXECUTABLE} doxyfile_py" + elif mod not in ['pyhello']: + config_f = "${DOXYGEN_EXECUTABLE} doxyfile_idl" + newlines.append("""\t ADD_CUSTOM_TARGET(usr_docs %s COMMAND ${DOXYGEN_EXECUTABLE} doxyfile COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''%s''',True); shutil.copytree(r'''${CMAKE_CURRENT_BINARY_DIR}''',r'''%s''', ignore=shutil.ignore_patterns(%s)); shutil.copy(r'''%s''',r'''%s''')" VERBATIM WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )"""%(config_f, doc_gui_destination, doc_gui_destination, ign, head_source, doc_gui_destination)) - elif mod == 'yacs' and operator.contains(self.root, upmod + '_SRC'+path.sep+'doc'): + elif mod in ['yacs', 'jobmanager'] and operator.contains(self.root, upmod + '_SRC'+path.sep+'doc'): from sys import platform params = ''; if platform == "win32": @@ -1265,21 +1274,19 @@ class CMakeFile(object): params = '-Q'; ext = "bat" prf = "call" + cmd = "STRING(REPLACE \"/\" \"\\\\\" SCR" else: ext = "sh" prf = ". " + cmd = "SET(SCR" doc_gui_destination = "${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/%s/docutils"%(upmod) scr = self.writeEnvScript(upmod) newlines.append(r""" - IF(WINDOWS) - STRING(REPLACE "/" "\\" SCR "%s") - ELSE(WINDOWS) - SET(SCR "%s") - ENDIF(WINDOWS) + %s "%s") FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/env_s.%s "${SCR}") - ADD_CUSTOM_TARGET(html_docs %s ${CMAKE_CURRENT_BINARY_DIR}/env_s.%s && ${SPHINX_EXECUTABLE} %s -c ${CMAKE_BINARY_DIR}/doc/docutils -W -b html ${ALLSPHINXOPTS} html + ADD_CUSTOM_TARGET(html_docs %s ${CMAKE_CURRENT_BINARY_DIR}/env_s.%s && ${SPHINX_EXECUTABLE} %s -c ${CMAKE_BINARY_DIR}/doc/docutils -b html ${ALLSPHINXOPTS} html COMMAND ${PYTHON_EXECUTABLE} -c \"import shutil\;shutil.rmtree('''%s''', True)\;shutil.copytree('''${CMAKE_CURRENT_BINARY_DIR}/html''', '''%s''')\" - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"""%(scr,scr,ext,prf,ext,params, doc_gui_destination, doc_gui_destination)) + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"""%(cmd, scr, ext, prf, ext, params, doc_gui_destination, doc_gui_destination)) @@ -1289,7 +1296,7 @@ class CMakeFile(object): # -- upmod = self.module.upper() - if mod in ['kernel', 'gui', 'med', 'smesh', 'visu'] and self.root[-len('tui'):] == 'tui': + if mod in ['kernel', 'gui', 'med', 'smesh', 'visu', 'blsurfplugin'] and self.root[-len('tui'):] == 'tui': if mod == 'kernel': tmp = """\tADD_CUSTOM_TARGET(dev_docs ${DOXYGEN_EXECUTABLE} -u COMMAND ${DOXYGEN_EXECUTABLE} @@ -1300,14 +1307,15 @@ class CMakeFile(object): if mod == 'visu': tmp1= r"""\n COMMAND ${PYTHON_EXECUTABLE} -c "from shutil import copy; copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/visuscreen.png''', r'''%s''')" """%(doc_tui_destination) elif mod == 'smesh': - extra_srcdir = "${CMAKE_CURRENT_SOURCE_DIR}/extra" - tmp1= """\n COMMAND ${PYTHON_EXECUTABLE} -c "from shutil import copy; copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/smeshscreen.png''', r'''%s'''); copy(r'''%s/AddNetgenInSalome2.pdf''', r'''%s'''); copy(r'''%s/PluginMeshers.html''', r'''%s''')" - COMMAND ${PYTHON_EXECUTABLE} -c "from shutil import copy; copy(r'''%s/AddNetgenInSalome2.ps''', r'''%s'''); copy(r'''%s/AddNetgenInSalome2.sxw''', r'''%s''')" """%(doc_tui_destination, extra_srcdir,doc_destination, extra_srcdir,doc_destination, extra_srcdir,doc_destination,extra_srcdir,doc_destination) + tmp1= """\n COMMAND ${PYTHON_EXECUTABLE} -c "from shutil import copy; copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/smeshscreen.png''', r'''%s''')" """%(doc_tui_destination) else: tmp1="" doc_source = "${CMAKE_CURRENT_BINARY_DIR}/%s"%(upmod) + inst_head_command="" + if mod not in ['blsurfplugin']: + inst_head_command = "; shutil.copy(r'''%s''', r'''%s''')"%(head_source, doc_tui_destination) newlines.append(tmp + """ - COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''%s''', True); shutil.copytree(r'''%s''', r'''%s'''); shutil.copy(r'''%s''', r'''%s''')" """%(doc_tui_destination, doc_source, doc_tui_destination, head_source, doc_tui_destination) + tmp1 + """ + COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''%s''', True); shutil.copytree(r'''%s''', r'''%s''')%s" """%(doc_tui_destination, doc_source, doc_tui_destination, inst_head_command) + tmp1 + """ VERBATIM WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )""") @@ -1922,7 +1930,7 @@ class CMakeFile(object): ENDIF(WINDOWS) ''') # -- - if self.module in ["geom", "med"]: + if self.module in ["geom", "med", "hexoticplugin", "blsurfplugin"]: newlines.append(r''' SET(var ${var} -I${CMAKE_CURRENT_SOURCE_DIR}) SET(var ${var} -I${CMAKE_CURRENT_BINARY_DIR}) @@ -2442,70 +2450,61 @@ class CMakeFile(object): f.close() return - def writeEnvScript(self, upmod): - from sys import platform, version_info - p_version = """%s.%s"""%(version_info[0],version_info[1]) - python_path ="PYTHONPATH" - path = "" - begin = "" - end = "" - delim = "" - cmd = "" - pdir = "" - omni = "" - omni_py = "" - if platform == "win32" : - path = "PATH" - begin = "%" - end = "%" - delim = ";" - cmd = "@SET " - omni = "/x86_win32" - omni_py = "/python" - pdir = "PDIR" + def writeEnvScript(self, upmod, buildmod=True): + import os, sys + p_version = sys.version[:3] + python_path = "PYTHONPATH" + root_dir = "%s_ROOT_DIR" % upmod + if sys.platform == "win32": + script_line = '@SET %(var)s=%(val)s;%%%(var)s%%\n' + var_line = '%%%s%%' + lib_path = "PATH" + omni = "x86_win32" + omni_py = "python" + pass else: - path = "LD_LIBRARY_PATH" - begin = "\${" - end = "}" - delim = ":" - cmd = "export " - omni_py = "/python" + p_version + "/" + "site-packages" - pdir = "INST_ROOT" - - - path_ = begin + path + end - root_dir_ = begin + upmod + "_ROOT_DIR" + end - python_path_ = begin + python_path + end - _python_path_ = delim + python_path_+ "\n" - _path_ = delim + path_+ "\n" - _pdir = begin + pdir + end - - - script = cmd + " " + python_path + "=" + root_dir_+"/lib/python" + p_version \ - + "/site-packages/salome" + _python_path_ - - script = script + cmd + " " + python_path + "=" + root_dir_+"/bin/salome" + \ - _python_path_ - - script = script + cmd + " "+ path + "=" + root_dir_+"/lib/salome"+ _path_ - + script_line = 'export %(var)s=%(val)s:\$%(var)s\n' + var_line = '\${%s}' + lib_path = "LD_LIBRARY_PATH" + omni = "" + omni_py = "/".join( ["python%s"%p_version , "site-packages"] ) + pass + # + script = "" + # + if buildmod: + script += script_line % { 'var':python_path, 'val':"/".join( ["${CMAKE_INSTALL_PREFIX}", "lib", "python%s"%p_version, "site-packages", "salome"] ) } + script += script_line % { 'var':python_path, 'val':"/".join( ["${CMAKE_INSTALL_PREFIX}", "bin", "salome"] ) } + script += script_line % { 'var':lib_path, 'val':"/".join( ["${CMAKE_INSTALL_PREFIX}", "lib", "salome"] ) } + pass + else: + script += script_line % { 'var':python_path, 'val':"/".join( [var_line % root_dir, "lib", "python%s"%p_version, "site-packages", "salome"] ) } + script += script_line % { 'var':python_path, 'val':"/".join( [var_line % root_dir, "bin", "salome"] ) } + script += script_line % { 'var':lib_path, 'val':"/".join( [var_line % root_dir, "lib", "salome"] ) } + pass + # if upmod == "KERNEL" : - script = script + cmd + " " + python_path + "=" + _pdir + \ - "/omniORB-4.1.5/lib" + omni + _python_path_ - - script = script + cmd + " " + python_path + "=" + _pdir + \ - "/omniORB-4.1.5/lib" + omni_py + _python_path_ - - script = script + cmd + " "+ path + "=" + _pdir+ "/omniORB-4.1.5/lib" + \ - omni + _path_ - + script += "\n" + if omni: + script += script_line % { 'var':python_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib", omni] ) } + script += script_line % { 'var':lib_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib", omni] ) } + pass + else: + script += script_line % { 'var':python_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib"] ) } + script += script_line % { 'var':lib_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib"] ) } + pass + script += script_line % { 'var':python_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib", omni_py] ) } + pass + # if upmod == "GEOM" : - script = self.writeEnvScript("KERNEL") + script - script = self.writeEnvScript("GUI") + script - + script = self.writeEnvScript("KERNEL", False) + "\n" + script + script = self.writeEnvScript("GUI", False) + "\n" + script + pass + # if upmod == "SMESH" : - script = self.writeEnvScript("GEOM") + script - + script = self.writeEnvScript("GEOM", False) + "\n" + script + pass + return script pass @@ -2563,8 +2562,10 @@ if __name__ == "__main__": # -- for f in files: if f in ["Makefile.am", "Makefile.am.cmake"]: - convert = True - if getenv("AM2CMAKE_FORCE_GENERATION", "0")=="0": + convert = True # convert files by default + forced = getenv("AM2CMAKE_FORCE_GENERATION", "0")=="1" or \ + getenv("AM2CMAKE_FORCE_%s_GENERATION"%module.upper(), "0")=="1" + if not forced: # detect if conversion should be done if "CMakeLists.txt" in files: from os.path import join diff --git a/salome_adm/cmake_files/prepare_generating_doc.py b/salome_adm/cmake_files/prepare_generating_doc.py index fb218237a..8a88fec81 100755 --- a/salome_adm/cmake_files/prepare_generating_doc.py +++ b/salome_adm/cmake_files/prepare_generating_doc.py @@ -18,12 +18,55 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -import sys, re -outfile = open(sys.argv[1], 'wb') -isCom = False -for line in open(sys.argv[2], 'rb').readlines(): - if re.match('class '+sys.argv[3]+'DC', line): +# ... +# Usage: prepare_generating_doc.py +# ... +# 1. myClassDC is replaced by myClass +# 2. all methods of myClassDC become global methods of Python package +# ... +# myClass is passed as command line argument +# ... + +import os, sys, re + +# check command line +if len( sys.argv ) < 4: + sys.exit("Usage: %s " % os.path.basename(sys.argv[0])) + +# open input file +try: + infile = open(sys.argv[2], 'rb') +except: + sys.exit("File %s is not found" % sys.argv[2]) + pass + +# open output file +try: + outfile = open(sys.argv[1], 'wb') +except: + sys.exit("File %s cannot be opened for write" % sys.argv[1]) + pass + +# parse input file + +isCom = False +isShift = False + +for line in infile.readlines(): + dc_class = sys.argv[3] + dc_class_dc = dc_class+'DC' + + if isShift and ( re.match('^class\s+', line) or re.match('^def\s+', line) ): + # stop shifting lines as soon as myClassDC definition is over + isShift = False + pass + if re.match('class\s+%s' % dc_class_dc, line): + # start shifting lines + isShift = True + # omit this line (to remove myClassDC from the package) continue + + # process documentation n = line.find('"""') n1 = line[(n+2):].find('"""') if (n > -1) and (n1 > -1): @@ -31,13 +74,26 @@ for line in open(sys.argv[2], 'rb').readlines(): if isCom: if n > -1: isCom = False + pass continue else: if n > -1: isCom = True - continue - line = re.sub(r'^\s+#', '#', line) - line = re.sub(r'^\s+def', 'def', line) - line = re.sub(sys.argv[3]+'DC', sys.argv[3], line) + continue + pass + + # replacements + if isShift: + line = re.sub(r'^\s+#', '#', line) + line = re.sub(r'^\s+def', 'def', line) + pass + line = re.sub(dc_class_dc, dc_class, line) + + # write resulting line outfile.write(line) -outfile.close() \ No newline at end of file + + pass # end of for + +# close input and output files +infile.close() +outfile.close() diff --git a/salome_adm/unix/CMakeLists.txt b/salome_adm/unix/CMakeLists.txt new file mode 100755 index 000000000..a0b5ec4d1 --- /dev/null +++ b/salome_adm/unix/CMakeLists.txt @@ -0,0 +1,35 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +ADD_SUBDIRECTORY(config_files) + +SET(DEPRECATED_FILES + DEPRECATED/F77config.h.in + DEPRECATED/sstream.in + DEPRECATED/envScript.in + DEPRECATED/depend.in + DEPRECATED/make_commence.in + DEPRECATED/make_conclude.in + DEPRECATED/make_module.in + DEPRECATED/make_omniorb.in +) + +# The deprecated files are deprecated for the KERNEL but not for the +# related modules (GUI, MED, ...), for now. Some files have to be installed. +INSTALL(FILES ${DEPRECATED_FILES} DESTINATION salome_adm/unix) diff --git a/salome_adm/unix/Makefile.am b/salome_adm/unix/Makefile.am index 7029d3f35..307ee59f1 100644 --- a/salome_adm/unix/Makefile.am +++ b/salome_adm/unix/Makefile.am @@ -34,28 +34,6 @@ DEPRECATED_FILES=\ DEPRECATED/make_module.in \ DEPRECATED/make_omniorb.in -# rules for install and build (see make_common_starter.am) -salomeadmux_DATA = SALOMEconfig.h.in -salomeinclude_DATA = SALOMEconfig.h -BUILT_SOURCES=SALOMEconfig.ref SALOMEconfig.h SALOMEconfig.h.in - -mostlyclean-local: - -rm -rf SALOMEconfig.h SALOMEconfig.h.in - -SALOMEconfig.h.in : SALOMEconfig.ref.in - cp -pf $< $@; - -# test if SALOMEconfig.ref has changed (contents), at build time -SALOMEconfig.h: $(top_builddir)/salome_adm/unix/SALOMEconfig.ref - @if ! [ -a $@ ]; then \ - echo cp -pf $< $@; \ - cp -pf $< $@; \ - fi; \ - if ! cmp -s $< $@; then \ - echo cp -pf $< $@; \ - cp -pf $< $@; \ - fi; - # The deprecated files are deprecated for the KERNEL but not for the # related modules (GUI, MED, ...), for now. Some files have to be installed. dist_salomeadmux_DATA=\ diff --git a/salome_adm/unix/config_files/CMakeLists.txt b/salome_adm/unix/config_files/CMakeLists.txt new file mode 100755 index 000000000..e7add33e2 --- /dev/null +++ b/salome_adm/unix/config_files/CMakeLists.txt @@ -0,0 +1,84 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# The deprecated files are deprecated for the KERNEL but not for the +# related modules (GUI, MED, ...). Some files have to be installed. +SET(DEPRECATED_FILES + DEPRECATED/ac_cc_warnings.m4 + DEPRECATED/ac_cxx_bool.m4 + DEPRECATED/ac_cxx_mutable.m4 + DEPRECATED/ac_cxx_partial_specialization.m4 + DEPRECATED/ac_cxx_typename.m4 + DEPRECATED/check_mico.m4 + DEPRECATED/check_pthreads.m4 + DEPRECATED/config.sub + DEPRECATED/config.guess + DEPRECATED/install-sh + DEPRECATED/libtool.m4 + DEPRECATED/ltconfig + DEPRECATED/ltmain.sh + DEPRECATED/check_Salome.m4 + DEPRECATED/check_java.m4 + DEPRECATED/missing + DEPRECATED/mkinstalldirs +) + +SET(m4_DATA + ac_cxx_depend_flag.m4 + ac_cxx_have_sstream.m4 + ac_cxx_namespaces.m4 + ac_cxx_option.m4 + ac_cxx_template_options.m4 + ac_cxx_use_std_iostream.m4 + ac_cxx_warnings.m4 + ac_linker_options.m4 + ac_check_sizeof_fortran.m4 + acx_pthread.m4 + check_Kernel.m4 + check_boost.m4 + check_cas.m4 + check_corba.m4 + check_cppunit.m4 + check_f77.m4 + check_calcium.m4 + check_hdf5.m4 + check_htmlgen.m4 + check_sphinx.m4 + check_lam.m4 + check_libbatch.m4 + check_mpi.m4 + check_openmpi.m4 + check_mpich.m4 + check_omniorb.m4 + check_sockets.m4 + check_swig.m4 + check_vtk.m4 + check_withihm.m4 + enable_pthreads.m4 + production.m4 + pyembed.m4 + python.m4 + check_libxml.m4 + check_paco++.m4 + local_install.m4 + hack_libtool.m4 + check_tbb.m4 +) +INSTALL(FILES ${DEPRECATED_FILES} DESTINATION salome_adm/unix/config_files/DEPRECATED) +INSTALL(FILES ${m4_DATA} DESTINATION salome_adm/unix/config_files) diff --git a/salome_adm/unix/config_files/check_boost.m4 b/salome_adm/unix/config_files/check_boost.m4 index 36ab894e8..84eaf39ba 100644 --- a/salome_adm/unix/config_files/check_boost.m4 +++ b/salome_adm/unix/config_files/check_boost.m4 @@ -120,7 +120,7 @@ if test "x${boost_headers_ok}" = "xyes" ; then done fi if test "x${boost_lib_dir_ok}" = "xyes" ; then - LIBS="${LIBS_old} ${BOOST_LIBS} -lboost_thread${BOOST_LIBSUFFIX}" + LIBS="${LIBS_old} ${BOOST_LIBS} -lboost_thread${BOOST_LIBSUFFIX} -lboost_system${BOOST_LIBSUFFIX}" AC_TRY_LINK([#include ], [struct TBody{ void operator()(){} }; boost::thread(TBody())], boost_binaries_ok=yes, @@ -138,7 +138,7 @@ else AC_MSG_RESULT(\$BOOST_LIBSUFFIX = ${BOOST_LIBSUFFIX}) AC_MSG_RESULT(\$BOOST_LIBS = ${BOOST_LIBS}) AC_CHECK_FILE(${BOOSTDIR}/lib${LIB_SUFFIX}/libboost_thread${BOOST_LIBSUFFIX}.so, - BOOST_LIB_THREAD="${BOOST_LIBS} -lboost_thread${BOOST_LIBSUFFIX}", + BOOST_LIB_THREAD="${BOOST_LIBS} -lboost_thread${BOOST_LIBSUFFIX} -lboost_system${BOOST_LIBSUFFIX}", BOOST_LIB_THREAD="") AC_CHECK_FILE(${BOOSTDIR}/lib${LIB_SUFFIX}/libboost_signals${BOOST_LIBSUFFIX}.so, BOOST_LIB_SIGNALS="${BOOST_LIBS} -lboost_signals${BOOST_LIBSUFFIX}", diff --git a/salome_adm/unix/config_files/check_cas.m4 b/salome_adm/unix/config_files/check_cas.m4 index 7646fd377..98fa0bc5d 100644 --- a/salome_adm/unix/config_files/check_cas.m4 +++ b/salome_adm/unix/config_files/check_cas.m4 @@ -240,11 +240,11 @@ else CAS_OCAF="$CAS_LDPATH -lPTKernel -lTKernel -lTKCDF -lTKLCAF -lTKPCAF -lTKStdSchema" CAS_OCAFVIS="$CAS_LDPATH -lTKCAF -lTKPLCAF -lTKPShape -lTKStdLSchema -lTKShapeSchema" - if test -f $CASROOT/$casdir/lib/libStdPlugin.so ; then + if test -f ${CAS_LIBDIR}/libStdPlugin.so ; then # standard plugin library libStdPlugin has been added in CASCADE 5.2.3 CAS_STDPLUGIN="StdPlugin" CAS_OCAFVIS="$CAS_OCAFVIS -lStdPlugin -lStdLPlugin" - elif test -f $CASROOT/$casdir/lib/libTKStdSchema.so ; then + elif test -f ${CAS_LIBDIR}/libTKStdSchema.so ; then # standard plugin has been renamed in CASCADE 6.5 CAS_STDPLUGIN=TKStdSchema CAS_OCAFVIS="$CAS_OCAFVIS -lTKStdSchema -lTKStdLSchema" diff --git a/salome_adm/unix/make_common_starter.am b/salome_adm/unix/make_common_starter.am index 2f07b58af..c7c4007f8 100644 --- a/salome_adm/unix/make_common_starter.am +++ b/salome_adm/unix/make_common_starter.am @@ -26,8 +26,8 @@ # ============================================================ if !WITHONLYLAUNCHER - AM_CXXFLAGS = -I$(top_builddir)/salome_adm/unix -include SALOMEconfig.h - AM_CPPFLAGS = -I$(top_builddir)/salome_adm/unix -include SALOMEconfig.h + AM_CXXFLAGS = -I$(top_builddir)/salome_adm -include SALOMEconfig.h + AM_CPPFLAGS = -I$(top_builddir)/salome_adm -include SALOMEconfig.h else WITHONLYLAUNCHER AM_CXXFLAGS = AM_CPPFLAGS = @@ -76,3 +76,7 @@ sharedpkgpythondir =$(salomepythondir)/shared_modules # Documentation directory docdir = $(datadir)/doc/salome + +# Cmake files +CMAKEFILES = $(notdir $(wildcard $(srcdir)/CMakeLists.txt)) +EXTRA_DIST = $(CMAKEFILES) diff --git a/src/Basics/Basics_Utils.cxx b/src/Basics/Basics_Utils.cxx index 77eaacc19..673914693 100644 --- a/src/Basics/Basics_Utils.cxx +++ b/src/Basics/Basics_Utils.cxx @@ -123,6 +123,18 @@ namespace Kernel_Utils free (strings); } +#else + #if (_MSC_VER >= 1400) // Visual Studio 2005 + #include + int setenv(const char *name, const char *value, int rewrite) + { + std::stringstream sstr; + sstr<= 1400) // Visual Studio 2005 + BASICS_EXPORT int setenv(const char*, const char*, int); +#endif #endif } diff --git a/src/Basics/CMakeLists.txt b/src/Basics/CMakeLists.txt new file mode 100755 index 000000000..0ba895b59 --- /dev/null +++ b/src/Basics/CMakeLists.txt @@ -0,0 +1,41 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} +) + +SET(SALOMEBasics_SOURCES + BasicsGenericDestructor.cxx + Basics_Utils.cxx + Basics_DirUtils.cxx + SALOME_Basics.hxx + BasicsGenericDestructor.hxx + Basics_Utils.hxx + Basics_DirUtils.hxx +) + +ADD_LIBRARY(SALOMEBasics SHARED ${SALOMEBasics_SOURCES}) +INSTALL(TARGETS SALOMEBasics DESTINATION ${KERNEL_salomelib_LIBS}) + +SET_TARGET_PROPERTIES(SALOMEBasics PROPERTIES COMPILE_FLAGS "${PTHREAD_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOMEBasics ${PTHREAD_LIBS} ${PLATFORM_LIBS}) + +FILE(GLOB SALOMEBasics_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${SALOMEBasics_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) \ No newline at end of file diff --git a/src/Basics/Test/CMakeLists.txt b/src/Basics/Test/CMakeLists.txt new file mode 100755 index 000000000..f5edb13b3 --- /dev/null +++ b/src/Basics/Test/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +FILE(GLOB SALOMEBasics_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${SALOMEBasics_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100755 index 000000000..931de8be9 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,119 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +SET(SUBDIR_BASE + Basics + SALOMELocalTrace + HDFPersist + KERNEL_PY +) + +SET(SUBDIR_CORBA + DF + Logger + SALOMETraceCollector + Utils + NamingService + GenericObj + Registry + ModuleCatalog + ResourcesManager + Notification + NOTIFICATION_SWIG + Container + TestContainer + Launcher + LifeCycleCORBA + LifeCycleCORBA_SWIG + SALOMEDSClient + TOOLSDS + SALOMEDSImpl + SALOMEDS + KernelHelpers + ModuleGenerator + Communication + Communication_SWIG + DSC +) + +SET(SUBDIR_CPPUNIT_BASE + Basics/Test + SALOMELocalTrace/Test +) + +SET(SUBDIR_CPPUNIT_CORBA + Logger/Test + SALOMETraceCollector/Test + Utils/Test + NamingService/Test + LifeCycleCORBA/Test + LifeCycleCORBA_SWIG/Test + SALOMEDSImpl/Test + SALOMEDS/Test + KernelHelpers/Test +) + +SET(SUBDIR_CPPUNIT_GENERAL UnitTests) +SET(SUBDIR_MPI MPIContainer TestMPIContainer) +SET(SUBDIR_PARALLEL ParallelContainer) + +IF(WITHONLYLAUNCHER) + SET(SUBDIRS Basics ResourcesManager Launcher) +ELSE(WITHONLYLAUNCHER) + SET(SUBDIRS ${SUBDIR_BASE}) +ENDIF(WITHONLYLAUNCHER) + +IF(CORBA_GEN) + SET(SUBDIRS ${SUBDIRS} ${SUBDIR_CORBA}) +ENDIF(CORBA_GEN) + +IF(MPI_IS_OK) + SET(SUBDIRS + ${SUBDIRS} + ${SUBDIR_MPI} + ) +ENDIF(MPI_IS_OK) + +IF(CPPUNIT_IS_OK) + IF(CORBA_GEN) + SET(SUBDIRS + ${SUBDIRS} + ${SUBDIR_CPPUNIT_BASE} + ${SUBDIR_CPPUNIT_CORBA} + ${SUBDIR_CPPUNIT_GENERAL} + ) + ELSE(CORBA_GEN) + SET(SUBDIRS + ${SUBDIRS} + ${SUBDIR_CPPUNIT_BASE} + ${SUBDIR_CPPUNIT_GENERAL} + ) + ENDIF(CORBA_GEN) +ENDIF(CPPUNIT_IS_OK) + +IF(WITH_PACO_PARALLEL) + SET(SUBDIRS + ${SUBDIRS} + ${SUBDIR_PARALLEL} + ) +ENDIF(WITH_PACO_PARALLEL) + +FOREACH(DIR ${SUBDIRS}) + ADD_SUBDIRECTORY(${DIR}) +ENDFOREACH(DIR ${SUBDIRS}) diff --git a/src/Communication/CMakeLists.txt b/src/Communication/CMakeLists.txt new file mode 100755 index 000000000..796ffdded --- /dev/null +++ b/src/Communication/CMakeLists.txt @@ -0,0 +1,76 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${MPI_INCLUDE_DIRS} + ${PYTHON_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_BINARY_DIR}/idl +) + +SET(COMMON_LIBS + OpUtil + SALOMELocalTrace + SalomeIDLKernel +) + +SET(SalomeCommunication_SOURCES + SALOME_Comm_i.cxx + SALOME_Matrix_i.cxx + SenderFactory.cxx + MultiCommException.cxx + SALOMEMultiComm.cxx + ReceiverFactory.cxx + MatrixClient.cxx + MultiCommException.hxx + SALOME_Comm_i.hxx + SALOME_Matrix_i.hxx + SenderFactory.hxx + ReceiverFactory.hxx + MatrixClient.hxx + SALOMEMultiComm.hxx + Receivers.hxx + Receiver.hxx +) + +ADD_LIBRARY(SalomeCommunication SHARED ${SalomeCommunication_SOURCES}) +SET_TARGET_PROPERTIES(SalomeCommunication PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${MPI_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeCommunication ${COMMON_LIBS} ${PYTHON_LIBS} ${MPI_LIBS}) +INSTALL(TARGETS SalomeCommunication DESTINATION ${KERNEL_salomelib_LIBS}) + +SET(COMMON_HEADERS_HXX + MatrixClient.hxx + MultiCommException.hxx + Receiver.hxx + ReceiverFactory.hxx + Receivers.hxx + Receivers.cxx + SALOMEMultiComm.hxx + SALOME_Comm_i.hxx + SALOME_Communication.hxx + SALOME_Matrix_i.hxx + SenderFactory.hxx +) + +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/Communication/Makefile.am b/src/Communication/Makefile.am index 6255807a8..391173d17 100644 --- a/src/Communication/Makefile.am +++ b/src/Communication/Makefile.am @@ -92,7 +92,7 @@ libSalomeCommunication_la_SOURCES =\ Receiver.hxx # the following file is needed by an include file (VERY DIRTY!) -EXTRA_DIST = Receivers.cxx +EXTRA_DIST += Receivers.cxx libSalomeCommunication_la_CPPFLAGS = $(COMMON_CPPFLAGS) $(OPT_CPPFLAGS) libSalomeCommunication_la_LDFLAGS = -no-undefined -version-info=0:0:0 $(OPT_LDFLAGS) diff --git a/src/Communication_SWIG/CMakeLists.txt b/src/Communication_SWIG/CMakeLists.txt new file mode 100755 index 000000000..8683fa5bd --- /dev/null +++ b/src/Communication_SWIG/CMakeLists.txt @@ -0,0 +1,62 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +FIND_PACKAGE(SWIG REQUIRED) +INCLUDE(${SWIG_USE_FILE}) + +SET_SOURCE_FILES_PROPERTIES(libSALOME_Comm.i PROPERTIES CPLUSPLUS ON) +SET_SOURCE_FILES_PROPERTIES(libSALOME_Comm.i PROPERTIES SWIG_DEFINITIONS "-shadow") + +INCLUDE_DIRECTORIES( + ${PYTHON_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../Communication + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_BINARY_DIR}/idl +) +SET(_libSALOME_Comm_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +SET(_libSALOME_Comm_LIBS + SalomeCommunication + ${PYTHON_LIBS} +) + +IF(MPI_IS_OK) + INCLUDE_DIRECTORIES(${MPI_INCLUDE_DIRS}) + + SET(_libSALOME_Comm_FLAGS "${_libSALOME_Comm_FLAGS} ${MPI_DEFINITIONS}") + SET(_libSALOME_Comm_LIBS + ${_libSALOME_Comm_LIBS} + ${MPI_LIBS} + ) +ENDIF(MPI_IS_OK) + +SWIG_ADD_MODULE(libSALOME_Comm python libSALOME_Comm.i) +SWIG_LINK_LIBRARIES(libSALOME_Comm ${_libSALOME_Comm_LIBS}) +SET_TARGET_PROPERTIES(_libSALOME_Comm PROPERTIES COMPILE_FLAGS "${_libSALOME_Comm_FLAGS}") + +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_libSALOME_Comm PROPERTIES DEBUG_OUTPUT_NAME _libSALOME_Comm_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) + +INSTALL(TARGETS _libSALOME_Comm DESTINATION ${KERNEL_salomepythondir}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libSALOME_Comm.py DESTINATION ${KERNEL_salomepythondir}) \ No newline at end of file diff --git a/src/Communication_SWIG/Makefile.am b/src/Communication_SWIG/Makefile.am index 9f03d8b56..bdd171cdb 100644 --- a/src/Communication_SWIG/Makefile.am +++ b/src/Communication_SWIG/Makefile.am @@ -86,7 +86,7 @@ swig_wrap.cpp libSALOME_Comm.py : $(SWIGSOURCES) CLEANFILES = swig_wrap.cpp -EXTRA_DIST = $(SWIGSOURCES) +EXTRA_DIST += $(SWIGSOURCES) # # =============================================================== diff --git a/src/Container/CMakeLists.txt b/src/Container/CMakeLists.txt new file mode 100755 index 000000000..25a5a7c40 --- /dev/null +++ b/src/Container/CMakeLists.txt @@ -0,0 +1,120 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${HDF5_INCLUDE_DIRS} + ${LIBXML_INCLUDE_DIRS} + ${PYTHON_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../Registry + ${CMAKE_CURRENT_SOURCE_DIR}/../Notification + ${CMAKE_CURRENT_SOURCE_DIR}/../ResourcesManager + ${CMAKE_CURRENT_SOURCE_DIR}/../HDFPersist + ${CMAKE_CURRENT_SOURCE_DIR}/../GenericObj + ${CMAKE_BINARY_DIR}/idl +) + +SET(SCRIPTS + SALOME_ComponentPy.py + SALOME_PyNode.py + SALOME_Container.py +) + +SET(COMMON_FLAGS "${HDF5_DEFINITIONS} ${LIBXML_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +SET(COMMON_LIBS + Registry + SalomeNotification + SalomeResourcesManager + ResourcesManager + SalomeNS + OpUtil + SALOMELocalTrace + SALOMEBasics + SalomeHDFPersist + SalomeGenericObj + SalomeIDLKernel + ${CORBA_LIBS} + ${PYTHON_LIBS} +) + +IF(WITH_MPI_SEQ_CONTAINER) + SET(COMMON_FLAGS + ${COMMON_FLAGS} + ${MPI_DEFINITIONS} + ) + SET(COMMON_LIBS + ${COMMON_LIBS} + ${MPI_LIBS} + ) +ENDIF(WITH_MPI_SEQ_CONTAINER) + +IF(WITH_PACO_PARALLEL) + SET(COMMON_FLAGS + ${COMMON_FLAGS} + -DWITH_PACO_PARALLEL + ${PACO_DEFINITIONS} + ) + SET(COMMON_LIBS + ${COMMON_LIBS} + ${PACO_LIBS} + ) +ENDIF(WITH_PACO_PARALLEL) + +SET(SalomeContainer_SOURCES + Component_i.cxx + Container_i.cxx + SALOME_FileTransfer_i.cxx + SALOME_FileRef_i.cxx + Container_init_python.cxx + SALOME_ContainerManager.cxx + Salome_file_i.cxx +) + +ADD_LIBRARY(SalomeContainer SHARED ${SalomeContainer_SOURCES}) +SET_TARGET_PROPERTIES(SalomeContainer PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(SalomeContainer ${COMMON_LIBS}) +INSTALL(TARGETS SalomeContainer DESTINATION ${KERNEL_salomelib_LIBS}) + +SET(SALOME_Container_LIBS + SalomeContainer + SALOMEBasics + ${COMMON_LIBS} + ${HDF5_LIBS} +) + +ADD_EXECUTABLE(SALOME_Container SALOME_Container.cxx SALOME_Container_SignalsHandler.cxx) +SET_TARGET_PROPERTIES(SALOME_Container PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(SALOME_Container ${SALOME_Container_LIBS}) + +ADD_EXECUTABLE(TestSalome_file TestSalome_file.cxx) +SET_TARGET_PROPERTIES(TestSalome_file PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(TestSalome_file SALOMETraceCollectorTest ${SALOME_Container_LIBS}) + +INSTALL(TARGETS SALOME_Container DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS("${SCRIPTS}" ${KERNEL_salomescript_PYTHON}) +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/Container/Component_i.cxx b/src/Container/Component_i.cxx index 3e77256aa..ed5b16b6d 100644 --- a/src/Container/Component_i.cxx +++ b/src/Container/Component_i.cxx @@ -1105,3 +1105,20 @@ void Engines_Component_i::setContainerName() name[slash]='_'; _containerName=name; } + +//============================================================================= +/*! + \brief Get version of the component + + This method is supposed to be implemented in all derived classes; default implementation + returns empty string that means that no version information about the component is available. + + \note The version of the component is stored to the study, as a part of general persistence + mechanism; once stored, version information in the study cannot be changed. + + \return string containing component's version, e.g. "1.0" +*/ +char* Engines_Component_i::getVersion() +{ + return CORBA::string_dup( "" ); +} diff --git a/src/Container/Makefile.am b/src/Container/Makefile.am index 7243153df..0edfb936e 100644 --- a/src/Container/Makefile.am +++ b/src/Container/Makefile.am @@ -33,7 +33,7 @@ include $(top_srcdir)/salome_adm/unix/make_common_starter.am # Header to be installed # =============================================================== # -# header files +# header files salomeinclude_HEADERS = \ SALOME_Component_i.hxx \ SALOME_Container_i.hxx \ @@ -51,8 +51,7 @@ dist_salomescript_PYTHON =\ SALOME_Container.py # These files are executable scripts -dist_salomescript_SCRIPTS=\ - SALOME_ContainerPy.py +dist_salomescript_SCRIPTS= # # =============================================================== @@ -92,7 +91,7 @@ COMMON_LIBS =\ @CORBA_LIBS@ \ $(PYTHON_LIBS) -if WITH_MPI_SEQ_CONTAINER +if WITH_MPI_SEQ_CONTAINER COMMON_CPPFLAGS += @MPI_INCLUDES@ COMMON_LIBS += @MPI_LIBS@ endif @@ -149,7 +148,7 @@ SALOME_Container_LDADD = \ $(CORBA_LIBS) \ $(PYTHON_LIBS) -if WITH_MPI_SEQ_CONTAINER +if WITH_MPI_SEQ_CONTAINER SALOME_Container_LDADD += $(MPI_LIBS) endif diff --git a/src/Container/SALOME_ComponentPy.py b/src/Container/SALOME_ComponentPy.py index 55ec0ff55..66c9de634 100755 --- a/src/Container/SALOME_ComponentPy.py +++ b/src/Container/SALOME_ComponentPy.py @@ -314,3 +314,9 @@ class SALOME_ComponentPy_i (Engines__POA.EngineComponent): def getObjectInfo(self, studyId, entry): return "" + #------------------------------------------------------------------------- + + def getVersion(self): + return "" # empty string means "unknown" version + + pass # end of SALOME_ComponentPy_i diff --git a/src/Container/SALOME_Component_i.hxx b/src/Container/SALOME_Component_i.hxx index 94fd62ce8..3581cd9d2 100644 --- a/src/Container/SALOME_Component_i.hxx +++ b/src/Container/SALOME_Component_i.hxx @@ -120,6 +120,9 @@ public: virtual bool hasObjectInfo() { return false; } virtual char* getObjectInfo(CORBA::Long studyId, const char* entry) { return CORBA::string_dup(""); } + // Version information + virtual char* getVersion(); + // --- local C++ methods PortableServer::ObjectId * getId(); diff --git a/src/Container/SALOME_ContainerManager.cxx b/src/Container/SALOME_ContainerManager.cxx index a513af413..3a6cebdf7 100644 --- a/src/Container/SALOME_ContainerManager.cxx +++ b/src/Container/SALOME_ContainerManager.cxx @@ -36,6 +36,9 @@ #include #include +#include +#include CORBA_CLIENT_HEADER(SALOME_Session) + #ifdef WNT #include #define getpid _getpid @@ -187,6 +190,17 @@ void SALOME_ContainerManager::Shutdown() void SALOME_ContainerManager::ShutdownContainers() { MESSAGE("ShutdownContainers"); + + SALOME::Session_var session = SALOME::Session::_nil(); + CORBA::Long pid = 0; + CORBA::Object_var objS = _NS->Resolve("/Kernel/Session"); + if (!CORBA::is_nil(objS)) + { + session = SALOME::Session::_narrow(objS); + if (!CORBA::is_nil(session)) + pid = session->getPID(); + } + bool isOK; isOK = _NS->Change_Directory("/Containers"); if( isOK ){ @@ -199,7 +213,7 @@ void SALOME_ContainerManager::ShutdownContainers() try { Engines::Container_var cont=Engines::Container::_narrow(obj); - if(!CORBA::is_nil(cont)) + if(!CORBA::is_nil(cont) && pid != cont->getPID()) lstCont.push_back((*iter)); } catch(const CORBA::Exception& e) diff --git a/src/Container/SALOME_ContainerPy.py b/src/Container/SALOME_ContainerPy.py deleted file mode 100755 index b9144dda9..000000000 --- a/src/Container/SALOME_ContainerPy.py +++ /dev/null @@ -1,339 +0,0 @@ -#! /usr/bin/env python -# -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# SALOME Container : implementation of container and engine for Kernel -# File : SALOME_ContainerPy.py -# Author : Paul RASCLE, EDF -# Module : SALOME -# $Header$ -# -import os -import sys -import string - -from omniORB import CORBA, PortableServer -import SALOMEDS -import Engines, Engines__POA -from SALOME_NamingServicePy import * -from SALOME_ComponentPy import * - -from SALOME_utilities import * -from Utils_Identity import getShortHostName -from launchConfigureParser import verbose - -#============================================================================= - -#define an implementation of the container interface for the container implemented in Python - -class SALOME_ContainerPy_i (Engines__POA.Container): - _orb = None - _poa = None - _numInstance = 0 - _listInstances_map = {} - - #------------------------------------------------------------------------- - - def __init__(self, orb, poa, containerName): - MESSAGE( "SALOME_ContainerPy_i::__init__" ) - self._orb = orb - self._poa = poa - myMachine=getShortHostName() - Container_path = "/Containers/" + myMachine + "/" + containerName - self._containerName = Container_path - if verbose(): print "container name ",self._containerName - - naming_service = SALOME_NamingServicePy_i(self._orb) - self._naming_service = naming_service - MESSAGE( str(Container_path) ) - naming_service.Register(self._this(), Container_path) - - #------------------------------------------------------------------------- - - def start_impl(self, ContainerName): - MESSAGE( "SALOME_ContainerPy_i::start_impl " + str(ContainerName) ) - myMachine=getShortHostName() - theContainer = "/Containers/" + myMachine + "/" + ContainerName - try: - obj = self._naming_service.Resolve(theContainer) - except : - obj = None - MESSAGE( "SALOME_ContainerPy_i::start_impl " + str(ContainerName) + ".object not found in Naming Service" ) - if obj is None: - container = None - else: - container = obj._narrow(Engines.Container) - if container is None: - MESSAGE( "SALOME_ContainerPy_i::start_impl " + str(containerName) + ".object exists but is not a Container" ) - else : - MESSAGE( "SALOME_ContainerPy_i::start_impl " + str(ContainerName) + ".object found without new launch" ) - return container - #shstr = os.getenv( "PWD" ) + "/" - #shstr += "runSession ./SALOME_ContainerPy.py " - shstr = os.getenv("KERNEL_ROOT_DIR") + "/bin/salome/SALOME_ContainerPy.py "; - #shstr = "runSession SALOME_ContainerPy.py " - shstr += ContainerName - - # mpv: fix for SAL4731 - allways create new file to write log of server - num = 1 - fileName = "" - while 1: - fileName = "/tmp/"+ContainerName+"_%i.log"%num - if not os.path.exists(fileName): - break - num += 1 - pass - - shstr += " > " - shstr += fileName - shstr += " 2>&1 &" - - #shstr += " > /tmp/" - #shstr += ContainerName - #shstr += ".log 2>&1 &" - - MESSAGE( "SALOME_ContainerPy_i::start_impl " + "os.system(" + str(shstr) + ")" ) - os.system( shstr ) - count = 21 - while container is None : - time.sleep(1) - count = count - 1 - MESSAGE( str(count) + ". Waiting for " + str(theContainer) ) - try : - obj = self._naming_service.Resolve(theContainer) - except : - obj = None - if obj is None: - container = None - else: - container = obj._narrow(Engines.Container) - if container is None: - MESSAGE( str(containerName) + ".object exists but is not a Container" ) - return container - if count == 0 : - return container - - #------------------------------------------------------------------------- - - def instance(self, nameToRegister, componentName): - MESSAGE( "SALOME_ContainerPy_i::instance " + str(nameToRegister) + ' ' + str(componentName) ) - self._numInstance = self._numInstance +1 - instanceName = nameToRegister + "_inst_" + `self._numInstance` - - component=__import__(componentName) - factory=getattr(component,componentName) - comp_i=factory(self._orb, self._poa, self._this(), self._containerName, - instanceName, nameToRegister) - - MESSAGE( "SALOME_ContainerPy_i::instance : component created") - comp_o = comp_i._this() - return comp_o - - #------------------------------------------------------------------------- - - def load_impl(self, nameToRegister, componentName): - MESSAGE( "SALOME_ContainerPy_i::load_impl " + str(nameToRegister) + ' ' + str(componentName) ) - self._numInstance = self._numInstance +1 - instanceName = nameToRegister + "_inst_" + `self._numInstance` - interfaceName = nameToRegister - the_command = "import " + nameToRegister + "\n" - the_command = the_command + "comp_i = " + nameToRegister + "." + nameToRegister - the_command = the_command + "(self._orb, self._poa, self._this(), self._containerName, instanceName, interfaceName)\n" - MESSAGE( "SALOME_ContainerPy_i::load_impl :" + str (the_command) ) - exec the_command - comp_o = comp_i._this() - return comp_o - - #------------------------------------------------------------------------- - - def import_component(self, componentName): - MESSAGE( "SALOME_Container_i::import_component" ) - reason = "" - try: - if verbose(): print "try import %s" % componentName - # try import component - module=__import__(componentName) - if verbose(): print "import %s is done successfully" % componentName - # if import successfully, check that component is loadable - if not hasattr(module, componentName): - reason = "module %s is not loadable" % componentName - print reason - pass - pass - except: - import traceback - print "cannot import %s" % componentName - traceback.print_exc() - reason = "cannot import %s" % componentName - return reason - - #------------------------------------------------------------------------- - - def load_component_Library(self, componentName): - MESSAGE( "SALOME_ContainerPy_i::load_component_Library " + str(componentName) ) - ret = 0 - instanceName = componentName + "_inst_" + `self._numInstance` - interfaceName = componentName - reason = self.import_component(componentName) - return reason == "", reason - - #------------------------------------------------------------------------- - - def create_component_instance_env(self, componentName, studyId, env): - return self.create_component_instance(componentName, studyId), "" - - def create_component_instance(self, componentName, studyId): - MESSAGE( "SALOME_ContainerPy_i::create_component_instance ==> " + str(componentName) + ' ' + str(studyId) ) - if studyId < 0: - MESSAGE( "Study ID is lower than 0!" ) - return None - else: - self._numInstance = self._numInstance +1 - instanceName = componentName + "_inst_" + `self._numInstance` - comp_iors="" - try: - component=__import__(componentName) - factory=getattr(component,componentName) - comp_i=factory(self._orb, - self._poa, - self._this(), - self._containerName, - instanceName, - componentName) - - MESSAGE( "SALOME_Container_i::create_component_instance : OK") - comp_o = comp_i._this() - self._listInstances_map[instanceName] = comp_i - except: - import traceback - traceback.print_exc() - MESSAGE( "SALOME_Container_i::create_component_instance : NOT OK") - return comp_o - - #------------------------------------------------------------------------- - - def find_component_instance(self, registeredName, studyId): - anEngine = None - keysList = self._listInstances_map.keys() - i = 0 - while i < len(keysList): - instance = keysList[i] - if find(instance,registeredName) == 0: - anEngine = self._listInstances_map[instance] - if studyId == anEngine.getStudyId(): - return anEngine._this() - i = i + 1 - return anEngine._this() - - - #------------------------------------------------------------------------- - - def remove_impl(self, component): - MESSAGE( "SALOME_ContainerPy_i::remove_impl" ) - instanceName = component._get_instanceName() - MESSAGE( "unload component " + str(instanceName) ) - self._listInstances_map.remove(instanceName) - component.destroy() - self._naming_service.Destroy_Name(str(instanceName)) - - #------------------------------------------------------------------------- - - def finalize_removal(self): - MESSAGE( "SALOME_ContainerPy_i::finalize_removal" ) - return None - - #------------------------------------------------------------------------- - - def ping(self): - MESSAGE( "SALOME_ContainerPy_i::ping() pid " + str(os.getpid()) ) - return None - - #------------------------------------------------------------------------- - - def getPID(self): - return os.getpid() - - #------------------------------------------------------------------------- - - def _get_name(self): - MESSAGE( "SALOME_ContainerPy_i::_get_name" ) - return self._containerName - - #------------------------------------------------------------------------- - - def getHostName(self): - MESSAGE( "SALOME_ContainerPy_i::_get_MachineName" ) - self._machineName = "localhost" - return self._machineName - - #------------------------------------------------------------------------- - - def _get_machineName(self): - MESSAGE( "SALOME_ContainerPy_i::_get_MachineName" ) - self._machineName = "localhost" - return self._machineName - - #------------------------------------------------------------------------- - - def Shutdown(self): - self._naming_service.Destroy_Name(self._containerName); - self._naming_service.Destroy_FullDirectory(self._containerName); - self._orb.shutdown(0) - pass - - def _get_logfilename(self): - return self._logfilename - def _set_logfilename(self,logfilename): - self._logfilename=logfilename - def _get_workingdir(self): - return os.getcwd() - -#============================================================================= - -if __name__ == "__main__": - # change the stdout buffering to line buffering (same as C++ cout buffering) - sys.stdout=os.fdopen(1,"w",1) - #initialise the ORB and find the root POA - if verbose():print "Starting ",sys.argv[1] - orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID) - poa = orb.resolve_initial_references("RootPOA") - if verbose():print "ORB and POA initialized" - - #create an instance of SALOME_ContainerPy_i and a Container reference - #containerName = "FactoryServerPy" - MESSAGE( str(sys.argv) ) - containerName = sys.argv[1] - cpy_i = SALOME_ContainerPy_i(orb, poa, containerName) - if verbose():print "SALOME_ContainerPy_i instance created ",cpy_i - cpy_o = cpy_i._this() - if verbose():print "SALOME_ContainerPy_i instance activated ",cpy_o - sys.stdout.flush() - sys.stderr.flush() - - #activate the POA - poaManager = poa._get_the_POAManager() - poaManager.activate() - - #Block for ever - orb.run() - if verbose():print "SALOME_ContainerPy_i shutdown" diff --git a/src/DF/CMakeLists.txt b/src/DF/CMakeLists.txt new file mode 100755 index 000000000..013773a91 --- /dev/null +++ b/src/DF/CMakeLists.txt @@ -0,0 +1,50 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${BOOST_INCLUDE_DIRS} +) + +SET(DF_SOURCES + DF_Attribute.cxx + DF_Label.cxx + DF_Document.cxx + DF_Application.cxx + DF_ChildIterator.cxx + DF_Container.cxx + DF_Attribute.hxx + DF_Label.hxx + DF_Application.hxx + DF_Document.hxx + DF_ChildIterator.hxx + DF_Container.hxx + DF_definitions.hxx +) + +ADD_LIBRARY(DF SHARED ${DF_SOURCES}) +SET_TARGET_PROPERTIES(DF PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS}") +INSTALL(TARGETS DF DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(testDF testDF.cxx) +SET_TARGET_PROPERTIES(testDF PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS}") +TARGET_LINK_LIBRARIES(testDF DF) +INSTALL(TARGETS testDF DESTINATION ${KERNEL_salomebin_BINS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/DSC/CMakeLists.txt b/src/DSC/CMakeLists.txt new file mode 100755 index 000000000..97881f53e --- /dev/null +++ b/src/DSC/CMakeLists.txt @@ -0,0 +1,45 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +SET(SUBDIRS_COMMON + DSC_Basic +) + +IF(NOT WINDOWS) + SET(SUBDIRS_ADD + DSC_User + DSC_Python + ) +ENDIF(NOT WINDOWS) + +IF(WITH_PACO_PARALLEL) + SET(SUBDIR_PAR + ParallelDSC + ) +ENDIF(WITH_PACO_PARALLEL) + +SET(SUBDIRS + ${SUBDIRS_COMMON} + ${SUBDIRS_ADD} + ${SUBDIR_PAR} +) + +FOREACH(DIR ${SUBDIRS}) + ADD_SUBDIRECTORY(${DIR}) +ENDFOREACH(DIR ${SUBDIRS}) diff --git a/src/DSC/DSC_Basic/CMakeLists.txt b/src/DSC/DSC_Basic/CMakeLists.txt new file mode 100755 index 000000000..2889e0613 --- /dev/null +++ b/src/DSC/DSC_Basic/CMakeLists.txt @@ -0,0 +1,64 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_SOURCE_DIR}/src/Container + ${CMAKE_SOURCE_DIR}/src/GenericObj + ${CMAKE_SOURCE_DIR}/src/Notification + ${CMAKE_SOURCE_DIR}/src/SALOMELocalTrace + ${CMAKE_SOURCE_DIR}/src/Basics + ${CMAKE_SOURCE_DIR}/src/NamingService + ${CMAKE_SOURCE_DIR}/src/Utils + ${CMAKE_BINARY_DIR}/idl +) + +SET(SalomeDSCContainer_SOURCES + DSC_i.cxx + DSC_interface.cxx + PortProperties_i.cxx +) + +ADD_LIBRARY(SalomeDSCContainer SHARED ${SalomeDSCContainer_SOURCES}) +SET_TARGET_PROPERTIES(SalomeDSCContainer PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeDSCContainer SalomeContainer ${OMNIORB_LIBS}) +INSTALL(TARGETS SalomeDSCContainer DESTINATION ${KERNEL_salomelib_LIBS}) + +SET(SALOME_ConnectionManagerServer_SOURCES + SALOME_ConnectionManagerServer.cxx + ConnectionManager_i.cxx +) + +SET(SALOME_ConnectionManagerServer_LIBS + SalomeIDLKernel + SalomeNS + SALOMELocalTrace + SalomeContainer + ${OMNIORB_LIBS} +) + +ADD_EXECUTABLE(SALOME_ConnectionManagerServer ${SALOME_ConnectionManagerServer_SOURCES}) +SET_TARGET_PROPERTIES(SALOME_ConnectionManagerServer PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOME_ConnectionManagerServer ${SALOME_ConnectionManagerServer_LIBS}) +INSTALL(TARGETS SALOME_ConnectionManagerServer DESTINATION ${KERNEL_salomebin_BINS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/DSC/DSC_Python/CMakeLists.txt b/src/DSC/DSC_Python/CMakeLists.txt new file mode 100755 index 000000000..2b83e1961 --- /dev/null +++ b/src/DSC/DSC_Python/CMakeLists.txt @@ -0,0 +1,67 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +FIND_PACKAGE(SWIG REQUIRED) +INCLUDE(${SWIG_USE_FILE}) + +SET_SOURCE_FILES_PROPERTIES(calcium.i PROPERTIES CPLUSPLUS ON) +SET(CMAKE_SWIG_FLAGS "-noexcept") +SET_SOURCE_FILES_PROPERTIES(calciumPYTHON_wrap.cxx PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${BOOST_DEFINITIONS}") + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${PYTHON_INCLUDE_DIRS} + ${BOOST_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User/Datastream + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User/Datastream/Palm + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User/Datastream/Calcium + ${CMAKE_BINARY_DIR}/src/DSC/DSC_User/Datastream/Calcium + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User/Basic + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_Basic + ${CMAKE_SOURCE_DIR}/src/SALOMELocalTrace + ${CMAKE_SOURCE_DIR}/src/Basics + ${CMAKE_SOURCE_DIR}/src/Utils + ${CMAKE_SOURCE_DIR}/src/Container + ${CMAKE_SOURCE_DIR}/src/GenericObj + ${CMAKE_SOURCE_DIR}/src/Notification + ${CMAKE_BINARY_DIR}/idl + ) + +SET(_calcium_LIBS + CalciumC + SalomeDatastream + SalomeDSCSupervBasic + SalomeDSCSuperv + SalomeDSCContainer + SalomeContainer + ${CORBA_LIBS} +) + +SWIG_ADD_MODULE(calcium python calcium.i) +SWIG_LINK_LIBRARIES(calcium ${_calcium_LIBS}) +SET_TARGET_PROPERTIES(_calcium PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${BOOST_DEFINITIONS}") +INSTALL(TARGETS _calcium DESTINATION ${KERNEL_salomepythondir}) + +SET(SCRIPTS + dsccalcium.py +) +SALOME_INSTALL_SCRIPTS( ${SCRIPTS} ${KERNEL_salomepythondir}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/calcium.py DESTINATION ${KERNEL_salomepythondir}) diff --git a/src/DSC/DSC_Python/Makefile.am b/src/DSC/DSC_Python/Makefile.am index db96c558c..071c9e3d3 100644 --- a/src/DSC/DSC_Python/Makefile.am +++ b/src/DSC/DSC_Python/Makefile.am @@ -72,7 +72,7 @@ _calcium_la_LIBADD = ../DSC_User/Datastream/Calcium/libCalciumC.la \ _calcium_la_CPPFLAGS = $(PYTHON_INCLUDES) $(COMMON_CPPFLAGS) -EXTRA_DIST=calcium_wrap.cpp calcium.i +EXTRA_DIST+=calcium_wrap.cpp calcium.i calcium_wrap.cpp calcium.py:calcium.i $(SWIG) $(MY_SWIG_FLAGS) -o calcium_wrap.cpp $< diff --git a/src/DSC/DSC_Python/calcium.i b/src/DSC/DSC_Python/calcium.i index 29a74ffab..5e7e7de73 100644 --- a/src/DSC/DSC_Python/calcium.i +++ b/src/DSC/DSC_Python/calcium.i @@ -888,6 +888,7 @@ int cp_cd(Superv_Component_i *component,char *instanceName); int cp_een(Superv_Component_i *component,int dep,float t,int n,char *nom,int nval,int *eval); int cp_edb(Superv_Component_i *component,int dep,double t,int n,char *nom,int nval,double *eval); int cp_ere(Superv_Component_i *component,int dep,float t,int n,char *nom,int nval,float *eval); +int cp_erd(Superv_Component_i *component,int dep,float t,int n,char *nom,int nval,float *eval); int cp_ecp(Superv_Component_i *component,int dep,float t,int n,char *nom,int nval,float *ecpval); int cp_elo(Superv_Component_i *component,int dep,float t,int n,char *nom,int nval,int *eval); int cp_ech(Superv_Component_i *component,int dep,float t,int n,char *nom,int nval,char** eval,int strSize); @@ -898,6 +899,7 @@ int cp_eln(Superv_Component_i *component,int dep,float t,int n,char *nom,int nv int cp_len(Superv_Component_i *component,int dep,float *ti,float *tf,int *niter,char *nom,int nmax,int *nval,int *lval); int cp_ldb(Superv_Component_i *component,int dep,double *ti,double *tf,int *niter,char *nom,int nmax,int *nval,double *lval); int cp_lre(Superv_Component_i *component,int dep,float *ti,float *tf,int *niter,char *nom,int nmax,int *nval,float *lval); +int cp_lrd(Superv_Component_i *component,int dep,float *ti,float *tf,int *niter,char *nom,int nmax,int *nval,float *lval); int cp_lcp(Superv_Component_i *component,int dep,float *ti,float *tf,int *niter,char *nom,int nmax,int *nval,float *lcpval); int cp_llo(Superv_Component_i *component,int dep,float *ti,float *tf,int *niter,char *nom,int nmax,int *nval,int *lval); int cp_lch(Superv_Component_i *component,int dep,float *ti,float *tf,int *niter,char *nom,int nmax,int *nval,char** lval,int strSize); diff --git a/src/DSC/DSC_User/Basic/CMakeLists.txt b/src/DSC/DSC_User/Basic/CMakeLists.txt new file mode 100755 index 000000000..3a2808cbb --- /dev/null +++ b/src/DSC/DSC_User/Basic/CMakeLists.txt @@ -0,0 +1,45 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/idl + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_Basic + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User + ${CMAKE_SOURCE_DIR}/src/Container + ${CMAKE_SOURCE_DIR}/src/GenericObj + ${CMAKE_SOURCE_DIR}/src/Notification + ${CMAKE_SOURCE_DIR}/src/SALOMELocalTrace + ${CMAKE_SOURCE_DIR}/src/Basics + ${CMAKE_SOURCE_DIR}/src/Utils) + +SET(SalomeDSCSupervBasic_SOURCES + basic_port_factory.cxx + data_short_port_uses.cxx + data_short_port_provides.cxx +) + +ADD_LIBRARY(SalomeDSCSupervBasic SHARED ${SalomeDSCSupervBasic_SOURCES}) +SET_TARGET_PROPERTIES(SalomeDSCSupervBasic PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeDSCSupervBasic SalomeDSCSuperv) +INSTALL(TARGETS SalomeDSCSupervBasic DESTINATION ${KERNEL_salomelib_LIBS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/DSC/DSC_User/CMakeLists.txt b/src/DSC/DSC_User/CMakeLists.txt new file mode 100755 index 000000000..779f14330 --- /dev/null +++ b/src/DSC/DSC_User/CMakeLists.txt @@ -0,0 +1,58 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +ADD_SUBDIRECTORY(Basic) +ADD_SUBDIRECTORY(Datastream) + +INCLUDE_DIRECTORIES( + ${BOOST_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_SOURCE_DIR}/src/Container + ${CMAKE_SOURCE_DIR}/src/GenericObj + ${CMAKE_SOURCE_DIR}/src/Notification + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_Basic + ${CMAKE_SOURCE_DIR}/src/SALOMELocalTrace + ${CMAKE_SOURCE_DIR}/src/Basics + ${CMAKE_SOURCE_DIR}/src/Utils + ${CMAKE_BINARY_DIR}/idl +) + +SET(COMMON_FLAGS + ${OMNIORB_DEFINITIONS} + ${BOOST_DEFINITIONS} +) +SET(SalomeDSCSuperv_SOURCES + base_port.cxx + uses_port.cxx + provides_port.cxx + Superv_Component_i.cxx +) + +ADD_LIBRARY(SalomeDSCSuperv SHARED ${SalomeDSCSuperv_SOURCES}) +SET_TARGET_PROPERTIES(SalomeDSCSuperv PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeDSCSuperv SalomeDSCContainer ${PLATFORM_LIBS}) +INSTALL(TARGETS SalomeDSCSuperv DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(test_DSC_Exception test_DSC_Exception.cxx) +SET_TARGET_PROPERTIES(test_DSC_Exception PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(test_DSC_Exception OpUtil SALOMELocalTrace ${OMNIORB_FLAGS} ${PLATFORM_LIBS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/DSC/DSC_User/Datastream/CMakeLists.txt b/src/DSC/DSC_User/Datastream/CMakeLists.txt new file mode 100755 index 000000000..99c0dac48 --- /dev/null +++ b/src/DSC/DSC_User/Datastream/CMakeLists.txt @@ -0,0 +1,58 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +ADD_SUBDIRECTORY(Palm) +ADD_SUBDIRECTORY(Calcium) + +INCLUDE_DIRECTORIES( + ${BOOST_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User + ${CMAKE_BINARY_DIR}/src/DSC/DSC_User/Datastream/Palm + ${CMAKE_BINARY_DIR}/src/DSC/DSC_User/Datastream/Calcium + ${CMAKE_CURRENT_SOURCE_DIR}/.. +) + +# This local variable defines the list of dependant libraries common to all target in this package. +SET(COMMON_LIBS + SalomePalm + SalomeCalcium + SalomeDSCSuperv +) + +ADD_LIBRARY(SalomeDatastream SHARED fake.cc) +SET_TARGET_PROPERTIES(SalomeDatastream PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeDatastream ${COMMON_LIBS}) +INSTALL(TARGETS SalomeDatastream DESTINATION ${KERNEL_salomelib_LIBS}) + +SET(COMMON_HEADERS_HXX + AdjacentFunctor.hxx + ConstTraits.hxx + CorbaTypeManipulator.hxx + CouplingPolicy.hxx + DataIdFilter.hxx + DisplayPair.hxx + FindKeyPredicate.hxx + GenericPort.hxx + GenericProvidesPort.hxx + GenericUsesPort.hxx + IteratorTraits.hxx +) + +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/DSC/DSC_User/Datastream/Calcium/CMakeLists.txt b/src/DSC/DSC_User/Datastream/Calcium/CMakeLists.txt new file mode 100755 index 000000000..f0613a763 --- /dev/null +++ b/src/DSC/DSC_User/Datastream/Calcium/CMakeLists.txt @@ -0,0 +1,114 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${BOOST_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User/Datastream + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User/Datastream/Palm + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User/Datastream/Calcium + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User/Basic + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_Basic + ${CMAKE_SOURCE_DIR}/src/SALOMELocalTrace + ${CMAKE_SOURCE_DIR}/src/Basics + ${CMAKE_SOURCE_DIR}/src/Utils + ${CMAKE_SOURCE_DIR}/src/Container + ${CMAKE_SOURCE_DIR}/src/GenericObj + ${CMAKE_SOURCE_DIR}/src/Notification + ${CMAKE_BINARY_DIR}/idl + ${CMAKE_BINARY_DIR}/src/DSC/DSC_User/Datastream/Calcium +) + +SET(SalomeCalcium_SOURCES + calcium_port_factory.cxx + calcium_uses_port.cxx + calcium_provides_port.cxx + calcium_repository_types.cxx + CalciumCouplingPolicy.cxx + CorbaTypes2CalciumTypes.cxx + CalciumCxxInterface.cxx + CalciumTypes2CorbaTypes.cxx + CalciumCInterface.cxx + CalciumProvidesPort.cxx + Calcium.cxx + calcium_destructors_port_uses.cxx +) +ADD_LIBRARY(SalomeCalcium SHARED ${SalomeCalcium_SOURCES}) +SET_TARGET_PROPERTIES(SalomeCalcium PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeCalcium ${PTHREAD_LIBS} ${CORBA_LIBS} ${PLATFORM_LIBS}) + +SET(CalciumC_SOURCES + CalciumC.c + Calcium.cxx + calciumf.c +) +ADD_LIBRARY(CalciumC SHARED ${CalciumC_SOURCES}) +SET_TARGET_PROPERTIES(CalciumC PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + +INSTALL(TARGETS CalciumC DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(test_DataIdContainer test_DataIdContainer.cxx) +SET_TARGET_PROPERTIES(test_DataIdContainer PROPERTIES COMPILE_FLAGS "${BOOST_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(test_DataIdContainer SalomeDSCSuperv SalomeContainer SalomeCalcium OpUtil SALOMELocalTrace ${CORBA_LIBS} ${PLATFORM_LIBS}) + +CONFIGURE_FILE(calcium_integer_port_uses.hxx.in calcium_integer_port_uses.hxx @ONLY) +CONFIGURE_FILE(CalciumProvidesPort.hxx.in CalciumProvidesPort.hxx @ONLY) +CONFIGURE_FILE(CalciumFortranInt.h.in CalciumFortranInt.h @ONLY) + +SET(COMMON_HEADERS + Calcium.hxx + CalciumCInterface.hxx + CalciumCouplingPolicy.hxx + CalciumCxxInterface.hxx + CalciumException.hxx + CalciumGenericProvidesPort.hxx + CalciumGenericUsesPort.hxx + CalciumInterface.hxx + CalciumMacroCInterface.hxx + CalciumPortTraits.hxx + CalciumTypes.hxx + CalciumTypes2CorbaTypes.hxx + Copy2CorbaSpace.hxx + Copy2UserSpace.hxx + CorbaTypes2CalciumTypes.hxx + calcium_complex_port_uses.hxx + calcium_double_port_uses.hxx + calcium_intc_port_uses.hxx + calcium_logical_port_uses.hxx + calcium_long_port_uses.hxx + calcium_port_factory.hxx + calcium_provides_port.hxx + calcium_real_port_uses.hxx + calcium_string_port_uses.hxx + calcium_uses_port.hxx + calcium.h + calcium.hf + calciumE.h + calciumP.h + calciumf.h + fortoc.h + version.h + ${CMAKE_CURRENT_BINARY_DIR}/CalciumFortranInt.h + ${CMAKE_CURRENT_BINARY_DIR}/CalciumProvidesPort.hxx + ${CMAKE_CURRENT_BINARY_DIR}/calcium_integer_port_uses.hxx +) +INSTALL(FILES ${COMMON_HEADERS} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/DSC/DSC_User/Datastream/Calcium/CalciumC.c b/src/DSC/DSC_User/Datastream/Calcium/CalciumC.c index 24a766e73..105c2a93b 100644 --- a/src/DSC/DSC_User/Datastream/Calcium/CalciumC.c +++ b/src/DSC/DSC_User/Datastream/Calcium/CalciumC.c @@ -120,12 +120,16 @@ void ecp_lch_free (char* * data) { \ /*REVERIFIER MAINTENANT 0 COPY avec int2integer*/ CALCIUM_EXT_LECT_INTERFACE_C_(len,float,int,int2integer,); CALCIUM_EXT_LECT_INTERFACE_C_(lre,float,float,float,); +/*Permet d'envoyer/recevoir des réels sur un port Double */ +CALCIUM_EXT_LECT_INTERFACE_C_(lrd,float ,float ,float2double,); CALCIUM_EXT_LECT_INTERFACE_C_(ldb,double,double,double,); + CALCIUM_EXT_LECT_INTERFACE_C_(llo,float,int,bool,); CALCIUM_EXT_LECT_INTERFACE_C_(lcp,float,float,cplx,); /* CALCIUM_EXT_LECT_INTERFACE_C_(lch,float,char,STAR[]); */ + /**************************************/ /* INTERFACES DE LECTURE AVEC RECOPIE */ /**************************************/ @@ -204,7 +208,10 @@ CALCIUM_LECT_INTERFACE_C_(llg,float ,int,long ,long2integer,,); CALCIUM_LECT_INTERFACE_C_(lln,float ,int,long ,long,,); CALCIUM_LECT_INTERFACE_C_(lre,float ,int,float ,float,,); +/*Permet d'envoyer/recevoir des réels sur un port Double */ +CALCIUM_LECT_INTERFACE_C_(lrd,float ,int,float ,float2double,,); CALCIUM_LECT_INTERFACE_C_(ldb,double,int,double ,double,,); + CALCIUM_LECT_INTERFACE_C_(llo,float ,int,int ,bool,,); CALCIUM_LECT_INTERFACE_C_(lcp,float ,int,float ,cplx,,); #define STAR * @@ -222,6 +229,7 @@ CALCIUM_LECT_INTERFACE_C_(lin_fort_,float ,cal_int,int ,int2integer,,); CALCIUM_LECT_INTERFACE_C_(llg_fort_,float ,cal_int,long ,long2integer,,); CALCIUM_LECT_INTERFACE_C_(lre_fort_,float ,cal_int,float ,float,,); +CALCIUM_LECT_INTERFACE_C_(lrd_fort_,float ,cal_int,float ,float2double,,); CALCIUM_LECT_INTERFACE_C_(ldb_fort_,double,cal_int,double ,double,,); CALCIUM_LECT_INTERFACE_C_(llo_fort_,float ,cal_int,int ,bool,,); /*int pour bool ou cal_int */ CALCIUM_LECT_INTERFACE_C_(lcp_fort_,float ,cal_int,float ,cplx,,); @@ -305,7 +313,10 @@ CALCIUM_ECR_INTERFACE_C_(een,float ,int,int ,int2integer,,); sinon problème de conversion de 64bits vers 32bits */ CALCIUM_ECR_INTERFACE_C_(elg,float ,int,long ,long2integer,,); CALCIUM_ECR_INTERFACE_C_(ere,float ,int,float ,float,,); +/*Permet d'envoyer/recevoir des réels sur un port Double */ +CALCIUM_ECR_INTERFACE_C_(erd,float ,int,float ,float2double,,); CALCIUM_ECR_INTERFACE_C_(edb,double,int,double,double,,); + CALCIUM_ECR_INTERFACE_C_(elo,float ,int,int ,bool,,); CALCIUM_ECR_INTERFACE_C_(ecp,float ,int,float ,cplx,,); CALCIUM_ECR_INTERFACE_C_(ech,float ,int,char ,str,STAR,LCH_LAST_PARAM ); @@ -321,6 +332,7 @@ CALCIUM_ECR_INTERFACE_C_(een_fort_,float ,cal_int,cal_int,integer,,); CALCIUM_ECR_INTERFACE_C_(elg_fort_,float ,cal_int,long ,long2integer,,); CALCIUM_ECR_INTERFACE_C_(ein_fort_,float ,cal_int,int ,int2integer,,); CALCIUM_ECR_INTERFACE_C_(ere_fort_,float ,cal_int,float ,float,,); +CALCIUM_ECR_INTERFACE_C_(erd_fort_,float ,cal_int,float ,float2double,,); CALCIUM_ECR_INTERFACE_C_(edb_fort_,double,cal_int,double,double,,); CALCIUM_ECR_INTERFACE_C_(elo_fort_,float ,cal_int,int ,bool,,); CALCIUM_ECR_INTERFACE_C_(ecp_fort_,float ,cal_int,float ,cplx,,); diff --git a/src/DSC/DSC_User/Datastream/Calcium/CalciumCInterface.cxx b/src/DSC/DSC_User/Datastream/Calcium/CalciumCInterface.cxx index a9974edcf..107e5f479 100644 --- a/src/DSC/DSC_User/Datastream/Calcium/CalciumCInterface.cxx +++ b/src/DSC/DSC_User/Datastream/Calcium/CalciumCInterface.cxx @@ -66,6 +66,9 @@ CALCIUM_C2CPP_INTERFACE_CXX_(long2integer, integer, long,); CALCIUM_C2CPP_INTERFACE_CXX_(float,float,float, ); CALCIUM_C2CPP_INTERFACE_CXX_(double,double,double,); + +CALCIUM_C2CPP_INTERFACE_CXX_(float2double,double,float, ); + /* Fonnctionne mais essai suivant pour simplification de Calcium.c CALCIUM_C2CPP_INTERFACE_(bool,bool,);*/ CALCIUM_C2CPP_INTERFACE_CXX_(bool,bool,int,); CALCIUM_C2CPP_INTERFACE_CXX_(cplx,cplx,float,); diff --git a/src/DSC/DSC_User/Datastream/Calcium/CalciumCInterface.hxx b/src/DSC/DSC_User/Datastream/Calcium/CalciumCInterface.hxx index e6eca1ae3..84e117aba 100644 --- a/src/DSC/DSC_User/Datastream/Calcium/CalciumCInterface.hxx +++ b/src/DSC/DSC_User/Datastream/Calcium/CalciumCInterface.hxx @@ -80,6 +80,9 @@ CALCIUM_C2CPP_INTERFACE_HXX_(long2integer,integer, long,); CALCIUM_C2CPP_INTERFACE_HXX_(float,float,float, ); CALCIUM_C2CPP_INTERFACE_HXX_(double,double,double,); + +CALCIUM_C2CPP_INTERFACE_HXX_(float2double,double,float, ); + /* Fonctionne mais essai suivant pour simplification de Calcium.c CALCIUM_C2CPP_INTERFACE_(bool,bool,);*/ CALCIUM_C2CPP_INTERFACE_HXX_(bool,bool,int,); CALCIUM_C2CPP_INTERFACE_HXX_(cplx,cplx,float,); diff --git a/src/DSC/DSC_User/Datastream/Calcium/Makefile.am b/src/DSC/DSC_User/Datastream/Calcium/Makefile.am index deff2298c..0e12027b3 100644 --- a/src/DSC/DSC_User/Datastream/Calcium/Makefile.am +++ b/src/DSC/DSC_User/Datastream/Calcium/Makefile.am @@ -66,7 +66,7 @@ salomeinclude_HEADERS = calcium_port_factory.hxx \ nodist_salomeinclude_HEADERS = calcium_integer_port_uses.hxx CalciumProvidesPort.hxx CalciumFortranInt.h -EXTRA_DIST=fortoc.h calcium_integer_port_uses.hxx.in CalciumProvidesPort.hxx.in CalciumFortranInt.h.in +EXTRA_DIST+=fortoc.h calcium_integer_port_uses.hxx.in CalciumProvidesPort.hxx.in CalciumFortranInt.h.in calcium_integer_port_uses.hxx: calcium_integer_port_uses.hxx.in CalciumProvidesPort.hxx : CalciumProvidesPort.hxx.in diff --git a/src/DSC/DSC_User/Datastream/Calcium/calcium.h b/src/DSC/DSC_User/Datastream/Calcium/calcium.h index f103fe937..4a43be266 100644 --- a/src/DSC/DSC_User/Datastream/Calcium/calcium.h +++ b/src/DSC/DSC_User/Datastream/Calcium/calcium.h @@ -169,6 +169,29 @@ extern int cp_lre( #endif ); +extern int cp_lrd( +/* ------ */ +#if CPNeedPrototype + void * component /* Pointeur de type Superv_Component_i* sur le */ + /* composant SALOME Supervisable */, + int /* E Type de dependance ou de lecture */ + /* CP_TEMPS, CP_ITERATION, CP_SEQUENTIEL */, + float * /* E/S Borne inf de l'intervalle de lecture */ + /* Retourne le pas lu dans le cas de */ + /* lecture sequentielle */, + float * /* E Borne Sup de l'intervalle de lecture */, + int * /* E/S Pas d'iteration a lire */ + /* Retourne le pas lu dans le cas de */ + /* lecture sequentielle */, + char * /* E Nom de la variable a lire */, + int /* E Nombre max de valeurs a lire */, + int * /* S Nombre de valeurs rellement lues */, + float * /* S Tableau de flottants pour stocker les */ + /* valeurs lues */ +#endif +); + + extern int cp_ldb( /* ------ */ #if CPNeedPrototype @@ -470,6 +493,22 @@ extern int cp_ere( #endif ); +extern int cp_erd( +/* ------ */ +#if CPNeedPrototype + void * component /* Pointeur de type Superv_Component_i* sur le */ + /* composant SALOME Supervisable */, + int /* E Type de dependance */ + /* CP_TEMPS, CP_ITERATION */, + float /* E Pas de temps a ecrire */, + int /* E Pas d'iteration a ecrire */, + char * /* E Nom de la variable a ecrire */, + int /* E Nombre de valeurs a ecrire */, + float * /* E Tableau de flottants a ecrire */ +#endif +); + + extern int cp_edb( /* ------ */ #if CPNeedPrototype diff --git a/src/DSC/DSC_User/Datastream/Calcium/calciumf.c b/src/DSC/DSC_User/Datastream/Calcium/calciumf.c index 5b63bb3e2..e01915c73 100644 --- a/src/DSC/DSC_User/Datastream/Calcium/calciumf.c +++ b/src/DSC/DSC_User/Datastream/Calcium/calciumf.c @@ -155,6 +155,8 @@ void F_FUNC(cpldb,CPLDB)(long *compo,cal_int *dep,double *ti,double *tf,cal_int cal_int *max,cal_int *n, double *tab,cal_int *err STR_PLEN(nom)); void F_FUNC(cplre,CPLRE)(long *compo,cal_int *dep,float *ti,float *tf,cal_int *iter,STR_PSTR(nom), cal_int *max,cal_int *n, float *tab,cal_int *err STR_PLEN(nom)); +void F_FUNC(cplrd,CPLRD)(long *compo,cal_int *dep,float *ti,float *tf,cal_int *iter,STR_PSTR(nom), + cal_int *max,cal_int *n, double *tab,cal_int *err STR_PLEN(nom)); void F_FUNC(cplcp,CPLCP)(long *compo,cal_int *dep,float *ti,float *tf,cal_int *iter,STR_PSTR(nom), cal_int *max,cal_int *n, float *tab,cal_int *err STR_PLEN(nom)); void F_FUNC(cplch,CPLCH)(long *compo,cal_int *dep,float *ti,float *tf,cal_int *iter,STR_PSTR(nom), @@ -241,6 +243,14 @@ void F_FUNC(cplre,CPLRE)(long *compo,cal_int *dep,float *ti,float *tf,cal_int *i free_str1(cnom); } +void F_FUNC(cplrd,CPLRD)(long *compo,cal_int *dep,float *ti,float *tf,cal_int *iter,STR_PSTR(nom), + cal_int *max,cal_int *n, double *tab,cal_int *err STR_PLEN(nom)) +{ + char* cnom=fstr1(STR_PTR(nom),STR_LEN(nom)); + *err=cp_lrd_fort_((void *)*compo,*dep,ti,tf,iter,cnom,*max,n,(float *)tab); + free_str1(cnom); +} + void F_FUNC(cplcp,CPLCP)(long *compo,cal_int *dep,float *ti,float *tf,cal_int *iter,STR_PSTR(nom), cal_int *max,cal_int *n, float *tab,cal_int *err STR_PLEN(nom)) { @@ -289,6 +299,7 @@ void F_FUNC(cpech,CPECH)(long *compo,cal_int *dep,float *ti,cal_int *iter,STR_PS STR_PLEN(nom) STR_PLEN(tab)); void F_FUNC(cpedb,CPEDB)(long *compo,cal_int *dep,double *ti,cal_int *iter,STR_PSTR(nom),cal_int *n, double *tab,cal_int *err STR_PLEN(nom)); void F_FUNC(cpere,CPERE)(long *compo,cal_int *dep,float *ti,cal_int *iter,STR_PSTR(nom),cal_int *n, float *tab,cal_int *err STR_PLEN(nom)); +void F_FUNC(cperd,CPERD)(long *compo,cal_int *dep,float *ti,cal_int *iter,STR_PSTR(nom),cal_int *n, double *tab,cal_int *err STR_PLEN(nom)); void F_FUNC(cpecp,CPECP)(long *compo,cal_int *dep,float *ti,cal_int *iter,STR_PSTR(nom),cal_int *n, float *tab,cal_int *err STR_PLEN(nom)); void F_FUNC(cpein,CPEIN)(long *compo,cal_int *dep,float *ti,cal_int *iter,STR_PSTR(nom),cal_int *n, int *tab,cal_int *err STR_PLEN(nom)); void F_FUNC(cpelg,CPELG)(long *compo,cal_int *dep,float *ti,cal_int *iter,STR_PSTR(nom),cal_int *n, long *tab,cal_int *err STR_PLEN(nom)); @@ -347,6 +358,15 @@ void F_FUNC(cpere,CPERE)(long *compo,cal_int *dep,float *ti,cal_int *iter,STR_PS free_str1(cnom); } +void F_FUNC(cperd,CPERD)(long *compo,cal_int *dep,float *ti,cal_int *iter,STR_PSTR(nom),cal_int *n, double *tab,cal_int *err STR_PLEN(nom)) +{ + float tti=0.; + if(*dep == CP_TEMPS)tti=*ti; + char* cnom=fstr1(STR_PTR(nom),STR_LEN(nom)); + *err=cp_erd_fort_((void *)*compo,*dep,tti,*iter,cnom,*n,(float *)tab); + free_str1(cnom); +} + void F_FUNC(cpecp,CPECP)(long *compo,cal_int *dep,float *ti,cal_int *iter,STR_PSTR(nom),cal_int *n, float *tab,cal_int *err STR_PLEN(nom)) { float tti=0.; diff --git a/src/DSC/DSC_User/Datastream/Calcium/calciumf.h b/src/DSC/DSC_User/Datastream/Calcium/calciumf.h index da9574643..07f110137 100644 --- a/src/DSC/DSC_User/Datastream/Calcium/calciumf.h +++ b/src/DSC/DSC_User/Datastream/Calcium/calciumf.h @@ -47,6 +47,7 @@ CALCIUM_ECR_INTERFACE_C_H(elg_fort_,float ,cal_int,long ,long2integer,,); CALCIUM_ECR_INTERFACE_C_H(eln_fort_,float ,cal_int,long ,long,,); CALCIUM_ECR_INTERFACE_C_H(ein_fort_,float ,cal_int,int ,int2integer,,); CALCIUM_ECR_INTERFACE_C_H(ere_fort_,float ,cal_int,float ,float,,); +CALCIUM_ECR_INTERFACE_C_H(erd_fort_,float ,cal_int,float ,float2double,,); CALCIUM_ECR_INTERFACE_C_H(edb_fort_,double,cal_int,double,double,,); CALCIUM_ECR_INTERFACE_C_H(elo_fort_,float ,cal_int,int ,bool,,); /*int pour bool ou cal_int */ CALCIUM_ECR_INTERFACE_C_H(ecp_fort_,float ,cal_int,float ,cplx,,); @@ -69,6 +70,7 @@ CALCIUM_LECT_INTERFACE_C_H(llg_fort_,float ,cal_int,long ,long2integer,,); CALCIUM_LECT_INTERFACE_C_H(lln_fort_,float ,cal_int,long ,long,,); CALCIUM_LECT_INTERFACE_C_H(lin_fort_,float ,cal_int,int ,int2integer,,); CALCIUM_LECT_INTERFACE_C_H(lre_fort_,float ,cal_int,float ,float,,); +CALCIUM_LECT_INTERFACE_C_H(lrd_fort_,float ,cal_int,float ,float2double,,); CALCIUM_LECT_INTERFACE_C_H(ldb_fort_,double,cal_int,double ,double,,); CALCIUM_LECT_INTERFACE_C_H(llo_fort_,float ,cal_int,int ,bool,,); /*int pour bool ou cal_int */ CALCIUM_LECT_INTERFACE_C_H(lcp_fort_,float ,cal_int,float ,cplx,,); diff --git a/src/DSC/DSC_User/Datastream/Palm/CMakeLists.txt b/src/DSC/DSC_User/Datastream/Palm/CMakeLists.txt new file mode 100755 index 000000000..4976d94df --- /dev/null +++ b/src/DSC/DSC_User/Datastream/Palm/CMakeLists.txt @@ -0,0 +1,44 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_User/Datastream + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_Basic + ${CMAKE_SOURCE_DIR}/src/Container + ${CMAKE_SOURCE_DIR}/src/GenericObj + ${CMAKE_SOURCE_DIR}/src/Notification + ${CMAKE_SOURCE_DIR}/src/SALOMELocalTrace + ${CMAKE_SOURCE_DIR}/src/Basics + ${CMAKE_SOURCE_DIR}/src/Utils + ${CMAKE_BINARY_DIR}/idl +) + +ADD_LIBRARY(SalomePalm SHARED palm_port_factory.cxx) +SET_TARGET_PROPERTIES(SalomePalm PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") + +ADD_EXECUTABLE(test_DataIdContainer test_DataIdContainer.cxx) +SET_TARGET_PROPERTIES(test_DataIdContainer PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") +TARGET_LINK_LIBRARIES(test_DataIdContainer ${OMNIORB_LIBS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) + diff --git a/src/DSC/Makefile.am b/src/DSC/Makefile.am index e182b2dc8..e2f44cabb 100644 --- a/src/DSC/Makefile.am +++ b/src/DSC/Makefile.am @@ -24,6 +24,8 @@ # Author : André RIBES (EDF) # Module : KERNEL # +include $(top_srcdir)/salome_adm/unix/make_common_starter.am + SUBDIRS_COMMON = DSC_Basic if !WINDOWS @@ -36,6 +38,6 @@ endif SUBDIRS = $(SUBDIRS_COMMON) $(SUBDIRS_ADD) $(SUBDIR_PAR) -EXTRA_DIST= DSC.dox +EXTRA_DIST+= DSC.dox DIST_SUBDIRS = DSC_Basic DSC_User DSC_Python ParallelDSC diff --git a/src/DSC/ParallelDSC/CMakeLists.txt b/src/DSC/ParallelDSC/CMakeLists.txt new file mode 100755 index 000000000..bb64c8313 --- /dev/null +++ b/src/DSC/ParallelDSC/CMakeLists.txt @@ -0,0 +1,54 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${MPI_INCLUDE_DIRS} + ${PACO_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_SOURCE_DIR}/src/Container + ${CMAKE_SOURCE_DIR}/src/ParallelContainer + ${CMAKE_SOURCE_DIR}/src/Notification + ${CMAKE_SOURCE_DIR}/src/SALOMELocalTrace + ${CMAKE_SOURCE_DIR}/src/Basics + ${CMAKE_SOURCE_DIR}/src/NamingService + ${CMAKE_SOURCE_DIR}/src/Utils + ${CMAKE_SOURCE_DIR}/src/DSC/DSC_Basic + ${CMAKE_SOURCE_DIR}/src/GenericObj + ${CMAKE_BINARY_DIR}/idl + ${CMAKE_SOURCE_DIR}/src/Registry + ${CMAKE_SOURCE_DIR}/src/Utils +) + +SET(COMMON_FLAGS + ${OMNIORB_DEFINITIONS} + ${MPI_DEFINITIONS} + ${PACO_DEFINITIONS} +) +SET(SalomeParallelDSCContainer_SOURCES + ParallelDSC_i.cxx + Param_Double_Port_provides_i.cxx + Param_Double_Port_uses_i.cxx +) + +ADD_LIBRARY(SalomeParallelDSCContainer SHARED ${SalomeParallelDSCContainer_SOURCES}) +SET_TARGET_PROPERTIES(SalomeParallelDSCContainer PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +INSTALL(TARGETS SalomeParallelDSCContainer DESTINATION ${KERNEL_salomelib_LIBS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/GenericObj/CMakeLists.txt b/src/GenericObj/CMakeLists.txt new file mode 100755 index 000000000..203be8e04 --- /dev/null +++ b/src/GenericObj/CMakeLists.txt @@ -0,0 +1,35 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_BINARY_DIR}/idl +) + +ADD_LIBRARY(SalomeGenericObj SHARED SALOME_GenericObj_i.cc) +SET_TARGET_PROPERTIES(SalomeGenericObj PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeGenericObj SALOMELocalTrace SalomeIDLKernel) +INSTALL(TARGETS SalomeGenericObj DESTINATION ${KERNEL_salomelib_LIBS}) + +INSTALL(FILES SALOME_GenericObj_i.hh DESTINATION ${KERNEL_salomeinclude_HEADERS}) + diff --git a/src/HDFPersist/CMakeLists.txt b/src/HDFPersist/CMakeLists.txt new file mode 100755 index 000000000..30aef7f00 --- /dev/null +++ b/src/HDFPersist/CMakeLists.txt @@ -0,0 +1,84 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${HDF5_INCLUDE_DIRS} +) + +SET(SalomeHDFPersist_SOURCES + HDFfileCreate.c + HDFfileClose.c + HDFfileOpen.c + HDFfileMount.c + HDFfileUmount.c + HDFgroupCreate.c + HDFgroupOpen.c + HDFgroupClose.c + HDFdatasetOpen.c + HDFdatasetClose.c + HDFdatasetCreate.c + HDFdatasetWrite.c + HDFdatasetRead.c + HDFdatasetGetDim.c + HDFdatasetGetSize.c + HDFdatasetGetType.c + HDFdatasetGetnDim.c + HDFdatasetGetOrder.c + HDFarrayGetType.c + HDFarrayGetTypeId.c + HDFarrayCreate.c + HDFarrayClose.c + HDFarrayGetnDim.c + HDFarrayGetDim.c + HDFattrOpen.c + HDFattrClose.c + HDFattrWrite.c + HDFattrCreate.c + HDFattrRead.c + HDFattrGetType.c + HDFattrGetSize.c + HDFerrorModeLock.c + HDFnObjects.c + HDFobjectIdentify.c + HDFobjectType.c + HDFobject.cc + HDFarray.cc + HDFinternalObject.cc + HDFattribute.cc + HDFcontainerObject.cc + HDFdataset.cc + HDFfile.cc + HDFgroup.cc + HDFexplorer.cc + HDFconvert.cc + HDFascii.cc +) + +ADD_LIBRARY(SalomeHDFPersist SHARED ${SalomeHDFPersist_SOURCES}) +SET_TARGET_PROPERTIES(SalomeHDFPersist PROPERTIES COMPILE_FLAGS "-D${MACHINE} ${HDF5_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeHDFPersist ${HDF5_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS SalomeHDFPersist DESTINATION ${KERNEL_salomelib_LIBS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +FILE(GLOB COMMON_HEADERS_H "${CMAKE_CURRENT_SOURCE_DIR}/*.h") +SET(COMMON_HEADERS + ${COMMON_HEADERS_HXX} + ${COMMON_HEADERS_H} +) +INSTALL(FILES ${COMMON_HEADERS} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/HDFPersist/HDFascii.cc b/src/HDFPersist/HDFascii.cc index cc08ea933..c8fd3acfd 100644 --- a/src/HDFPersist/HDFascii.cc +++ b/src/HDFPersist/HDFascii.cc @@ -408,7 +408,7 @@ char* HDFascii::ConvertFromASCIIToHDF(const char* thePath, fscanf(fp, "%s", id_of_end); if(strcmp(id_of_end, ASCIIHDF_ID_END) != 0) { std::cout << "ConvertFromASCIIToHDF : Can not find the end ASCII token " << std::endl; - return false; + return NULL; } hdf_file->CloseOnDisk(); diff --git a/src/HDFPersist/Makefile.am b/src/HDFPersist/Makefile.am index dd302fb1d..d65b85edd 100644 --- a/src/HDFPersist/Makefile.am +++ b/src/HDFPersist/Makefile.am @@ -102,7 +102,7 @@ libSalomeHDFPersist_la_CPPFLAGS = @HDF5_INCLUDES@ -D@MACHINE@ libSalomeHDFPersist_la_LIBADD = @HDF5_LIBS@ -EXTRA_DIST = \ +EXTRA_DIST += \ test1.c \ test2.c \ test3.cxx \ diff --git a/src/KERNEL_PY/CMakeLists.txt b/src/KERNEL_PY/CMakeLists.txt new file mode 100755 index 000000000..676b5842e --- /dev/null +++ b/src/KERNEL_PY/CMakeLists.txt @@ -0,0 +1,49 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +ADD_SUBDIRECTORY(kernel) + +SET(salomepython_PYTHON + salome_shared_modules.py + import_hook.py + omnipatch.py +) + +IF(CORBA_GEN) + SET(salomepython_PYTHON + ${salomepython_PYTHON} + Help.py + PyInterp.py + batchmode_salome.py + salome_test.py + salome_kernel.py + salome_study.py + salome_iapp.py + salome_ComponentGUI.py + iparameters.py + salome_version.py + salome_notebook.py + salome_pynode.py + salome_genericobj.py + ) +ENDIF(CORBA_GEN) + +SALOME_INSTALL_SCRIPTS("${salomepython_PYTHON}" ${KERNEL_salomepythondir}) +SALOME_INSTALL_SCRIPTS(kernel_shared_modules.py ${KERNEL_sharedpkgpython_PYTHON}) +SALOME_INSTALL_SCRIPTS(__init__.py ${KERNEL_salomepythondir}/salome) diff --git a/src/KERNEL_PY/kernel/CMakeLists.txt b/src/KERNEL_PY/kernel/CMakeLists.txt new file mode 100755 index 000000000..40ac0b228 --- /dev/null +++ b/src/KERNEL_PY/kernel/CMakeLists.txt @@ -0,0 +1,49 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +ADD_SUBDIRECTORY(parametric) + +CONFIGURE_FILE(logconfig.py.in logconfig.py @ONLY) +CONFIGURE_FILE(kernelpy_autotest.sh.in kernelpy_autotest.sh @ONLY) + +# This first set of modules could be used in any context, you just +# have to get a python environement. +SET(mypkgpython_PYTHON + __init__.py + deprecation.py + logger.py + termcolor.py + unittester.py + pyunittester.py + enumerate.py + uiexception.py + datamodeler.py + testdata.py + diclookup.py + threadhelper.py + syshelper.py +) +# This set of modules required a running SALOME application. +SET(mypkgpython_PYTHON + ${mypkgpython_PYTHON} + studyedit.py + services.py +) +SALOME_INSTALL_SCRIPTS("${mypkgpython_PYTHON}" ${KERNEL_salomepythondir}/salome/kernel) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/logconfig.py DESTINATION ${KERNEL_salomepythondir}/salome/kernel) \ No newline at end of file diff --git a/src/KERNEL_PY/kernel/parametric/CMakeLists.txt b/src/KERNEL_PY/kernel/parametric/CMakeLists.txt new file mode 100755 index 000000000..fc6392119 --- /dev/null +++ b/src/KERNEL_PY/kernel/parametric/CMakeLists.txt @@ -0,0 +1,28 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +SET(mypkgpython_PYTHON + __init__.py + study_exchange_vars.py + compo_utils.py + pyscript_utils.py +) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS("${mypkgpython_PYTHON}" ${KERNEL_salomepythondir}/salome/kernel/parametric) diff --git a/src/KERNEL_PY/salome.py b/src/KERNEL_PY/salome.py deleted file mode 100755 index ea45e9bca..000000000 --- a/src/KERNEL_PY/salome.py +++ /dev/null @@ -1,189 +0,0 @@ -# -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# ================================================================================ -# WARNING: this file is deprecated and should not be used any more. It has been -# replaced by the file __init__.py of the python package named "salome". -# To prevent any error, a warning is raised in the case where this file is imported -raise RuntimeError("WRN - the file salome.py is deprecated. It should NOT be used any more.") -# ================================================================================ - - -# File : salome.py -# Author : Paul RASCLE, EDF -# Module : SALOME -# $Header$ -# -""" -Module salome gives access to Salome ressources. - -variables: - - - salome.orb : CORBA - - salome.naming_service : instance of naming Service class - - methods: - - Resolve(name) : find a CORBA object (ior) by its pathname - - Register(name) : register a CORBA object under a pathname - - - salome.lcc : instance of lifeCycleCORBA class - - methods: - - FindOrLoadComponent(server,name) : - obtain an Engine (CORBA object) - or launch the Engine if not found, - with a Server name and an Engine name - - - salome.sg : salome object to communicate with the graphical user interface (if any) - - methods: - - updateObjBrowser(bool): - - getActiveStudyId(): - - getActiveStudyName(): - - - SelectedCount(): returns number of selected objects - - getSelected(i): returns entry of selected object number i - - getAllSelected(): returns list of entry of selected objects - - AddIObject(Entry): select an existing Interactive object - - RemoveIObject(Entry): remove object from selection - - ClearIObjects(): clear selection - - - Display(*Entry): - - DisplayOnly(Entry): - - Erase(Entry): - - DisplayAll(): - - EraseAll(): - - - IDToObject(Entry): returns CORBA reference from entry - - - salome.myStudyName : active Study Name - - salome.myStudyId : active Study Id - - salome.myStudy : the active Study itself (CORBA ior) - - methods : defined in SALOMEDS.idl - -""" -## @package salome -# Module salome gives access to Salome ressources. -# -# \param salome.orb : CORBA orb object -# \param salome.naming_service : instance of naming Service class (SALOME_NamingServicePy::SALOME_NamingServicePy_i) -# \param salome.lcc : instance of lifeCycleCORBA class (SALOME_LifeCycleCORBA) -# \param salome.sg : Salome object to communicate with the graphical user interface, if running (see interface in salome_iapp::SalomeOutsideGUI) -# \param salome.myStudyName : active Study Name -# \param salome.myStudyId : active Study Id -# \param salome.myStudy : the active Study (interface SALOMEDS::Study) - -# -from salome_kernel import * -from salome_study import * -from salome_iapp import * - - -# -# The next block is workaround for the problem of shared symbols loading for the extension modules (e.g. SWIG-generated) -# that causes RTTI unavailable in some cases. To solve this problem, sys.setdlopenflags() function is used. -# Depending on the Python version and platform, the dlopen flags can be defined in the dl, DLFUN or ctypes module. -# -import sys -flags = None -if not flags: - try: - # dl module can be unavailable - import dl - flags = dl.RTLD_NOW | dl.RTLD_GLOBAL - except: - pass - pass -if not flags: - try: - # DLFCN module can be unavailable - import DLFCN - flags = DLFCN.RTLD_NOW | DLFCN.RTLD_GLOBAL - except: - pass - pass -if not flags: - try: - # ctypes module can be unavailable - import ctypes - flags = ctypes.RTLD_GLOBAL - except: - pass - pass - -if flags: - sys.setdlopenflags(flags) - pass - -orb, lcc, naming_service, cm,sg=None,None,None,None,None -myStudyManager, myStudyId, myStudy, myStudyName=None,None,None,None - -salome_initial=1 -def salome_init(theStudyId=0,embedded=0): - """ - Performs only once SALOME general purpose intialisation for scripts. - optional argument : theStudyId - When in embedded interpreter inside IAPP, theStudyId is not used - When used without GUI (external interpreter) - 0 : create a new study (default). - n (>0) : try connection to study with Id = n, or create a new one - if study not found. - If study creation, its Id may be different from theStudyId ! - Provides: - orb reference to CORBA - lcc a LifeCycleCorba instance - naming_service a naming service instance - cm reference to the container manager - sg access to SALOME GUI (when linked with IAPP GUI) - myStudyManager the study manager - myStudyId active study identifier - myStudy active study itself (CORBA reference) - myStudyName active study name - """ - global salome_initial - global orb, lcc, naming_service, cm - global sg - global myStudyManager, myStudyId, myStudy, myStudyName - - try: - if salome_initial: - salome_initial=0 - sg = salome_iapp_init(embedded) - orb, lcc, naming_service, cm = salome_kernel_init() - myStudyManager, myStudyId, myStudy, myStudyName =salome_study_init(theStudyId) - pass - pass - except RuntimeError, inst: - # wait a little to avoid trace mix - import time - time.sleep(0.2) - x = inst - print "salome.salome_init():", x - print """ - ============================================ - May be there is no running SALOME session - salome.salome_init() is intented to be used - within an already running session - ============================================ - """ - raise - -#to expose all objects to pydoc -__all__=dir() diff --git a/src/KERNEL_PY/salome_study.py b/src/KERNEL_PY/salome_study.py index 5de40bc3a..f6ebc622a 100644 --- a/src/KERNEL_PY/salome_study.py +++ b/src/KERNEL_PY/salome_study.py @@ -227,6 +227,27 @@ def CheckCopyPaste(theSO, theInfo ,theComponentPaste): #-------------------------------------------------------------------------- +def GetComponentVersion(theComponent, all_versions = False): + # returns the document list tree (as list) + props = myStudy.GetProperties() + stored_components = props.GetStoredComponents() + version = "no component data" # vsr: better raise an exception in this case? + if theComponent in stored_components: + if all_versions: + version = props.GetComponentVersions(theComponent) + for i in range(len(version)): + if not version[i]: version[i] = "unknown" + pass + pass + else: + version = props.GetComponentVersion(theComponent) + if not version: version = "unknown" + pass + pass + return version + + #-------------------------------------------------------------------------- + def FindFileInDataDir(filename): import os datadir = os.getenv("DATA_DIR") diff --git a/src/KernelHelpers/CMakeLists.txt b/src/KernelHelpers/CMakeLists.txt new file mode 100755 index 000000000..09e211bb3 --- /dev/null +++ b/src/KernelHelpers/CMakeLists.txt @@ -0,0 +1,65 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../LifeCycleCORBA + ${CMAKE_CURRENT_SOURCE_DIR}/../Container + ${CMAKE_CURRENT_SOURCE_DIR}/../Notification + ${CMAKE_CURRENT_SOURCE_DIR}/../GenericObj + ${CMAKE_BINARY_DIR}/idl +) + +SET(SalomeKernelHelpers_LIBS + ${OMNIORB_LIBS} + SalomeNS + SALOMELocalTrace + SALOMEBasics + OpUtil + SalomeLifeCycleCORBA + SalomeContainer + SalomeNotification + SalomeGenericObj + SalomeIDLKernel +) + +SET(SalomeKernelHelpers_SOURCES + SALOME_KernelServices.cxx + SALOME_StudyEditor.cxx + SALOMEDS_DriverDefaultImpl.cxx +) + +ADD_LIBRARY(SalomeKernelHelpers SHARED ${SalomeKernelHelpers_SOURCES}) +SET_TARGET_PROPERTIES(SalomeKernelHelpers PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeKernelHelpers ${SalomeKernelHelpers_LIBS}) +INSTALL(TARGETS SalomeKernelHelpers DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(KernelHelpersUseCases KernelHelpersUseCases.cxx) +SET_TARGET_PROPERTIES(KernelHelpersUseCases PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(KernelHelpersUseCases SalomeKernelHelpers ${SalomeKernelHelpers_LIBS}) +INSTALL(TARGETS KernelHelpersUseCases DESTINATION ${KERNEL_salomebin_BINS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/KernelHelpers/Test/CMakeLists.txt b/src/KernelHelpers/Test/CMakeLists.txt new file mode 100755 index 000000000..f0291aaf5 --- /dev/null +++ b/src/KernelHelpers/Test/CMakeLists.txt @@ -0,0 +1,68 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${CPPUNIT_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_SOURCE_DIR}/src/Basics/Test + ${CMAKE_CURRENT_SOURCE_DIR}/.. + ${CMAKE_SOURCE_DIR}/src/NamingService + ${CMAKE_SOURCE_DIR}/src/SALOMELocalTrace + ${CMAKE_SOURCE_DIR}/src/Basics + ${CMAKE_SOURCE_DIR}/src/Utils + ${CMAKE_SOURCE_DIR}/src/LifeCycleCORBA + ${CMAKE_SOURCE_DIR}/src/Container + ${CMAKE_SOURCE_DIR}/src/Notification + ${CMAKE_SOURCE_DIR}/src/GenericObj + ${CMAKE_BINARY_DIR}/idl +) + +SET(SalomeKernelHelpersTest_LIBS + ${CPPUNIT_LIBS} + SalomeKernelHelpers + ${OMNIORB_LIBS} + SalomeNS + SALOMELocalTrace + SALOMEBasics + OpUtil + SalomeLifeCycleCORBA + SalomeContainer + SalomeNotification + SalomeGenericObj + SalomeIDLKernel +) + +ADD_LIBRARY(SalomeKernelHelpersTest SHARED KernelHelpersUnitTests.cxx) +SET_TARGET_PROPERTIES(SalomeKernelHelpersTest PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeKernelHelpersTest ${SalomeKernelHelpersTest_LIBS}) +INSTALL(TARGETS SalomeKernelHelpersTest DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(TestKernelHelpers TestKernelHelpers.cxx) +SET_TARGET_PROPERTIES(TestKernelHelpers PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestKernelHelpers SalomeKernelHelpersTest ${SalomeKernelHelpersTest_LIBS}) +ADD_TEST(TestKernelHelpers TestKernelHelpers) +INSTALL(TARGETS TestKernelHelpers DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(TestKernelHelpers.py ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/KernelHelpers/Test/KernelHelpersUnitTests.hxx b/src/KernelHelpers/Test/KernelHelpersUnitTests.hxx index 4e9b96696..045e1149f 100644 --- a/src/KernelHelpers/Test/KernelHelpersUnitTests.hxx +++ b/src/KernelHelpers/Test/KernelHelpersUnitTests.hxx @@ -25,7 +25,17 @@ #include -class KernelHelpersUnitTests : public CppUnit::TestFixture +#ifdef WIN32 +# if defined KERNELHELPERSTEST_EXPORTS || defined SalomeKernelHelpersTest_EXPORTS +# define KERNELHELPERSTEST_EXPORT __declspec( dllexport ) +# else +# define KERNELHELPERSTEST_EXPORT __declspec( dllimport ) +# endif +#else +# define KERNELHELPERSTEST_EXPORT +#endif + +class KERNELHELPERSTEST_EXPORT KernelHelpersUnitTests : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( KernelHelpersUnitTests ); CPPUNIT_TEST( TEST_corba ); diff --git a/src/Launcher/BatchTest.cxx b/src/Launcher/BatchTest.cxx index 37076b0fb..d765f51e8 100644 --- a/src/Launcher/BatchTest.cxx +++ b/src/Launcher/BatchTest.cxx @@ -478,6 +478,8 @@ BatchTest::test_jobsubmit_mpi() mpiImpl = new MpiImpl_MPICH2(); else if(mpi_type == "openmpi") mpiImpl = new MpiImpl_OPENMPI(); + else if(mpi_type == "ompi") + mpiImpl = new MpiImpl_OMPI(); else if(mpi_type == "slurmmpi") mpiImpl = new MpiImpl_SLURM(); else diff --git a/src/Launcher/CMakeLists.txt b/src/Launcher/CMakeLists.txt new file mode 100755 index 000000000..b314fdcc1 --- /dev/null +++ b/src/Launcher/CMakeLists.txt @@ -0,0 +1,122 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${LIBXML_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${PYTHON_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${MPI_INCLUDE_DIRS} + ${LIBBATCH_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../Registry + ${CMAKE_CURRENT_SOURCE_DIR}/../Notification + ${CMAKE_CURRENT_SOURCE_DIR}/../Container + ${CMAKE_CURRENT_SOURCE_DIR}/../ResourcesManager + ${CMAKE_BINARY_DIR}/idl +) +SET(WITH_LIBBATCH_FLAG) +IF(WITH_LIBBATCH) + SET(WITH_LIBBATCH_FLAG "-DWITH_LIBBATCH") +ENDIF(WITH_LIBBATCH) + +# This local variable defines the list of FLAGS common to all target in this package. +SET(COMMON_FLAGS "${MPI_DEFINITIONS} ${LIBXML_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${WITH_LIBBATCH_FLAG} ${PLATFORM_DEFINITIONS}") + +# This local variable defines the list of dependant libraries common to all target in this package. +SET(COMMON_LIBS + Registry + SalomeNotification + SalomeContainer + SalomeResourcesManager + SalomeNS + OpUtil + SALOMELocalTrace + SALOMEBasics + SalomeIDLKernel + ${LIBBATCH_LIBS} + ${MPI_LIBS} + ${OMNIORB_LIBS} + ${LIBXML_LIBS} + ${PYTHON_LIBS} +) + +SET(Launcher_SOURCES + SALOME_Launcher_Parser.cxx + SALOME_Launcher_Handler.cxx + Launcher_Utils.hxx + Launcher_Job.cxx + Launcher_Job_Command.cxx + Launcher_Job_SALOME.cxx + Launcher_Job_PythonSALOME.cxx + Launcher_Job_YACSFile.cxx + Launcher.cxx +) +SET(Launcher_FLAGS "${MPI_DEFINITIONS} ${LIBXML_DEFINITIONS} ${LIBBATCH_DEFINITIONS} ${WITH_LIBBATCH_FLAG} ${PLATFORM_DEFINITIONS}") + +ADD_LIBRARY(Launcher SHARED ${Launcher_SOURCES}) +SET_TARGET_PROPERTIES(Launcher PROPERTIES COMPILE_FLAGS "${Launcher_FLAGS}") +TARGET_LINK_LIBRARIES(Launcher ResourcesManager ${LIBBATCH_LIBS} ${MPI_LIBS} ${LIBXML_LIBS}) +INSTALL(TARGETS Launcher DESTINATION ${KERNEL_salomelib_LIBS}) + +SET(TestLauncher_LIBS + ${LIBXML_LIBS} + ResourcesManager + Launcher + OpUtil + ${LIBBATCH_LIBS} +) + +ADD_EXECUTABLE(TestLauncher TestLauncher.cxx) +SET_TARGET_PROPERTIES(TestLauncher PROPERTIES COMPILE_FLAGS "${LIBXML_DEFINITIONS} ${LIBBATCH_DEFINITIONS} ${WITH_LIBBATCH_FLAG} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestLauncher ${TestLauncher_LIBS}) +INSTALL(TARGETS TestLauncher DESTINATION ${KERNEL_salomebin_BINS}) + +IF(NOT WITHONLYLAUNCHER) + ADD_LIBRARY(SalomeLauncher SHARED BatchTest.cxx SALOME_Launcher.cxx) + SET_TARGET_PROPERTIES(SalomeLauncher PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") + TARGET_LINK_LIBRARIES(SalomeLauncher Launcher ${COMMON_LIBS}) + INSTALL(TARGETS SalomeLauncher DESTINATION ${KERNEL_salomelib_LIBS}) + + SET(SALOME_LauncherServer_LIBS + Launcher + SalomeLauncher + SALOMEBasics + SALOMELocalTrace + ${LIBBATCH_LIBS} + ${MPI_LIBS} + ${OMNIORB_LIBS} + ${LIBXML_LIBS} + ${PYTHON_LIBS} + ) + + + + ADD_EXECUTABLE(SALOME_LauncherServer SALOME_LauncherServer.cxx) + SET_TARGET_PROPERTIES(SALOME_LauncherServer PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") + TARGET_LINK_LIBRARIES(SALOME_LauncherServer ${SALOME_LauncherServer_LIBS}) + INSTALL(TARGETS SALOME_LauncherServer DESTINATION ${KERNEL_salomebin_BINS}) +ENDIF(NOT WITHONLYLAUNCHER) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/Launcher/Launcher.cxx b/src/Launcher/Launcher.cxx index 62bfe647b..d749f8258 100644 --- a/src/Launcher/Launcher.cxx +++ b/src/Launcher/Launcher.cxx @@ -403,6 +403,9 @@ Launcher_cpp::FactoryBatchManager(ParserResourcesType& params) case openmpi: mpi = "openmpi"; break; + case ompi: + mpi = "ompi"; + break; case slurmmpi: mpi = "slurmmpi"; break; diff --git a/src/Launcher/Launcher_Job_Command.cxx b/src/Launcher/Launcher_Job_Command.cxx index f325898ed..6f2fecebd 100644 --- a/src/Launcher/Launcher_Job_Command.cxx +++ b/src/Launcher/Launcher_Job_Command.cxx @@ -20,6 +20,7 @@ // Author: André RIBES - EDF R&D // #include "Launcher_Job_Command.hxx" +#include "Basics_DirUtils.hxx" #ifdef WITH_LIBBATCH #include @@ -54,7 +55,7 @@ Launcher::Job_Command::buildCommandScript(Batch::Parametre params, std::string l // File name std::string launch_date_port_file = launch_date; - std::string launch_script = "/tmp/runCommand_" + _job_file_name + "_" + launch_date + ".sh"; + std::string launch_script = Kernel_Utils::GetTmpDir() + "runCommand_" + _job_file_name + "_" + launch_date + ".sh"; std::ofstream launch_script_stream; launch_script_stream.open(launch_script.c_str(), std::ofstream::out); diff --git a/src/Launcher/Launcher_Job_SALOME.cxx b/src/Launcher/Launcher_Job_SALOME.cxx index b0c70f5b5..85f6e1015 100644 --- a/src/Launcher/Launcher_Job_SALOME.cxx +++ b/src/Launcher/Launcher_Job_SALOME.cxx @@ -20,6 +20,7 @@ // Author: André RIBES - EDF R&D // #include "Launcher_Job_SALOME.hxx" +#include "Basics_DirUtils.hxx" #ifdef WITH_LIBBATCH #include @@ -64,7 +65,7 @@ Launcher::Job_SALOME::buildSalomeScript(Batch::Parametre params) // parameters std::string work_directory = params[Batch::WORKDIR].str(); - std::string launch_script = "/tmp/runSalome_" + _job_file_name + "_" + _launch_date + ".sh"; + std::string launch_script = Kernel_Utils::GetTmpDir() + "runSalome_" + _job_file_name + "_" + _launch_date + ".sh"; std::ofstream launch_script_stream; launch_script_stream.open(launch_script.c_str(), std::ofstream::out diff --git a/src/LifeCycleCORBA/CMakeLists.txt b/src/LifeCycleCORBA/CMakeLists.txt new file mode 100755 index 000000000..a635b4061 --- /dev/null +++ b/src/LifeCycleCORBA/CMakeLists.txt @@ -0,0 +1,67 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${LIBXML_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${PYTHON_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMETraceCollector + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../GenericObj + ${CMAKE_CURRENT_SOURCE_DIR}/../Container + ${CMAKE_CURRENT_SOURCE_DIR}/../ResourcesManager + ${CMAKE_CURRENT_SOURCE_DIR}/../Batch + ${CMAKE_CURRENT_SOURCE_DIR}/../Notification + ${CMAKE_CURRENT_SOURCE_DIR}/../Registry + ${CMAKE_BINARY_DIR}/idl +) + +SET(COMMON_LIBS + SalomeContainer + SalomeResourcesManager + SalomeNS + OpUtil + SALOMELocalTrace + SALOMEBasics + SalomeGenericObj + SalomeIDLKernel +) + +ADD_LIBRARY(SalomeLifeCycleCORBA SHARED SALOME_LifeCycleCORBA.cxx SALOME_FileTransferCORBA.cxx) +SET_TARGET_PROPERTIES(SalomeLifeCycleCORBA PROPERTIES COMPILE_FLAGS "${LIBXML_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeLifeCycleCORBA ${COMMON_LIBS}) +INSTALL(TARGETS SalomeLifeCycleCORBA DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(Test_LifeCycleCORBA Test_LifeCycleCORBA.cxx) +SET_TARGET_PROPERTIES(Test_LifeCycleCORBA PROPERTIES COMPILE_FLAGS "${LIBXML_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(Test_LifeCycleCORBA SalomeLifeCycleCORBA Registry SalomeNotification SalomeContainer ${COMMON_LIBS} ${OMNIORB_LIBS}) + +ADD_EXECUTABLE(TestContainerManager TestContainerManager.cxx) +SET_TARGET_PROPERTIES(TestContainerManager PROPERTIES COMPILE_FLAGS "${LIBXML_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestContainerManager SalomeLifeCycleCORBA Registry SalomeNotification SalomeContainer ${COMMON_LIBS} ${OMNIORB_LIBS}) + +INSTALL(TARGETS Test_LifeCycleCORBA TestContainerManager DESTINATION ${KERNEL_salomebin_BINS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx b/src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx index 2afca3b7f..6d138af19 100644 --- a/src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx +++ b/src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx @@ -100,11 +100,13 @@ SALOME_LifeCycleCORBA::SALOME_LifeCycleCORBA(SALOME_NamingService *ns) CORBA::Object_var obj = _NS->Resolve(SALOME_ContainerManager::_ContainerManagerNameInNS); - ASSERT( !CORBA::is_nil(obj)); + if (CORBA::is_nil(obj)) + throw SALOME_Exception("Error: Cannot resolve ContainerManager in Naming Service"); _ContManager=Engines::ContainerManager::_narrow(obj); obj = _NS->Resolve(SALOME_ResourcesManager::_ResourcesManagerNameInNS); - ASSERT( !CORBA::is_nil(obj)); + if (CORBA::is_nil(obj)) + throw SALOME_Exception("Error: Cannot resolve ResourceManager in Naming Service"); _ResManager=Engines::ResourcesManager::_narrow(obj); } @@ -550,6 +552,7 @@ void SALOME_LifeCycleCORBA::shutdownServers() if (!CORBA::is_nil(session)) { pid = session->getPID(); + session->Shutdown(); } } @@ -644,6 +647,7 @@ void SALOME_LifeCycleCORBA::shutdownServers() // ignore and continue } + /* // 6) Session if ( !CORBA::is_nil( session ) ) { try @@ -655,6 +659,7 @@ void SALOME_LifeCycleCORBA::shutdownServers() // ignore and continue } } + */ // 7) Logger int argc = 0; diff --git a/src/LifeCycleCORBA/Test/CMakeLists.txt b/src/LifeCycleCORBA/Test/CMakeLists.txt new file mode 100755 index 000000000..47c04bd74 --- /dev/null +++ b/src/LifeCycleCORBA/Test/CMakeLists.txt @@ -0,0 +1,72 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${CPPUNIT_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMETraceCollector + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMETraceCollector/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../../NamingService/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../../Utils/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../ResourcesManager + ${CMAKE_CURRENT_SOURCE_DIR}/../../LifeCycleCORBA + ${CMAKE_BINARY_DIR}/idl +) + +SET(COMMON_LIBS + ${CPPUNIT_LIBS} + SALOMEBasics + SalomeResourcesManager + SalomeContainer + SalomeNS + Registry + SalomeNotification + UtilsTest + OpUtil + SALOMELocalTraceTest + SALOMELocalTrace + SALOMETraceCollectorTest + SalomeIDLKernel + SalomeLifeCycleCORBA + ${OMNIORB_LIBS} +) + +ADD_LIBRARY(LifeCycleCORBATest SHARED LifeCycleCORBATest.cxx) +SET_TARGET_PROPERTIES(LifeCycleCORBATest PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(LifeCycleCORBATest ${COMMON_LIBS}) +INSTALL(TARGETS LifeCycleCORBATest DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(TestLifeCycleCORBA TestLifeCycleCORBA.cxx) +SET_TARGET_PROPERTIES(TestLifeCycleCORBA PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestLifeCycleCORBA LifeCycleCORBATest NamingServiceTest SalomeLifeCycleCORBA ${COMMON_LIBS}) +INSTALL(TARGETS TestLifeCycleCORBA DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(TestLifeCycleCORBA.py ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/LifeCycleCORBA/Test/LifeCycleCORBATest.cxx b/src/LifeCycleCORBA/Test/LifeCycleCORBATest.cxx index e359aef8c..1212c0fb7 100644 --- a/src/LifeCycleCORBA/Test/LifeCycleCORBATest.cxx +++ b/src/LifeCycleCORBA/Test/LifeCycleCORBATest.cxx @@ -44,6 +44,9 @@ #define MYDEVTRACE #define DEVTRACE(msg) #endif +#ifdef WIN32 +#define setenv Kernel_Utils::setenv +#endif #define TRACEFILE "/tmp/traceUnitTest.log" diff --git a/src/LifeCycleCORBA/Test/LifeCycleCORBATest.hxx b/src/LifeCycleCORBA/Test/LifeCycleCORBATest.hxx index 3be0ebab6..054680653 100644 --- a/src/LifeCycleCORBA/Test/LifeCycleCORBATest.hxx +++ b/src/LifeCycleCORBA/Test/LifeCycleCORBATest.hxx @@ -30,7 +30,17 @@ #include CORBA_CLIENT_HEADER(SALOME_TestComponent) #include "SALOME_NamingService.hxx" -class LifeCycleCORBATest : public CppUnit::TestFixture +#ifdef WIN32 +# if defined LIFECYCLECORBATEST_EXPORTS || defined LifeCycleCORBATest_EXPORTS +# define LIFECYCLECORBATEST_EXPORT __declspec( dllexport ) +# else +# define LIFECYCLECORBATEST_EXPORT __declspec( dllimport ) +# endif +#else +# define LIFECYCLECORBATEST_EXPORT +#endif + +class LIFECYCLECORBATEST_EXPORT LifeCycleCORBATest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( LifeCycleCORBATest ); CPPUNIT_TEST( testFindOrLoad_Component_LaunchContainer ); diff --git a/src/LifeCycleCORBA_SWIG/CMakeLists.txt b/src/LifeCycleCORBA_SWIG/CMakeLists.txt new file mode 100755 index 000000000..57da32c34 --- /dev/null +++ b/src/LifeCycleCORBA_SWIG/CMakeLists.txt @@ -0,0 +1,57 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +FIND_PACKAGE(SWIG REQUIRED) +INCLUDE(${SWIG_USE_FILE}) + +SET_SOURCE_FILES_PROPERTIES(libSALOME_LifeCycleCORBA.i PROPERTIES CPLUSPLUS ON) +SET_SOURCE_FILES_PROPERTIES(libSALOME_LifeCycleCORBA.i PROPERTIES SWIG_DEFINITIONS "-shadow") +SET_SOURCE_FILES_PROPERTIES(libSALOME_LifeCycleCORBAPYTHON_wrap.cxx PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS}") + +INCLUDE_DIRECTORIES( + ${PYTHON_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../LifeCycleCORBA + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_BINARY_DIR}/idl + ) + +SWIG_ADD_MODULE(libSALOME_LifeCycleCORBA python libSALOME_LifeCycleCORBA.i) +SWIG_LINK_LIBRARIES(libSALOME_LifeCycleCORBA ${PYTHON_LIBS} SalomeLifeCycleCORBA) +SET_TARGET_PROPERTIES(_libSALOME_LifeCycleCORBA PROPERTIES COMPILE_FLAGS "${PLATFORM_LIBS}") +SET_TARGET_PROPERTIES(_libSALOME_LifeCycleCORBA PROPERTIES COMPILE_FLAGS "${PLATFORM_DEFINITIONS}") + +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_libSALOME_LifeCycleCORBA PROPERTIES DEBUG_OUTPUT_NAME _libSALOME_LifeCycleCORBA_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) + +INSTALL(TARGETS _libSALOME_LifeCycleCORBA DESTINATION ${KERNEL_salomepythondir}) +SET(SCRIPTS + LifeCycleCORBA.py + TestLifeCycleCORBA.py +) +SALOME_INSTALL_SCRIPTS("${SCRIPTS}" ${KERNEL_salomescript_PYTHON}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libSALOME_LifeCycleCORBA.py DESTINATION ${KERNEL_salomepythondir}) diff --git a/src/LifeCycleCORBA_SWIG/Makefile.am b/src/LifeCycleCORBA_SWIG/Makefile.am index 81a420ca4..2c1b96b8c 100644 --- a/src/LifeCycleCORBA_SWIG/Makefile.am +++ b/src/LifeCycleCORBA_SWIG/Makefile.am @@ -79,7 +79,7 @@ swig_wrap.cpp libSALOME_LifeCycleCORBA.py : $(SWIGSOURCES) CLEANFILES = swig_wrap.cpp -EXTRA_DIST = $(SWIGSOURCES) +EXTRA_DIST += $(SWIGSOURCES) # # =============================================================== diff --git a/src/LifeCycleCORBA_SWIG/Test/CMakeLists.txt b/src/LifeCycleCORBA_SWIG/Test/CMakeLists.txt new file mode 100755 index 000000000..d16803029 --- /dev/null +++ b/src/LifeCycleCORBA_SWIG/Test/CMakeLists.txt @@ -0,0 +1,27 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +# Scripts to be installed +SET(SCRIPTS + LifeCycleCORBA_SWIGTest.py + testresourcemanager.py + testcontainermanager.py + TestLifeCycleCORBA_SWIG.py +) + +SALOME_INSTALL_SCRIPTS("${SCRIPTS}" ${KERNEL_salomescript_PYTHON}) diff --git a/src/Logger/CMakeLists.txt b/src/Logger/CMakeLists.txt new file mode 100755 index 000000000..6b7c86d3c --- /dev/null +++ b/src/Logger/CMakeLists.txt @@ -0,0 +1,53 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_BINARY_DIR}/idl +) + +ADD_LIBRARY(SalomeLoggerServer SHARED SALOME_Trace.cxx SALOME_Logger_Server.cxx) +SET_TARGET_PROPERTIES(SalomeLoggerServer PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeLoggerServer SalomeIDLKernel ${OMNIORB_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS SalomeLoggerServer DESTINATION ${KERNEL_salomelib_LIBS}) + +SET(SALOME_Logger_Server_SOURCES + SALOME_Logger_Server_main.cxx + SALOME_Logger_Server.hxx +) + +SET(SALOME_Logger_Server_LIBS + SalomeLoggerServer + SalomeIDLKernel + ${OMNIORB_LIBS} +) + +ADD_EXECUTABLE(SALOME_Logger_Server ${SALOME_Logger_Server_SOURCES}) +SET_TARGET_PROPERTIES(SALOME_Logger_Server PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOME_Logger_Server ${SALOME_Logger_Server_LIBS}) +INSTALL(TARGETS SALOME_Logger_Server DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(SALOME_Trace.py ${KERNEL_salomescript_PYTHON}) + +INSTALL(FILES SALOME_Trace.hxx DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/Logger/Test/CMakeLists.txt b/src/Logger/Test/CMakeLists.txt new file mode 100755 index 000000000..1805bf2fd --- /dev/null +++ b/src/Logger/Test/CMakeLists.txt @@ -0,0 +1,21 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(TestKiller.py ${KERNEL_salomescript_PYTHON}) diff --git a/src/MPIContainer/CMakeLists.txt b/src/MPIContainer/CMakeLists.txt new file mode 100755 index 000000000..890118060 --- /dev/null +++ b/src/MPIContainer/CMakeLists.txt @@ -0,0 +1,69 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${MPI_INCLUDE_DIRS} + ${PYTHON_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../Registry + ${CMAKE_CURRENT_SOURCE_DIR}/../Notification + ${CMAKE_CURRENT_SOURCE_DIR}/../ResourcesManager + ${CMAKE_CURRENT_SOURCE_DIR}/../Container + ${CMAKE_CURRENT_SOURCE_DIR}/../GenericObj + ${CMAKE_BINARY_DIR}/idl +) + +SET(COMMON_LIBS + Registry + SalomeNotification + SalomeResourcesManager + SalomeNS + OpUtil + SALOMELocalTrace + SALOMEBasics + SalomeContainer + SalomeGenericObj + SalomeIDLKernel + ${CORBA_LIBS} +) + +ADD_LIBRARY(SalomeMPIContainer SHARED MPIObject_i.cxx MPIContainer_i.cxx) +SET_TARGET_PROPERTIES(SalomeMPIContainer PROPERTIES COMPILE_FLAGS "${MPI_DEFINITIONS} ${OMNIORB_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeMPIContainer ${COMMON_LIBS}) +INSTALL(TARGETS SalomeMPIContainer DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(SALOME_MPIContainer SALOME_MPIContainer.cxx) +SET_TARGET_PROPERTIES(SALOME_MPIContainer PROPERTIES COMPILE_FLAGS "${MPI_DEFINITIONS} ${OMNIORB_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOME_MPIContainer SalomeMPIContainer ${COMMON_LIBS} ${PYTHON_LIBS} ${MPI_LIBS}) + +ADD_EXECUTABLE(testMPI2 testMPI2.cxx) +SET_TARGET_PROPERTIES(testMPI2 PROPERTIES COMPILE_FLAGS "${MPI_DEFINITIONS}") +TARGET_LINK_LIBRARIES(testMPI2 ${MPI_LIBS}) + +INSTALL(TARGETS SALOME_MPIContainer testMPI2 DESTINATION ${KERNEL_salomebin_BINS}) + +INSTALL(FILES launch_testMPI2.csh DESTINATION ${KERNEL_salomescript_SCRIPTS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/MPIContainer/MPIContainer_i.cxx b/src/MPIContainer/MPIContainer_i.cxx index f72a0b5b8..8ce73d65c 100644 --- a/src/MPIContainer/MPIContainer_i.cxx +++ b/src/MPIContainer/MPIContainer_i.cxx @@ -35,6 +35,11 @@ #include #include #include // must be before Python.h ! + +#ifdef _XOPEN_SOURCE +#undef _XOPEN_SOURCE +#endif + #include #include "Container_init_python.hxx" diff --git a/src/Makefile.am b/src/Makefile.am index 30d72430e..598d9e790 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -25,6 +25,9 @@ # Module : KERNEL # $Header$ # + +include $(top_srcdir)/salome_adm/unix/make_common_starter.am + SUBDIR_BASE = \ Basics \ SALOMELocalTrace \ @@ -129,4 +132,4 @@ if WITH_PACO_PARALLEL endif endif -EXTRA_DIST = win32pm +EXTRA_DIST += win32pm diff --git a/src/ModuleCatalog/CMakeLists.txt b/src/ModuleCatalog/CMakeLists.txt new file mode 100755 index 000000000..3e8f048ef --- /dev/null +++ b/src/ModuleCatalog/CMakeLists.txt @@ -0,0 +1,68 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${LIBXML_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_BINARY_DIR}/idl +) + +# This local variable defines the list of dependant libraries common to all target in this package. +SET(COMMON_LIBS + SalomeNS + OpUtil + SALOMELocalTrace + SALOMEBasics + SalomeIDLKernel + ${LIBXML_LIBS} +) + +SET(SalomeCatalog_SOURCES + SALOME_ModuleCatalog_Handler.cxx + SALOME_ModuleCatalog_Parser_IO.cxx + SALOME_ModuleCatalog_impl.cxx + SALOME_ModuleCatalog_Acomponent_impl.cxx +) + +ADD_LIBRARY(SalomeCatalog SHARED ${SalomeCatalog_SOURCES}) +SET_TARGET_PROPERTIES(SalomeCatalog PROPERTIES COMPILE_FLAGS "${LIBXML_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeCatalog ${COMMON_LIBS}) +INSTALL(TARGETS SalomeCatalog DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(SALOME_ModuleCatalog_Server SALOME_ModuleCatalog_Server.cxx) +SET_TARGET_PROPERTIES(SALOME_ModuleCatalog_Server PROPERTIES COMPILE_FLAGS "${LIBXML_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOME_ModuleCatalog_Server SalomeCatalog ${COMMON_LIBS} ${OMNIORB_LIBS}) + +ADD_EXECUTABLE(SALOME_ModuleCatalog_Client SALOME_ModuleCatalog_Client.cxx) +SET_TARGET_PROPERTIES(SALOME_ModuleCatalog_Client PROPERTIES COMPILE_FLAGS "${LIBXML_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOME_ModuleCatalog_Client SalomeCatalog ${COMMON_LIBS} ${OMNIORB_LIBS}) + +INSTALL(TARGETS SALOME_ModuleCatalog_Server SALOME_ModuleCatalog_Client DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(TestModuleCatalog.py ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/ModuleGenerator/CMakeLists.txt b/src/ModuleGenerator/CMakeLists.txt new file mode 100755 index 000000000..8fed90f7f --- /dev/null +++ b/src/ModuleGenerator/CMakeLists.txt @@ -0,0 +1,25 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +CONFIGURE_FILE(testIDLparser.in testIDLparser @ONLY) + +# =============================================================== +# Files to be installed +# =============================================================== +SALOME_INSTALL_SCRIPTS(IDLparser.py ${KERNEL_salomescript_PYTHON}) diff --git a/src/ModuleGenerator/Makefile.am b/src/ModuleGenerator/Makefile.am index be3b14f33..31d036665 100644 --- a/src/ModuleGenerator/Makefile.am +++ b/src/ModuleGenerator/Makefile.am @@ -29,7 +29,7 @@ include $(top_srcdir)/salome_adm/unix/make_common_starter.am dist_salomescript_PYTHON = IDLparser.py -EXTRA_DIST = tests +EXTRA_DIST += tests install-data-hook: @for f in $(dist_salomescript_PYTHON) ; do \ diff --git a/src/NOTIFICATION_SWIG/CMakeLists.txt b/src/NOTIFICATION_SWIG/CMakeLists.txt new file mode 100755 index 000000000..8d22ebc63 --- /dev/null +++ b/src/NOTIFICATION_SWIG/CMakeLists.txt @@ -0,0 +1,50 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +FIND_PACKAGE(SWIG REQUIRED) +INCLUDE(${SWIG_USE_FILE}) + +SET_SOURCE_FILES_PROPERTIES(NOTIFICATION.i PROPERTIES CPLUSPLUS ON) +SET_SOURCE_FILES_PROPERTIES(NOTIFICATION.i PROPERTIES SWIG_DEFINITIONS "-shadow") +SET_SOURCE_FILES_PROPERTIES(NOTIFICATIONPYTHON_wrap.cxx PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} -DHAVE_CONFIG_H") + +INCLUDE_DIRECTORIES( + ${PYTHON_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Notification + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ) + +SWIG_ADD_MODULE(libNOTIFICATION python NOTIFICATION.i NOTIFICATION_Swig.cxx) +SWIG_LINK_LIBRARIES(libNOTIFICATION ${PYTHON_LIBS} SalomeNotification) +SET_TARGET_PROPERTIES(_libNOTIFICATION PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + +IF(${MACHINE} STREQUAL WINDOWS) + SET_TARGET_PROPERTIES(_libNOTIFICATION PROPERTIES DEBUG_OUTPUT_NAME _libNOTIFICATION_d) +ENDIF(${MACHINE} STREQUAL WINDOWS) + +INSTALL(TARGETS _libNOTIFICATION DESTINATION ${KERNEL_salomepythondir}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMON_HEADERS_HXX} DESTINATION ${MED_salomeinclude_HEADERS}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libNOTIFICATION.py DESTINATION ${KERNEL_salomepythondir}) \ No newline at end of file diff --git a/src/NOTIFICATION_SWIG/Makefile.am b/src/NOTIFICATION_SWIG/Makefile.am index 2957b8e7e..2036a6038 100644 --- a/src/NOTIFICATION_SWIG/Makefile.am +++ b/src/NOTIFICATION_SWIG/Makefile.am @@ -61,4 +61,4 @@ swig_wrap.cpp libNOTIFICATION.py : $(SWIGSOURCES) CLEANFILES = swig_wrap.cpp -EXTRA_DIST = $(SWIGSOURCES) +EXTRA_DIST += $(SWIGSOURCES) diff --git a/src/NamingService/CMakeLists.txt b/src/NamingService/CMakeLists.txt new file mode 100755 index 000000000..b2542217b --- /dev/null +++ b/src/NamingService/CMakeLists.txt @@ -0,0 +1,45 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_BINARY_DIR}/idl + ) + +SET(SalomeNS_SOURCES + SALOME_NamingService.cxx + ServiceUnreachable.cxx + NamingService_WaitForServerReadiness.cxx +) + +ADD_LIBRARY(SalomeNS SHARED ${SalomeNS_SOURCES}) +SET_TARGET_PROPERTIES(SalomeNS PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeNS OpUtil) +INSTALL(TARGETS SalomeNS DESTINATION ${KERNEL_salomelib_LIBS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(SALOME_NamingServicePy.py ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/NamingService/Test/CMakeLists.txt b/src/NamingService/Test/CMakeLists.txt new file mode 100755 index 000000000..6f675c91d --- /dev/null +++ b/src/NamingService/Test/CMakeLists.txt @@ -0,0 +1,70 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${CPPUNIT_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../../Utils + ${CMAKE_BINARY_DIR}/idl + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMETraceCollector/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../Utils/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics/Test +) + +# This local variable defines the list of dependant libraries common to all target in this package. +SET(COMMON_LIBS + ${CPPUNIT_LIBS} + SalomeNS + ${OMNIORB_LIBS} +) + +ADD_LIBRARY(NamingServiceTest SHARED NamingServiceTest.cxx) +SET_TARGET_PROPERTIES(NamingServiceTest PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(NamingServiceTest ${COMMON_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS NamingServiceTest DESTINATION ${KERNEL_salomelib_LIBS}) + +SET(TestNamingService_LIBS + NamingServiceTest + SalomeNS + SALOMELocalTraceTest + SALOMELocalTrace + SALOMETraceCollectorTest + UtilsTest + OpUtil + SALOMEBasics + SalomeIDLKernel + ${COMMON_LIBS} +) + +ADD_EXECUTABLE(TestNamingService TestNamingService.cxx) +SET_TARGET_PROPERTIES(TestNamingService PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestNamingService ${TestNamingService_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS TestNamingService DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(TestNamingService.py ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/NamingService/Test/NamingServiceTest.cxx b/src/NamingService/Test/NamingServiceTest.cxx index 033f8f87e..b36194d05 100644 --- a/src/NamingService/Test/NamingServiceTest.cxx +++ b/src/NamingService/Test/NamingServiceTest.cxx @@ -23,6 +23,7 @@ #include "NamingServiceTest.hxx" #include "Utils_ORB_INIT.hxx" #include "Utils_SINGLETON.hxx" +#include "Basics_Utils.hxx" #include #include @@ -43,6 +44,10 @@ #define DEVTRACE(msg) #endif +#ifdef WIN32 +#define setenv Kernel_Utils::setenv +#endif + #define TRACEFILE "/tmp/traceUnitTest.log" // ============================================================================ diff --git a/src/NamingService/Test/NamingServiceTest.hxx b/src/NamingService/Test/NamingServiceTest.hxx index 69ea3df88..ecd42a73d 100644 --- a/src/NamingService/Test/NamingServiceTest.hxx +++ b/src/NamingService/Test/NamingServiceTest.hxx @@ -29,7 +29,17 @@ #include #include CORBA_SERVER_HEADER(nstest) -class NSTEST_echo_i : public virtual POA_NSTEST::echo, +#ifdef WIN32 +# if defined NAMINGSERVICETEST_EXPORTS || defined NamingServiceTest_EXPORTS +# define NAMINGSERVICETEST_EXPORT __declspec( dllexport ) +# else +# define NAMINGSERVICETEST_EXPORT __declspec( dllimport ) +# endif +#else +# define NAMINGSERVICETEST_EXPORT +#endif + +class NAMINGSERVICETEST_EXPORT NSTEST_echo_i : public virtual POA_NSTEST::echo, public virtual PortableServer::ServantBase { public: @@ -52,7 +62,7 @@ private: int _num; }; -class NamingServiceTest : public CppUnit::TestFixture +class NAMINGSERVICETEST_EXPORT NamingServiceTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( NamingServiceTest ); CPPUNIT_TEST( testConstructorDefault ); diff --git a/src/Notification/CMakeLists.txt b/src/Notification/CMakeLists.txt new file mode 100755 index 000000000..571ff7814 --- /dev/null +++ b/src/Notification/CMakeLists.txt @@ -0,0 +1,49 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ) + +SET(COMMON_LIBS + OpUtil + SALOMELocalTrace + SALOMEBasics + ${OMNIORB_LIBS} +) + +SET(SalomeNotification_SOURCES + NOTIFICATION.cxx + NOTIFICATION_Supplier.cxx + NOTIFICATION_Consumer.cxx +) + +ADD_LIBRARY(SalomeNotification SHARED ${SalomeNotification_SOURCES}) +SET_TARGET_PROPERTIES(SalomeNotification PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeNotification ${COMMON_LIBS}) +INSTALL(TARGETS SalomeNotification DESTINATION ${KERNEL_salomelib_LIBS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +SET(COMMON_HEADERS ${COMMON_HEADERS_HXX} CosNotifyShorthands.h) +INSTALL(FILES ${COMMON_HEADERS} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/ParallelContainer/CMakeLists.txt b/src/ParallelContainer/CMakeLists.txt new file mode 100755 index 000000000..bbaad6bfc --- /dev/null +++ b/src/ParallelContainer/CMakeLists.txt @@ -0,0 +1,106 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${MPI_INCLUDE_DIRS} + ${PYTHON_INCLUDE_DIRS} + ${PACO_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_SOURCE_DIR}/src/Container + ${CMAKE_SOURCE_DIR}/src/Notification + ${CMAKE_SOURCE_DIR}/src/SALOMELocalTrace + ${CMAKE_SOURCE_DIR}/src/Basics + ${CMAKE_SOURCE_DIR}/src/NamingService + ${CMAKE_SOURCE_DIR}/src/Registry + ${CMAKE_SOURCE_DIR}/src/Utils + ${CMAKE_SOURCE_DIR}/src/GenericObj + ${CMAKE_CURRENT_SOURCE_DIR}/../HDFPersist + ${CMAKE_BINARY_DIR}/idl + ${CMAKE_SOURCE_DIR}/src/SALOMETraceCollector + ${PACOPATH}/lib +) + +# This local variable defines the list of dependant libraries common to all target in this package. +SET(COMMON_LIBS + SalomeContainer + SalomeNS + SALOMELocalTrace + SALOMEBasics + SalomeHDFPersist + SalomeParallelIDLKernel + SalomeIDLKernel + ${CORBA_LIBS} + ${PACO_LIBS} + ${PYTHON_LIBS} +) + +SET(SalomeParallelContainer_SOURCES + SALOME_ParallelComponent_i.cxx + SALOME_ParallelContainer_i.cxx + SALOME_ParallelContainerProxy_i.cxx + Parallel_Salome_file_i.cxx + SALOME_ParallelGlobalProcessVar_i.cxx +) + +ADD_LIBRARY(SalomeParallelContainer SHARED ${SalomeParallelContainer_SOURCES}) +SET_TARGET_PROPERTIES(SalomeParallelContainer PROPERTIES COMPILE_FLAGS "${ONMIORB_DEFINITIONS} ${MPI_DEFINITIONS} ${PACO_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeParallelContainer ${COMMON_LIBS} ${MPI_LIBS}) +INSTALL(TARGETS Registry DESTINATION ${KERNEL_salomelib_LIBS}) + +IF(MPI_IS_OK) + SET(SALOME_ParallelContainerProxyMpi_LIBS + SalomeParallelContainer + ${PaCO_dummy} + ${PaCO_mpi} + ${PaCO_omnithread} + ${MPI_LIBS} + ${COMMON_LIBS} + ) + ADD_EXECUTABLE(SALOME_ParallelContainerProxyMpi SALOME_Registry_Server.cxx) + SET_TARGET_PROPERTIES(SALOME_ParallelContainerProxyMpi PROPERTIES COMPILE_FLAGS "${ONMIORB_DEFINITIONS} ${MPI_DEFINITIONS} ${PACO_DEFINITIONS}") + TARGET_LINK_LIBRARIES(SALOME_ParallelContainerProxyMpi ${SALOME_ParallelContainerProxyMpi_LIBS}) + + ADD_EXECUTABLE(SALOME_ParallelContainerNodeMpi SALOME_ParallelContainerNodeMpi.cxx) + SET_TARGET_PROPERTIES(SALOME_ParallelContainerNodeMpi PROPERTIES COMPILE_FLAGS "${ONMIORB_DEFINITIONS} ${MPI_DEFINITIONS} ${PACO_DEFINITIONS}") + TARGET_LINK_LIBRARIES(SALOME_ParallelContainerNodeMpi ${SALOME_ParallelContainerProxyMpi_LIBS}) + + INSTALL(TARGETS SALOME_ParallelContainerProxyMpi SALOME_ParallelContainerNodeMpi DESTINATION ${KERNEL_salomebin_BINS}) +ENDIF(MPI_IS_OK) + +SET(SALOME_ParallelContainerProxyDummy_LIBS + SalomeParallelContainer + ${PaCO_dummy} + ${PaCO_omnithread} + ${COMMON_LIBS} +) + +ADD_EXECUTABLE(SALOME_ParallelContainerProxyDummy SALOME_ParallelContainerProxyDummy.cxx) +SET_TARGET_PROPERTIES(SALOME_ParallelContainerProxyDummy PROPERTIES COMPILE_FLAGS "${ONMIORB_DEFINITIONS} ${MPI_DEFINITIONS} ${PACO_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOME_ParallelContainerProxyDummy ${SALOME_ParallelContainerProxyDummy_LIBS}) + +ADD_EXECUTABLE(SALOME_ParallelContainerNodeDummy SALOME_ParallelContainerNodeDummy.cxx) +SET_TARGET_PROPERTIES(SALOME_ParallelContainerNodeDummy PROPERTIES COMPILE_FLAGS "${ONMIORB_DEFINITIONS} ${MPI_DEFINITIONS} ${PACO_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOME_ParallelContainerNodeDummy ${SALOME_ParallelContainerProxyDummy_LIBS}) + +INSTALL(TARGETS SALOME_ParallelContainerNodeDummy SALOME_ParallelContainerProxyDummy DESTINATION ${KERNEL_salomebin_BINS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) + diff --git a/src/Registry/CMakeLists.txt b/src/Registry/CMakeLists.txt new file mode 100755 index 000000000..154880672 --- /dev/null +++ b/src/Registry/CMakeLists.txt @@ -0,0 +1,53 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_BINARY_DIR}/idl +) + +ADD_LIBRARY(Registry SHARED RegistryConnexion.cxx RegistryService.cxx) +SET_TARGET_PROPERTIES(Registry PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(Registry SalomeNS OpUtil SALOMELocalTrace SalomeIDLKernel ${PLATFORM_LIBS}) +INSTALL(TARGETS Registry DESTINATION ${KERNEL_salomelib_LIBS}) + +SET(SALOME_Registry_Server_LIBS + SalomeIDLKernel + Registry + SalomeNS + OpUtil + SALOMELocalTrace + SALOMEBasics + ${OMNIORB_LIBS} + ${PLATFORM_LIBS} +) + +ADD_EXECUTABLE(SALOME_Registry_Server SALOME_Registry_Server.cxx) +SET_TARGET_PROPERTIES(SALOME_Registry_Server PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOME_Registry_Server ${SALOME_Registry_Server_LIBS}) +INSTALL(TARGETS SALOME_Registry_Server DESTINATION ${KERNEL_salomebin_BINS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/ResourcesManager/CMakeLists.txt b/src/ResourcesManager/CMakeLists.txt new file mode 100755 index 000000000..10cb294ad --- /dev/null +++ b/src/ResourcesManager/CMakeLists.txt @@ -0,0 +1,64 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${LIBXML_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_BINARY_DIR}/idl +) + +# This local variable defines the list of FLAGS common to all target in this package. +SET(COMMON_FLAGS "${OMNIORB_DEFINITIONS} ${LIBXML_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + +# This local variable defines the list of dependant libraries common to all target in this package. +SET(COMMON_LIBS + SalomeNS + OpUtil + SALOMEBasics + SalomeIDLKernel + ${LIBXML_LIBS} +) + +SET(ResourcesManager_SOURCES + SALOME_ResourcesCatalog_Parser.cxx + SALOME_ResourcesCatalog_Handler.cxx + SALOME_LoadRateManager.cxx + ResourcesManager.cxx +) + +ADD_LIBRARY(ResourcesManager SHARED ${ResourcesManager_SOURCES}) +SET_TARGET_PROPERTIES(ResourcesManager PROPERTIES COMPILE_FLAGS "${LIBXML_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(ResourcesManager SALOMEBasics OpUtil ${LIBXML_LIBS}) +INSTALL(TARGETS ResourcesManager DESTINATION ${KERNEL_salomelib_LIBS}) + +IF(NOT WITHONLYLAUNCHER) + ADD_LIBRARY(SalomeResourcesManager SHARED SALOME_ResourcesManager.cxx) + SET_TARGET_PROPERTIES(SalomeResourcesManager PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") + TARGET_LINK_LIBRARIES(SalomeResourcesManager ResourcesManager ${COMMON_LIBS}) + INSTALL(TARGETS SalomeResourcesManager DESTINATION ${KERNEL_salomelib_LIBS}) +ENDIF(NOT WITHONLYLAUNCHER) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/ResourcesManager/SALOME_ResourcesCatalog_Handler.cxx b/src/ResourcesManager/SALOME_ResourcesCatalog_Handler.cxx index f65db96c0..ae42569dd 100755 --- a/src/ResourcesManager/SALOME_ResourcesCatalog_Handler.cxx +++ b/src/ResourcesManager/SALOME_ResourcesCatalog_Handler.cxx @@ -248,6 +248,8 @@ SALOME_ResourcesCatalog_Handler::ProcessCluster(xmlNodePtr cluster_descr, Parser resource.mpi = mpich2; else if (anMpi == "openmpi") resource.mpi = openmpi; + else if (anMpi == "ompi") + resource.mpi = ompi; else if (anMpi == "slurmmpi") resource.mpi = slurmmpi; else if (anMpi == "prun") @@ -543,6 +545,8 @@ SALOME_ResourcesCatalog_Handler::ProcessMachine(xmlNodePtr machine_descr, Parser resource.mpi = mpich2; else if (anMpi == "openmpi") resource.mpi = openmpi; + else if (anMpi == "ompi") + resource.mpi = ompi; else if (anMpi == "slurmmpi") resource.mpi = slurmmpi; else if (anMpi == "prun") @@ -768,6 +772,9 @@ void SALOME_ResourcesCatalog_Handler::PrepareDocToXmlFile(xmlDocPtr theDoc) case openmpi: xmlNewProp(node, BAD_CAST test_mpi, BAD_CAST "openmpi"); break; + case ompi: + xmlNewProp(node, BAD_CAST test_mpi, BAD_CAST "ompi"); + break; case slurmmpi: xmlNewProp(node, BAD_CAST test_mpi, BAD_CAST "slurmmpi"); break; diff --git a/src/ResourcesManager/SALOME_ResourcesCatalog_Parser.cxx b/src/ResourcesManager/SALOME_ResourcesCatalog_Parser.cxx index 50360f72f..9cf3cfa99 100644 --- a/src/ResourcesManager/SALOME_ResourcesCatalog_Parser.cxx +++ b/src/ResourcesManager/SALOME_ResourcesCatalog_Parser.cxx @@ -263,6 +263,8 @@ ParserResourcesType::PrintMpiImplType() const return "mpich2"; else if (mpi == openmpi) return "openmpi"; + else if (mpi == ompi) + return "ompi"; else if (mpi == slurmmpi) return "slurmmpi"; else diff --git a/src/ResourcesManager/SALOME_ResourcesCatalog_Parser.hxx b/src/ResourcesManager/SALOME_ResourcesCatalog_Parser.hxx index 20a390db1..1ac87b340 100755 --- a/src/ResourcesManager/SALOME_ResourcesCatalog_Parser.hxx +++ b/src/ResourcesManager/SALOME_ResourcesCatalog_Parser.hxx @@ -47,7 +47,7 @@ enum AccessModeType {interactive, batch}; enum BatchType {none, pbs, lsf, sge, ssh_batch, ccc, ll, slurm, vishnu}; -enum MpiImplType {nompi, lam, mpich1, mpich2, openmpi, slurmmpi, prun}; +enum MpiImplType {nompi, lam, mpich1, mpich2, openmpi, ompi, slurmmpi, prun}; class RESOURCESMANAGER_EXPORT ResourceDataToSort { diff --git a/src/ResourcesManager/SALOME_ResourcesManager.cxx b/src/ResourcesManager/SALOME_ResourcesManager.cxx index eb932fdc8..30a1c1b44 100644 --- a/src/ResourcesManager/SALOME_ResourcesManager.cxx +++ b/src/ResourcesManager/SALOME_ResourcesManager.cxx @@ -237,6 +237,8 @@ SALOME_ResourcesManager::GetResourceDefinition(const char * name) p_ptr->mpiImpl = "mpich2"; else if( resource.mpi == openmpi ) p_ptr->mpiImpl = "openmpi"; + else if( resource.mpi == ompi ) + p_ptr->mpiImpl = "ompi"; else if( resource.mpi == slurmmpi ) p_ptr->mpiImpl = "slurmmpi"; else if( resource.mpi == prun ) @@ -315,6 +317,8 @@ SALOME_ResourcesManager::AddResource(const Engines::ResourceDefinition& new_reso resource.mpi = mpich2; else if (anMpi == "openmpi") resource.mpi = openmpi; + else if (anMpi == "ompi") + resource.mpi = ompi; else if (anMpi == "slurmmpi") resource.mpi = slurmmpi; else if (anMpi == "prun") @@ -499,7 +503,7 @@ SALOME_ResourcesManager::getMachineFile(std::string resource_name, cluster_it++; } } - else if (resource.mpi == openmpi) + else if ((resource.mpi == openmpi) || (resource.mpi == ompi)) { // Creating machine file machine_file_name = tmpnam(NULL); diff --git a/src/SALOMEDS/CMakeLists.txt b/src/SALOMEDS/CMakeLists.txt new file mode 100755 index 000000000..e1d4820db --- /dev/null +++ b/src/SALOMEDS/CMakeLists.txt @@ -0,0 +1,269 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${HDF5_INCLUDE_DIRS} + ${BOOST_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../HDFPersist + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../DF + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMEDSImpl + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../GenericObj + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMEDSClient + ${CMAKE_CURRENT_SOURCE_DIR}/../LifeCycleCORBA + ${CMAKE_BINARY_DIR}/idl +) + +SET(COMMON_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +SET(COMMON_LIBS + TOOLSDS + SalomeNS + OpUtil + SALOMELocalTrace + SALOMEBasics + SalomeHDFPersist + DF + SalomeDSImpl + SalomeGenericObj + SalomeLifeCycleCORBA + SalomeIDLKernel + ${HDF5_LIBS} +) + +SET(SalomeDS_SOURCES + SALOMEDS.cxx + SALOMEDS_Driver_i.cxx + SALOMEDS_StudyManager_i.cxx + SALOMEDS_UseCaseBuilder_i.cxx + SALOMEDS_UseCaseIterator_i.cxx + SALOMEDS_ChildIterator_i.cxx + SALOMEDS_SComponentIterator_i.cxx + SALOMEDS_Study_i.cxx + SALOMEDS_StudyBuilder_i.cxx + SALOMEDS_SObject_i.cxx + SALOMEDS_SComponent_i.cxx + SALOMEDS_GenericAttribute_i.cxx + SALOMEDS_AttributeComment_i.cxx + SALOMEDS_AttributeExternalFileDef_i.cxx + SALOMEDS_AttributeFileType_i.cxx + SALOMEDS_AttributeIOR_i.cxx + SALOMEDS_AttributeInteger_i.cxx + SALOMEDS_AttributeName_i.cxx + SALOMEDS_AttributePersistentRef_i.cxx + SALOMEDS_AttributeReal_i.cxx + SALOMEDS_AttributeSequenceOfReal_i.cxx + SALOMEDS_AttributeSequenceOfInteger_i.cxx + SALOMEDS_AttributeDrawable_i.cxx + SALOMEDS_AttributeSelectable_i.cxx + SALOMEDS_AttributeOpened_i.cxx + SALOMEDS_AttributeFlags_i.cxx + SALOMEDS_AttributeGraphic_i.cxx + SALOMEDS_AttributeExpandable_i.cxx + SALOMEDS_AttributeTextColor_i.cxx + SALOMEDS_AttributeTextHighlightColor_i.cxx + SALOMEDS_AttributePixMap_i.cxx + SALOMEDS_AttributeTreeNode_i.cxx + SALOMEDS_AttributeLocalID_i.cxx + SALOMEDS_AttributeUserID_i.cxx + SALOMEDS_AttributeTarget_i.cxx + SALOMEDS_AttributeTableOfInteger_i.cxx + SALOMEDS_AttributeTableOfReal_i.cxx + SALOMEDS_AttributeTableOfString_i.cxx + SALOMEDS_AttributeStudyProperties_i.cxx + SALOMEDS_AttributePythonObject_i.cxx + SALOMEDS_AttributeParameter_i.cxx + SALOMEDS_AttributeString_i.cxx + SALOMEDS_SObject.cxx + SALOMEDS_SComponent.cxx + SALOMEDS_GenericAttribute.cxx + SALOMEDS_ChildIterator.cxx + SALOMEDS_SComponentIterator.cxx + SALOMEDS_UseCaseIterator.cxx + SALOMEDS_UseCaseBuilder.cxx + SALOMEDS_StudyBuilder.cxx + SALOMEDS_Study.cxx + SALOMEDS_StudyManager.cxx + SALOMEDS_AttributeStudyProperties.cxx + SALOMEDS_AttributeComment.cxx + SALOMEDS_AttributeDrawable.cxx + SALOMEDS_AttributeExpandable.cxx + SALOMEDS_AttributeExternalFileDef.cxx + SALOMEDS_AttributeFileType.cxx + SALOMEDS_AttributeFlags.cxx + SALOMEDS_AttributeGraphic.cxx + SALOMEDS_AttributeIOR.cxx + SALOMEDS_AttributeInteger.cxx + SALOMEDS_AttributeLocalID.cxx + SALOMEDS_AttributeName.cxx + SALOMEDS_AttributeOpened.cxx + SALOMEDS_AttributePythonObject.cxx + SALOMEDS_AttributeReal.cxx + SALOMEDS_AttributeSelectable.cxx + SALOMEDS_AttributeSequenceOfInteger.cxx + SALOMEDS_AttributePersistentRef.cxx + SALOMEDS_AttributePixMap.cxx + SALOMEDS_AttributeSequenceOfReal.cxx + SALOMEDS_AttributeTableOfInteger.cxx + SALOMEDS_AttributeTableOfReal.cxx + SALOMEDS_AttributeTableOfString.cxx + SALOMEDS_AttributeTarget.cxx + SALOMEDS_AttributeTextColor.cxx + SALOMEDS_AttributeTextHighlightColor.cxx + SALOMEDS_AttributeTreeNode.cxx + SALOMEDS_AttributeUserID.cxx + SALOMEDS_TMPFile_i.cxx + SALOMEDS_AttributeParameter.cxx + SALOMEDS_AttributeString.cxx + SALOMEDS_IParameters.cxx + SALOMEDS_AttLong_i.hxx + SALOMEDS_AttReal_i.hxx + SALOMEDS_AttributeComment.hxx + SALOMEDS_AttributeComment_i.hxx + SALOMEDS_AttributeDrawable.hxx + SALOMEDS_AttributeDrawable_i.hxx + SALOMEDS_AttributeExpandable.hxx + SALOMEDS_AttributeExpandable_i.hxx + SALOMEDS_AttributeExternalFileDef.hxx + SALOMEDS_AttributeExternalFileDef_i.hxx + SALOMEDS_AttributeFileType.hxx + SALOMEDS_AttributeFileType_i.hxx + SALOMEDS_AttributeFlags.hxx + SALOMEDS_AttributeFlags_i.hxx + SALOMEDS_AttributeGraphic.hxx + SALOMEDS_AttributeGraphic_i.hxx + SALOMEDS_AttributeInteger.hxx + SALOMEDS_AttributeInteger_i.hxx + SALOMEDS_AttributeIOR.hxx + SALOMEDS_AttributeIOR_i.hxx + SALOMEDS_AttributeLocalID.hxx + SALOMEDS_AttributeLocalID_i.hxx + SALOMEDS_AttributeName.hxx + SALOMEDS_AttributeName_i.hxx + SALOMEDS_AttributeOpened.hxx + SALOMEDS_AttributeOpened_i.hxx + SALOMEDS_AttributePersistentRef.hxx + SALOMEDS_AttributePersistentRef_i.hxx + SALOMEDS_AttributePixMap.hxx + SALOMEDS_AttributePixMap_i.hxx + SALOMEDS_AttributePythonObject.hxx + SALOMEDS_AttributePythonObject_i.hxx + SALOMEDS_AttributeReal.hxx + SALOMEDS_AttributeReal_i.hxx + SALOMEDS_AttributeSelectable.hxx + SALOMEDS_AttributeSelectable_i.hxx + SALOMEDS_AttributeSequenceOfInteger.hxx + SALOMEDS_AttributeSequenceOfInteger_i.hxx + SALOMEDS_AttributeSequenceOfReal.hxx + SALOMEDS_AttributeSequenceOfReal_i.hxx + SALOMEDS_Attributes.hxx + SALOMEDS_AttributeStudyProperties.hxx + SALOMEDS_AttributeStudyProperties_i.hxx + SALOMEDS_AttributeTableOfInteger.hxx + SALOMEDS_AttributeTableOfInteger_i.hxx + SALOMEDS_AttributeTableOfReal.hxx + SALOMEDS_AttributeTableOfReal_i.hxx + SALOMEDS_AttributeTableOfString.hxx + SALOMEDS_AttributeTableOfString_i.hxx + SALOMEDS_AttributeTarget.hxx + SALOMEDS_AttributeTarget_i.hxx + SALOMEDS_AttributeTextColor.hxx + SALOMEDS_AttributeTextColor_i.hxx + SALOMEDS_AttributeTextHighlightColor.hxx + SALOMEDS_AttributeTextHighlightColor_i.hxx + SALOMEDS_AttributeTreeNode.hxx + SALOMEDS_AttributeTreeNode_i.hxx + SALOMEDS_AttributeUserID.hxx + SALOMEDS_AttributeUserID_i.hxx + SALOMEDS_BasicAttributeFactory.hxx + SALOMEDS_BasicAttribute_i.hxx + SALOMEDS_Callback_i.hxx + SALOMEDS_ChildIterator.hxx + SALOMEDS_ChildIterator_i.hxx + SALOMEDS_ClientAttributes.hxx + SALOMEDS_Driver_i.hxx + SALOMEDS_GenericAttribute.hxx + SALOMEDS_GenericAttribute_i.hxx + SALOMEDS.hxx + SALOMEDS_SComponent.hxx + SALOMEDS_SComponent_i.hxx + SALOMEDS_SComponentIterator.hxx + SALOMEDS_SComponentIterator_i.hxx + SALOMEDS_SObject.hxx + SALOMEDS_SObject_i.hxx + SALOMEDS_StudyBuilder.hxx + SALOMEDS_StudyBuilder_i.hxx + SALOMEDS_Study.hxx + SALOMEDS_Study_i.hxx + SALOMEDS_StudyManager.hxx + SALOMEDS_StudyManager_i.hxx + SALOMEDS_UseCaseBuilder.hxx + SALOMEDS_UseCaseBuilder_i.hxx + SALOMEDS_UseCaseIterator.hxx + SALOMEDS_UseCaseIterator_i.hxx + SALOMEDS_AttributeParameter.hxx + SALOMEDS_AttributeParameter_i.hxx + SALOMEDS_AttributeString.hxx + SALOMEDS_AttributeString_i.hxx + SALOMEDS_TMPFile_i.hxx +) + +IF(WINDOWS) + SET(COMMON_FLAGS "${COMMON_FLAGS} -DNOGDI") +ENDIF(WINDOWS) + +ADD_LIBRARY(SalomeDS SHARED ${SalomeDS_SOURCES}) +SET_TARGET_PROPERTIES(SalomeDS PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(SalomeDS ${COMMON_LIBS}) +INSTALL(TARGETS SalomeDS DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(SALOMEDS_Server SALOMEDS_Server.cxx) +SET_TARGET_PROPERTIES(SALOMEDS_Server PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(SALOMEDS_Server SalomeDS SALOMEBasics ${COMMON_LIBS} ${OMNIORB_LIBS}) + +ADD_EXECUTABLE(SALOMEDS_Client SALOMEDS_Client.cxx) +SET_TARGET_PROPERTIES(SALOMEDS_Client PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(SALOMEDS_Client SalomeDS SALOMEBasics ${COMMON_LIBS} ${OMNIORB_LIBS}) + +INSTALL(TARGETS SALOMEDS_Server SALOMEDS_Client DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(SALOME_DriverPy.py ${KERNEL_salomescript_PYTHON}) + +SET(COMMON_HEADERS_HXX + SALOMEDS_StudyManager_i.hxx + SALOMEDS_Driver_i.hxx + SALOMEDS_StudyManager.hxx + SALOMEDS_Study_i.hxx + SALOMEDS_Study.hxx + SALOMEDS_SObject_i.hxx + SALOMEDS_SObject.hxx + SALOMEDS_SComponent_i.hxx + SALOMEDS_SComponent.hxx + SALOMEDS_GenericAttribute_i.hxx + SALOMEDS_GenericAttribute.hxx + SALOMEDS_IParameters.hxx + SALOMEDS_Defines.hxx +) +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/SALOMEDS/Makefile.am b/src/SALOMEDS/Makefile.am index bfc45db68..e064be049 100644 --- a/src/SALOMEDS/Makefile.am +++ b/src/SALOMEDS/Makefile.am @@ -75,7 +75,6 @@ COMMON_CPPFLAGS=\ # This local variable defines the list of dependant libraries common to all target in this package. COMMON_LIBS =\ - ../TOOLSDS/libTOOLSDS.la \ ../NamingService/libSalomeNS.la \ ../Utils/libOpUtil.la \ ../SALOMELocalTrace/libSALOMELocalTrace.la \ diff --git a/src/SALOMEDS/SALOMEDS_AttributeStudyProperties.cxx b/src/SALOMEDS/SALOMEDS_AttributeStudyProperties.cxx index af20553fa..bdb5760d7 100644 --- a/src/SALOMEDS/SALOMEDS_AttributeStudyProperties.cxx +++ b/src/SALOMEDS/SALOMEDS_AttributeStudyProperties.cxx @@ -319,3 +319,49 @@ std::string SALOMEDS_AttributeStudyProperties::GetUnits() anUnits = ((SALOMEDS::AttributeStudyProperties_var)SALOMEDS::AttributeStudyProperties::_narrow(_corba_impl))->GetUnits(); return anUnits; } + +std::vector SALOMEDS_AttributeStudyProperties::GetStoredComponents() +{ + std::vector aComponents; + if (_isLocal) { + SALOMEDS::Locker lock; + aComponents = dynamic_cast(_local_impl)->GetStoredComponents(); + } + else { + SALOMEDS::StringSeq_var components = ((SALOMEDS::AttributeStudyProperties_var)SALOMEDS::AttributeStudyProperties::_narrow(_corba_impl))->GetStoredComponents(); + int length = components->length(); + for (int i = 0; i < length; i++) { + aComponents.push_back(components[i].in()); + } + } + return aComponents; +} + +std::string SALOMEDS_AttributeStudyProperties::GetComponentVersion( const std::string& theComponent ) +{ + std::string aVersion; + if (_isLocal) { + SALOMEDS::Locker lock; + aVersion = dynamic_cast(_local_impl)->GetComponentVersion(theComponent); + } + else + aVersion = ((SALOMEDS::AttributeStudyProperties_var)SALOMEDS::AttributeStudyProperties::_narrow(_corba_impl))->GetComponentVersion(theComponent.c_str()); + return aVersion; +} + +std::vector SALOMEDS_AttributeStudyProperties::GetComponentVersions( const std::string& theComponent ) +{ + std::vector aVersions; + if (_isLocal) { + SALOMEDS::Locker lock; + aVersions = dynamic_cast(_local_impl)->GetComponentVersions(theComponent); + } + else { + SALOMEDS::StringSeq_var versions = ((SALOMEDS::AttributeStudyProperties_var)SALOMEDS::AttributeStudyProperties::_narrow(_corba_impl))->GetComponentVersions(theComponent.c_str()); + int length = versions->length(); + for (int i = 0; i < length; i++) { + aVersions.push_back(versions[i].in()); + } + } + return aVersions; +} diff --git a/src/SALOMEDS/SALOMEDS_AttributeStudyProperties.hxx b/src/SALOMEDS/SALOMEDS_AttributeStudyProperties.hxx index 4ebd180bd..b02e0fbff 100644 --- a/src/SALOMEDS/SALOMEDS_AttributeStudyProperties.hxx +++ b/src/SALOMEDS/SALOMEDS_AttributeStudyProperties.hxx @@ -82,7 +82,9 @@ public: virtual void SetComment(const std::string& theComment); virtual std::string GetComment(); - + virtual std::vector GetStoredComponents(); + virtual std::string GetComponentVersion( const std::string& theComponent ); + virtual std::vector GetComponentVersions( const std::string& theComponent ); }; diff --git a/src/SALOMEDS/SALOMEDS_AttributeStudyProperties_i.cxx b/src/SALOMEDS/SALOMEDS_AttributeStudyProperties_i.cxx index a6bd88294..3c02784de 100644 --- a/src/SALOMEDS/SALOMEDS_AttributeStudyProperties_i.cxx +++ b/src/SALOMEDS/SALOMEDS_AttributeStudyProperties_i.cxx @@ -218,3 +218,34 @@ char* SALOMEDS_AttributeStudyProperties_i::GetUnits() return c_s._retn(); } +SALOMEDS::StringSeq* SALOMEDS_AttributeStudyProperties_i::GetStoredComponents() +{ + SALOMEDS::Locker lock; + std::vector components = dynamic_cast(_impl)->GetStoredComponents(); + SALOMEDS::StringSeq_var c_components = new SALOMEDS::StringSeq(); + c_components->length(components.size()); + for (int i = 0; i < components.size(); i++) { + c_components[i] = CORBA::string_dup(components[i].c_str()); + } + return c_components._retn(); +} + +char* SALOMEDS_AttributeStudyProperties_i::GetComponentVersion(const char* theComponent) +{ + SALOMEDS::Locker lock; + std::string version = dynamic_cast(_impl)->GetComponentVersion(theComponent); + CORBA::String_var c_version = CORBA::string_dup(version.c_str()); + return c_version._retn(); +} + +SALOMEDS::StringSeq* SALOMEDS_AttributeStudyProperties_i::GetComponentVersions(const char* theComponent) +{ + SALOMEDS::Locker lock; + std::vector versions = dynamic_cast(_impl)->GetComponentVersions(theComponent); + SALOMEDS::StringSeq_var c_versions = new SALOMEDS::StringSeq(); + c_versions->length(versions.size()); + for (int i = 0; i < versions.size(); i++) { + c_versions[i] = CORBA::string_dup(versions[i].c_str()); + } + return c_versions._retn(); +} diff --git a/src/SALOMEDS/SALOMEDS_AttributeStudyProperties_i.hxx b/src/SALOMEDS/SALOMEDS_AttributeStudyProperties_i.hxx index 7c6198ee1..ead14d9e8 100644 --- a/src/SALOMEDS/SALOMEDS_AttributeStudyProperties_i.hxx +++ b/src/SALOMEDS/SALOMEDS_AttributeStudyProperties_i.hxx @@ -73,6 +73,10 @@ public: virtual void SetUnits(const char* theUnits); virtual char* GetUnits(); + + virtual SALOMEDS::StringSeq* GetStoredComponents(); + virtual char* GetComponentVersion(const char* theComponent); + virtual SALOMEDS::StringSeq* GetComponentVersions(const char* theComponent); }; diff --git a/src/SALOMEDS/SALOMEDS_Driver_i.cxx b/src/SALOMEDS/SALOMEDS_Driver_i.cxx index 87bdec277..e072cedb3 100644 --- a/src/SALOMEDS/SALOMEDS_Driver_i.cxx +++ b/src/SALOMEDS/SALOMEDS_Driver_i.cxx @@ -29,21 +29,33 @@ #include "SALOMEDS.hxx" #include -SALOMEDS_Driver_i::SALOMEDS_Driver_i(SALOMEDS::Driver_ptr theDriver, CORBA::ORB_ptr theORB) +SALOMEDS_Driver_i::SALOMEDS_Driver_i(Engines::EngineComponent_ptr theEngine, CORBA::ORB_ptr theORB) { + // engine should not be null - component is supposed to be inherited from Engines::EngineComponent + _engine = Engines::EngineComponent::_duplicate(theEngine); + // driver can be null - if component interface does not inherit SALOMEDS::Driver + _driver = SALOMEDS::Driver::_narrow(theEngine); + _orb = CORBA::ORB::_duplicate(theORB); +} + +SALOMEDS_Driver_i::SALOMEDS_Driver_i(SALOMEDS::Driver_ptr theDriver, CORBA::ORB_ptr theORB) +{ + // driver can be null - if component interface does not inherit SALOMEDS::Driver _driver = SALOMEDS::Driver::_duplicate(theDriver); - _orb = CORBA::ORB::_duplicate(theORB); + // engine can be null - since it is narrowed from SALOMEDS::Driver ptr which can be null + _engine = Engines::EngineComponent::_narrow(theDriver); + _orb = CORBA::ORB::_duplicate(theORB); } SALOMEDS_Driver_i::~SALOMEDS_Driver_i() { } -std::string SALOMEDS_Driver_i::GetIOR() +std::string SALOMEDS_Driver_i::GetIOR() { std::string ior = ""; - if ( !CORBA::is_nil(_driver) ) { - CORBA::String_var cior = _orb->object_to_string(_driver); + if ( !CORBA::is_nil(_engine) ) { + CORBA::String_var cior = _orb->object_to_string(_engine); ior = cior; } return ior; @@ -53,7 +65,7 @@ SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::Save(const SALOMEDSImpl_SComponent& the const std::string& theURL, long& theStreamLength, bool isMultiFile) -{ +{ SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb); CORBA::String_var url = CORBA::string_dup(theURL.c_str()); @@ -90,7 +102,7 @@ SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::SaveASCII(const SALOMEDSImpl_SComponent return aTMPFile; } - + bool SALOMEDS_Driver_i::Load(const SALOMEDSImpl_SComponent& theComponent, const unsigned char* theStream, const long theStreamLength, @@ -102,9 +114,9 @@ bool SALOMEDS_Driver_i::Load(const SALOMEDSImpl_SComponent& theComponent, CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream; SALOMEDS::TMPFile_var aStream; - if (theStreamLength > 0) - aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0); - else + if (theStreamLength > 0) + aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0); + else aStream = new SALOMEDS::TMPFile(0); SALOMEDS::unlock(); @@ -128,9 +140,9 @@ bool SALOMEDS_Driver_i::LoadASCII(const SALOMEDSImpl_SComponent& theComponent, CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream; SALOMEDS::TMPFile_var aStream; - if(theStreamLength > 0) - aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0); - else + if(theStreamLength > 0) + aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0); + else aStream = new SALOMEDS::TMPFile(0); SALOMEDS::unlock(); @@ -153,7 +165,7 @@ void SALOMEDS_Driver_i::Close(const SALOMEDSImpl_SComponent& theComponent) SALOMEDS::lock(); } -std::string SALOMEDS_Driver_i::ComponentDataType() +std::string SALOMEDS_Driver_i::ComponentDataType() { std::string dtype = ""; if ( !CORBA::is_nil(_driver) ) { @@ -163,6 +175,11 @@ std::string SALOMEDS_Driver_i::ComponentDataType() return dtype; } +std::string SALOMEDS_Driver_i::Version() +{ + return !CORBA::is_nil( _engine ) ? _engine->getVersion() : std::string(""); +} + std::string SALOMEDS_Driver_i::IORToLocalPersistentID(const SALOMEDSImpl_SObject& theSObject, const std::string& IORString, bool isMultiFile, @@ -223,7 +240,7 @@ bool SALOMEDS_Driver_i::CanCopy(const SALOMEDSImpl_SObject& theObject) } -SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::CopyFrom(const SALOMEDSImpl_SObject& theObject, +SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::CopyFrom(const SALOMEDSImpl_SObject& theObject, int& theObjectID, long& theStreamLength) { @@ -265,9 +282,9 @@ std::string SALOMEDS_Driver_i::PasteInto(const unsigned char* theStream, CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream; SALOMEDS::TMPFile_var aStream; - if(theStreamLength > 0) - aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0); - else + if(theStreamLength > 0) + aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0); + else aStream = new SALOMEDS::TMPFile(0); SALOMEDS::unlock(); @@ -284,8 +301,8 @@ std::string SALOMEDS_Driver_i::PasteInto(const unsigned char* theStream, return entry; } -SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(SALOMEDSImpl_Study* theStudy, - bool isPublished, +SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(SALOMEDSImpl_Study* theStudy, + bool isPublished, bool isMultiFile, bool& isValidScript, long& theStreamLength) @@ -298,9 +315,8 @@ SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(SALOMEDSImpl_Study* theStudy Engines::TMPFile_var aStream; CORBA::Boolean aValidScript = true; // VSR: maybe should be false by default ??? - Engines::EngineComponent_ptr aComponent = Engines::EngineComponent::_narrow(_driver); - if ( !CORBA::is_nil( aComponent ) ) - aStream = aComponent->DumpPython(st.in(), isPublished, isMultiFile, aValidScript); + if ( !CORBA::is_nil( _engine ) ) + aStream = _engine->DumpPython(st.in(), isPublished, isMultiFile, aValidScript); SALOMEDSImpl_TMPFile* aTMPFile = new Engines_TMPFile_i(aStream._retn()); theStreamLength = aTMPFile->Size(); @@ -315,14 +331,14 @@ SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(SALOMEDSImpl_Study* theStudy // SALOMEDS_DriverFactory //############################################################################################################### -SALOMEDS_DriverFactory_i::SALOMEDS_DriverFactory_i(CORBA::ORB_ptr theORB) +SALOMEDS_DriverFactory_i::SALOMEDS_DriverFactory_i(CORBA::ORB_ptr theORB) { _orb = CORBA::ORB::_duplicate(theORB); _name_service = new SALOME_NamingService(_orb); } -SALOMEDS_DriverFactory_i::~SALOMEDS_DriverFactory_i() +SALOMEDS_DriverFactory_i::~SALOMEDS_DriverFactory_i() { delete _name_service; } @@ -340,12 +356,12 @@ SALOMEDSImpl_Driver* SALOMEDS_DriverFactory_i::GetDriverByType(const std::string SALOMEDS::lock(); if (CORBA::is_nil(obj)) { - obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component("FactoryServerPy", theComponentType.c_str()); + obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component("FactoryServer", theComponentType.c_str()); } if (!CORBA::is_nil(obj)) { - SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj); - return new SALOMEDS_Driver_i(aDriver, _orb); + Engines::EngineComponent_var anEngine = Engines::EngineComponent::_narrow(obj); + return new SALOMEDS_Driver_i(anEngine, _orb); } return NULL; @@ -355,10 +371,10 @@ SALOMEDSImpl_Driver* SALOMEDS_DriverFactory_i::GetDriverByIOR(const std::string& { CORBA::Object_var obj; obj = _orb->string_to_object(theIOR.c_str()); - + if (!CORBA::is_nil(obj)) { - SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj); - return new SALOMEDS_Driver_i(aDriver, _orb); + Engines::EngineComponent_var anEngine = Engines::EngineComponent::_narrow(obj); + return new SALOMEDS_Driver_i(anEngine, _orb); } return NULL; diff --git a/src/SALOMEDS/SALOMEDS_Driver_i.hxx b/src/SALOMEDS/SALOMEDS_Driver_i.hxx index a17b9b846..e4de665be 100644 --- a/src/SALOMEDS/SALOMEDS_Driver_i.hxx +++ b/src/SALOMEDS/SALOMEDS_Driver_i.hxx @@ -37,12 +37,12 @@ class Standard_EXPORT SALOMEDS_Driver_i : public virtual SALOMEDSImpl_Driver { protected: SALOMEDS::Driver_var _driver; + Engines::EngineComponent_var _engine; CORBA::ORB_var _orb; public: - + SALOMEDS_Driver_i(Engines::EngineComponent_ptr theEngine, CORBA::ORB_ptr theORB); SALOMEDS_Driver_i(SALOMEDS::Driver_ptr theDriver, CORBA::ORB_ptr theORB); - ~SALOMEDS_Driver_i(); virtual std::string GetIOR(); @@ -73,6 +73,8 @@ public: virtual std::string ComponentDataType(); + virtual std::string Version(); + virtual std::string IORToLocalPersistentID(const SALOMEDSImpl_SObject& theSObject, const std::string& IORString, bool isMultiFile, diff --git a/src/SALOMEDS/SALOMEDS_StudyBuilder.cxx b/src/SALOMEDS/SALOMEDS_StudyBuilder.cxx index 5e54ef02e..fb6ee94c0 100644 --- a/src/SALOMEDS/SALOMEDS_StudyBuilder.cxx +++ b/src/SALOMEDS/SALOMEDS_StudyBuilder.cxx @@ -194,12 +194,13 @@ void SALOMEDS_StudyBuilder::LoadWith(const _PTR(SComponent)& theSCO, const std:: SALOMEDS_SComponent* aSCO = dynamic_cast(theSCO.get()); CORBA::Object_var obj = _orb->string_to_object(theIOR.c_str()); + Engines::EngineComponent_var anEngine = Engines::EngineComponent::_narrow(obj); SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj); if (_isLocal) { SALOMEDS::Locker lock; - SALOMEDS_Driver_i* drv = new SALOMEDS_Driver_i(aDriver, _orb); + SALOMEDS_Driver_i* drv = new SALOMEDS_Driver_i(anEngine, _orb); SALOMEDSImpl_SComponent aSCO_impl = *(dynamic_cast(aSCO->GetLocalImpl())); bool isDone = _local_impl->LoadWith(aSCO_impl, drv); delete drv; diff --git a/src/SALOMEDS/SALOMEDS_StudyManager.cxx b/src/SALOMEDS/SALOMEDS_StudyManager.cxx index 813d0820e..814f58bc3 100644 --- a/src/SALOMEDS/SALOMEDS_StudyManager.cxx +++ b/src/SALOMEDS/SALOMEDS_StudyManager.cxx @@ -317,7 +317,7 @@ SALOMEDS_Driver_i* GetDriver(const SALOMEDSImpl_SObject& theObject, CORBA::ORB_p std::string IOREngine = aSCO.GetIOR(); if(!IOREngine.empty()) { CORBA::Object_var obj = orb->string_to_object(IOREngine.c_str()); - SALOMEDS::Driver_var Engine = SALOMEDS::Driver::_narrow(obj) ; + Engines::EngineComponent_var Engine = Engines::EngineComponent::_narrow(obj) ; driver = new SALOMEDS_Driver_i(Engine, orb); } } diff --git a/src/SALOMEDS/SALOMEDS_StudyManager_i.cxx b/src/SALOMEDS/SALOMEDS_StudyManager_i.cxx index c26919c8e..9ba8b7e71 100644 --- a/src/SALOMEDS/SALOMEDS_StudyManager_i.cxx +++ b/src/SALOMEDS/SALOMEDS_StudyManager_i.cxx @@ -451,7 +451,7 @@ SALOMEDS_Driver_i* GetDriver(const SALOMEDSImpl_SObject& theObject, CORBA::ORB_p std::string IOREngine = aSCO.GetIOR(); if(!IOREngine.empty()) { CORBA::Object_var obj = orb->string_to_object(IOREngine.c_str()); - SALOMEDS::Driver_var Engine = SALOMEDS::Driver::_narrow(obj) ; + Engines::EngineComponent_var Engine = Engines::EngineComponent::_narrow(obj) ; driver = new SALOMEDS_Driver_i(Engine, orb); } } diff --git a/src/SALOMEDS/SALOME_DriverPy.py b/src/SALOMEDS/SALOME_DriverPy.py index 7e820dd27..e879aeb69 100644 --- a/src/SALOMEDS/SALOME_DriverPy.py +++ b/src/SALOMEDS/SALOME_DriverPy.py @@ -46,6 +46,12 @@ class SALOME_DriverPy_i(SALOMEDS__POA.Driver): def ComponentDataType(self): return self._ComponentDataType + def Version(self): + try: + return self.getVersion() + except: + return "" + def Save(self, theComponent, theURL, isMultiFile): return "" diff --git a/src/SALOMEDS/Test/CMakeLists.txt b/src/SALOMEDS/Test/CMakeLists.txt new file mode 100755 index 000000000..069385256 --- /dev/null +++ b/src/SALOMEDS/Test/CMakeLists.txt @@ -0,0 +1,87 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${CPPUNIT_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${BOOST_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMETraceCollector + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMETraceCollector/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../../NamingService/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../../Utils/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../ResourcesManager + ${CMAKE_CURRENT_SOURCE_DIR}/../../LifeCycleCORBA + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMEDS + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMEDSClient + ${CMAKE_CURRENT_SOURCE_DIR}/../../DF + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMEDSImpl + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMEDSImpl/Test + ${CMAKE_BINARY_DIR}/idl +) + +# This local variable defines the list of dependant libraries common to all target in this package. +SET(COMMON_LIBS + ${CPPUNIT_LIBS} + SALOMEBasics + SalomeResourcesManager + SalomeContainer + SalomeNS + Registry + SalomeNotification + UtilsTest + OpUtil + SALOMELocalTraceTest + SALOMELocalTrace + SALOMETraceCollectorTest + SALOMEDSImplTest + DF + SalomeDSImpl + SalomeDSClient + SalomeDS + SalomeIDLKernel +) + +SET(COMMON_FLAGS "${CPPUNIT_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +IF(WINDOWS) + SET(COMMON_FLAGS "${COMMON_FLAGS} -DNOGDI") +ENDIF(WINDOWS) + +ADD_LIBRARY(SALOMEDSTest SHARED SALOMEDSTest.cxx) +SET_TARGET_PROPERTIES(SALOMEDSTest PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(SALOMEDSTest ${COMMON_LIBS}) +INSTALL(TARGETS SALOMEDSTest DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(TestSALOMEDS TestSALOMEDS.cxx) +SET_TARGET_PROPERTIES(TestSALOMEDS PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestSALOMEDS SALOMEDSTest SALOMEBasics ${COMMON_LIBS} ${OMNIORB_LIBS}) +INSTALL(TARGETS TestSALOMEDS DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(TestSALOMEDS.py ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/SALOMEDS/Test/Makefile.am b/src/SALOMEDS/Test/Makefile.am index 3076b5821..4394dd9cc 100644 --- a/src/SALOMEDS/Test/Makefile.am +++ b/src/SALOMEDS/Test/Makefile.am @@ -96,7 +96,7 @@ libSALOMEDSTest_la_CPPFLAGS = $(COMMON_CPPFLAGS) libSALOMEDSTest_la_LDFLAGS = -no-undefined -version-info=0:0:0 libSALOMEDSTest_la_LIBADD = $(COMMON_LIBS) -EXTRA_DIST = \ +EXTRA_DIST += \ SALOMEDSTest_AttributeComment.cxx \ SALOMEDSTest_AttributeDrawable.cxx \ SALOMEDSTest_AttributeExpandable.cxx \ diff --git a/src/SALOMEDS/Test/SALOMEDSTest.hxx b/src/SALOMEDS/Test/SALOMEDSTest.hxx index 6d433f199..fc544d636 100644 --- a/src/SALOMEDS/Test/SALOMEDSTest.hxx +++ b/src/SALOMEDS/Test/SALOMEDSTest.hxx @@ -28,7 +28,17 @@ #include #include CORBA_SERVER_HEADER(SALOMEDS) -class SALOMEDSTest : public CppUnit::TestFixture +#ifdef WIN32 +# if defined SALOMEDSTEST_EXPORTS || defined SALOMEDSTest_EXPORTS +# define SALOMEDSTEST_EXPORT __declspec( dllexport ) +# else +# define SALOMEDSTEST_EXPORT __declspec( dllimport ) +# endif +#else +# define SALOMEDSTEST_EXPORT +#endif + +class SALOMEDSTEST_EXPORT SALOMEDSTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( SALOMEDSTest ); @@ -130,7 +140,7 @@ CORBA::ORB_var _orb; -class SALOMEDSTest_Embedded : public SALOMEDSTest +class SALOMEDSTEST_EXPORT SALOMEDSTest_Embedded : public SALOMEDSTest { CPPUNIT_TEST_SUITE( SALOMEDSTest_Embedded ); diff --git a/src/SALOMEDS/Test/TestSALOMEDS.cxx b/src/SALOMEDS/Test/TestSALOMEDS.cxx index 117a494bc..c9421cca1 100644 --- a/src/SALOMEDS/Test/TestSALOMEDS.cxx +++ b/src/SALOMEDS/Test/TestSALOMEDS.cxx @@ -53,6 +53,9 @@ CPPUNIT_TEST_SUITE_REGISTRATION( SALOMEDSTest_Embedded ); #include "NamingService_WaitForServerReadiness.hxx" #include "SALOMEDS_StudyManager_i.hxx" +#ifdef WIN32 +#define setenv Kernel_Utils::setenv +#endif // ============================================================================ /*! @@ -84,8 +87,13 @@ int main(int argc, char* argv[]) ORB_INIT &init = *SINGLETON_::Instance() ; ASSERT(SINGLETON_::IsAlreadyExisting()); CORBA::ORB_var orb = init(argc , argv ) ; - - sleep(15); + + #ifndef WIN32 + sleep(15); + #else + Sleep(15000); + #endif + std::string host; // = Kernel_Utils::GetHostname(); char* wait_Superv = getenv("SALOMEDS_UNITTESTS_WAIT_SUPERVISOR"); diff --git a/src/SALOMEDSClient/CMakeLists.txt b/src/SALOMEDSClient/CMakeLists.txt new file mode 100755 index 000000000..84df7a383 --- /dev/null +++ b/src/SALOMEDSClient/CMakeLists.txt @@ -0,0 +1,33 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${BOOST_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_BINARY_DIR}/idl +) + +ADD_LIBRARY(SalomeDSClient SHARED SALOMEDSClient_ClientFactory.cxx) +SET_TARGET_PROPERTIES(SalomeDSClient PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${OMNIORB_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeDSClient SalomeIDLKernel) +INSTALL(TARGETS SalomeDSClient DESTINATION ${KERNEL_salomelib_LIBS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/SALOMEDSClient/SALOMEDSClient_AttributeStudyProperties.hxx b/src/SALOMEDSClient/SALOMEDSClient_AttributeStudyProperties.hxx index de3f9a5cb..41284ca6e 100644 --- a/src/SALOMEDSClient/SALOMEDSClient_AttributeStudyProperties.hxx +++ b/src/SALOMEDSClient/SALOMEDSClient_AttributeStudyProperties.hxx @@ -67,7 +67,9 @@ public: virtual void SetComment(const std::string& theComment) = 0; virtual std::string GetComment() = 0; - + virtual std::vector GetStoredComponents() = 0; + virtual std::string GetComponentVersion( const std::string& theComponent ) = 0; + virtual std::vector GetComponentVersions( const std::string& theComponent ) = 0; }; diff --git a/src/SALOMEDSImpl/CMakeLists.txt b/src/SALOMEDSImpl/CMakeLists.txt new file mode 100755 index 000000000..d3daf020f --- /dev/null +++ b/src/SALOMEDSImpl/CMakeLists.txt @@ -0,0 +1,169 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${HDF5_INCLUDE_DIRS} + ${BOOST_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../HDFPersist + ${CMAKE_CURRENT_SOURCE_DIR}/../DF + ${CMAKE_CURRENT_SOURCE_DIR}/../GenericObj + ${CMAKE_BINARY_DIR}/idl + ${CMAKE_BINARY_DIR} +) + +# This local variable defines the list of FLAGS common to all target in this package. +SET(COMMON_FLAGS "${HDF5_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + +# This local variable defines the list of dependant libraries common to all target in this package. +SET(COMMON_LIBS + SALOMEBasics + SalomeHDFPersist + DF + SalomeGenericObj + SalomeIDLKernel + ${HDF5_LIBS} +) + +SET(SalomeDSImpl_SOURCES + SALOMEDSImpl_Tool.cxx + SALOMEDSImpl_Callback.cxx + SALOMEDSImpl_StudyHandle.cxx + SALOMEDSImpl_GenericAttribute.cxx + SALOMEDSImpl_SObject.cxx + SALOMEDSImpl_SComponent.cxx + SALOMEDSImpl_ChildIterator.cxx + SALOMEDSImpl_AttributeIOR.cxx + SALOMEDSImpl_AttributeExternalFileDef.cxx + SALOMEDSImpl_AttributeFileType.cxx + SALOMEDSImpl_AttributePersistentRef.cxx + SALOMEDSImpl_AttributeSequenceOfReal.cxx + SALOMEDSImpl_AttributeSequenceOfInteger.cxx + SALOMEDSImpl_AttributeDrawable.cxx + SALOMEDSImpl_AttributeSelectable.cxx + SALOMEDSImpl_AttributeExpandable.cxx + SALOMEDSImpl_AttributeOpened.cxx + SALOMEDSImpl_AttributeFlags.cxx + SALOMEDSImpl_AttributeGraphic.cxx + SALOMEDSImpl_AttributeTextColor.cxx + SALOMEDSImpl_AttributeTextHighlightColor.cxx + SALOMEDSImpl_AttributePixMap.cxx + SALOMEDSImpl_AttributeLocalID.cxx + SALOMEDSImpl_AttributeTarget.cxx + SALOMEDSImpl_AttributeTableOfInteger.cxx + SALOMEDSImpl_AttributeTableOfReal.cxx + SALOMEDSImpl_AttributeTableOfString.cxx + SALOMEDSImpl_AttributeStudyProperties.cxx + SALOMEDSImpl_AttributePythonObject.cxx + SALOMEDSImpl_AttributeReal.cxx + SALOMEDSImpl_AttributeInteger.cxx + SALOMEDSImpl_AttributeUserID.cxx + SALOMEDSImpl_AttributeTreeNode.cxx + SALOMEDSImpl_AttributeName.cxx + SALOMEDSImpl_AttributeComment.cxx + SALOMEDSImpl_AttributeReference.cxx + SALOMEDSImpl_AttributeParameter.cxx + SALOMEDSImpl_AttributeString.cxx + SALOMEDSImpl_ChildNodeIterator.cxx + SALOMEDSImpl_UseCaseBuilder.cxx + SALOMEDSImpl_UseCaseIterator.cxx + SALOMEDSImpl_SComponentIterator.cxx + SALOMEDSImpl_StudyBuilder.cxx + SALOMEDSImpl_Study.cxx + SALOMEDSImpl_StudyManager.cxx + SALOMEDSImpl_IParameters.cxx + SALOMEDSImpl_TMPFile.cxx + SALOMEDSImpl_GenericVariable.cxx + SALOMEDSImpl_ScalarVariable.cxx + SALOMEDSImpl_AttributeComment.hxx + SALOMEDSImpl_AttributeDrawable.hxx + SALOMEDSImpl_AttributeExpandable.hxx + SALOMEDSImpl_AttributeExternalFileDef.hxx + SALOMEDSImpl_AttributeFileType.hxx + SALOMEDSImpl_AttributeFlags.hxx + SALOMEDSImpl_AttributeGraphic.hxx + SALOMEDSImpl_AttributeInteger.hxx + SALOMEDSImpl_AttributeIOR.hxx + SALOMEDSImpl_AttributeLocalID.hxx + SALOMEDSImpl_AttributeName.hxx + SALOMEDSImpl_AttributeOpened.hxx + SALOMEDSImpl_AttributePersistentRef.hxx + SALOMEDSImpl_AttributePixMap.hxx + SALOMEDSImpl_AttributePythonObject.hxx + SALOMEDSImpl_AttributeReal.hxx + SALOMEDSImpl_AttributeReference.hxx + SALOMEDSImpl_AttributeSelectable.hxx + SALOMEDSImpl_AttributeSequenceOfInteger.hxx + SALOMEDSImpl_AttributeSequenceOfReal.hxx + SALOMEDSImpl_Attributes.hxx + SALOMEDSImpl_AttributeStudyProperties.hxx + SALOMEDSImpl_AttributeTable.hxx + SALOMEDSImpl_AttributeTableOfInteger.hxx + SALOMEDSImpl_AttributeTableOfReal.hxx + SALOMEDSImpl_AttributeTableOfString.hxx + SALOMEDSImpl_AttributeTarget.hxx + SALOMEDSImpl_AttributeTextColor.hxx + SALOMEDSImpl_AttributeTextHighlightColor.hxx + SALOMEDSImpl_AttributeTreeNode.hxx + SALOMEDSImpl_AttributeUserID.hxx + SALOMEDSImpl_AttributeParameter.hxx + SALOMEDSImpl_AttributeString.hxx + SALOMEDSImpl_Callback.hxx + SALOMEDSImpl_ChildIterator.hxx + SALOMEDSImpl_ChildNodeIterator.hxx + SALOMEDSImpl_Defines.hxx + SALOMEDSImpl_Driver.hxx + SALOMEDSImpl_GenericAttribute.hxx + SALOMEDSImpl_SComponent.hxx + SALOMEDSImpl_SComponentIterator.hxx + SALOMEDSImpl_SObject.hxx + SALOMEDSImpl_StudyBuilder.hxx + SALOMEDSImpl_StudyHandle.hxx + SALOMEDSImpl_Study.hxx + SALOMEDSImpl_StudyManager.hxx + SALOMEDSImpl_Tool.hxx + SALOMEDSImpl_UseCaseBuilder.hxx + SALOMEDSImpl_UseCaseIterator.hxx + SALOMEDSImpl_GenericVariable.hxx + SALOMEDSImpl_ScalarVariable.hxx +) + +ADD_LIBRARY(SalomeDSImpl SHARED ${SalomeDSImpl_SOURCES}) +SET_TARGET_PROPERTIES(SalomeDSImpl PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(SalomeDSImpl SALOMELocalTrace ${COMMON_LIBS} ${OMNIORB_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS SalomeDSImpl DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(testDS testDS.cxx) +SET_TARGET_PROPERTIES(testDS PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(testDS SalomeDSImpl ${COMMON_LIBS} ${OMNIORB_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS testDS DESTINATION ${KERNEL_salomebin_BINS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +SET(NOINST_HEADERS_HXX + SALOMEDSImpl_Tool.hxx + SALOMEDSImpl_StudyHandle.hxx +) +FOREACH(HEADER ${NOINST_HEADERS_HXX}) + LIST(REMOVE_ITEM COMMON_HEADERS_HXX ${CMAKE_CURRENT_SOURCE_DIR}/${HEADER}) +ENDFOREACH(HEADER ${NOINST_HEADERS_HXX}) +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_AttributeStudyProperties.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_AttributeStudyProperties.cxx index 60e44a608..b48581b99 100644 --- a/src/SALOMEDSImpl/SALOMEDSImpl_AttributeStudyProperties.cxx +++ b/src/SALOMEDSImpl/SALOMEDSImpl_AttributeStudyProperties.cxx @@ -60,6 +60,7 @@ void SALOMEDSImpl_AttributeStudyProperties::Init() myMonth.clear(); myYear.clear(); myMode = 0; // none + myComponentVersions.clear(); } void SALOMEDSImpl_AttributeStudyProperties::SetModification(const std::string& theUserName, @@ -102,9 +103,7 @@ void SALOMEDSImpl_AttributeStudyProperties::GetModifications std::string SALOMEDSImpl_AttributeStudyProperties::GetCreatorName() const { - if (myUserName.size() == 0) - return std::string(""); - return myUserName[0]; + return myUserName.empty() ? std::string("") : myUserName[0]; } bool SALOMEDSImpl_AttributeStudyProperties::GetCreationDate @@ -136,6 +135,7 @@ void SALOMEDSImpl_AttributeStudyProperties::ChangeCreatorName(const std::string& void SALOMEDSImpl_AttributeStudyProperties::SetCreationMode(const int theMode) { + if (theMode == myMode) return; CheckLocked(); Backup(); myMode = theMode; @@ -175,7 +175,8 @@ bool SALOMEDSImpl_AttributeStudyProperties::IsLocked() const return myLocked; } -bool SALOMEDSImpl_AttributeStudyProperties::IsLockChanged(const bool theErase) { +bool SALOMEDSImpl_AttributeStudyProperties::IsLockChanged(const bool theErase) +{ if (!myLockChanged) return false; if (theErase) myLockChanged = false; return true; @@ -204,6 +205,7 @@ void SALOMEDSImpl_AttributeStudyProperties::Restore(DF_Attribute* with) myYear.push_back(aYears[i]); } myMode = aProp->GetCreationMode(); + myComponentVersions = aProp->GetComponentsVersions(); // myModified = aProp->GetModified(); // myLocked = aProp->IsLocked(); } @@ -227,6 +229,7 @@ void SALOMEDSImpl_AttributeStudyProperties::Paste(DF_Attribute* into) } aProp->SetCreationMode(myMode); + aProp->SetComponentsVersions( myComponentVersions ); // aProp->SetModified(myModified); // aProp->SetLocked(myLocked); } @@ -244,11 +247,26 @@ std::string SALOMEDSImpl_AttributeStudyProperties::Save() std::string units = GetUnits(); std::string comment = GetComment(); + + int aLength1 = 0; + std::map versions; + versionMap::const_iterator it; + for (aLength1 = 0, it = myComponentVersions.begin(); it != myComponentVersions.end(); ++it ) { + std::string vlist = ""; + versionList vl = it->second; + versionList::const_iterator vlit; + for ( vlit = vl.begin(); vlit != vl.end(); ++vlit ) { + if ( vlist != "" ) vlist += ";"; + vlist += *vlit; + } + versions[ it->first ] = vlist; + aLength1 += it->first.size() + vlist.size() + 2; + } unitsSize = units.size(); commentSize = comment.size(); - char* aProperty = new char[3 + aLength + 12 * aNames.size() + 1 + unitsSize + 1 + commentSize]; + char* aProperty = new char[3 + aLength + 12 * aNames.size() + 1 + unitsSize + 1 + commentSize + 1 + aLength1 ]; char crMode = (char)GetCreationMode(); @@ -283,9 +301,19 @@ std::string SALOMEDSImpl_AttributeStudyProperties::Save() if(comment.size() > 0) { sprintf(&(aProperty[a]),"%s",comment.c_str()); a = strlen(aProperty); - a++; } + aProperty[a++] = 30; //delimeter of the component versions + + std::map::const_iterator versionsIt; + for ( versionsIt = versions.begin(); versionsIt != versions.end(); ++versionsIt ) { + sprintf(&(aProperty[a]),"%s=%s", + (char*)(versionsIt->first.c_str()), + (char*)(versionsIt->second.c_str())); + a = strlen(aProperty); + aProperty[a++] = 1; + } + aProperty[a] = 0; std::string prop(aProperty); delete aProperty; @@ -293,26 +321,81 @@ std::string SALOMEDSImpl_AttributeStudyProperties::Save() return prop; } -void SALOMEDSImpl_AttributeStudyProperties::SetUnits(const std::string& theUnits) { +void SALOMEDSImpl_AttributeStudyProperties::SetUnits(const std::string& theUnits) +{ if(myUnits == theUnits) return; + + CheckLocked(); + Backup(); + myUnits = theUnits; } -std::string SALOMEDSImpl_AttributeStudyProperties::GetUnits() { +std::string SALOMEDSImpl_AttributeStudyProperties::GetUnits() const +{ return myUnits; } -void SALOMEDSImpl_AttributeStudyProperties::SetComment(const std::string& theComment) { +void SALOMEDSImpl_AttributeStudyProperties::SetComment(const std::string& theComment) +{ if(myComment == theComment) return; + + CheckLocked(); + Backup(); + myComment = theComment; } -std::string SALOMEDSImpl_AttributeStudyProperties::GetComment() { +std::string SALOMEDSImpl_AttributeStudyProperties::GetComment() const +{ return myComment; } +void SALOMEDSImpl_AttributeStudyProperties::SetComponentVersion(const std::string& theComponent, const std::string& theVersion) +{ + if (!theComponent.empty()) { + CheckLocked(); + Backup(); + if (myComponentVersions.find(theComponent) == myComponentVersions.end()) myComponentVersions[theComponent] = versionList(); + if (myComponentVersions[theComponent].empty() || myComponentVersions[theComponent].back() != theVersion) + myComponentVersions[theComponent].push_back(theVersion); + } +} + +std::vector SALOMEDSImpl_AttributeStudyProperties::GetStoredComponents() const +{ + std::vector components; + versionMap::const_iterator it; + for (it = myComponentVersions.begin(); it != myComponentVersions.end(); ++it) + components.push_back(it->first); + return components; +} + +std::string SALOMEDSImpl_AttributeStudyProperties::GetComponentVersion(const std::string& theComponent) const +{ + versionList versions = GetComponentVersions(theComponent); + return versions.size() > 0 ? versions[0] : std::string(""); +} + +std::vector SALOMEDSImpl_AttributeStudyProperties::GetComponentVersions(const std::string& theComponent) const +{ + versionList versions; + versionMap::const_iterator it = myComponentVersions.find(theComponent); + if ( it != myComponentVersions.end() ) versions = it->second; + return versions; +} + +std::map< std::string, std::vector > SALOMEDSImpl_AttributeStudyProperties::GetComponentsVersions() const +{ + return myComponentVersions; +} + +void SALOMEDSImpl_AttributeStudyProperties::SetComponentsVersions( const std::map< std::string, std::vector >& theVersions ) +{ + myComponentVersions = theVersions; +} void SALOMEDSImpl_AttributeStudyProperties::Load(const std::string& value) { @@ -322,7 +405,16 @@ void SALOMEDSImpl_AttributeStudyProperties::Load(const std::string& value) SetCreationMode(crMode); int anIndex; - for (anIndex = 2; anIndex + 2 < value.size() ;) { + // number 13 below is minimal size of modification data record, which has form: + // mmhhddMMyyyyname1, where + // - mm: minute = 2 bytes + // - hh: hour = 2 bytes + // - dd: day = 2 bytes + // - MM: month = 2 bytes + // - yyyy: year = 4 bytes + // - name: user's name = arbitrary value, minimal length is 0 bytes + // - 1 : records delimiter = 1 byte + for (anIndex = 2; anIndex + 13 < value.size() ;) { char str[10]; int aMinute, aHour, aDay, aMonth, aYear; str[0] = aCopy[anIndex++]; @@ -359,7 +451,7 @@ void SALOMEDSImpl_AttributeStudyProperties::Load(const std::string& value) break; } - //Case then study contains units and comment properties + //Case when study contains units and comment properties if( anIndex < value.size() ) { anIndex++; //skip the delimeter of the sections: char(30) int unitsSize; @@ -375,7 +467,7 @@ void SALOMEDSImpl_AttributeStudyProperties::Load(const std::string& value) anIndex += unitsSize + 1; int commentSize; - for(commentSize = 0; aCopy[anIndex+commentSize] != 0; commentSize++); + for(commentSize = 0; aCopy[anIndex+commentSize] != 0 && aCopy[anIndex+commentSize] != 30; commentSize++); if(commentSize > 0) { char *aComment = new char[commentSize+1]; @@ -384,7 +476,40 @@ void SALOMEDSImpl_AttributeStudyProperties::Load(const std::string& value) SetComment(aComment); delete [] (aComment); } - anIndex += commentSize; + anIndex += commentSize + 1; + } + + //Case when study contains components versions + if( anIndex < value.size() ) { + while ( anIndex < value.size() && aCopy[anIndex] != 0 ) { + int modSize; + for(modSize = 0; aCopy[anIndex+modSize] != '='; modSize++); + int verSize; + for(verSize = 0; aCopy[anIndex+modSize+1+verSize] != 1; verSize++); + + if(modSize > 0) { + char *aModule = new char[modSize+1]; + strncpy(aModule, &(aCopy[anIndex]), modSize); + aModule[modSize] = 0; + char *aVersions = new char[verSize+1]; + if ( verSize > 0 ) + strncpy(aVersions, &(aCopy[anIndex+modSize+1]), verSize); + aVersions[verSize] = 0; + + std::string mVersions = aVersions; + int start = 0, idx = mVersions.find( ';', start ); + while ( idx != std::string::npos ) { + SetComponentVersion( aModule, mVersions.substr( start, idx-start ) ); + start = idx + 1; + idx = mVersions.find( ';', start ); + } + SetComponentVersion( aModule, mVersions.substr( start ) ); + + delete [] (aModule); + delete [] (aVersions); + anIndex += modSize + 1 + verSize + 1; + } + } } if (aCopy[1] == 'l') { diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_AttributeStudyProperties.hxx b/src/SALOMEDSImpl/SALOMEDSImpl_AttributeStudyProperties.hxx index 4be09cd27..8cb4b69bb 100644 --- a/src/SALOMEDSImpl/SALOMEDSImpl_AttributeStudyProperties.hxx +++ b/src/SALOMEDSImpl/SALOMEDSImpl_AttributeStudyProperties.hxx @@ -32,6 +32,7 @@ #include "DF_Label.hxx" #include #include +#include #include "SALOMEDSImpl_GenericAttribute.hxx" class SALOMEDSIMPL_EXPORT SALOMEDSImpl_AttributeStudyProperties : public SALOMEDSImpl_GenericAttribute @@ -73,10 +74,10 @@ public: void ChangeCreatorName(const std::string& theUserName); void SetUnits(const std::string& theUnits); - std::string GetUnits(); + std::string GetUnits() const; void SetComment(const std::string& theComment); - std::string GetComment(); + std::string GetComment() const; void SetCreationMode(const int theMode); int GetCreationMode() const; @@ -89,11 +90,20 @@ public: bool IsLocked() const; bool IsLockChanged(const bool theErase); + void SetComponentsVersions( const std::map< std::string, std::vector >& theVersions ); + void SetComponentVersion(const std::string& theComponent, const std::string& theVersion); + std::vector GetStoredComponents() const; + std::string GetComponentVersion(const std::string& theComponent) const; + std::vector GetComponentVersions(const std::string& theComponent) const; + std::map< std::string, std::vector > GetComponentsVersions() const; + void Restore(DF_Attribute* with); DF_Attribute* NewEmpty() const; void Paste(DF_Attribute* into); private: + typedef std::vector versionList; + typedef std::map versionMap; std::vector myUserName; std::vector myMinute; @@ -103,11 +113,11 @@ private: std::vector myYear; std::string myUnits; std::string myComment; - int myMode; - int myModified; - bool myLocked; - bool myLockChanged; - + int myMode; + int myModified; + bool myLocked; + bool myLockChanged; + versionMap myComponentVersions; }; #endif diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_Driver.hxx b/src/SALOMEDSImpl/SALOMEDSImpl_Driver.hxx index 84be82bcb..b204337bb 100644 --- a/src/SALOMEDSImpl/SALOMEDSImpl_Driver.hxx +++ b/src/SALOMEDSImpl/SALOMEDSImpl_Driver.hxx @@ -62,6 +62,7 @@ public: virtual std::string ComponentDataType() = 0; + virtual std::string Version() = 0; virtual std::string IORToLocalPersistentID(const SALOMEDSImpl_SObject& theSObject, const std::string& IORString, diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.cxx index d52b629eb..cae31faee 100644 --- a/src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.cxx +++ b/src/SALOMEDSImpl/SALOMEDSImpl_StudyManager.cxx @@ -40,6 +40,7 @@ #include "SALOMEDSImpl_SComponent.hxx" #include "SALOMEDSImpl_GenericAttribute.hxx" #include "SALOMEDSImpl_ScalarVariable.hxx" +#include "SALOMEDSImpl_IParameters.hxx" #include #include "HDFOI.hxx" @@ -56,6 +57,42 @@ static void Translate_IOR_to_persistentID (const SALOMEDSImpl_SObject&, SALOMEDSImpl_Driver*, bool isMultiFile, bool isASCII); static void ReadNoteBookVariables(SALOMEDSImpl_Study* theStudy, HDFgroup* theGroup); +namespace { + class StudyUnlocker + { + public: + StudyUnlocker( SALOMEDSImpl_Study* study ): myStudy( study ), myLocked( false ) + { + myPrevLocked = myStudy->GetProperties()->IsLocked(); + resume(); + } + ~StudyUnlocker() + { + suspend(); + } + void suspend() + { + if (myLocked) { + myStudy->GetProperties()->SetLocked(true); + myPrevLocked = myLocked; + myLocked = false; + } + } + void resume() + { + if (myPrevLocked) { + myStudy->GetProperties()->SetLocked(false); + myLocked = myPrevLocked; + myPrevLocked = false; + } + } + private: + SALOMEDSImpl_Study* myStudy; + bool myLocked; + bool myPrevLocked; + }; +} + //============================================================================ /*! Function : SALOMEDSImpl_StudyManager * Purpose : SALOMEDSImpl_StudyManager constructor @@ -209,6 +246,20 @@ SALOMEDSImpl_Study* SALOMEDSImpl_StudyManager::Open(const std::string& aUrl) delete hdf_file; // all related hdf objects will be deleted + // unlock study if it is locked, to set components versions + StudyUnlocker unlock(Study); + + //For old studies we have to add "unknown" version tag for all stored components + SALOMEDSImpl_SComponentIterator itcomponent = Study->NewComponentIterator(); + for (; itcomponent.More(); itcomponent.Next()) + { + SALOMEDSImpl_SComponent sco = itcomponent.Value(); + std::string aCompType = sco.GetComment(); + if ( aCompType == SALOMEDSImpl_IParameters::getDefaultVisualComponent() ) continue; + if ( Study->GetProperties()->GetComponentVersions( aCompType ).empty() ) + Study->GetProperties()->SetComponentVersion( aCompType, "" ); // empty version means "unknown" + } + return Study; } @@ -398,15 +449,17 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveProperties(SALOMEDSImpl_Study* aStudy, // add modifications list (user and date of save) SALOMEDSImpl_AttributeStudyProperties* aProp = aStudy->GetProperties(); - int aLocked = aProp->IsLocked(); - if (aLocked) aProp->SetLocked(false); + // unlock study if it is locked, to set modification date + StudyUnlocker unlock(aStudy); + int month=0,day=0,year=0,hh=0,mn=0,ss=0; SALOMEDSImpl_Tool::GetSystemDate(year, month, day, hh, mn, ss); aProp->SetModification(SALOMEDSImpl_Tool::GetUserName(), - mn, hh, day, month, year); - - if (aLocked) aProp->SetLocked(true); + mn, hh, day, month, year); + + // lock study back if it was locked initially, to write correct value of Locked flag + unlock.suspend(); std::vector aNames; std::vector aMinutes, aHours, aDays, aMonths, aYears; @@ -416,10 +469,27 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveProperties(SALOMEDSImpl_Study* aStudy, std::string units = aProp->GetUnits(); std::string comment = aProp->GetComment(); - int aLength = 0, anIndex, i, unitsSize = 0, commentSize = 0; + std::map< std::string, std::vector > allVersions = aProp->GetComponentsVersions(); + std::map versions; + + int aLength = 0, aLength1 = 0, anIndex, i, unitsSize = 0, commentSize = 0; + for(i=1; i<=aNames.size(); i++) aLength += aNames[i-1].size() + 1; - + + std::map< std::string, std::vector >::const_iterator it; + for (it = allVersions.begin(); it != allVersions.end(); ++it ) { + std::string vlist = ""; + std::vector vl = it->second; + std::vector::const_iterator vlit; + for ( vlit = vl.begin(); vlit != vl.end(); ++vlit ) { + if ( vlist != "" ) vlist += ";"; + vlist += *vlit; + } + versions[ it->first ] = vlist; + aLength1 += it->first.size() + vlist.size() + 2; + } + unitsSize = units.size(); commentSize = comment.size(); @@ -431,13 +501,16 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveProperties(SALOMEDSImpl_Study* aStudy, //....................................................., //....................................................., //minutes, hours, day, months, year, user name, char(1), char(30) <- !!!! used to define end of section with modifications !!!! - //units, char(1), comment, char(0) + //units, char(1), comment, char(30) <- !!!! used to define start of section with components' versions !!!! + //component=versions, char(1), + //component=versions, char(1), + //..........................., + //component=versions, char(1), char(0) //string length: 1 byte = locked flag, 1 byte = modified flag, (12 + name length + 1) for each name and date, 1 byte (char(30) section delimeter) // unit length + 1, comment length, "zero" byte - char* aProperty = new char[3 + aLength + 12 * aNames.size() + 1 + unitsSize + 1 + commentSize ]; - + char* aProperty = new char[3 + aLength + 12 * aNames.size() + 1 + unitsSize + 1 + commentSize + 1 + aLength1 ]; sprintf(aProperty,"%c%c", (char)aProp->GetCreationMode(), (aProp->IsLocked())?'l':'u'); @@ -470,11 +543,21 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveProperties(SALOMEDSImpl_Study* aStudy, if(comment.size() > 0) { sprintf(&(aProperty[a]),"%s",comment.c_str()); a = strlen(aProperty); - a++; + } + + aProperty[a++] = 30; //delimeter of the component versions + + std::map::const_iterator versionsIt; + for ( versionsIt = versions.begin(); versionsIt != versions.end(); ++versionsIt ) { + sprintf(&(aProperty[a]),"%s=%s", + (char*)(versionsIt->first.c_str()), + (char*)(versionsIt->second.c_str())); + a = a + versionsIt->first.size() + versionsIt->second.size() + 1; + aProperty[a++] = 1; } aProperty[a] = 0; - + name_len = (hdf_int32) a; size[0] = name_len + 1 ; hdf_dataset = new HDFdataset("AttributeStudyProperties",hdf_group,HDF_STRING,size,1); @@ -531,11 +614,14 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl, // Store previous URL std::string anOldName = aStudy->Name(); + // Map to store components' versions + std::map componentVersions; + //Create a temporary url to which the study is saved std::string aUrl = SALOMEDSImpl_Tool::GetTmpDir() + SALOMEDSImpl_Tool::GetNameFromPath(aStudyUrl); - int aLocked = aStudy->GetProperties()->IsLocked(); - if (aLocked) aStudy->GetProperties()->SetLocked(false); + // unlock study if it is locked, as some attributes need to be modified + StudyUnlocker unlock(aStudy); SALOMEDSImpl_StudyBuilder* SB= aStudy->NewBuilder(); std::map aMapTypeDriver; @@ -543,19 +629,19 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl, try { // mpv 15.12.2003: for saving components we have to load all data from all modules - SALOMEDSImpl_SComponentIterator itcomponent1 = aStudy->NewComponentIterator(); - for (; itcomponent1.More(); itcomponent1.Next()) + SALOMEDSImpl_SComponentIterator itcomponent = aStudy->NewComponentIterator(); + for (; itcomponent.More(); itcomponent.Next()) { - SALOMEDSImpl_SComponent sco = itcomponent1.Value(); + SALOMEDSImpl_SComponent sco = itcomponent.Value(); // if there is an associated Engine call its method for saving std::string IOREngine; try { + SALOMEDSImpl_Driver* aDriver = NULL; + std::string aCompType = sco.GetComment(); if (!sco.ComponentIOR(IOREngine)) { - std::string aCompType = sco.GetComment(); if (!aCompType.empty()) { - SALOMEDSImpl_Driver* aDriver = aFactory->GetDriverByType(aCompType); - aMapTypeDriver[aCompType] = aDriver; + aDriver = aFactory->GetDriverByType(aCompType); if (aDriver != NULL) { if(!SB->LoadWith(sco, aDriver)) { @@ -565,6 +651,10 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl, } } } + else { + aDriver = aFactory->GetDriverByIOR(IOREngine); + } + aMapTypeDriver[aCompType] = aDriver; } catch(...) { _errorCode = "Can not restore information to resave it"; return false; @@ -586,9 +676,7 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl, hdf_group_datacomponent = new HDFgroup("DATACOMPONENT",hdf_file); hdf_group_datacomponent->CreateOnDisk(); - SALOMEDSImpl_SComponentIterator itcomponent = aStudy->NewComponentIterator(); - - for (; itcomponent.More(); itcomponent.Next()) + for (itcomponent.Init(); itcomponent.More(); itcomponent.Next()) { SALOMEDSImpl_SComponent sco = itcomponent.Value(); @@ -600,20 +688,15 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl, std::string IOREngine; if (sco.ComponentIOR(IOREngine)) { - SALOMEDSImpl_Driver* Engine = NULL; - if(aMapTypeDriver.find(componentDataType) != aMapTypeDriver.end()) { - // we have found the associated engine to write the data - Engine = aMapTypeDriver[componentDataType]; - } - else { - Engine = aFactory->GetDriverByIOR(IOREngine); - } - + // Engine should be already in the map as it was to added before + SALOMEDSImpl_Driver* Engine = aMapTypeDriver[componentDataType]; if (Engine != NULL) { SALOMEDSImpl_TMPFile* aStream = NULL; long length = 0; + componentVersions[ componentDataType ] = Engine->Version(); + if (theASCII) aStream = Engine->SaveASCII(sco, SALOMEDSImpl_Tool::GetDirFromPath(aUrl), length, @@ -666,10 +749,9 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl, hdf_group_study_structure = new HDFgroup("STUDY_STRUCTURE",hdf_file); hdf_group_study_structure->CreateOnDisk(); // save component attributes - SALOMEDSImpl_SComponentIterator itcomp = aStudy->NewComponentIterator(); - for (; itcomp.More(); itcomp.Next()) + for (itcomponent.Init(); itcomponent.More(); itcomponent.Next()) { - SALOMEDSImpl_SComponent SC = itcomp.Value(); + SALOMEDSImpl_SComponent SC = itcomponent.Value(); std::string scid = SC.GetID(); hdf_sco_group2 = new HDFgroup((char*)scid.c_str(), hdf_group_study_structure); hdf_sco_group2->CreateOnDisk(); @@ -752,8 +834,15 @@ bool SALOMEDSImpl_StudyManager::Impl_SaveAs(const std::string& aStudyUrl, } hdf_notebook_vars->CloseOnDisk(); hdf_notebook_vars = 0; //will be deleted by hdf_sco_group destructor - - if (aLocked) aStudy->GetProperties()->SetLocked(true); + + // record component versions + std::map::const_iterator itVersions; + for ( itVersions = componentVersions.begin(); itVersions != componentVersions.end(); ++itVersions ) + aStudy->GetProperties()->SetComponentVersion( itVersions->first, itVersions->second ); + + // lock study back if it was locked initially, to write correct value of Locked flag + unlock.suspend(); + //----------------------------------------------------------------------- //6 - Write the Study Properties //----------------------------------------------------------------------- diff --git a/src/SALOMEDSImpl/SALOMEDSImpl_UseCaseBuilder.cxx b/src/SALOMEDSImpl/SALOMEDSImpl_UseCaseBuilder.cxx index 1d86d349a..a7ab40d02 100644 --- a/src/SALOMEDSImpl/SALOMEDSImpl_UseCaseBuilder.cxx +++ b/src/SALOMEDSImpl/SALOMEDSImpl_UseCaseBuilder.cxx @@ -160,7 +160,7 @@ bool SALOMEDSImpl_UseCaseBuilder::AppendTo(const SALOMEDSImpl_SObject& theFather DF_Label aFatherLabel = theFather.GetLabel(), aLabel = theObject.GetLabel(); if(aFatherLabel == aLabel) return false; - SALOMEDSImpl_AttributeTreeNode *aFather = false, *aNode = false; + SALOMEDSImpl_AttributeTreeNode *aFather = NULL, *aNode = NULL; if(aFatherLabel.IsNull()) return false; if(!(aFather=(SALOMEDSImpl_AttributeTreeNode*)aFatherLabel.FindAttribute(_root->ID()))) return false; diff --git a/src/SALOMEDSImpl/Test/CMakeLists.txt b/src/SALOMEDSImpl/Test/CMakeLists.txt new file mode 100755 index 000000000..d5397c2f0 --- /dev/null +++ b/src/SALOMEDSImpl/Test/CMakeLists.txt @@ -0,0 +1,79 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${CPPUNIT_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${BOOST_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMETraceCollector + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMETraceCollector/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../../NamingService/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../../Utils/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../ResourcesManager + ${CMAKE_CURRENT_SOURCE_DIR}/../../LifeCycleCORBA + ${CMAKE_CURRENT_SOURCE_DIR}/../../DF + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMEDSImpl + ${CMAKE_BINARY_DIR}/idl +) + +# This local variable defines the list of FLAGS common to all target in this package. +SET(COMMON_FLAGS "${CPPUNIT_DEFINITIONS} ${OMNIORB_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + +# This local variable defines the list of dependant libraries common to all target in this package. +SET(COMMON_LIBS + ${CPPUNIT_LIBS} + SALOMEBasics + SalomeResourcesManager + SalomeContainer + SalomeNS + Registry + SalomeNotification + UtilsTest + OpUtil + SALOMELocalTraceTest + SALOMELocalTrace + SALOMETraceCollectorTest + DF + SalomeDSImpl + SalomeHDFPersist + SalomeIDLKernel +) + +ADD_LIBRARY(SALOMEDSImplTest SHARED SALOMEDSImplTest.cxx) +SET_TARGET_PROPERTIES(SALOMEDSImplTest PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(SALOMEDSImplTest ${COMMON_LIBS}) +INSTALL(TARGETS SALOMEDSImplTest DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(TestSALOMEDSImpl TestSALOMEDSImpl.cxx) +SET_TARGET_PROPERTIES(TestSALOMEDSImpl PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(TestSALOMEDSImpl SALOMEDSImplTest SalomeDSImpl NamingServiceTest ${COMMON_LIBS}) +INSTALL(TARGETS TestSALOMEDSImpl DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(TestSALOMEDSImpl.py ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/SALOMEDSImpl/Test/SALOMEDSImplTest.hxx b/src/SALOMEDSImpl/Test/SALOMEDSImplTest.hxx index 07944d285..826e13afc 100644 --- a/src/SALOMEDSImpl/Test/SALOMEDSImplTest.hxx +++ b/src/SALOMEDSImpl/Test/SALOMEDSImplTest.hxx @@ -25,7 +25,17 @@ #include -class SALOMEDSImplTest : public CppUnit::TestFixture +#ifdef WIN32 +# if defined SALOMEDSIMPLTEST_EXPORTS || defined SALOMEDSImplTest_EXPORTS +# define SALOMEDSIMPLTEST_EXPORT __declspec( dllexport ) +# else +# define SALOMEDSIMPLTEST_EXPORT __declspec( dllimport ) +# endif +#else +# define SALOMEDSIMPLTEST_EXPORT +#endif + +class SALOMEDSIMPLTEST_EXPORT SALOMEDSImplTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( SALOMEDSImplTest ); CPPUNIT_TEST( testAttributeParameter ); diff --git a/src/SALOMELocalTrace/CMakeLists.txt b/src/SALOMELocalTrace/CMakeLists.txt new file mode 100755 index 000000000..6ac53683f --- /dev/null +++ b/src/SALOMELocalTrace/CMakeLists.txt @@ -0,0 +1,49 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${PTHREAD_INCLUDE_DIRS} +) + +SET(COMMON_HEADERS + utilities.h + LocalTraceBufferPool.hxx + BaseTraceCollector.hxx + SALOME_LocalTrace.hxx +) + +SET(SALOMELocalTrace_SOURCES + BaseTraceCollector.cxx + BaseTraceCollector.hxx + LocalTraceCollector.cxx + LocalTraceCollector.hxx + FileTraceCollector.cxx + FileTraceCollector.hxx + LocalTraceBufferPool.cxx + LocalTraceBufferPool.hxx + SALOME_LocalTrace.hxx +) + +ADD_LIBRARY(SALOMELocalTrace SHARED ${SALOMELocalTrace_SOURCES}) +SET_TARGET_PROPERTIES(SALOMELocalTrace PROPERTIES COMPILE_FLAGS "${PTHREAD_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOMELocalTrace SALOMEBasics ${PLATFORM_LIBS} ${PTHREAD_LIBS}) +INSTALL(TARGETS SALOMELocalTrace DESTINATION ${KERNEL_salomelib_LIBS}) + +INSTALL(FILES ${COMMON_HEADERS} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/SALOMELocalTrace/Test/CMakeLists.txt b/src/SALOMELocalTrace/Test/CMakeLists.txt new file mode 100755 index 000000000..a80528ca3 --- /dev/null +++ b/src/SALOMELocalTrace/Test/CMakeLists.txt @@ -0,0 +1,42 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${CPPUNIT_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace +) + +ADD_LIBRARY(SALOMELocalTraceTest SHARED SALOMELocalTraceTest.cxx) +SET_TARGET_PROPERTIES(SALOMELocalTraceTest PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${PTHREAD_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOMELocalTraceTest SALOMELocalTrace ${CPPUNIT_LIBS} ${PTHREAD_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS SALOMELocalTraceTest DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(TestSALOMELocalTrace TestSALOMELocalTrace.cxx) +SET_TARGET_PROPERTIES(TestSALOMELocalTrace PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestSALOMELocalTrace SALOMELocalTraceTest SALOMELocalTrace SALOMEBasics ${CPPUNIT_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS TestSALOMELocalTrace DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(TestSALOMELocalTrace.py ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/SALOMELocalTrace/Test/SALOMELocalTraceTest.cxx b/src/SALOMELocalTrace/Test/SALOMELocalTraceTest.cxx index 0e685195c..7d9747cf5 100644 --- a/src/SALOMELocalTrace/Test/SALOMELocalTraceTest.cxx +++ b/src/SALOMELocalTrace/Test/SALOMELocalTraceTest.cxx @@ -28,7 +28,11 @@ #include #include "LocalTraceBufferPool.hxx" #include "utilities.h" +#include "Basics_Utils.hxx" +#ifdef WIN32 +#define setenv Kernel_Utils::setenv +#endif // ============================================================================ /*! @@ -100,11 +104,10 @@ SALOMELocalTraceTest::testLoadBufferPoolLocal() std::string s = "local"; CPPUNIT_ASSERT(! setenv("SALOME_trace",s.c_str(),1)); // 1: overwrite - // --- numThread thread creation for trace generation. - int numThread = 2; - pthread_t threads[numThread]; + // --- NUM_THREADS thread creation for trace generation. + pthread_t threads[NUM_THREADS]; int rc, t; - for(t=0;t -class SALOMELocalTraceTest : public CppUnit::TestFixture +#ifdef WIN32 +# if defined SALOMELOCALTRACETEST_EXPORTS || defined SALOMELocalTraceTest_EXPORTS +# define SALOMELOCALTRACETEST_EXPORT __declspec( dllexport ) +# else +# define SALOMELOCALTRACETEST_EXPORT __declspec( dllimport ) +# endif +#else +# define SALOMELOCALTRACETEST_EXPORT +#endif + +class SALOMELOCALTRACETEST_EXPORT SALOMELocalTraceTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( SALOMELocalTraceTest ); CPPUNIT_TEST( testSingletonBufferPool ); diff --git a/src/SALOMETraceCollector/CMakeLists.txt b/src/SALOMETraceCollector/CMakeLists.txt new file mode 100755 index 000000000..6e9ea5bfe --- /dev/null +++ b/src/SALOMETraceCollector/CMakeLists.txt @@ -0,0 +1,36 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_BINARY_DIR}/idl +) + +ADD_LIBRARY(with_loggerTraceCollector SHARED SALOMETraceCollector.cxx TraceCollector_WaitForServerReadiness.cxx) +SET_TARGET_PROPERTIES(with_loggerTraceCollector PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PTHREAD_DEFINITIONS} ${PLATFORM_DEFINITIONS}") + +TARGET_LINK_LIBRARIES(with_loggerTraceCollector SALOMELocalTrace SalomeIDLKernel ${OMNIORB_LIBS} ${PTHREAD_LIBS}) +INSTALL(TARGETS with_loggerTraceCollector DESTINATION ${KERNEL_salomelib_LIBS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/SALOMETraceCollector/Test/CMakeLists.txt b/src/SALOMETraceCollector/Test/CMakeLists.txt new file mode 100755 index 000000000..570a8595d --- /dev/null +++ b/src/SALOMETraceCollector/Test/CMakeLists.txt @@ -0,0 +1,52 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${CPPUNIT_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMETraceCollector +) + +SET(COMMON_LIBS + SALOMELocalTraceTest + SALOMELocalTrace + SALOMEBasics + ${PTHREAD_LIBS} + ${PLATFORM_LIBS} +) + +ADD_LIBRARY(SALOMETraceCollectorTest SHARED SALOMETraceCollectorTest.cxx) +SET_TARGET_PROPERTIES(SALOMETraceCollectorTest PROPERTIES COMPILE_FLAGS "${PTHREAD_DEFINITIONS} ${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SALOMETraceCollectorTest ${COMMON_LIBS}) +INSTALL(TARGETS SALOMETraceCollectorTest DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(TestSALOMETraceCollector TestSALOMETraceCollector.cxx) +SET_TARGET_PROPERTIES(TestSALOMETraceCollector PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestSALOMETraceCollector SALOMETraceCollectorTest ${COMMON_LIBS}) +INSTALL(TARGETS TestSALOMETraceCollector DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(TestSALOMETraceCollector.py ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/SALOMETraceCollector/Test/SALOMETraceCollectorTest.cxx b/src/SALOMETraceCollector/Test/SALOMETraceCollectorTest.cxx index 61c0ee91b..4a448f8ba 100644 --- a/src/SALOMETraceCollector/Test/SALOMETraceCollectorTest.cxx +++ b/src/SALOMETraceCollector/Test/SALOMETraceCollectorTest.cxx @@ -28,7 +28,11 @@ #include #include "LocalTraceBufferPool.hxx" #include "utilities.h" +#include "Basics_Utils.hxx" +#ifdef WIN32 +#define setenv Kernel_Utils::setenv +#endif // ============================================================================ /*! @@ -109,4 +113,7 @@ void *PrintHello(void *threadid) << " - iter " << i); #endif pthread_exit(NULL); + #ifdef WIN32 + return NULL; + #endif } diff --git a/src/SALOMETraceCollector/Test/SALOMETraceCollectorTest.hxx b/src/SALOMETraceCollector/Test/SALOMETraceCollectorTest.hxx index 78009a065..ebfedb099 100644 --- a/src/SALOMETraceCollector/Test/SALOMETraceCollectorTest.hxx +++ b/src/SALOMETraceCollector/Test/SALOMETraceCollectorTest.hxx @@ -25,7 +25,17 @@ #include -class SALOMETraceCollectorTest : public CppUnit::TestFixture +#ifdef WIN32 +# if defined SALOMETRACECOLLECTORTEST_EXPORTS || defined SALOMETraceCollectorTest_EXPORTS +# define SALOMETRACECOLLECTORTEST_EXPORT __declspec( dllexport ) +# else +# define SALOMETRACECOLLECTORTEST_EXPORT __declspec( dllimport ) +# endif +#else +# define SALOMETRACECOLLECTORTEST_EXPORT +#endif + +class SALOMETRACECOLLECTORTEST_EXPORT SALOMETraceCollectorTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( SALOMETraceCollectorTest ); CPPUNIT_TEST( testLoadBufferPoolCORBA ); diff --git a/src/TOOLSDS/CMakeLists.txt b/src/TOOLSDS/CMakeLists.txt new file mode 100755 index 000000000..496d9a42d --- /dev/null +++ b/src/TOOLSDS/CMakeLists.txt @@ -0,0 +1,38 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${HDF5_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${BOOST_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_BINARY_DIR}/idl +) + +ADD_LIBRARY(TOOLSDS SHARED SALOMEDS_Tool.cxx) +SET_TARGET_PROPERTIES(TOOLSDS PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${HDF5_DEFINITIONS} ${BOOST_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TOOLSDS OpUtil SalomeIDLKernel ${OMNIORB_LIBS}) +INSTALL(TARGETS TOOLSDS DESTINATION ${KERNEL_salomelib_LIBS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/TestContainer/CMakeLists.txt b/src/TestContainer/CMakeLists.txt new file mode 100755 index 000000000..bc43229ea --- /dev/null +++ b/src/TestContainer/CMakeLists.txt @@ -0,0 +1,73 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../Registry + ${CMAKE_CURRENT_SOURCE_DIR}/../Notification + ${CMAKE_CURRENT_SOURCE_DIR}/../ResourcesManager + ${CMAKE_CURRENT_SOURCE_DIR}/../Container + ${CMAKE_CURRENT_SOURCE_DIR}/../GenericObj + ${CMAKE_BINARY_DIR}/idl +) + +SET(SalomeTestComponentEngine_SOURCES + SALOME_TestComponent.hxx + SALOME_TestComponent_i.cxx + SALOME_TestComponent_i.hxx +) + +SET(COMMON_LIBS + SalomeContainer + Registry + SalomeNotification + SalomeResourcesManager + SalomeNS + SALOMELocalTrace + SALOMEBasics + SalomeGenericObj + SalomeIDLKernel +) + +ADD_LIBRARY(SalomeTestComponentEngine SHARED ${SalomeTestComponentEngine_SOURCES}) +SET_TARGET_PROPERTIES(SalomeTestComponentEngine PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(SalomeTestComponentEngine ${COMMON_LIBS}) +INSTALL(TARGETS SalomeTestComponentEngine DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(TestLogger TestLogger.cxx) +SET_TARGET_PROPERTIES(TestLogger PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestLogger SalomeTestComponentEngine SALOMEBasics ${COMMON_LIBS} ${OMNIORB_LIBS}) + +ADD_EXECUTABLE(TestContainer TestContainer.cxx) +SET_TARGET_PROPERTIES(TestContainer PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestContainer SalomeTestComponentEngine SALOMEBasics ${COMMON_LIBS} ${OMNIORB_LIBS}) +INSTALL(TARGETS TestLogger TestContainer DESTINATION ${KERNEL_salomebin_BINS}) + +# Executable scripts to be installed +SET(SCRIPTS + SALOME_TestComponentPy.py + TestLogger.py +) +SALOME_INSTALL_SCRIPTS("${SCRIPTS}" ${KERNEL_salomescript_PYTHON}) diff --git a/src/TestContainer/Makefile.am b/src/TestContainer/Makefile.am index e78d59328..538723422 100644 --- a/src/TestContainer/Makefile.am +++ b/src/TestContainer/Makefile.am @@ -33,11 +33,10 @@ include $(top_srcdir)/salome_adm/unix/make_common_starter.am # Files to be installed # =============================================================== # -# header files +# header files # Scripts to be installed dist_salomescript_PYTHON = \ SALOME_TestComponentPy.py \ - TestComponentPy.py \ TestLogger.py # diff --git a/src/TestContainer/TestComponentPy.py b/src/TestContainer/TestComponentPy.py deleted file mode 100755 index 05f9fcaa0..000000000 --- a/src/TestContainer/TestComponentPy.py +++ /dev/null @@ -1,73 +0,0 @@ -#! /usr/bin/env python -# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -# SALOME TestContainer : test of container creation and its life cycle -# File : TestComponentPy.py -# Author : Paul RASCLE, EDF -# Module : SALOME -# $Header$ -# -import os -import sys -import string -from omniORB import CORBA -import CosNaming -import Engines -from Utils_Identity import getShortHostName - - -#initialise the ORB -orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID) - -#obtain a reference to the root naming context -obj = orb.resolve_initial_references("NameService") -rootContext = obj._narrow(CosNaming.NamingContext) - -if rootContext is None: - print "Name Service Reference is invalid" - sys.exit(1) - -#resolve the name /Containers.dir/FactoryServerPy.object -machineName=getShortHostName() -containerName = "FactoryServerPy" -name = [CosNaming.NameComponent("Containers","dir"), - CosNaming.NameComponent(machineName,"dir"), - CosNaming.NameComponent(containerName,"object")] - -try: - obj = rootContext.resolve(name) -except CosNaming.NamingContext.NotFound, ex: - print containerName , " not found in Naming Service" - sys.exit(1) - -container = obj._narrow(Engines.Container) -print container.getHostName() -comp = container.load_impl("SALOME_TestComponentPy","SALOME_TestComponentPy") -print comp._get_instanceName() -comp.ping() -comptest = comp._narrow(Engines.TestComponent) -if comptest is None: - print "probleme cast" -print comptest.Coucou(1) - - diff --git a/src/TestMPIContainer/CMakeLists.txt b/src/TestMPIContainer/CMakeLists.txt new file mode 100755 index 000000000..65038b42f --- /dev/null +++ b/src/TestMPIContainer/CMakeLists.txt @@ -0,0 +1,65 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${MPI_INCLUDE_DIRS} + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../Registry + ${CMAKE_CURRENT_SOURCE_DIR}/../Notification + ${CMAKE_CURRENT_SOURCE_DIR}/../ResourcesManager + ${CMAKE_CURRENT_SOURCE_DIR}/../Container + ${CMAKE_CURRENT_SOURCE_DIR}/../MPIContainer + ${CMAKE_CURRENT_SOURCE_DIR}/../GenericObj + ${CMAKE_BINARY_DIR}/idl +) + +SET(COMMON_FLAGS "${OMNIORB_DEFINITIONS} ${MPI_DEFINITIONS}") + +SET(COMMON_LIBS + Registry + SalomeNotification + SalomeResourcesManager + SalomeNS + OpUtil + SALOMELocalTrace + SALOMEBasics + SalomeContainer + SalomeMPIContainer + SalomeGenericObj + SalomeIDLKernel + ${OMNIORB_LIBS} +) + +ADD_LIBRARY(SalomeTestMPIComponentEngine SHARED TestMPIComponentEngine.cxx) +SET_TARGET_PROPERTIES(SalomeTestMPIComponentEngine PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(SalomeTestMPIComponentEngine ${COMMON_LIBS}) +INSTALL(TARGETS SalomeTestMPIComponentEngine DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(TestMPIContainer TestMPIContainer.cxx) +SET_TARGET_PROPERTIES(TestMPIContainer PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(TestMPIContainer SalomeTestMPIComponentEngine ${COMMON_LIBS} ${MPI_LIBS}) +INSTALL(TARGETS TestMPIContainer DESTINATION ${KERNEL_salomebin_BINS}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/UnitTests/CMakeLists.txt b/src/UnitTests/CMakeLists.txt new file mode 100755 index 000000000..11545cfff --- /dev/null +++ b/src/UnitTests/CMakeLists.txt @@ -0,0 +1,96 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${CPPUNIT_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace/Test +) + +# =============================================================== +# Files to be installed +# =============================================================== + +# Executable scripts to be installed +SALOME_INSTALL_SCRIPTS(UnitTests.py ${KERNEL_salomescript_SCRIPTS}) + +# =============================================================== +# Executables targets +# =============================================================== + +SET(COMMON_FLAGS "${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +SET(COMMON_LIBS + ${CPPUNIT_LIBS} + SALOMEBasics + SALOMELocalTrace + SALOMELocalTraceTest +) + +IF(CORBA_GEN) + INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMETraceCollector + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMETraceCollector/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService + ${CMAKE_CURRENT_SOURCE_DIR}/../NamingService/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../Utils/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../LifeCycleCORBA + ${CMAKE_CURRENT_SOURCE_DIR}/../LifeCycleCORBA/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMDESImpl + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMEDSImpl/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMDES + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMEDS/Test + ${CMAKE_BINARY_DIR}/idl + ${CMAKE_CURRENT_SOURCE_DIR}/../Registry + ${CMAKE_CURRENT_SOURCE_DIR}/../Notification + ${CMAKE_CURRENT_SOURCE_DIR}/../ResourcesManager + ) + SET(COMMON_FLAGS "${COMMON_FLAGS} -DWITH_CORBA ${OMNIORB_DEFINITIONS}") + + SET(COMMON_LIBS + ${COMMON_LIBS} + Registry + SalomeNotification + SalomeResourcesManager + SalomeNS + NamingServiceTest + SalomeContainer + SALOMETraceCollectorTest + OpUtil + UtilsTest + SalomeLifeCycleCORBA + LifeCycleCORBATest + SalomeDSImpl + SALOMEDSImplTest + SalomeDS + SALOMEDSTest + SalomeIDLKernel + ${OMNIORB_LIBS} + ) +ENDIF(CORBA_GEN) + +ADD_EXECUTABLE(UnitTests UnitTests.cxx) +SET_TARGET_PROPERTIES(UnitTests PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") +TARGET_LINK_LIBRARIES(UnitTests ${COMMON_LIBS}) +INSTALL(TARGETS UnitTests DESTINATION ${KERNEL_salomebin_BINS}) diff --git a/src/Utils/CMakeLists.txt b/src/Utils/CMakeLists.txt new file mode 100755 index 000000000..269d62c59 --- /dev/null +++ b/src/Utils/CMakeLists.txt @@ -0,0 +1,53 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${OMNIORB_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIRS} + ${CMAKE_BINARY_DIR}/salome_adm + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../SALOMELocalTrace + ${CMAKE_BINARY_DIR}/idl +) +SET(OpUtil_SOURCES + Utils_Timer.cxx + duplicate.cxx + Utils_CommException.cxx + Utils_SALOME_Exception.cxx + Utils_Identity.cxx + Utils_ORB_INIT.cxx + Utils_DESTRUCTEUR_GENERIQUE.cxx + Utils_ExceptHandlers.cxx + Utils_Mutex.cxx +) + +ADD_LIBRARY(OpUtil SHARED ${OpUtil_SOURCES}) +SET_TARGET_PROPERTIES(OpUtil PROPERTIES COMPILE_FLAGS "${OMNIORB_DEFINITIONS} ${PTHREAD_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(OpUtil SALOMELocalTrace SalomeIDLKernel ${OMNIORB_LIBS} ${PTHREAD_LIBS}) +INSTALL(TARGETS OpUtil DESTINATION ${KERNEL_salomelib_LIBS}) + +SET(COMMON_SCRIPTS + Utils_Identity.py + SALOME_utilities.py +) +SALOME_INSTALL_SCRIPTS("${COMMON_SCRIPTS}" ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/Utils/Test/CMakeLists.txt b/src/Utils/Test/CMakeLists.txt new file mode 100755 index 000000000..73f5f6bfe --- /dev/null +++ b/src/Utils/Test/CMakeLists.txt @@ -0,0 +1,55 @@ +# Copyright (C) 2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +INCLUDE_DIRECTORIES( + ${PTHREAD_INCLUDE_DIRS} + ${CPPUNIT_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics + ${CMAKE_CURRENT_SOURCE_DIR}/../../Basics/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMELocalTrace/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMETraceCollector + ${CMAKE_CURRENT_SOURCE_DIR}/../../SALOMETraceCollector/Test + ${CMAKE_CURRENT_SOURCE_DIR}/../../Utils + ${CMAKE_CURRENT_SOURCE_DIR}/../../Utils/Test +) + +SET(COMMON_LIBS + ${CPPUNIT_LIBS} + OpUtil + SALOMELocalTraceTest + SALOMELocalTrace + SALOMETraceCollectorTest + SALOMEBasics +) + +ADD_LIBRARY(UtilsTest SHARED UtilsTest.cxx) +SET_TARGET_PROPERTIES(UtilsTest PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(UtilsTest ${COMMON_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS UtilsTest DESTINATION ${KERNEL_salomelib_LIBS}) + +ADD_EXECUTABLE(TestUtils TestUtils.cxx) +SET_TARGET_PROPERTIES(TestUtils PROPERTIES COMPILE_FLAGS "${CPPUNIT_DEFINITIONS} ${PLATFORM_DEFINITIONS}") +TARGET_LINK_LIBRARIES(TestUtils ${COMMON_LIBS} UtilsTest ${OMNIORB_LIBS} ${PLATFORM_LIBS}) +INSTALL(TARGETS TestUtils DESTINATION ${KERNEL_salomebin_BINS}) + +SALOME_INSTALL_SCRIPTS(TestUtils.py ${KERNEL_salomescript_PYTHON}) + +FILE(GLOB COMMON_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") +INSTALL(FILES ${COMMON_HEADERS_HXX} DESTINATION ${KERNEL_salomeinclude_HEADERS}) diff --git a/src/Utils/Test/TestUtils.py b/src/Utils/Test/TestUtils.py index cc6c1a1d4..36fe782ec 100644 --- a/src/Utils/Test/TestUtils.py +++ b/src/Utils/Test/TestUtils.py @@ -46,6 +46,6 @@ clt.waitLogger("Logger") command = ['TestUtils'] ret = os.spawnvp(os.P_WAIT, command[0], command) -# kill Test process +# kill Test process TestKiller.killProcess(runSalome.process_id) diff --git a/src/Utils/Test/UtilsTest.cxx b/src/Utils/Test/UtilsTest.cxx index b5d8fb506..de2a9b78d 100644 --- a/src/Utils/Test/UtilsTest.cxx +++ b/src/Utils/Test/UtilsTest.cxx @@ -27,8 +27,12 @@ #include #include #include "Utils_SALOME_Exception.hxx" +#include "Basics_Utils.hxx" #include "utilities.h" +#ifdef WIN32 +#define setenv Kernel_Utils::setenv +#endif #define TRACEFILE "/tmp/traceUnitTest.log" diff --git a/src/Utils/Test/UtilsTest.hxx b/src/Utils/Test/UtilsTest.hxx index 9724e2609..5c320c432 100644 --- a/src/Utils/Test/UtilsTest.hxx +++ b/src/Utils/Test/UtilsTest.hxx @@ -25,7 +25,17 @@ #include -class UtilsTest : public CppUnit::TestFixture +#ifdef WIN32 +# if defined UTILSTEST_EXPORTS || defined UtilsTest_EXPORTS +# define UTILSTEST_EXPORT __declspec( dllexport ) +# else +# define UTILSTEST_EXPORT __declspec( dllimport ) +# endif +#else +# define UTILSTEST_EXPORT +#endif + +class UTILSTEST_EXPORT UtilsTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( UtilsTest ); CPPUNIT_TEST( testSALOME_ExceptionThrow ); -- 2.39.2

6fh+^j)W0~cuGvhjEQuWrW-LJ+a!Or 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