From 946b98a74cab5032c3d39cfad0d9c0326f868ed5 Mon Sep 17 00:00:00 2001 From: crouzet Date: Tue, 19 Oct 2010 14:09:58 +0000 Subject: [PATCH] hxx2salome integration: test example --- Examples/hxx1/README | 23 ++++++ Examples/hxx1/component.py | 54 +++++++++++++ Examples/hxx1/cpp_component.tgz | Bin 0 -> 19844 bytes Examples/hxx1/test_compohxx.py | 129 ++++++++++++++++++++++++++++++++ 4 files changed, 206 insertions(+) create mode 100644 Examples/hxx1/README create mode 100644 Examples/hxx1/component.py create mode 100644 Examples/hxx1/cpp_component.tgz create mode 100644 Examples/hxx1/test_compohxx.py diff --git a/Examples/hxx1/README b/Examples/hxx1/README new file mode 100644 index 0000000..2c5154f --- /dev/null +++ b/Examples/hxx1/README @@ -0,0 +1,23 @@ +to run this example, one has first to untar the cpp_component archive, compile it, +and install it in directory COMPONENTCPP_INSTALL + + tar xvfz cpp_component.tgz + mkdir COMPONENTCPP_INSTALL COMPONENTCPP_BUILD + cd COMPONENTCPP_SRC + ./build_configure + cd ../COMPONENTCPP_BUILD + ../COMPONENTCPP_SRC/configure --prefix=... + make + make install + + +Generate the components with : + + python component.py + + +Test them with + + appli/runAppli -u test_compohxx.py + + diff --git a/Examples/hxx1/component.py b/Examples/hxx1/component.py new file mode 100644 index 0000000..5008c41 --- /dev/null +++ b/Examples/hxx1/component.py @@ -0,0 +1,54 @@ +import os +from module_generator import Generator,Module,Service +from module_generator import CPPComponent,PYComponent,HXX2SALOMEComponent + +kernel_root_dir=os.environ["KERNEL_ROOT_DIR"] +gui_root_dir=os.environ["GUI_ROOT_DIR"] +yacs_root_dir=os.environ["YACS_ROOT_DIR"] +med_root_dir=os.environ["MED_ROOT_DIR"] +geom_root_dir=os.environ["GEOM_ROOT_DIR"] + +#import context from .. +execfile("../context.py") + +cwd=os.getcwd() +cpppath=os.path.join(cwd,"COMPONENTCPP_INSTALL") + + +# PUT HERE DEFINITIONS OF THE COMPONENTS AND THE SERVICES + + +os.environ["CALCULCPP_ROOT_DIR"]=cpppath +os.environ["MEDCALCCPP_ROOT_DIR"]=cpppath +os.environ["TESTMEDCPP_ROOT_DIR"]=cpppath +os.environ["ICOCOCPP_ROOT_DIR"]=cpppath +os.environ["TESTMEMCPP_ROOT_DIR"]=cpppath +c1=HXX2SALOMEComponent("CALCUL.hxx","libCALCULCXX.so" , cpppath ) +c2=HXX2SALOMEComponent("MEDCALC.hxx","libMEDCALCCXX.so" , cpppath ) +c3=HXX2SALOMEComponent("TESTMED.hxx","libTESTMEDCXX.so" , cpppath ) +c4=HXX2SALOMEComponent("ICOCO.hxx","libICOCOCXX.so" , cpppath ) +c5=HXX2SALOMEComponent("TESTMEM.hxx","libTESTMEMCXX.so" , cpppath ) + + +g=Generator(Module("hxxcompos",components=[c4,c1,c2,c3,c5],prefix="./install"),context) +g.generate() +g.bootstrap() +g.configure() +g.make() +g.install() +g.make_appli("appli", + restrict=["KERNEL","GUI","YACS"], + altmodules={"GUI":gui_root_dir, + "MED":med_root_dir, + "YACS":yacs_root_dir, + "GEOM":geom_root_dir}) +cppenv=""" export CALCULCPP_ROOT_DIR=%(cpppath)s +export MEDCALCCPP_ROOT_DIR=%(cpppath)s +export TESTMEDCPP_ROOT_DIR=%(cpppath)s +export ICOCOCPP_ROOT_DIR=%(cpppath)s +export TESTMEMCPP_ROOT_DIR=%(cpppath)s""" % {"cpppath" : cpppath} + +cppenvfile=open("appli/env.d/cppEnv.sh","w") +cppenvfile.write(cppenv) +cppenvfile.close() + diff --git a/Examples/hxx1/cpp_component.tgz b/Examples/hxx1/cpp_component.tgz new file mode 100644 index 0000000000000000000000000000000000000000..87432a041a678c7cc9db603c48871399290508ea GIT binary patch literal 19844 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 v8*5_9SGHEXVRfyp)wQ}-*Xmkbt7~