From 2c809d1c8a55d5d72395b23a405da9955c793977 Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Fri, 29 Mar 2019 14:54:23 +0100 Subject: [PATCH 01/23] Update cpptango to release 9.3.3 --- distribution.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution.properties b/distribution.properties index 56fd696b0..4b96c522a 100644 --- a/distribution.properties +++ b/distribution.properties @@ -8,9 +8,9 @@ rest-server-root-repo=https://github.com/tango-controls/rest-server/releases #current = tango lib major + $age #revision = tango lib patch #age = tango lib minor -version-info=12:2:3 +version-info=12:3:3 #lib -cppTango=9.3.2 +cppTango=9.3.3 JTango=JTango-9.5.13 tango-idl=5.0.1 jive-ver=7.19 From 011f9698432a70d4c772869ed1a0993fa602d0fe Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Fri, 29 Mar 2019 14:55:03 +0100 Subject: [PATCH 02/23] Update assets/README... ... to show changes between 9.2.5a and 9.3.3 --- assets/README | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/assets/README b/assets/README index f96fe791f..8b0a3df34 100644 --- a/assets/README +++ b/assets/README @@ -526,6 +526,25 @@ documentation, news and to download add-on packages. See the file TANGO_CHANGES to get an overview of all modification between the different Tango library versions. +Changes between Tango distribution 9.2.5a and 9.3.3 +-------------------------------------------------- + +- Updated C++ library to Release 9.3.3 +- Updated JTango to Release 9.5.13 +- Updated Jive to Release 7.19 +- Updated ATK to Release 9.2.39 +- Updated AtkPanel to Release 5.6 +- Updated atktuning to Release 4.7 +- Updated Astor to Release 7.2.1 +- Updated JSSHTerminal to Release 1.11 +- Updated LogViewer to Release 2.0.5 +- Updated Pogo to Release 9.6.16 +- Added rest-server Release 1.2 +- Updated TangoTest to Release 2.1 +- Updated TangoDatabase to Release 5.8 +- Updated TangoAccessControl to Release 2.14 +- Updated Starter to Release 7.0 + Changes between Tango distribution 9.2.5 and 9.2.5a -------------------------------------------------- From 1485af7202a1fa1b4669f354ed481374cb1054b4 Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Fri, 29 Mar 2019 14:57:30 +0100 Subject: [PATCH 03/23] Update assets/TANGO_CHANGES for 9.3.3 Minimal text explanation in this version. --- assets/TANGO_CHANGES | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/assets/TANGO_CHANGES b/assets/TANGO_CHANGES index 59ac1ba85..6001552e2 100644 --- a/assets/TANGO_CHANGES +++ b/assets/TANGO_CHANGES @@ -1,5 +1,15 @@ TANGO history file +03/2019 ******************************************************* + * * + * Tango release 9.3.3 : Changes since version 9.2.5a * + * * + ******************************************************* + +- Please refer to the release notes and changelog files of the different +[tango-controls Github repositories](https://github.com/tango-controls) +to get a detailed list of changes and bug fixes. + 01/2016 ******************************************************* * * * Tango release 9.2.5a : Changes since version 9.2.5 * From 8d500b3db61839ae8354d6dac57c275b8c59e73d Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Fri, 29 Mar 2019 15:05:19 +0100 Subject: [PATCH 04/23] Update TangoAccessControl to Release 2.14 --- distribution.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution.properties b/distribution.properties index 4b96c522a..1a8ab23b5 100644 --- a/distribution.properties +++ b/distribution.properties @@ -27,7 +27,7 @@ rest-server-ver=1.2 #cppserver TangoTest=TangoTest-Release-2.1 TangoDatabase=DataBase-Release-5.8 -TangoAccessControl=master +TangoAccessControl=TangoAccessControl-Release-2.14 starter=Starter-7.0 #doc docs-ver=9.2.5 From 48cdc59b10baf47872ab6af16707c1f03d3784d6 Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Fri, 29 Mar 2019 15:20:45 +0100 Subject: [PATCH 05/23] Update rest-server to 1.9 --- distribution.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution.properties b/distribution.properties index 1a8ab23b5..c1a769341 100644 --- a/distribution.properties +++ b/distribution.properties @@ -22,7 +22,7 @@ dbbench-ver=1.3 jssh-terminal-ver=1.11 log-viewer-ver=2.0.5 pogo-ver=9.6.16 -rest-server-ver=1.2 +rest-server-ver=1.9 #tool_panels= #cppserver TangoTest=TangoTest-Release-2.1 From 3bf6609426e0e9bc2503d9c810d51fc9dd3a9354 Mon Sep 17 00:00:00 2001 From: Ingvord Date: Fri, 29 Mar 2019 15:25:12 +0100 Subject: [PATCH 06/23] Update README --- assets/README | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/README b/assets/README index 8b0a3df34..d7b04a486 100644 --- a/assets/README +++ b/assets/README @@ -1,4 +1,4 @@ - TANGO source code release version 9.2.5a - README (01/2017) + TANGO source code release version 9.3.3 - README (03/2019) ========================================================== @@ -539,7 +539,7 @@ Changes between Tango distribution 9.2.5a and 9.3.3 - Updated JSSHTerminal to Release 1.11 - Updated LogViewer to Release 2.0.5 - Updated Pogo to Release 9.6.16 -- Added rest-server Release 1.2 +- Added rest-server Release 1.9 - Updated TangoTest to Release 2.1 - Updated TangoDatabase to Release 5.8 - Updated TangoAccessControl to Release 2.14 From d64cf558af6caf89b67901a2cfcc91bedab301fd Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Tue, 2 Apr 2019 07:58:30 -0400 Subject: [PATCH 07/23] Update to latest available release versions Update Jive to Release 7.21 Update ATK to Release 9.3.2 Update AtkPanel to Release 5.8 Update Astor to Release 7.2.4 Update JSSHTerminal to Release 1.13 Update Pogo to Release 9.6.18 Update TangoDatabase to Release 5.9 Update tango_admin to Release 1.14 --- assets/README | 15 ++++++++------- distribution.properties | 16 ++++++++-------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/assets/README b/assets/README index d7b04a486..88a2d208e 100644 --- a/assets/README +++ b/assets/README @@ -531,19 +531,20 @@ Changes between Tango distribution 9.2.5a and 9.3.3 - Updated C++ library to Release 9.3.3 - Updated JTango to Release 9.5.13 -- Updated Jive to Release 7.19 -- Updated ATK to Release 9.2.39 -- Updated AtkPanel to Release 5.6 +- Updated Jive to Release 7.21 +- Updated ATK to Release 9.3.2 +- Updated AtkPanel to Release 5.8 - Updated atktuning to Release 4.7 -- Updated Astor to Release 7.2.1 -- Updated JSSHTerminal to Release 1.11 +- Updated Astor to Release 7.2.4 +- Updated JSSHTerminal to Release 1.13 - Updated LogViewer to Release 2.0.5 -- Updated Pogo to Release 9.6.16 +- Updated Pogo to Release 9.6.18 - Added rest-server Release 1.9 - Updated TangoTest to Release 2.1 -- Updated TangoDatabase to Release 5.8 +- Updated TangoDatabase to Release 5.9 - Updated TangoAccessControl to Release 2.14 - Updated Starter to Release 7.0 +- Updated tango_admin to Release 1.14 Changes between Tango distribution 9.2.5 and 9.2.5a -------------------------------------------------- diff --git a/distribution.properties b/distribution.properties index c1a769341..5c92e28d0 100644 --- a/distribution.properties +++ b/distribution.properties @@ -13,24 +13,24 @@ version-info=12:3:3 cppTango=9.3.3 JTango=JTango-9.5.13 tango-idl=5.0.1 -jive-ver=7.19 -atk-ver=9.2.39 -atk-panel-ver=5.6 +jive-ver=7.21 +atk-ver=9.3.2 +atk-panel-ver=5.8 atk-tuning-ver=4.7 -astor-ver=7.2.1 +astor-ver=7.2.4 dbbench-ver=1.3 -jssh-terminal-ver=1.11 +jssh-terminal-ver=1.13 log-viewer-ver=2.0.5 -pogo-ver=9.6.16 +pogo-ver=9.6.18 rest-server-ver=1.9 #tool_panels= #cppserver TangoTest=TangoTest-Release-2.1 -TangoDatabase=DataBase-Release-5.8 +TangoDatabase=Database-Release-5.9 TangoAccessControl=TangoAccessControl-Release-2.14 starter=Starter-7.0 #doc docs-ver=9.2.5 #utils -tango_admin=Release_1.13 +tango_admin=Release_1.14 #mtangorest.server=rc4-2.9 From a401e95600677026b6876ec1f6606dab5964c5b8 Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Tue, 2 Apr 2019 08:29:06 -0400 Subject: [PATCH 08/23] Downgrade Astor temporarily to release 7.2.3 --- assets/README | 2 +- distribution.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/README b/assets/README index 88a2d208e..241434531 100644 --- a/assets/README +++ b/assets/README @@ -535,7 +535,7 @@ Changes between Tango distribution 9.2.5a and 9.3.3 - Updated ATK to Release 9.3.2 - Updated AtkPanel to Release 5.8 - Updated atktuning to Release 4.7 -- Updated Astor to Release 7.2.4 +- Updated Astor to Release 7.2.3 - Updated JSSHTerminal to Release 1.13 - Updated LogViewer to Release 2.0.5 - Updated Pogo to Release 9.6.18 diff --git a/distribution.properties b/distribution.properties index 5c92e28d0..c318f68df 100644 --- a/distribution.properties +++ b/distribution.properties @@ -17,7 +17,7 @@ jive-ver=7.21 atk-ver=9.3.2 atk-panel-ver=5.8 atk-tuning-ver=4.7 -astor-ver=7.2.4 +astor-ver=7.2.3 dbbench-ver=1.3 jssh-terminal-ver=1.13 log-viewer-ver=2.0.5 From 965292dfd3e2b70983e9e938149f54d727be52c5 Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Tue, 2 Apr 2019 15:53:39 +0200 Subject: [PATCH 09/23] Fix missing separator error in common_target.opt Fix the following error (a tab was missing): common_target.opt:166: *** missing separator. --- assets/pogo/preferences/common_target.opt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/pogo/preferences/common_target.opt b/assets/pogo/preferences/common_target.opt index ff459aecc..b54b0d649 100644 --- a/assets/pogo/preferences/common_target.opt +++ b/assets/pogo/preferences/common_target.opt @@ -163,7 +163,7 @@ endif ifeq ($(PROJECT_TYPE),SHARED_LIB) rm -f $(OUTPUT_DIR)/lib$(PROJECT_NAME).so endif -rmdir $(OUTPUT_DIR) 2> /dev/null || true + rmdir $(OUTPUT_DIR) 2> /dev/null || true #------------------------------------------------------------------------------ #-- install: From b6d169fde4190fe7412cfe331b3c76c722d4213c Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Tue, 2 Apr 2019 11:10:07 -0400 Subject: [PATCH 10/23] Update build.xml Use copy ant task instead of deprecated copydir task --- build.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build.xml b/build.xml index e43490fa8..dbbd087d9 100644 --- a/build.xml +++ b/build.xml @@ -452,7 +452,9 @@ - + + + @@ -468,4 +470,4 @@ - \ No newline at end of file + From 3c8a4c3f1fcf16334577881d1f307015198f5fea Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Tue, 9 Apr 2019 13:29:14 +0200 Subject: [PATCH 11/23] Cleanup POGO (#20) Remove obsolete POGO templates Remove pogo-6 --- assets/README | 1 + assets/configure.ac | 4 +- assets/lib/java/Makefile.am | 5 +- assets/lib/java/pogo-6.in | 72 -- assets/pogo/Makefile.am | 2 +- assets/pogo/templates/Makefile.am | 67 -- assets/pogo/templates/cpp/Allowed.cpp | 60 -- assets/pogo/templates/cpp/ClassFactory.cpp | 62 -- assets/pogo/templates/cpp/DevServ.cpp | 141 --- assets/pogo/templates/cpp/DevServ.dsp | 125 --- assets/pogo/templates/cpp/DevServ.h | 153 ---- assets/pogo/templates/cpp/DevServClass.cpp | 301 ------- assets/pogo/templates/cpp/DevServClass.h | 158 ---- assets/pogo/templates/cpp/MachineState.cpp | 72 -- assets/pogo/templates/cpp/Makefile | 191 ---- assets/pogo/templates/cpp/Makefile.in | 191 ---- assets/pogo/templates/cpp/README | 40 - .../pogo/templates/cpp/ReadHardwareAttr.cpp | 16 - assets/pogo/templates/cpp/ReadWriteAttr.cpp | 58 -- assets/pogo/templates/cpp/main.cpp | 77 -- .../pogo/templates/cpp/readPropMethodName.cpp | 20 - .../templates/cpp/set_default_property.cpp | 18 - assets/pogo/templates/cpp/state.cpp | 55 -- .../cpp/vc8_project/Class_dll.vcproj | 233 ----- .../cpp/vc8_project/Class_lib.vcproj | 213 ----- .../templates/cpp/vc8_project/DevServ.sln | 43 - .../cpp/vc8_project/Server_shared.vcproj | 227 ----- .../cpp/vc8_project/Server_static.vcproj | 229 ----- assets/pogo/templates/cpp/write_property.cpp | 136 --- assets/pogo/templates/html/Doxyfile | 831 ------------------ .../pogo/templates/html/HowIsGenerated.html | 41 - assets/pogo/templates/html/Inheritance.html | 14 - assets/pogo/templates/html/SearchItem.html | 102 --- assets/pogo/templates/html/ServersList.html | 51 -- assets/pogo/templates/html/TPG_CvsModule.html | 137 --- assets/pogo/templates/html/TPG_CvsTags.html | 109 --- .../templates/html/TPG_NamingConventions.html | 74 -- .../templates/html/TangoProgrammerGuide.html | 57 -- assets/pogo/templates/html/footer.html | 44 - assets/pogo/templates/html/frame.html | 19 - assets/pogo/templates/html/header.html | 68 -- assets/pogo/templates/html/index.html | 82 -- assets/pogo/templates/html/page.html | 55 -- assets/pogo/templates/html/tkcvs_browser.jpg | Bin 169917 -> 0 bytes assets/pogo/templates/java/DevServ.java | 182 ---- assets/pogo/templates/java/DevServClass.java | 158 ---- assets/pogo/templates/java/DevServCmd.java | 118 --- assets/pogo/templates/java/Makefile | 83 -- assets/pogo/templates/java/README | 23 - assets/pogo/templates/java/ReadWriteAttr.java | 56 -- .../pogo/templates/java/TangoclassProxy.java | 85 -- .../templates/java/readPropMethodName.java | 34 - assets/pogo/templates/java/states.java | 30 - .../pogo/templates/java/write_property.java | 25 - assets/pogo/templates/python/Attribute.py | 29 - assets/pogo/templates/python/Command.py | 19 - assets/pogo/templates/python/DevServ.py | 159 ---- assets/pogo/templates/txt/Shortcuts.txt | 42 - assets/pogo/templates/txt/WhatIsNew.txt | 11 - 59 files changed, 4 insertions(+), 5704 deletions(-) delete mode 100644 assets/lib/java/pogo-6.in delete mode 100644 assets/pogo/templates/Makefile.am delete mode 100644 assets/pogo/templates/cpp/Allowed.cpp delete mode 100644 assets/pogo/templates/cpp/ClassFactory.cpp delete mode 100644 assets/pogo/templates/cpp/DevServ.cpp delete mode 100644 assets/pogo/templates/cpp/DevServ.dsp delete mode 100644 assets/pogo/templates/cpp/DevServ.h delete mode 100644 assets/pogo/templates/cpp/DevServClass.cpp delete mode 100644 assets/pogo/templates/cpp/DevServClass.h delete mode 100644 assets/pogo/templates/cpp/MachineState.cpp delete mode 100644 assets/pogo/templates/cpp/Makefile delete mode 100644 assets/pogo/templates/cpp/Makefile.in delete mode 100644 assets/pogo/templates/cpp/README delete mode 100644 assets/pogo/templates/cpp/ReadHardwareAttr.cpp delete mode 100644 assets/pogo/templates/cpp/ReadWriteAttr.cpp delete mode 100644 assets/pogo/templates/cpp/main.cpp delete mode 100644 assets/pogo/templates/cpp/readPropMethodName.cpp delete mode 100644 assets/pogo/templates/cpp/set_default_property.cpp delete mode 100644 assets/pogo/templates/cpp/state.cpp delete mode 100644 assets/pogo/templates/cpp/vc8_project/Class_dll.vcproj delete mode 100644 assets/pogo/templates/cpp/vc8_project/Class_lib.vcproj delete mode 100644 assets/pogo/templates/cpp/vc8_project/DevServ.sln delete mode 100644 assets/pogo/templates/cpp/vc8_project/Server_shared.vcproj delete mode 100644 assets/pogo/templates/cpp/vc8_project/Server_static.vcproj delete mode 100644 assets/pogo/templates/cpp/write_property.cpp delete mode 100644 assets/pogo/templates/html/Doxyfile delete mode 100644 assets/pogo/templates/html/HowIsGenerated.html delete mode 100644 assets/pogo/templates/html/Inheritance.html delete mode 100644 assets/pogo/templates/html/SearchItem.html delete mode 100644 assets/pogo/templates/html/ServersList.html delete mode 100644 assets/pogo/templates/html/TPG_CvsModule.html delete mode 100644 assets/pogo/templates/html/TPG_CvsTags.html delete mode 100644 assets/pogo/templates/html/TPG_NamingConventions.html delete mode 100644 assets/pogo/templates/html/TangoProgrammerGuide.html delete mode 100644 assets/pogo/templates/html/footer.html delete mode 100644 assets/pogo/templates/html/frame.html delete mode 100644 assets/pogo/templates/html/header.html delete mode 100644 assets/pogo/templates/html/index.html delete mode 100644 assets/pogo/templates/html/page.html delete mode 100644 assets/pogo/templates/html/tkcvs_browser.jpg delete mode 100644 assets/pogo/templates/java/DevServ.java delete mode 100644 assets/pogo/templates/java/DevServClass.java delete mode 100644 assets/pogo/templates/java/DevServCmd.java delete mode 100644 assets/pogo/templates/java/Makefile delete mode 100644 assets/pogo/templates/java/README delete mode 100644 assets/pogo/templates/java/ReadWriteAttr.java delete mode 100644 assets/pogo/templates/java/TangoclassProxy.java delete mode 100644 assets/pogo/templates/java/readPropMethodName.java delete mode 100644 assets/pogo/templates/java/states.java delete mode 100644 assets/pogo/templates/java/write_property.java delete mode 100644 assets/pogo/templates/python/Attribute.py delete mode 100644 assets/pogo/templates/python/Command.py delete mode 100644 assets/pogo/templates/python/DevServ.py delete mode 100644 assets/pogo/templates/txt/Shortcuts.txt delete mode 100644 assets/pogo/templates/txt/WhatIsNew.txt diff --git a/assets/README b/assets/README index 241434531..1221dfd9c 100644 --- a/assets/README +++ b/assets/README @@ -545,6 +545,7 @@ Changes between Tango distribution 9.2.5a and 9.3.3 - Updated TangoAccessControl to Release 2.14 - Updated Starter to Release 7.0 - Updated tango_admin to Release 1.14 +- Removed Pogo 6 Changes between Tango distribution 9.2.5 and 9.2.5a -------------------------------------------------- diff --git a/assets/configure.ac b/assets/configure.ac index 47ee3b1a5..cb94f07c1 100644 --- a/assets/configure.ac +++ b/assets/configure.ac @@ -502,9 +502,7 @@ AC_OUTPUT(Makefile doc/Makefile doc/man/Makefile pogo/Makefile - pogo/templates/Makefile - pogo/preferences/Makefile - pogo/templates/cpp/Makefile) + pogo/preferences/Makefile) AC_MSG_RESULT([ diff --git a/assets/lib/java/Makefile.am b/assets/lib/java/Makefile.am index 5295821d3..ab2d09753 100644 --- a/assets/lib/java/Makefile.am +++ b/assets/lib/java/Makefile.am @@ -23,7 +23,6 @@ bin_SCRIPTS = \ astor \ jive \ pogo \ - pogo-6 \ atkpanel \ logviewer \ atktuning \ @@ -43,7 +42,7 @@ edit = sed \ -e 's|@libdir[@]|$(libdir)|g' \ -e 's|@prefix[@]|$(prefix)|g' -#astor jive pogo pogo-6 devicetree atkpanel logviewer atktuning jdraw synopticappli atkmoni cvstag TangoVers tg_devtest: Makefile +#astor jive pogo devicetree atkpanel logviewer atktuning jdraw synopticappli atkmoni cvstag TangoVers tg_devtest: Makefile $(bin_SCRIPTS): Makefile rm -f $@ $@.tmp srcdir=''; \ @@ -58,7 +57,6 @@ $(bin_SCRIPTS): Makefile astor: $(srcdir)/astor.in jive: $(srcdir)/jive.in pogo: $(srcdir)/pogo.in -pogo-6: $(srcdir)/pogo-6.in devicetree: $(srcdir)/devicetree.in atkpanel: $(srcdir)/atkpanel.in logviewer: $(srcdir)/logviewer.in @@ -82,7 +80,6 @@ EXTRA_DIST = \ astor.in \ jive.in \ pogo.in \ - pogo-6.in \ devicetree.in \ atkpanel.in \ logviewer.in \ diff --git a/assets/lib/java/pogo-6.in b/assets/lib/java/pogo-6.in deleted file mode 100644 index b371ad4fb..000000000 --- a/assets/lib/java/pogo-6.in +++ /dev/null @@ -1,72 +0,0 @@ -#!@SHELL@ -#--------------------------------------------------------- -# Check $DISPLAY variable -#--------------------------------------------------------- -if [ $DISPLAY ] -then - echo "Display is $DISPLAY" -else - echo "" - echo "DISPLAY environment variable is not defined !" - echo "Please, enter your DISPLAY name." - read answer - if [ $answer ] - then -# get the end of string to know if ":0" has been set - start=`expr $answer : '.*:' \| $answer` - echo "$start " - if [ $start = $answer ] - then - DISPLAY=$answer:0 - else - DISPLAY=$answer - fi - export DISPLAY - echo "Starting astor on $DISPLAY" - else - echo "DISPLAY is not defined ! Astor cannot start !" - exit - fi -fi - -#--------------------------------------------------------- -# Add Doc path to $PATH (depends on OS used) -#--------------------------------------------------------- -TANGO_HOME=@prefix@; export TANGO_HOME -MY_OS=`uname` -export MY_OS - -CPP_DOC=@DOXYGEN@ -#--------------------------------------------------------- -# Set the template path -#--------------------------------------------------------- -TEMPLATES=@prefix@/share/pogo/templates -export TEMPLATES - -#--------------------------------------------------------- -# Set the Home Source Path -#--------------------------------------------------------- -SRC_PATH=../generated -export SRC_PATH - -#--------------------------------------------------------- -# Set the Class Path for Tango and pogo usage -#--------------------------------------------------------- -APP_DIR=@prefix@/share/java; export APP_DIR - -TANGO_CLASS=$APP_DIR/JTango.jar; export TANGO_CLASS -POGO_CLASS=$APP_DIR/Pogo.jar; export POGO_CLASS - -CLASSPATH=$POGO_CLASS:$TANGO_CLASS; export CLASSPATH - -#--------------------------------------------------------- -# Start the Pogo process -#--------------------------------------------------------- -echo "Starting Pogo Appli under $MY_OS. " -# - -@JAVA@ -DTEMPL_HOME=$TEMPLATES \ - -DCPP_DOC_PATH=$CPP_DOC \ - -DIN_LANG=$POGO_LANG \ - -DEDITOR=$POGO_EDITOR \ - pogo.appli.PogoAppli $* diff --git a/assets/pogo/Makefile.am b/assets/pogo/Makefile.am index 6e849a704..82b15740e 100644 --- a/assets/pogo/Makefile.am +++ b/assets/pogo/Makefile.am @@ -1,2 +1,2 @@ -SUBDIRS = templates preferences +SUBDIRS = preferences diff --git a/assets/pogo/templates/Makefile.am b/assets/pogo/templates/Makefile.am deleted file mode 100644 index 754c87fa9..000000000 --- a/assets/pogo/templates/Makefile.am +++ /dev/null @@ -1,67 +0,0 @@ -cpp_templatedir = $(datadir)/pogo/templates/cpp -html_templatedir = $(datadir)/pogo/templates/html -java_templatedir = $(datadir)/pogo/templates/java -python_templatedir = $(datadir)/pogo/templates/python -txt_templatedir = $(datadir)/pogo/templates/txt - - -dist_cpp_template_DATA = cpp/Allowed.cpp \ - cpp/ClassFactory.cpp \ - cpp/DevServClass.cpp \ - cpp/DevServClass.h \ - cpp/DevServ.cpp \ - cpp/DevServ.dsp \ - cpp/DevServ.h \ - cpp/MachineState.cpp \ - cpp/main.cpp \ - cpp/Makefile \ - cpp/ReadHardwareAttr.cpp \ - cpp/README \ - cpp/readPropMethodName.cpp \ - cpp/ReadWriteAttr.cpp \ - cpp/set_default_property.cpp \ - cpp/state.cpp \ - cpp/write_property.cpp \ - cpp/vc8_project/Class_dll.vcproj \ - cpp/vc8_project/Class_lib.vcproj \ - cpp/vc8_project/DevServ.sln \ - cpp/vc8_project/Server_shared.vcproj \ - cpp/vc8_project/Server_static.vcproj - -EXTRA_DIST = cpp/Makefile.in - -dist_html_template_DATA = html/Doxyfile \ - html/footer.html \ - html/frame.html \ - html/header.html \ - html/HowIsGenerated.html \ - html/index.html \ - html/Inheritance.html \ - html/page.html \ - html/SearchItem.html \ - html/ServersList.html \ - html/TangoProgrammerGuide.html \ - html/tkcvs_browser.jpg \ - html/TPG_CvsModule.html \ - html/TPG_CvsTags.html \ - html/TPG_NamingConventions.html - -dist_java_template_DATA = java/DevServClass.java \ - java/DevServCmd.java \ - java/DevServ.java \ - java/Makefile \ - java/README \ - java/readPropMethodName.java \ - java/ReadWriteAttr.java \ - java/states.java \ - java/TangoclassProxy.java \ - java/write_property.java - -dist_python_template_DATA = python/Attribute.py \ - python/Command.py \ - python/DevServ.py - -dist_txt_template_DATA = txt/Shortcuts.txt \ - txt/WhatIsNew.txt - - diff --git a/assets/pogo/templates/cpp/Allowed.cpp b/assets/pogo/templates/cpp/Allowed.cpp deleted file mode 100644 index 6fbf59106..000000000 --- a/assets/pogo/templates/cpp/Allowed.cpp +++ /dev/null @@ -1,60 +0,0 @@ -static const char *RcsId = "$Header$"; -//+============================================================================= -// -// file : TemplateDevServ.cpp -// -// description : C++ source for the TemplateDevServ and its alowed. -// method for commands and attributes -// -// project : TANGO Device Server -// -// $Author: pascal_verdier $ -// -// $Revision: 10062 $ -// -// $Log$ -// Revision 1.1 2004/09/06 08:22:57 pascal_verdier -// *** empty log message *** -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//-============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= - -#include -#include -#include - -/*==================================================================== - * This file contains the methods to allow commands and attributes - * read or write execution. - * - * If you wand to add your own code, add it between - * the "End/Re-Start of Generated Code" comments. - * - * If you want, you can also add your own methods. - *==================================================================== - */ - -namespace TemplateDevServ_ns -{ - -//================================================= -// Attributes Allowed Methods -//================================================= - - -//================================================= -// Commands Allowed Methods -//================================================= - - -} // namespace TemplateDevServ_ns diff --git a/assets/pogo/templates/cpp/ClassFactory.cpp b/assets/pogo/templates/cpp/ClassFactory.cpp deleted file mode 100644 index 112b8ffc8..000000000 --- a/assets/pogo/templates/cpp/ClassFactory.cpp +++ /dev/null @@ -1,62 +0,0 @@ -static const char *RcsId = "$Id: ClassFactory.cpp 13293 2009-04-07 10:53:56Z pascal_verdier $"; -//+============================================================================= -// -// file : ClassFactory.cpp -// -// description : C++ source for the class_factory method of the DServer -// device class. This method is responsible for the creation of -// all class singleton for a device server. It is called -// at device server startup -// -// project : TANGO Device Server -// -// $Author: pascal_verdier $ -// -// $Revision: 13293 $ -// $Date: 2009-04-07 12:53:56 +0200 (Tue, 07 Apr 2009) $ -// -// SVN only: -// $HeadURL: $ -// -// CVS only: -// $Source$ -// $Log$ -// Revision 3.4 2007/10/23 14:04:30 pascal_verdier -// Spelling mistakes correction -// -// Revision 3.3 2005/03/02 14:06:15 pascal_verdier -// namespace is different than class name. -// -// Revision 3.2 2004/10/25 14:12:00 pascal_verdier -// Minor changes. -// -// Revision 3.1 2004/09/06 09:27:05 pascal_verdier -// Modified for Tango 5 compatibility. -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//-============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= - - -#include -#include - -/** - * Create TemplateDevServClass singleton and store it in DServer object. - */ - -void Tango::DServer::class_factory() -{ - - add_class(TemplateDevServ_ns::TemplateDevServClass::init("TemplateDevServ")); - -} diff --git a/assets/pogo/templates/cpp/DevServ.cpp b/assets/pogo/templates/cpp/DevServ.cpp deleted file mode 100644 index 2068f1cb8..000000000 --- a/assets/pogo/templates/cpp/DevServ.cpp +++ /dev/null @@ -1,141 +0,0 @@ -static const char *RcsId = "$Id: DevServ.cpp 13293 2009-04-07 10:53:56Z pascal_verdier $"; -//+============================================================================= -// -// file : TemplateDevServ.cpp -// -// description : C++ source for the TemplateDevServ and its commands. -// The class is derived from Device. It represents the -// CORBA servant object which will be accessed from the -// network. All commands which can be executed on the -// TemplateDevServ are implemented in this file. -// -// project : TANGO Device Server -// -// $Author: pascal_verdier $ -// -// $Revision: 13293 $ -// -// $Revision: 13293 $ -// $Date: 2009-04-07 12:53:56 +0200 (Tue, 07 Apr 2009) $ -// -// SVN only: -// $HeadURL: $ -// -// CVS only: -// $Source$ -// $Log$ -// Revision 3.5 2007/10/24 12:07:35 pascal_verdier -// Another spelling mistake correction -// -// Revision 3.4 2007/10/23 14:04:30 pascal_verdier -// Spelling mistakes correction -// -// Revision 3.3 2005/03/02 14:06:15 pascal_verdier -// namespace is different than class name. -// -// Revision 3.2 2004/11/08 11:33:16 pascal_verdier -// if device property not found in database, it takes class property value if exists. -// -// Revision 3.1 2004/09/06 09:27:05 pascal_verdier -// Modified for Tango 5 compatibility. -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//-============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= - - - -//=================================================================== -// -// The following table gives the correspondence -// between command and method names. -// -// Command name | Method name -// ---------------------------------------- -// -//=================================================================== - - -#include -#include -#include - -namespace TemplateDevServ_ns -{ - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::TemplateDevServ(string &s) -// -// description : constructor for simulated TemplateDevServ -// -// in : - cl : Pointer to the DeviceClass object -// - s : Device name -// -//----------------------------------------------------------------------------- -TemplateDevServ::TemplateDevServ(Tango::DeviceClass *cl,string &s) -:Tango::Device_4Impl(cl,s.c_str()) -{ - init_device(); -} - -TemplateDevServ::TemplateDevServ(Tango::DeviceClass *cl,const char *s) -:Tango::Device_4Impl(cl,s) -{ - init_device(); -} - -TemplateDevServ::TemplateDevServ(Tango::DeviceClass *cl,const char *s,const char *d) -:Tango::Device_4Impl(cl,s,d) -{ - init_device(); -} -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::delete_device() -// -// description : will be called at device destruction or at init command. -// -//----------------------------------------------------------------------------- -void TemplateDevServ::delete_device() -{ - // Delete device allocated objects -} - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::init_device() -// -// description : will be called at device initialization. -// -//----------------------------------------------------------------------------- -void TemplateDevServ::init_device() -{ - INFO_STREAM << "TemplateDevServ::TemplateDevServ() create device " << device_name << endl; - - // Initialise variables to default values - //-------------------------------------------- -} - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::always_executed_hook() -// -// description : method always executed before any command is executed -// -//----------------------------------------------------------------------------- -void TemplateDevServ::always_executed_hook() -{ - -} - -} // namespace TemplateDevServ_ns diff --git a/assets/pogo/templates/cpp/DevServ.dsp b/assets/pogo/templates/cpp/DevServ.dsp deleted file mode 100644 index d69fa4ace..000000000 --- a/assets/pogo/templates/cpp/DevServ.dsp +++ /dev/null @@ -1,125 +0,0 @@ -# Microsoft Developer Studio Project File - Name="TemplateDevServ" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=TemplateDevServ - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "TemplateDevServ.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "TemplateDevServ.mak" CFG="TemplateDevServ - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "TemplateDevServ - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "TemplateDevServ - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "TemplateDevServ - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "TemplateDevServ - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "debug" -# PROP Intermediate_Dir "debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /ZI /Od /I "$(TANGO_HOME)\include\win32" /I "." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WINSTATIC" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 tangod.lib log4tangod.lib COS4d.lib omniDynamic4d.lib omniORB4d.lib omnithreadd.lib mswsock.lib ws2_32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"$(TANGO_HOME)\lib\win32\debug" - -!ENDIF - -# Begin Target - -# Name "TemplateDevServ - Win32 Release" -# Name "TemplateDevServ - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=ClassFactory.cpp -# End Source File -# Begin Source File - -SOURCE=main.cpp -# End Source File -# Begin Source File - -SOURCE=TemplateDevServ.cpp -# End Source File -# Begin Source File - -SOURCE=TemplateDevServClass.cpp -# End Source File -# Begin Source File - -SOURCE=TemplateDevServStateMachine.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=TemplateDevServ.h -# End Source File -# Begin Source File - -SOURCE=TemplateDevServClass.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/assets/pogo/templates/cpp/DevServ.h b/assets/pogo/templates/cpp/DevServ.h deleted file mode 100644 index ce86f958b..000000000 --- a/assets/pogo/templates/cpp/DevServ.h +++ /dev/null @@ -1,153 +0,0 @@ -//============================================================================= -// -// file : TemplateDevServ.h -// -// description : Include for the TemplateDevServ class. -// -// project : TANGO -// -// $Author: pascal_verdier $ -// -// $Revision: 13293 $ -// $Date: 2009-04-07 12:53:56 +0200 (Tue, 07 Apr 2009) $ -// -// SVN only: -// $HeadURL: $ -// -// CVS only: -// $Source$ -// $Log$ -// Revision 3.5 2007/10/23 14:04:30 pascal_verdier -// Spelling mistakes correction -// -// Revision 3.4 2005/03/02 14:06:15 pascal_verdier -// namespace is different than class name. -// -// Revision 3.3 2004/10/25 14:12:00 pascal_verdier -// Minor changes. -// -// Revision 3.2 2004/09/06 09:27:05 pascal_verdier -// Modified for Tango 5 compatibility. -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= -#ifndef _TEMPLATEDEVSERV_H -#define _TEMPLATEDEVSERV_H - -#include -//using namespace Tango; - -/** - * @author $Author: pascal_verdier $ - * @version $Revision: 13293 $ - */ - - // Add your own constant definitions here. - //----------------------------------------------- - - -namespace TemplateDevServ_ns -{ - -class TemplateDevServ: public Tango::Device_4Impl -{ -public : - // Add your own data members here - //----------------------------------------- - - - // Here is the Start of the automatic code generation part - //------------------------------------------------------------- -/** - * @name attributes - * Attribute member data. - */ -//@{ -//@} - -/** - * @name Device properties - * Device property member data. - */ -//@{ -//@} - -/**@name Constructors - * Miscellaneous constructors */ -//@{ -/** - * Constructs a newly allocated Command object. - * - * @param cl Class. - * @param s Device Name - */ - TemplateDevServ(Tango::DeviceClass *cl,string &s); -/** - * Constructs a newly allocated Command object. - * - * @param cl Class. - * @param s Device Name - */ - TemplateDevServ(Tango::DeviceClass *cl,const char *s); -/** - * Constructs a newly allocated Command object. - * - * @param cl Class. - * @param s Device name - * @param d Device description. - */ - TemplateDevServ(Tango::DeviceClass *cl,const char *s,const char *d); -//@} - -/**@name Destructor - * Only one destructor is defined for this class */ -//@{ -/** - * The object destructor. - */ - ~TemplateDevServ() {delete_device();}; -/** - * will be called at device destruction or at init command. - */ - void delete_device(); -//@} - - -/**@name Miscellaneous methods */ -//@{ -/** - * Initialize the device - */ - virtual void init_device(); -/** - * Always executed method before execution command method. - */ - virtual void always_executed_hook(); - - - -//@} - - // Here is the end of the automatic code generation part - //------------------------------------------------------------- - - - -protected : - // Add your own data members here - //----------------------------------------- -}; - -} // namespace_ns - -#endif // _TEMPLATEDEVSERV_H diff --git a/assets/pogo/templates/cpp/DevServClass.cpp b/assets/pogo/templates/cpp/DevServClass.cpp deleted file mode 100644 index 65beefab4..000000000 --- a/assets/pogo/templates/cpp/DevServClass.cpp +++ /dev/null @@ -1,301 +0,0 @@ -static const char *ClassId = "$Id: DevServClass.cpp 13293 2009-04-07 10:53:56Z pascal_verdier $"; -static const char *TagName = "$Name$"; -static const char *CvsPath = "$Source$"; -static const char *SvnPath = "$HeadURL: $"; -static const char *HttpServer = "http://www.esrf.fr/computing/cs/tango/tango_doc/ds_doc/"; -//+============================================================================= -// -// file : TemplateDevServClass.cpp -// -// description : C++ source for the TemplateDevServClass. A singleton -// class derived from DeviceClass. It implements the -// command list and all properties and methods required -// by the TemplateDevServ once per process. -// -// project : TANGO Device Server -// -// $Author: pascal_verdier $ -// -// $Revision: 13293 $ -// -// $Log$ -// Revision 3.11 2007/10/23 14:04:30 pascal_verdier -// Spelling mistakes correction -// -// Revision 3.10 2006/11/15 14:17:10 pascal_verdier -// Remove warnings from compiler. -// -// Revision 3.9 2006/06/26 09:31:03 pascal_verdier -// Tango-5.5 compatiblity. -// extern C method added to be used as shared library. -// VCC 6 project file generated if running on Win32. -// .obj, .so, executable files generated in separated directories. -// -// Revision 3.8 2005/09/08 08:45:23 pascal_verdier -// For Pogo-4.4.0 and above. -// -// Revision 3.7 2005/06/17 08:53:21 pascal_verdier -// CVS tags management added. -// -// Revision 3.6 2005/05/19 13:11:18 pascal_verdier -// *** empty log message *** -// -// Revision 3.5 2005/03/02 14:06:15 pascal_verdier -// namespace is different than class name. -// -// Revision 3.4 2004/12/10 13:23:27 pascal_verdier -// Pogo-4.0.0 (Ready for Tango5). -// -// Revision 3.3 2004/11/08 14:27:21 pascal_verdier -// *** empty log message *** -// -// Revision 3.2 2004/11/08 11:33:16 pascal_verdier -// if device property not found in database, it takes class property value if exists. -// -// Revision 3.1 2004/09/06 09:27:05 pascal_verdier -// Modified for Tango 5 compatibility. -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//-============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= - - -#include - -#include -#include - - -//+---------------------------------------------------------------------------- -/** - * Create TemplateDevServClass singleton and return it in a C function for Python usage - */ -//+---------------------------------------------------------------------------- -extern "C" { -#ifdef WIN32 - -__declspec(dllexport) - -#endif - - Tango::DeviceClass *_create_TemplateDevServ_class(const char *name) { - return TemplateDevServ_ns::TemplateDevServClass::init(name); - } -} - - -namespace TemplateDevServ_ns -{ -TemplateBlock -//+---------------------------------------------------------------------------- -// -// method : DevTemplateCmd::execute() -// -// description : method to trigger the execution of the command. -// PLEASE DO NOT MODIFY this method core without pogo -// -// in : - device : The device on which the command must be executed -// - in_any : The command input data -// -// returns : The command output data (packed in the Any object) -// -//----------------------------------------------------------------------------- -CORBA::Any *DevTemplateCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any) -{ - - cout2 << "DevTemplateCmd::execute(): arrived" << endl; - - extract(in_any, argin); - - return insert((static_cast(device))->dev_template_cmd(argin)); -} - - -TemplateBlock - - - -// -//---------------------------------------------------------------- -// Initialize pointer for singleton pattern -//---------------------------------------------------------------- -// -TemplateDevServClass *TemplateDevServClass::_instance = NULL; - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServClass::TemplateDevServClass(string &s) -// -// description : constructor for the TemplateDevServClass -// -// in : - s : The class name -// -//----------------------------------------------------------------------------- -TemplateDevServClass::TemplateDevServClass(string &s):DeviceClass(s) -{ - - cout2 << "Entering TemplateDevServClass constructor" << endl; - - cout2 << "Leaving TemplateDevServClass constructor" << endl; - -} -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServClass::~TemplateDevServClass() -// -// description : destructor for the TemplateDevServClass -// -//----------------------------------------------------------------------------- -TemplateDevServClass::~TemplateDevServClass() -{ - _instance = NULL; -} - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServClass::instance -// -// description : Create the object if not already done. Otherwise, just -// return a pointer to the object -// -// in : - name : The class name -// -//----------------------------------------------------------------------------- -TemplateDevServClass *TemplateDevServClass::init(const char *name) -{ - if (_instance == NULL) - { - try - { - string s(name); - _instance = new TemplateDevServClass(s); - } - catch (bad_alloc) - { - throw; - } - } - return _instance; -} - -TemplateDevServClass *TemplateDevServClass::instance() -{ - if (_instance == NULL) - { - cerr << "Class is not initialised !!" << endl; - exit(-1); - } - return _instance; -} - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServClass::command_factory -// -// description : Create the command object(s) and store them in the -// command list -// -//----------------------------------------------------------------------------- -void TemplateDevServClass::command_factory() -{ - command_list.push_back(new DevTemplateCmd("DevReadPosition", - Tango::DEV_LONG, - Tango::DEV_LONG, - "Motor number (0-7)", - "Motor position")); -} - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServClass::get_class_property -// -// description : Get the class property for specified name. -// -// in : string name : The property name -// -//+---------------------------------------------------------------------------- -Tango::DbDatum TemplateDevServClass::get_class_property(string &prop_name) -{ - for (unsigned int i=0 ; ilength() ; i++) - { - cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl; - - // Create devices and add it into the device list - //---------------------------------------------------- - device_list.push_back(new TemplateDevServ(this, (*devlist_ptr)[i])); - - // Export device to the outside world - // Check before if database used. - //--------------------------------------------- - if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false)) - export_device(device_list.back()); - else - export_device(device_list.back(), (*devlist_ptr)[i]); - } - // End of Automatic code generation - //------------------------------------------------------------- - -} - -} // namespace TemplateDevServ_ns diff --git a/assets/pogo/templates/cpp/DevServClass.h b/assets/pogo/templates/cpp/DevServClass.h deleted file mode 100644 index 86cfc64c9..000000000 --- a/assets/pogo/templates/cpp/DevServClass.h +++ /dev/null @@ -1,158 +0,0 @@ -//============================================================================= -// -// file : TemplateDevServClass.h -// -// description : Include for the TemplateDevServClass root class. -// This class is the singleton class for -// the TemplateDevServ device class. -// It contains all properties and methods which the -// TemplateDevServ requires only once e.g. the commands. -// -// project : TANGO Device Server -// -// $Author: pascal_verdier $ -// -// $Revision: 14110 $ -// $Date: 2010-02-10 08:47:17 +0100 (Wed, 10 Feb 2010) $ -// -// SVN only: -// $HeadURL: $ -// -// CVS only: -// $Source$ -// $Log$ -// Revision 3.8 2009/04/07 10:53:56 pascal_verdier -// Tango-7 release. -// SVN tags added -// -// Revision 3.7 2008/04/07 12:01:57 pascal_verdier -// CVS put property modified. -// -// Revision 3.6 2007/10/23 14:04:30 pascal_verdier -// Spelling mistakes correction -// -// Revision 3.5 2007/09/14 14:36:08 pascal_verdier -// Add an ifdef WIN32 for dll generation -// -// Revision 3.4 2005/09/08 08:45:23 pascal_verdier -// For Pogo-4.4.0 and above. -// -// Revision 3.3 2005/03/02 14:06:15 pascal_verdier -// namespace is different than class name. -// -// Revision 3.2 2004/11/08 11:33:16 pascal_verdier -// if device property not found in database, it takes class property value if exists. -// -// Revision 3.1 2004/09/06 09:27:05 pascal_verdier -// Modified for Tango 5 compatibility. -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= - -#ifndef _TEMPLATEDEVSERVCLASS_H -#define _TEMPLATEDEVSERVCLASS_H - -#include -#include - - -namespace TemplateDevServ_ns -{ -//===================================== -// Define classes for attributes -//===================================== -class ATTRIBUTEAttrib: public Tango::Attr -{ -public: - ATTRIBUTEAttrib():Attr("ATTRIBUTE", DATA_TYPE, RW_TYPE) {}; - ~ATTRIBUTEAttrib() {}; - - virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att) - {(static_cast(dev))->read_ATTRIBUTE(att);} - virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att) - {(static_cast(dev))->write_ATTRIBUTE(att);} - virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty) - {return (static_cast(dev))->is_ATTRIBUTE_allowed(ty);} -}; - - -//========================================= -// Define classes for commands -//========================================= -class DevTemplateCmd : public Tango::Command -{ -public: - DevTemplateCmd(const char *name, - Tango::CmdArgType in, - Tango::CmdArgType out, - const char *in_desc, - const char *out_desc, - Tango::DispLevel level) - :Command(name,in,out,in_desc,out_desc, level) {}; - - DevTemplateCmd(const char *name, - Tango::CmdArgType in, - Tango::CmdArgType out) - :Command(name,in,out) {}; - ~DevTemplateCmd() {}; - - virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any); - virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any) - {return (static_cast(dev))->is_COMMAND_allowed(any);} -}; - -// -// The TemplateDevServClass singleton definition -// - -class -#ifdef _TG_WINDOWS_ - __declspec(dllexport) -#endif - TemplateDevServClass : public Tango::DeviceClass -{ -public: - -// add your own data members here -//------------------------------------ - -public: - Tango::DbData cl_prop; - Tango::DbData cl_def_prop; - Tango::DbData dev_def_prop; - -// Method prototypes - static TemplateDevServClass *init(const char *); - static TemplateDevServClass *instance(); - ~TemplateDevServClass(); - Tango::DbDatum get_class_property(string &); - Tango::DbDatum get_default_device_property(string &); - Tango::DbDatum get_default_class_property(string &); - -protected: - TemplateDevServClass(string &); - static TemplateDevServClass *_instance; - void command_factory(); - void write_class_property(); - void set_default_property(); - string get_cvstag(); - string get_cvsroot(); - -private: - void device_factory(const Tango::DevVarStringArray *); -}; - - -} // namespace TemplateDevServ_ns - -#endif // _TEMPLATEDEVSERVCLASS_H diff --git a/assets/pogo/templates/cpp/MachineState.cpp b/assets/pogo/templates/cpp/MachineState.cpp deleted file mode 100644 index 18f2b39dd..000000000 --- a/assets/pogo/templates/cpp/MachineState.cpp +++ /dev/null @@ -1,72 +0,0 @@ -static const char *RcsId = "$Id $"; -//+============================================================================= -// -// file : TemplateDevServStateMachine.cpp -// -// description : C++ source for the TemplateDevServ and its alowed -// methods for commands and attributes -// -// project : TANGO Device Server -// -// $Author: pascal_verdier $ -// -// $Revision: 13293 $ -// $Date: 2009-04-07 12:53:56 +0200 (Tue, 07 Apr 2009) $ -// -// SVN only: -// $HeadURL: $ -// -// CVS only: -// $Source$ -// $Log$ -// Revision 3.3 2007/10/23 14:04:30 pascal_verdier -// Spelling mistakes correction -// -// Revision 3.2 2005/03/02 14:06:15 pascal_verdier -// namespace is different than class name. -// -// Revision 3.1 2004/09/06 09:27:05 pascal_verdier -// Modified for Tango 5 compatibility. -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//-============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= - -#include -#include -#include - -/*==================================================================== - * This file contains the methods to allow commands and attributes - * read or write execution. - * - * If you wand to add your own code, add it between - * the "End/Re-Start of Generated Code" comments. - * - * If you want, you can also add your own methods. - *==================================================================== - */ - -namespace TemplateDevServ_ns -{ - -//================================================= -// Attributes Allowed Methods -//================================================= - - -//================================================= -// Commands Allowed Methods -//================================================= - - -} // namespace TemplateDevServ_ns diff --git a/assets/pogo/templates/cpp/Makefile b/assets/pogo/templates/cpp/Makefile deleted file mode 100644 index 5033040b3..000000000 --- a/assets/pogo/templates/cpp/Makefile +++ /dev/null @@ -1,191 +0,0 @@ -#============================================================================= -# -# file : Makefile -# -# description : Include for the TemplateDevServ class. -# -# project : Makefile to generate a Tango server -# -# $Author: $ -# -# $Revision: $ -# -# -# copyleft : European Synchrotron Radiation Facility -# BP 220, Grenoble 38043 -# FRANCE -# -#============================================================================= -# This file is generated by POGO -# (Program Obviously used to Generate tango Object) -# -# (c) - Software Engineering Group - ESRF -#============================================================================= -# - -CLASS = TemplateDevServ -MAJOR_VERS = 1 -MINOR_VERS = 0 -RELEASE = Release_$(MAJOR_VERS)_$(MINOR_VERS) - -#----------------------------------------- -# Set default home directories -#----------------------------------------- - -TANGO_HOME = /segfs/tango/tmp/Reynald/install/debian7 -CPP_SERVERS = $(TANGO_HOME)/cppserver - -ifdef no_debug - DEBUG = -O -else - DEBUG = -g -endif - -ifdef _solaris -CC = CC - -AR_SL = $(CC) -mt -G -VERS_OPT = -h -SL_EXT = so -endif - -ifdef linux -CC = c++ -CC_SHLIB = $(CC) -fPIC -AR = ar - -AR_SL = $(CC) -fPIC -shared -SL_EXT = so -VERS_OPT = -Wl,-soname, -endif - -INCLUDE_DIRS = -I$(TANGO_HOME)/include/tango \ - -I/segfs/tango/ORB/omniORB4.2.1_p1/debian7/include \ - -I. \ - -I$(CPP_SERVERS)/include - -OBJS_DIR = obj -LIB_DIRS = -L $(TANGO_HOME)/lib \ - -L /segfs/tango/ORB/omniORB4.2.1_p1/debian7/lib - -TARGET_LIB = $(CPP_SERVERS)/lib/libtgclasses.a - - -#----------------------------------------- -# Set CXXFLAGS and LFLAGS -#----------------------------------------- -ifdef _solaris -CXXFLAGS = $(DEBUG) -mt -D_PTHREADS $(INCLUDE_DIRS) -LFLAGS = $(DEBUG) $(LIB_DIRS) \ - -ltango \ - -llog4tango \ - -lomniORB4 \ - -lomniDynamic4 \ - -lomnithread \ - -lCOS4 \ - -lpthread \ - -lposix4 -lsocket -lnsl -endif - -ifdef linux -CXXFLAGS = $(DEBUG) -D_REENTRANT $(INCLUDE_DIRS) -LFLAGS = $(DEBUG) $(LIB_DIRS) \ - -ltango \ - -llog4tango \ - -lomniORB4 \ - -lomniDynamic4 \ - -lomnithread \ - -lCOS4 \ - -ldl -lpthread -endif - - - - -#----------------------------------------- -# Set dependences -#----------------------------------------- - -SVC_OBJS = $(OBJS_DIR)/main.o \ - $(OBJS_DIR)/ClassFactory.o \ - $(OBJS_DIR)/$(CLASS)Class.o \ - $(OBJS_DIR)/$(CLASS)StateMachine.o \ - $(OBJS_DIR)/$(CLASS).o - -SHLIB_OBJS = $(OBJS_DIR)/$(CLASS)Class.so.o \ - $(OBJS_DIR)/$(CLASS)StateMachine.so.o \ - $(OBJS_DIR)/$(CLASS).so.o - - -SVC_INC = $(CLASS)Class.h \ - $(CLASS).h - - -$(OBJS_DIR)/%.o: %.cpp $(SVC_INC) - $(CC) $(CXXFLAGS) -c $< -o $(OBJS_DIR)/$*.o - -$(OBJS_DIR)/%.so.o: %.cpp $(SVC_INC) - $(CC_SHLIB) $(CXXFLAGS) -c $< -o $(OBJS_DIR)/$*.so.o - - -#----------------------------------------- -# Make Entry -#----------------------------------------- -all: $(CLASS) - -$(CLASS): make_obj_dir make_bin_dir $(SVC_OBJS) - $(CC) $(SVC_OBJS) -o $(CLASS) $(LFLAGS) - @mv $(CLASS) bin/$(CLASS) - -shlib: make_obj_dir make_shlib_dir $(SHLIB_OBJS) - $(AR_SL) -o \ - shlib/$(CLASS).$(SL_EXT).$(MAJOR_VERS).$(MINOR_VERS) \ - $(VERS_OPT)$(CLASS).$(SL_EXT).$(MAJOR_VERS) \ - $(SHLIB_OBJS) $(LFLAGS) - @rm -f shlib/$(CLASS).$(SL_EXT) - @cd shlib; \ - ln -s $(CLASS).$(SL_EXT).$(MAJOR_VERS).$(MINOR_VERS) $(CLASS).$(SL_EXT) - -clean: - rm -f $(OBJS_DIR)/*.o \ - $(OBJS_DIR)/*.so.o \ - bin/$(CLASS) \ - core - -make_obj_dir: - @mkdir -p obj - -make_bin_dir: - @mkdir -p bin - -make_shlib_dir: - @mkdir -p shlib - -#----------------------------------------- -# Install binary file -#----------------------------------------- -install: - cp bin/$(CLASS) $(TANGO_HOME)/bin - -#----------------------------------------- -# Update class library and header files -# recompile without debug mode. -#----------------------------------------- -lib: clean - @make no_debug=1 - cp *.h $(CPP_SERVERS)/include - ar ruv $(TARGET_LIB) $(CLASS).o - ar ruv $(TARGET_LIB) $(CLASS)Class.o - ar ruv $(TARGET_LIB) $(CLASS)StateMachine.o - ident $(TARGET_LIB) | grep $(CLASS) - -#---------------------------------------------------- -# Tag the CVS module corresponding to this class -#---------------------------------------------------- -tag: - @cvstag "$(CLASS)-$(RELEASE)" - @make $(CLASS) - @make show_tag - -show_tag: - @cvstag -d diff --git a/assets/pogo/templates/cpp/Makefile.in b/assets/pogo/templates/cpp/Makefile.in deleted file mode 100644 index 3618f1e89..000000000 --- a/assets/pogo/templates/cpp/Makefile.in +++ /dev/null @@ -1,191 +0,0 @@ -#============================================================================= -# -# file : Makefile -# -# description : Include for the TemplateDevServ class. -# -# project : Makefile to generate a Tango server -# -# $Author: $ -# -# $Revision: $ -# -# -# copyleft : European Synchrotron Radiation Facility -# BP 220, Grenoble 38043 -# FRANCE -# -#============================================================================= -# This file is generated by POGO -# (Program Obviously used to Generate tango Object) -# -# (c) - Software Engineering Group - ESRF -#============================================================================= -# - -CLASS = TemplateDevServ -MAJOR_VERS = 1 -MINOR_VERS = 0 -RELEASE = Release_$(MAJOR_VERS)_$(MINOR_VERS) - -#----------------------------------------- -# Set default home directories -#----------------------------------------- - -TANGO_HOME = @prefix@ -CPP_SERVERS = $(TANGO_HOME)/cppserver - -ifdef no_debug - DEBUG = -O -else - DEBUG = -g -endif - -ifdef _solaris -CC = CC - -AR_SL = $(CC) -mt -G -VERS_OPT = -h -SL_EXT = so -endif - -ifdef linux -CC = c++ -CC_SHLIB = $(CC) -fPIC -AR = ar - -AR_SL = $(CC) -fPIC -shared -SL_EXT = so -VERS_OPT = -Wl,-soname, -endif - -INCLUDE_DIRS = -I$(TANGO_HOME)/include/tango \ - -I@ORB_PREFIX@/include \ - -I. \ - -I$(CPP_SERVERS)/include - -OBJS_DIR = obj -LIB_DIRS = -L $(TANGO_HOME)/lib \ - -L @ORB_PREFIX@/lib - -TARGET_LIB = $(CPP_SERVERS)/lib/libtgclasses.a - - -#----------------------------------------- -# Set CXXFLAGS and LFLAGS -#----------------------------------------- -ifdef _solaris -CXXFLAGS = $(DEBUG) -mt -D_PTHREADS $(INCLUDE_DIRS) -LFLAGS = $(DEBUG) $(LIB_DIRS) \ - -ltango \ - -llog4tango \ - -lomniORB4 \ - -lomniDynamic4 \ - -lomnithread \ - -lCOS4 \ - -lpthread \ - -lposix4 -lsocket -lnsl -endif - -ifdef linux -CXXFLAGS = $(DEBUG) -D_REENTRANT $(INCLUDE_DIRS) -LFLAGS = $(DEBUG) $(LIB_DIRS) \ - -ltango \ - -llog4tango \ - -lomniORB4 \ - -lomniDynamic4 \ - -lomnithread \ - -lCOS4 \ - -ldl -lpthread -endif - - - - -#----------------------------------------- -# Set dependences -#----------------------------------------- - -SVC_OBJS = $(OBJS_DIR)/main.o \ - $(OBJS_DIR)/ClassFactory.o \ - $(OBJS_DIR)/$(CLASS)Class.o \ - $(OBJS_DIR)/$(CLASS)StateMachine.o \ - $(OBJS_DIR)/$(CLASS).o - -SHLIB_OBJS = $(OBJS_DIR)/$(CLASS)Class.so.o \ - $(OBJS_DIR)/$(CLASS)StateMachine.so.o \ - $(OBJS_DIR)/$(CLASS).so.o - - -SVC_INC = $(CLASS)Class.h \ - $(CLASS).h - - -$(OBJS_DIR)/%.o: %.cpp $(SVC_INC) - $(CC) $(CXXFLAGS) -c $< -o $(OBJS_DIR)/$*.o - -$(OBJS_DIR)/%.so.o: %.cpp $(SVC_INC) - $(CC_SHLIB) $(CXXFLAGS) -c $< -o $(OBJS_DIR)/$*.so.o - - -#----------------------------------------- -# Make Entry -#----------------------------------------- -all: $(CLASS) - -$(CLASS): make_obj_dir make_bin_dir $(SVC_OBJS) - $(CC) $(SVC_OBJS) -o $(CLASS) $(LFLAGS) - @mv $(CLASS) bin/$(CLASS) - -shlib: make_obj_dir make_shlib_dir $(SHLIB_OBJS) - $(AR_SL) -o \ - shlib/$(CLASS).$(SL_EXT).$(MAJOR_VERS).$(MINOR_VERS) \ - $(VERS_OPT)$(CLASS).$(SL_EXT).$(MAJOR_VERS) \ - $(SHLIB_OBJS) $(LFLAGS) - @rm -f shlib/$(CLASS).$(SL_EXT) - @cd shlib; \ - ln -s $(CLASS).$(SL_EXT).$(MAJOR_VERS).$(MINOR_VERS) $(CLASS).$(SL_EXT) - -clean: - rm -f $(OBJS_DIR)/*.o \ - $(OBJS_DIR)/*.so.o \ - bin/$(CLASS) \ - core - -make_obj_dir: - @mkdir -p obj - -make_bin_dir: - @mkdir -p bin - -make_shlib_dir: - @mkdir -p shlib - -#----------------------------------------- -# Install binary file -#----------------------------------------- -install: - cp bin/$(CLASS) $(TANGO_HOME)/bin - -#----------------------------------------- -# Update class library and header files -# recompile without debug mode. -#----------------------------------------- -lib: clean - @make no_debug=1 - cp *.h $(CPP_SERVERS)/include - ar ruv $(TARGET_LIB) $(CLASS).o - ar ruv $(TARGET_LIB) $(CLASS)Class.o - ar ruv $(TARGET_LIB) $(CLASS)StateMachine.o - ident $(TARGET_LIB) | grep $(CLASS) - -#---------------------------------------------------- -# Tag the CVS module corresponding to this class -#---------------------------------------------------- -tag: - @cvstag "$(CLASS)-$(RELEASE)" - @make $(CLASS) - @make show_tag - -show_tag: - @cvstag -d diff --git a/assets/pogo/templates/cpp/README b/assets/pogo/templates/cpp/README deleted file mode 100644 index 0ab5496b7..000000000 --- a/assets/pogo/templates/cpp/README +++ /dev/null @@ -1,40 +0,0 @@ -//-============================================================ -// -// This class has been generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================= - - -Files generated: -=============== -TemplateDevServ.cpp: Source code for the TemplateDevServ class and its commands. - This class is derived from DeviceImpl_2 class. - It represents the CORBA servant obbject which - will be accessed from the network. - All commands which can be executed on the - TemplateDevServ are implemented in this file. - -TemplateDevServ.h: Include for the TemplateDevServ class. - Server class prototypes and descriptions. - -TemplateDevServClass.cpp: A singleton class derived fromTemplateDevServ. - It implements the command list and all properties - and methods required by the TemplateDevServ once per process - -TemplateDevServClass.h: Include for the TemplateDevServClass root class. - This class is represents the singleton class for - the TemplateDevServ device class. - It contains all properties and methods which the - TemplateDevServ requires only once e.g. the commands. - -main.cpp: C++ source for a TANGO device server main. - The main rule is to initialise (and create) the Tango - system and to create the DServerClass singleton. - The main should be the same for every Tango device server. - -ClassFactory.cpp: C++ source for the class_factory method of the DServer - device class. This method is responsible to create - all class singletin for a device server. It is called - at device server startup diff --git a/assets/pogo/templates/cpp/ReadHardwareAttr.cpp b/assets/pogo/templates/cpp/ReadHardwareAttr.cpp deleted file mode 100644 index 221289b00..000000000 --- a/assets/pogo/templates/cpp/ReadHardwareAttr.cpp +++ /dev/null @@ -1,16 +0,0 @@ -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::read_attr_hardware() -// -// description : Hardware acquisition for attributes. -// -//----------------------------------------------------------------------------- -void TemplateDevServ::read_attr_hardware(vector &attr_list) -{ - DEBUG_STREAM << "In read_attr_hardware for " << attr_list.size() - << " attribute(s)" << endl; - - // Add your own code here - //--------------------------------- -} - diff --git a/assets/pogo/templates/cpp/ReadWriteAttr.cpp b/assets/pogo/templates/cpp/ReadWriteAttr.cpp deleted file mode 100644 index 1d6555bf3..000000000 --- a/assets/pogo/templates/cpp/ReadWriteAttr.cpp +++ /dev/null @@ -1,58 +0,0 @@ -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::read_attr_hardware() -// -// description : Hardware acquisition for attributes. -// -//----------------------------------------------------------------------------- -void TemplateDevServ::read_attr_hardware(vector &attr_list) -{ - DEBUG_STREAM << "In read_attr_hardware for " << attr_list.size() - << " attribute(s)" << endl; - - // Add your own code here - //--------------------------------- -} - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::read_attr() -// -// description : Extract real attribute values from -// hardware acquisition result. -// -//----------------------------------------------------------------------------- -void TemplateDevServ::read_attr(Tango::Attribute &attr) -{ - string &attr_name = attr.get_name(); - - DEBUG_STREAM << "In read_attr for attribute " << attr_name << endl; - - // Switch on attribute name - //--------------------------------- -} - -//-------- WRITE ATTRIBUTE ----------- -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::write_attr_hardware() -// -// description : Write attribute values to hardware. -// -//----------------------------------------------------------------------------- -void TemplateDevServ::write_attr_hardware(vector &attr_list) -{ - DEBUG_STREAM << "In write_attr_hardware for " << attr_list.size(); - DEBUG_STREAM << " attribute(s)" << endl; - - for (long i=0 ; i < attr_list.size() ; i++) - { - Tango::WAttribute &att = dev_attr->get_w_attr_by_ind(attr_list[i]); - string attr_name = att.get_name(); - - DEBUG_STREAM << "Attribute name = " << attr_name; - - // Switch on attribute name - //--------------------------------- - } -} diff --git a/assets/pogo/templates/cpp/main.cpp b/assets/pogo/templates/cpp/main.cpp deleted file mode 100644 index 13e82233c..000000000 --- a/assets/pogo/templates/cpp/main.cpp +++ /dev/null @@ -1,77 +0,0 @@ -static const char *RcsId = "$Id $"; -//+============================================================================= -// -// file : main.cpp -// -// description : C++ source for a TANGO device server main. -// The main rule is to initialise (and create) the Tango -// system and to create the DServerClass singleton. -// The main should be the same for every Tango device server. -// -// project : TANGO Device Server -// -// $Author: pascal_verdier $ -// -// $Revision: 13293 $ $ -// $Date: 2009-04-07 12:53:56 +0200 (Tue, 07 Apr 2009) $ -// -// SVN only: -// $HeadURL: $ -// -// CVS only: -// $Source$ -// $Log$ -// Revision 3.2 2004/09/06 09:27:05 pascal_verdier -// Modified for Tango 5 compatibility. -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//-============================================================================= -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= - -#include - - -int main(int argc,char *argv[]) -{ - - Tango::Util *tg; - try - { - // Initialise the device server - //---------------------------------------- - tg = Tango::Util::init(argc,argv); - - // Create the device server singleton - // which will create everything - //---------------------------------------- - tg->server_init(false); - - // Run the endless loop - //---------------------------------------- - cout << "Ready to accept request" << endl; - tg->server_run(); - } - catch (bad_alloc) - { - cout << "Can't allocate memory to store device object !!!" << endl; - cout << "Exiting" << endl; - } - catch (CORBA::Exception &e) - { - Tango::Except::print_exception(e); - - cout << "Received a CORBA_Exception" << endl; - cout << "Exiting" << endl; - } - tg->server_cleanup(); - return(0); -} diff --git a/assets/pogo/templates/cpp/readPropMethodName.cpp b/assets/pogo/templates/cpp/readPropMethodName.cpp deleted file mode 100644 index be3d96f27..000000000 --- a/assets/pogo/templates/cpp/readPropMethodName.cpp +++ /dev/null @@ -1,20 +0,0 @@ - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::get_target_property() -// -// description : Read the target properties from database. -// -//----------------------------------------------------------------------------- -void TemplateDevServ::get_target_property() -{ - // Initialize your default values here (if not done with POGO). - //------------------------------------------------------------------ - - // Read target properties from database.(Automatic code generation) - //------------------------------------------------------------------ - - // End of Automatic code generation - //------------------------------------------------------------------ - -} diff --git a/assets/pogo/templates/cpp/set_default_property.cpp b/assets/pogo/templates/cpp/set_default_property.cpp deleted file mode 100644 index 5d3d8b4d7..000000000 --- a/assets/pogo/templates/cpp/set_default_property.cpp +++ /dev/null @@ -1,18 +0,0 @@ - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServClass::set_default_property -// -// description: Set default property (class and device) for wizard. -// For each property, add to wizard property name and description -// If default value has been set, add it to wizard property and -// store it in a DbDatum. -// -//----------------------------------------------------------------------------- -void TemplateDevServClass::set_default_property() -{ - string prop_name; - string prop_desc; - string prop_def; - -} diff --git a/assets/pogo/templates/cpp/state.cpp b/assets/pogo/templates/cpp/state.cpp deleted file mode 100644 index 227efd0de..000000000 --- a/assets/pogo/templates/cpp/state.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/*********** DevState Overriding method ********************/ - -/** - * Read The device state. - *
Command DevState - * - * @return the device state read. - */ - virtual Tango_DevState state_cmd(); - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::state_cmd() -// -// description : command to read the device state -// -// out : device state -// -//----------------------------------------------------------------------------- -Tango_DevState TemplateDevServ::state_cmd() -{ - - DEBUG_STREAM << "In TemplateDevServ state command" << endl; - - return dev_state; -} - - -/*********** DevStatus Overriding method ********************/ - -/** - * Read The device status. - *
Command DevStatus - * - * @return A String containing the device state read. - */ - virtual string &status_cmd(); - -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServ::status_cmd() -// -// description : command to read the device status -// -// out : device status -// -//----------------------------------------------------------------------------- -string &TemplateDevServ::status_cmd() -{ - - DEBUG_STREAM << "In TemplateDevServ status command" << endl; - - return dev_status; -} - diff --git a/assets/pogo/templates/cpp/vc8_project/Class_dll.vcproj b/assets/pogo/templates/cpp/vc8_project/Class_dll.vcproj deleted file mode 100644 index d363c62ee..000000000 --- a/assets/pogo/templates/cpp/vc8_project/Class_dll.vcproj +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/pogo/templates/cpp/vc8_project/Class_lib.vcproj b/assets/pogo/templates/cpp/vc8_project/Class_lib.vcproj deleted file mode 100644 index 852f142c0..000000000 --- a/assets/pogo/templates/cpp/vc8_project/Class_lib.vcproj +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/pogo/templates/cpp/vc8_project/DevServ.sln b/assets/pogo/templates/cpp/vc8_project/DevServ.sln deleted file mode 100644 index df5eb7f97..000000000 --- a/assets/pogo/templates/cpp/vc8_project/DevServ.sln +++ /dev/null @@ -1,43 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Server_shared", "Server_shared.vcproj", "{570AF151-36FC-4638-A23A-673975792A19}" - ProjectSection(ProjectDependencies) = postProject - {F513547B-028B-42F8-BE76-A50FD3A3BA3F} = {F513547B-028B-42F8-BE76-A50FD3A3BA3F} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Server_static", "Server_static.vcproj", "{A52909BB-E783-4522-BF2D-D9786023881D}" - ProjectSection(ProjectDependencies) = postProject - {4C40E24A-E85F-4DD1-9E6D-F8B19CD7D2D4} = {4C40E24A-E85F-4DD1-9E6D-F8B19CD7D2D4} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Class_lib", "Class_lib.vcproj", "{4C40E24A-E85F-4DD1-9E6D-F8B19CD7D2D4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Class_dll", "Class_dll.vcproj", "{F513547B-028B-42F8-BE76-A50FD3A3BA3F}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {570AF151-36FC-4638-A23A-673975792A19}.Debug|Win32.ActiveCfg = Debug|Win32 - {570AF151-36FC-4638-A23A-673975792A19}.Debug|Win32.Build.0 = Debug|Win32 - {570AF151-36FC-4638-A23A-673975792A19}.Release|Win32.ActiveCfg = Release|Win32 - {570AF151-36FC-4638-A23A-673975792A19}.Release|Win32.Build.0 = Release|Win32 - {A52909BB-E783-4522-BF2D-D9786023881D}.Debug|Win32.ActiveCfg = Debug|Win32 - {A52909BB-E783-4522-BF2D-D9786023881D}.Debug|Win32.Build.0 = Debug|Win32 - {A52909BB-E783-4522-BF2D-D9786023881D}.Release|Win32.ActiveCfg = Release|Win32 - {A52909BB-E783-4522-BF2D-D9786023881D}.Release|Win32.Build.0 = Release|Win32 - {4C40E24A-E85F-4DD1-9E6D-F8B19CD7D2D4}.Debug|Win32.ActiveCfg = Debug|Win32 - {4C40E24A-E85F-4DD1-9E6D-F8B19CD7D2D4}.Debug|Win32.Build.0 = Debug|Win32 - {4C40E24A-E85F-4DD1-9E6D-F8B19CD7D2D4}.Release|Win32.ActiveCfg = Release|Win32 - {4C40E24A-E85F-4DD1-9E6D-F8B19CD7D2D4}.Release|Win32.Build.0 = Release|Win32 - {F513547B-028B-42F8-BE76-A50FD3A3BA3F}.Debug|Win32.ActiveCfg = Debug|Win32 - {F513547B-028B-42F8-BE76-A50FD3A3BA3F}.Debug|Win32.Build.0 = Debug|Win32 - {F513547B-028B-42F8-BE76-A50FD3A3BA3F}.Release|Win32.ActiveCfg = Release|Win32 - {F513547B-028B-42F8-BE76-A50FD3A3BA3F}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/assets/pogo/templates/cpp/vc8_project/Server_shared.vcproj b/assets/pogo/templates/cpp/vc8_project/Server_shared.vcproj deleted file mode 100644 index e3017ef96..000000000 --- a/assets/pogo/templates/cpp/vc8_project/Server_shared.vcproj +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/pogo/templates/cpp/vc8_project/Server_static.vcproj b/assets/pogo/templates/cpp/vc8_project/Server_static.vcproj deleted file mode 100644 index 2ca6fa531..000000000 --- a/assets/pogo/templates/cpp/vc8_project/Server_static.vcproj +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/pogo/templates/cpp/write_property.cpp b/assets/pogo/templates/cpp/write_property.cpp deleted file mode 100644 index bd13f21a8..000000000 --- a/assets/pogo/templates/cpp/write_property.cpp +++ /dev/null @@ -1,136 +0,0 @@ -//+---------------------------------------------------------------------------- -// -// method : TemplateDevServClass::write_class_property -// -// description : Set class description as property in database -// -//----------------------------------------------------------------------------- -void TemplateDevServClass::write_class_property() -{ - // First time, check if database used - //-------------------------------------------- - if (Tango::Util::_UseDb == false) - return; - - Tango::DbData data; - string classname = get_name(); - string header; - string::size_type start, end; - - // Put title - Tango::DbDatum title("ProjectTitle"); - string str_title(PogoProjectTitle); - title << str_title; - data.push_back(title); - - // Put Description - Tango::DbDatum description("Description"); - PogoClassDescription; - description << str_desc; - data.push_back(description); - - // put cvs or svn location - string filename(classname); - filename += "Class.cpp"; - - // Create a string with the class ID to - // get the string into the binary - string class_id(ClassId); - - // check for cvs information - string src_path(CvsPath); - start = src_path.find("/"); - if (start!=string::npos) - { - end = src_path.find(filename); - if (end>start) - { - string strloc = src_path.substr(start, end-start); - // Check if specific repository - start = strloc.find("/cvsroot/"); - if (start!=string::npos && start>0) - { - string repository = strloc.substr(0, start); - if (repository.find("/segfs/")!=string::npos) - strloc = "ESRF:" + strloc.substr(start, strloc.length()-start); - } - Tango::DbDatum cvs_loc("cvs_location"); - cvs_loc << strloc; - data.push_back(cvs_loc); - } - } - // check for svn information - else - { - string src_path(SvnPath); - start = src_path.find("://"); - if (start!=string::npos) - { - end = src_path.find(filename); - if (end>start) - { - header = "$HeadURL: "; - start = header.length(); - string strloc = src_path.substr(start, (end-start)); - - Tango::DbDatum svn_loc("svn_location"); - svn_loc << strloc; - data.push_back(svn_loc); - } - } - } - - // Get CVS or SVN revision tag - - // CVS tag - string tagname(TagName); - header = "$Name: "; - start = header.length(); - string endstr(" $"); - - end = tagname.find(endstr); - if (end!=string::npos && end>start) - { - string strtag = tagname.substr(start, end-start); - Tango::DbDatum cvs_tag("cvs_tag"); - cvs_tag << strtag; - data.push_back(cvs_tag); - } - - // SVN tag - string svnpath(SvnPath); - header = "$HeadURL: "; - start = header.length(); - - end = svnpath.find(endstr); - if (end!=string::npos && end>start) - { - string strloc = svnpath.substr(start, end-start); - - string tagstr ("/tags/"); - start = strloc.find(tagstr); - if ( start!=string::npos ) - { - start = start + tagstr.length(); - end = strloc.find(filename); - string strtag = strloc.substr(start, end-start-1); - - Tango::DbDatum svn_tag("svn_tag"); - svn_tag << strtag; - data.push_back(svn_tag); - } - } - - // Get URL location - string httpServ(HttpServer); - if (httpServ.length()>0) - { - Tango::DbDatum db_doc_url("doc_url"); - db_doc_url << httpServ; - data.push_back(db_doc_url); - } - - // Call database and and values - //-------------------------------------------- - get_db_class()->put_property(data); -} diff --git a/assets/pogo/templates/html/Doxyfile b/assets/pogo/templates/html/Doxyfile deleted file mode 100644 index f65aa6a65..000000000 --- a/assets/pogo/templates/html/Doxyfile +++ /dev/null @@ -1,831 +0,0 @@ -# Doxyfile 1.2.10 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# General configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = POGO_TITLE - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = POGO_OUT_DOC - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, -# German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, -# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish. - -OUTPUT_LANGUAGE = English - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these class will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. It is allowed to use relative paths in the argument list. - -STRIP_FROM_PATH = - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a class diagram (in Html and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. - -CLASS_DIAGRAMS = YES - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower case letters. If set to YES upper case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are adviced to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explict @brief command for a brief description. - -JAVADOC_AUTOBRIEF = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# reimplements. - -INHERIT_DOCS = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consist of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = POGO_SRC_FILES - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -FILE_PATTERNS = *.h *.cpp - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse. - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = /segfs/tango/templates/pogo/html/header.html - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = /segfs/tango/templates/pogo/html/footer.html - -# The HTML_STYLESHEET tag can be used to specify a user defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the Html help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript and frames is required (for instance Netscape 4.0+ -# or Internet explorer 4.0+). - -GENERATE_TREEVIEW = YES - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 200 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimised for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = YES - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assigments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_XML = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES tag can be used to specify one or more tagfiles. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermedate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO - -# The CGI_NAME tag should be the name of the CGI script that -# starts the search engine (doxysearch) with the correct parameters. -# A script with this name will be generated by doxygen. - -CGI_NAME = - -# The CGI_URL tag should be the absolute URL to the directory where the -# cgi binaries are located. See the documentation of your http daemon for -# details. - -CGI_URL = - -# The DOC_URL tag should be the absolute URL to the directory where the -# documentation is located. If left blank the absolute path to the -# documentation, with file:// prepended to it, will be used. - -DOC_URL = - -# The DOC_ABSPATH tag should be the absolute path to the directory where the -# documentation is located. If left blank the directory on the local machine -# will be used. - -DOC_ABSPATH = - -# The BIN_ABSPATH tag must point to the directory where the doxysearch binary -# is installed. - -BIN_ABSPATH = - -# The EXT_DOC_PATHS tag can be used to specify one or more paths to -# documentation generated for other projects. This allows doxysearch to search -# the documentation for these projects as well. - -EXT_DOC_PATHS = diff --git a/assets/pogo/templates/html/HowIsGenerated.html b/assets/pogo/templates/html/HowIsGenerated.html deleted file mode 100644 index 90dc693be..000000000 --- a/assets/pogo/templates/html/HowIsGenerated.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - Tango Device Server User's Guide - - - -

- -
-
-
-

Device Servers List
Automatic Generation Pages

-
-
-
-The
-TANGO device servers list is automaticly generated by - -POGO classes.
- -These POGO classes scan a CVS repository and check out all -classes under directories named "cppserver" ou "jserver".
-Load each class as POGO itself and regenerate the documentation to be up to date.
-
-They analyse the CVSROOT module file to check comments for this class.
-If this comments start with a keyword (found in "ModuleFamilies" POGO property), -it sorts the class in an array titled by this keyword.
-If no keyword is found, the device server is sorted in a section called Miscellaneous. -
-
-
-
-
-The Keywords could be seen in CVS repository browsing as follow: -

- - - - - diff --git a/assets/pogo/templates/html/Inheritance.html b/assets/pogo/templates/html/Inheritance.html deleted file mode 100644 index ed2819f40..000000000 --- a/assets/pogo/templates/html/Inheritance.html +++ /dev/null @@ -1,14 +0,0 @@ -
-

Class Inheritance:

- - diff --git a/assets/pogo/templates/html/SearchItem.html b/assets/pogo/templates/html/SearchItem.html deleted file mode 100644 index 41b680ddf..000000000 --- a/assets/pogo/templates/html/SearchItem.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - Tango Device Server User's Guide - - DS User's Guide - - - - -

- - - - - - - - - -
- - - - - - - - - - - - - - - - -

-
- TANGO
Device Server -
-

-
-
-
- -
- -
-
-Search Class in ESRF list       - - - - - -
-
- -
-
-Search Class in Soleil list       - - - - - -
- -
-
-Search Class in Elettra list      - - - - - -
-
-
- -
-
-
-
-

TANGO is an open source project hosted by - -
-
-Tango core and tools - CVS repository on - - tango-cs project -
-Tango device servers - CVS repository on - -tango-ds project - -
diff --git a/assets/pogo/templates/html/ServersList.html b/assets/pogo/templates/html/ServersList.html deleted file mode 100644 index 5efd80dfb..000000000 --- a/assets/pogo/templates/html/ServersList.html +++ /dev/null @@ -1,51 +0,0 @@ - - - TANGO Servers page - - - -

- - - - - - - - - -
- - - - - - - - - - - - - - - - -

-
- TANGO
Device Server -
-

- -
-
-
-
-The source files of following class could be downloaded by clicking on it. -
-WARNING: -These source files have been developped for a specific usage -and are not guaranteed for all platforms. -
-
-
diff --git a/assets/pogo/templates/html/TPG_CvsModule.html b/assets/pogo/templates/html/TPG_CvsModule.html deleted file mode 100644 index 6065811aa..000000000 --- a/assets/pogo/templates/html/TPG_CvsModule.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - Tango Programer's Guide - - - -
EUROPEAN -SYNCHROTRON -RADIATION -FACILITY -
-
-INSTALLATION EUROPEENNE DE RAYONNEMENT SYNCHROTRON
-

- - - TANGO Programmer's Guide - -
- -
-
- - -Create a CVS Module: -
    - (To create a new module   - my_module for - MyDServer  class in - MyDsFamily.)
    - - -
  • - Module creation:
  • -
      -
    1. export the CVSROOT   environment variable.
    2. -
    3. cd   {anywhere}
    4. -
    5. cvs checkout  CVSROOT/modules
    6. -
    7. cd  CVSROOT
    8. -
    9. nedit  modules
    10. -
    11.    #-----> add your module with editor   - (see for specific repository)
    12. - -
    13. cvs commit -m "module  my_module -   added"
    14. -
    15. cd ..
    16. -
    17. cvs  release  -d  CVSROOT
    18. -
    19. cd   ../../my_module
    20. -
    21. cvs import -m "Initial Revision" ../../ - my_module    vendortag   releasetag
    22. -
    23. cd  ..
    24. -
    25. mv   my_module   - my_module.org
    26. -
    27. cvs  co   my_module
    28. -
    29. cd  my_module
    30. -
    -
    - - -
  • - On Tango DS repository:
  • -
      - This repository is located at - (CVSROOT=my_loggin@cvs.sourceforge.net:/cvsroot/tango-ds)
      - Inside the edited modules file, - search the line: -
        -
      • #    MyDsFamily
      • -
      - And add the following line: -
        -
      • my_module        MyDsFamily/../../my_module
      • -
      -
      - Where MyDsFamily could be: -
        -
      • Acquisition
      • -
      • Application
      • -
      • Beamdiag
      • -
      • Calculation
      • -
      • Communication
      • -
      • Inputoutput -
      • Instrumentation
      • -
      • Motion
      • -
      • Process
      • -
      • Miscellaneous
      • -
      • Radiation protection
      • -
      • Vacuum
      • -
      -
    -
    - -
  • - On ESRF repository:
  • -
      - This repository is located at (CVSROOT=/segfs/tango/cvsroot)
      - Inside the edited modules file, add the - following lines: -
        - -
      • #M    my_module     MyDsFamily - :   This class is able to bla bla bla....
      • -
      • my_module -       cppserver/../../my_module
      • -
        -
      -
      - Where MyDsFamily could be: -
        -
      • Archiving
      • -
      • Beamlines
      • -
      • Input/Output
      • -
      • Linac
      • -
      • Measures
      • -
      • Motion
      • -
      • Power Supply
      • -
      • Protocols
      • -
      • TACO Interfaces
      • -
      • Vacuum
      • -
      -
    -
-
-
- - - - diff --git a/assets/pogo/templates/html/TPG_CvsTags.html b/assets/pogo/templates/html/TPG_CvsTags.html deleted file mode 100644 index 36a18eca2..000000000 --- a/assets/pogo/templates/html/TPG_CvsTags.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - Tango Programer's Guide - - - -
EUROPEAN -SYNCHROTRON -RADIATION -FACILITY -
-
-INSTALLATION EUROPEENNE DE RAYONNEMENT SYNCHROTRON
-

- - - TANGO Programmer's Guide - -
- -
- -
-
-
- - -CVS Tag Management: -
    - -
  • - Tag a Device Server:
  • -
      -
    1. First time, don't forget to commit your source files (cvs commit -m..., tkcvs, ...). -
    2. Then increase the release number in Makefile. -
        - The line to be modified looks like: -
          - RELEASE = Release_1_3 -
        Change it to: -
          - RELEASE = Release_1_4
          -      or
          - RELEASE = Release_2_0 -
        -
      -
    3. Then type: -
        - linuxmake tag
        -     or
        - solmake tag.
        -
        - This command needs /segfs/tango/bin/cvstag script using Pogo java classes. - It will make a CVS tag on the current module. - It will patch the MyDServerClass.cpp file like: -
          - static const char *TagName = "$Name$"; -
        - And then it will re-build the executable file. -
      -
    4. And finally you can install the device serer. -
    - -
    -
    - -
  • - See last Tags of a Device Server:
  • -
      - Type    make show_tag to display the last - tag used for this module. -
    - -
    -
    - -
  • - CVS tag goal:
  • -
      - The goal of the CVS tag usage is to know which version is running. - There is 2 ways to know it. -
        -
      1. The server is running.
        - Use the command info on a device proxy or
        - with Device Panel, on tab admin click on Device Info. -
      2. - -
      3. The server is NOT running.
        - Use the shell command :
        - ident {dserver filename} |grep Name - It will display:
        -   $Name$ -
      4. -
      -
    -
-
- - - diff --git a/assets/pogo/templates/html/TPG_NamingConventions.html b/assets/pogo/templates/html/TPG_NamingConventions.html deleted file mode 100644 index da5cdefa0..000000000 --- a/assets/pogo/templates/html/TPG_NamingConventions.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - Tango Programer's Guide - - - -
EUROPEAN -SYNCHROTRON -RADIATION -FACILITY -
-
-INSTALLATION EUROPEENNE DE RAYONNEMENT SYNCHROTRON
-

- - - TANGO Programmer's Guide - -
- -
-
-
-
- -Tango Naming Conventions: - -
    - - - Commands and Attributes: -
      - Between clients and servers, they are case unsensitive.
      - But by convention it is recommended to build it by appending all words
      - starting with capital letter.
      - (i.e. ReadValues,  StartCounter, .......)
      -
      - Commands will be executed in a method where words will - be splited by underscore char.
      - (i.e. read_values,  start_counter, .......)
      - Attributes will be read or write in a method where attribute name - is preceded by read or write key.
      - (i.e. read_Counter,  write_CounterLimits, .......) -
        - NOTE: the method read_attr_hardware(vector &attr_list) - will be called before the above method. -
      -
    -
    - - - - Class and Device Properties: -
      - They are case sensitive:
      - By convention it is recommended to build it by appending all words
      - starting with capital letter.
      - (i.e. DefaultValue,  ReadDeviceName, .......) -
    -
    -
-
-
- - diff --git a/assets/pogo/templates/html/TangoProgrammerGuide.html b/assets/pogo/templates/html/TangoProgrammerGuide.html deleted file mode 100644 index c7e902d17..000000000 --- a/assets/pogo/templates/html/TangoProgrammerGuide.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - Tango Programer's Guide - - - -
EUROPEAN -SYNCHROTRON -RADIATION -FACILITY -
-
-INSTALLATION EUROPEENNE DE RAYONNEMENT SYNCHROTRON
-

- - - TANGO Programmer's Guide - - -
-
-
-
-The goal of this Programemr's Guide is to define some conventions and
-to specify some customs to stadardize Tango device servers writing style.
-It specify the Tango naming conventions -
-
-
-Tango project collaboration is based on CVS.
-There are 2 main repositories: -
    -
  • cvs.sourceforge.net:/cvsroot/tango-cs for kernel modules.
  • -
  • cvs.sourceforge.net:/cvsroot/tango-ds for device servers modules.
  • -
-In addition each institute has is own repository for specific device servers.
-A new device server must be added to the apropriate CVS repository in a -new CVS module -
-
-When a stable version has been developped and tested, the module must be - tagged.
-It allows to check out this stable version and to know which version is running. - - -
- - diff --git a/assets/pogo/templates/html/footer.html b/assets/pogo/templates/html/footer.html deleted file mode 100644 index ce64dbe56..000000000 --- a/assets/pogo/templates/html/footer.html +++ /dev/null @@ -1,44 +0,0 @@ - - - -
- -
-
- - - - - - - -
- - TANGO is an open source project hosted by :
- - Sourceforge logo small -
-
- - Core and Tools : - - CVS repository on - - tango-cs project - -
- - Device Servers : - - CVS repository on - - tango-ds project -
-
-
-
- - diff --git a/assets/pogo/templates/html/frame.html b/assets/pogo/templates/html/frame.html deleted file mode 100644 index a696d50e0..000000000 --- a/assets/pogo/templates/html/frame.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - Tango Device Server User's Guide - - - - - - - -<H2> -Frame Alert</H2> - -<P> -This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. -<BR> -Link to <A HREF="DevCommands.html">Non-frame version.</A> - diff --git a/assets/pogo/templates/html/header.html b/assets/pogo/templates/html/header.html deleted file mode 100644 index 8aec17f56..000000000 --- a/assets/pogo/templates/html/header.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - Tango Device Server User s Guide - - - -

- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - -

-
TANGO -
- -

- - - - - - - - - - - - -

-
Device Servers -
-

- -
- - - - - - diff --git a/assets/pogo/templates/html/index.html b/assets/pogo/templates/html/index.html deleted file mode 100644 index 4b124aa3f..000000000 --- a/assets/pogo/templates/html/index.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - Tango Device Server User's Guide - - - -

- - - - - - - - - -
- - - - - - - - - - - - - - - - -

-
- TANGO
Device Server -
-

- -
-
-

-project :
-User's Guide

-ClassName Class
- -

- -Revision: 1.0 - Author: Verdier
- Implemented in Language -
-
-
-
-
-
-

Introduction:

-
    - Class Description:
    -
-
-
-

Class Description:

- -
-
-
-

Conclusion:

-
    - The device server is ready for distribution application programmers.
    - The author will be interested in any feedback which arise from their - usage of this device server. -
-
- diff --git a/assets/pogo/templates/html/page.html b/assets/pogo/templates/html/page.html deleted file mode 100644 index 31a626656..000000000 --- a/assets/pogo/templates/html/page.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - Tango Device Server User's Guide - - - -

- - - - - - - - - - -
- - - - - - - - - - - - - - - - -

-
- TANGO
Device Server -
-

- -
-
-
-

-project :
-Page Title

-ClassName Class
-

- -Revision: 1.0 - Author: Verdier - -
- - diff --git a/assets/pogo/templates/html/tkcvs_browser.jpg b/assets/pogo/templates/html/tkcvs_browser.jpg deleted file mode 100644 index dcb23d01dd4d7891819214521be32cc0abebc34e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169917 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 diff --git a/assets/pogo/templates/java/DevServ.java b/assets/pogo/templates/java/DevServ.java deleted file mode 100644 index c4d1438b7..000000000 --- a/assets/pogo/templates/java/DevServ.java +++ /dev/null @@ -1,182 +0,0 @@ -//+============================================================================ -// $Source$ -// -// project : Tango Device Server -// -// Description: java source code for the TemplateDevServ class and its commands. -// This class is derived from DeviceImpl class. -// It represents the CORBA servant obbject which -// will be accessed from the network. All commands which -// can be executed on the TemplateDevServ are implemented -// in this file. -// -// $Author: pascal_verdier $ -// -// $Revision: 15039 $ -// -// $Log$ -// Revision 3.1 2004/09/06 09:29:17 pascal_verdier -// *** empty log message *** -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//-============================================================================ -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= - - -package TemplateDevServ; - - -import java.util.*; -import org.omg.CORBA.*; -import fr.esrf.Tango.*; -import fr.esrf.TangoDs.*; -import fr.esrf.TangoApi.*; - - -/** - * Class Description: - * - * @author $Author: pascal_verdier $ - * @version $Revision: 15039 $ - */ - -//--------- Start of States Description ---------- - -//--------- End of States Description ---------- - - -public class TemplateDevServ extends DeviceImpl implements TangoConst -{ - protected int state; - - //--------- Start of attributes data members ---------- - - //--------- End of attributes data members ---------- - - - //--------- Start of properties data members ---------- - - //--------- End of properties data members ---------- - - - // Add your own data members here - //-------------------------------------- - - - -//========================================================= -/** - * Constructor for simulated Time Device Server. - * - * @param cl The DeviceClass object - * @param s The Device name. - */ -//========================================================= - TemplateDevServ(DeviceClass cl, String s) throws DevFailed - { - super(cl,s); - init_device(); - } -//========================================================= -/** - * Constructor for simulated Time Device Server. - * - * @param cl The DeviceClass object - * @param s The Device name. - * @param d Device description. - */ -//========================================================= - TemplateDevServ(DeviceClass cl, String s, String d) throws DevFailed - { - super(cl,s,d); - init_device(); - } - -//========================================================= -/** - * Called when device is deleted. - */ -//========================================================= - public void delete_device() throws DevFailed - { - } - -//========================================================= -/** - * Initialize the device. - */ -//========================================================= - public void init_device() throws DevFailed - { - System.out.println("TemplateDevServ() create " + device_name); - - // Initialise variables to default values - //------------------------------------------- - set_state(DevState.ON); - } - -//========================================================= -/** - * Method always executed before command execution. - */ -//========================================================= - public void always_executed_hook() - { - get_logger().info("In always_executed_hook method()"); - } - - - -//========================================================= -/** - * main part for the device server class - */ -//========================================================= - public static void main(String[] argv) - { - try - { - Util tg = Util.init(argv,"TemplateDevServ"); - tg.server_init(); - - System.out.println("Ready to accept request"); - - tg.server_run(); - } - - catch (OutOfMemoryError ex) - { - System.err.println("Can't allocate memory !!!!"); - System.err.println("Exiting"); - } - catch (UserException ex) - { - Except.print_exception(ex); - - System.err.println("Received a CORBA user exception"); - System.err.println("Exiting"); - } - catch (SystemException ex) - { - Except.print_exception(ex); - - System.err.println("Received a CORBA system exception"); - System.err.println("Exiting"); - } - - System.exit(-1); - } -} - - -//-------------------------------------------------------------------------- -/* end of $Source$ */ diff --git a/assets/pogo/templates/java/DevServClass.java b/assets/pogo/templates/java/DevServClass.java deleted file mode 100644 index bd10ac53c..000000000 --- a/assets/pogo/templates/java/DevServClass.java +++ /dev/null @@ -1,158 +0,0 @@ -//+====================================================================== -// $Source$ -// -// Project: Tango Device Server -// -// Description: java source code for the TemplateDevServ class . -// This class is a singleton class and implements everything -// which exists only once for all the TemplateDevServ object -// It inherits from the DeviceClass class. -// -// $Author: pascal_verdier $ -// -// $Revision: 9951 $ -// -// $Log$ -// Revision 3.1 2004/09/06 09:29:17 pascal_verdier -// *** empty log message *** -// -// -// copyleft : European Synchrotron Radiation Facility -// BP 220, Grenoble 38043 -// FRANCE -// -//-====================================================================== -// -// This file is generated by POGO -// (Program Obviously used to Generate tango Object) -// -// (c) - Software Engineering Group - ESRF -//============================================================================= - -package TemplateDevServ; - -import java.util.*; -import org.omg.CORBA.*; -import fr.esrf.Tango.*; -import fr.esrf.TangoDs.*; -import fr.esrf.TangoApi.*; - -public class TemplateDevServClass extends DeviceClass implements TangoConst -{ - /** - * TemplateDevServClass class instance (it is a singleton). - */ - private static TemplateDevServClass _instance = null; - - /** - * Class properties array. - */ - private DbDatum[] cl_prop = null; - - //--------- Start of properties data members ---------- - - //--------- End of properties data members ---------- - - -//=================================================================== -// -// method : instance() -// -// description : static method to retrieve the TemplateDevServClass object -// once it has been initialised -// -//=================================================================== - public static TemplateDevServClass instance() - { - if (_instance == null) - { - System.err.println("TemplateDevServClass is not initialised !!!"); - System.err.println("Exiting"); - System.exit(-1); - } - return _instance; - } - -//=================================================================== -// -// method : Init() -// -// description : static method to create/retrieve the TemplateDevServClass -// object. This method is the only one which enables a -// user to create the object -// -// in : - class_name : The class name -// -//=================================================================== - public static TemplateDevServClass init(String class_name) throws DevFailed - { - if (_instance == null) - { - _instance = new TemplateDevServClass(class_name); - } - return _instance; - } - -//=================================================================== -// -// method : TemplateDevServClass() -// -// description : constructor for the TemplateDevServClass class -// -// argument : in : - name : The class name -// -//=================================================================== - protected TemplateDevServClass(String name) throws DevFailed - { - super(name); - - Util.out2.println("Entering TemplateDevServClass constructor"); - - Util.out2.println("Leaving TemplateDevServClass constructor"); - } - -//=================================================================== -// -// method : command_factory() -// -// description : Create the command object(s) and store them in the -// command list -//=================================================================== - public void command_factory() - { - Util.out2.println("Entering TemplateDevServClass command_factory"); - command_list.addElement(new DevReadTimeCmd(new String("DevReadTime"), - Tango_ARGIN_TYPE, Tango_ARGOUT_TYPE)); - } - - -//=================================================================== -// -// method : device_factory() -// -// description : Create the device object(s) and store them in the -// device list -// -// argument : in : String[] devlist : The device name list -// -//=================================================================== - public void device_factory(String[] devlist) throws DevFailed - { - - for (int i=0 ; i Received a DevFailed exception:',e - except Exception,e: - print '-------> An unforeseen exception occured....',e diff --git a/assets/pogo/templates/txt/Shortcuts.txt b/assets/pogo/templates/txt/Shortcuts.txt deleted file mode 100644 index 68f52c98b..000000000 --- a/assets/pogo/templates/txt/Shortcuts.txt +++ /dev/null @@ -1,42 +0,0 @@ -POGO Shortcuts Help: -------------------- - -Edit an item: - A double click on left button on an item, will start a dialog - to edit this item. - -Create a new item: - A double click on left button on a collection(commands, states, ..), - will start a dialog to create a new item of this collection. - - -You can use right click on an item to popup a menu to: - - Edit item. - - Edit source code. - - Clone item. - - Delete item. - - Move item up or down - -You can use right click on a collection to popup a menu to: - - Create a new item (attribute, property, command,....) - - Sort items in the collection. - - Edit comments for all items in the collection. - - -Edit source code (available only on unix like machine): - - On a command item, will fork an editor - and set the cursor to the command execution method. - - On an attribute item, will fork an editor - and set the cursor to the read attribute method. - - On a device property will fork an editor - and set the cursor to the get_device_property() method. - - On a class property will fork an editor - and set the cursor to the get_class_property() method. - - On a state will fork an editor on state mechine file - and set the cursor to the "how to" comments . - - - The default editor used is nedit. - You can change it with shell command: - export POGO_EDITOR=vi or setenv POGO_EDITOR vi - diff --git a/assets/pogo/templates/txt/WhatIsNew.txt b/assets/pogo/templates/txt/WhatIsNew.txt deleted file mode 100644 index 801973292..000000000 --- a/assets/pogo/templates/txt/WhatIsNew.txt +++ /dev/null @@ -1,11 +0,0 @@ -Since revision 5.0.0: - - The device server can be generated in python. - - In ServerClass.h: - class declarations can be added just after namespace. - - In ServerClass.cpp: - a user code part has been added at the end of attribute_factory method. - - - -see: http://www.esrf.fr/tango/tango_doc/tools_doc/pogo_doc/ - From 241a4bb7ec15b54f5257e9c2bc5d5da05fd1dc82 Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Tue, 9 Apr 2019 08:18:23 -0400 Subject: [PATCH 12/23] Update astor to release 7.2.5 --- assets/README | 2 +- distribution.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/README b/assets/README index 1221dfd9c..0a9f36d85 100644 --- a/assets/README +++ b/assets/README @@ -535,7 +535,7 @@ Changes between Tango distribution 9.2.5a and 9.3.3 - Updated ATK to Release 9.3.2 - Updated AtkPanel to Release 5.8 - Updated atktuning to Release 4.7 -- Updated Astor to Release 7.2.3 +- Updated Astor to Release 7.2.5 - Updated JSSHTerminal to Release 1.13 - Updated LogViewer to Release 2.0.5 - Updated Pogo to Release 9.6.18 diff --git a/distribution.properties b/distribution.properties index c318f68df..ad64621ca 100644 --- a/distribution.properties +++ b/distribution.properties @@ -17,7 +17,7 @@ jive-ver=7.21 atk-ver=9.3.2 atk-panel-ver=5.8 atk-tuning-ver=4.7 -astor-ver=7.2.3 +astor-ver=7.2.5 dbbench-ver=1.3 jssh-terminal-ver=1.13 log-viewer-ver=2.0.5 From 837267193f5c15251d6cd16fc8c0e1bc9f2b4343 Mon Sep 17 00:00:00 2001 From: Michal Liszcz Date: Tue, 23 Apr 2019 17:11:00 +0200 Subject: [PATCH 13/23] rename atkpanel to ATKPanel in java applications (fixes #25) (#27) --- assets/lib/java/astor.in | 2 +- assets/lib/java/devicetree.in | 2 +- assets/lib/java/jdraw.in | 2 +- assets/lib/java/jive.in | 2 +- assets/lib/java/synopticappli.in | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assets/lib/java/astor.in b/assets/lib/java/astor.in index 0494cca1e..906186867 100644 --- a/assets/lib/java/astor.in +++ b/assets/lib/java/astor.in @@ -55,7 +55,7 @@ JSSHTERM=$LIB_DIR/JSSHTerminal.jar DBBENCH=$LIB_DIR/DBBench.jar ATK_CLASS=$LIB_DIR/ATKCore.jar:$LIB_DIR/ATKWidget.jar -ATK_CLASS=$ATK_CLASS:$APP_DIR/atkpanel.jar:$APP_DIR/tool_panels.jar +ATK_CLASS=$ATK_CLASS:$APP_DIR/ATKPanel.jar:$APP_DIR/tool_panels.jar export ATK_CLASS CLASSPATH=$TANGO_CLASS:$ASTOR_CLASS:$JIVE_CLASS:$ATK_CLASS:$LOGVIEWER:$JSSHTERM:$DBBENCH:$LOG4J diff --git a/assets/lib/java/devicetree.in b/assets/lib/java/devicetree.in index eace03772..23f15092b 100644 --- a/assets/lib/java/devicetree.in +++ b/assets/lib/java/devicetree.in @@ -6,7 +6,7 @@ fi JAVALIB=@prefix@/share/java; JAVABIN=@prefix@/share/java; -CLASSPATH=$JAVALIB/JTango.jar:$JAVALIB/ATKWidget.jar:$JAVALIB/ATKCore.jar:$JAVABIN/Jive.jar:$JAVABIN/atkpanel.jar:$JAVABIN/DeviceTree.jar +CLASSPATH=$JAVALIB/JTango.jar:$JAVALIB/ATKWidget.jar:$JAVALIB/ATKCore.jar:$JAVABIN/Jive.jar:$JAVABIN/ATKPanel.jar:$JAVABIN/DeviceTree.jar export CLASSPATH echo Running Device Tree... diff --git a/assets/lib/java/jdraw.in b/assets/lib/java/jdraw.in index a1e81f924..c8a5b7fe1 100644 --- a/assets/lib/java/jdraw.in +++ b/assets/lib/java/jdraw.in @@ -12,7 +12,7 @@ APP_DIR=@prefix@/share/java; export APP_DIR TANGO=$LIB_DIR/JTango.jar -TANGOATK=$LIB_DIR/ATKCore.jar:$LIB_DIR/ATKWidget.jar:$LIB_DIR/atkpanel.jar +TANGOATK=$LIB_DIR/ATKCore.jar:$LIB_DIR/ATKWidget.jar:$LIB_DIR/ATKPanel.jar APPLI_PACKAGE=fr.esrf.tangoatk.widget.util.jdraw; export APPLI_PACKAGE APPLI_MAIN_CLASS=JDrawEditorFrame; export APPLI_MAIN_CLASS diff --git a/assets/lib/java/jive.in b/assets/lib/java/jive.in index 468aa7708..9db2ad3d4 100644 --- a/assets/lib/java/jive.in +++ b/assets/lib/java/jive.in @@ -11,7 +11,7 @@ fi JAVALIB=@prefix@/share/java; JAVABIN=@prefix@/share/java; -ATK=$JAVALIB/ATKCore.jar:$JAVALIB/ATKWidget.jar:$JAVABIN/atkpanel.jar +ATK=$JAVALIB/ATKCore.jar:$JAVALIB/ATKWidget.jar:$JAVABIN/ATKPanel.jar LOGVIEWER=$JAVALIB/LogViewer.jar ASTOR=$JAVALIB/Astor.jar:$JAVALIB/tools_panel.jar LOG4J=$JAVALIB/log4j.jar diff --git a/assets/lib/java/synopticappli.in b/assets/lib/java/synopticappli.in index d93252371..21dac27a7 100644 --- a/assets/lib/java/synopticappli.in +++ b/assets/lib/java/synopticappli.in @@ -18,7 +18,7 @@ APP_DIR=@prefix@/share/java; export APP_DIR TANGO=$LIB_DIR/JTango.jar TANGOATK=$LIB_DIR/ATKCore.jar:$LIB_DIR/ATKWidget.jar -ATKPANEL=$APP_DIR/atkpanel.jar +ATKPANEL=$APP_DIR/ATKPanel.jar APPLI_PACKAGE=fr.esrf.tangoatk.widget.jdraw; export APPLI_PACKAGE APPLI_MAIN_CLASS=SimpleSynopticAppli; export APPLI_MAIN_CLASS From 8002beab796986dcabafb52e1f7eb5c84577651b Mon Sep 17 00:00:00 2001 From: Michal Liszcz Date: Thu, 25 Apr 2019 13:57:52 +0200 Subject: [PATCH 14/23] Pass correct arguments to TangoRestServer (fixes #24) (#26) --- assets/lib/java/TangoRestServer.in | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/assets/lib/java/TangoRestServer.in b/assets/lib/java/TangoRestServer.in index bc3033dfe..07dc088c0 100644 --- a/assets/lib/java/TangoRestServer.in +++ b/assets/lib/java/TangoRestServer.in @@ -1,6 +1,12 @@ #!@SHELL@ + +if [ $# -lt 1 ]; then + echo "usage: $0 [args...]" + exit 1 +fi + if [ ! $TANGO_HOST ] && [ -f @TANGO_RC_FILE@ ]; then - . @TANGO_RC_FILE@ + . @TANGO_RC_FILE@ fi JAVALIB=@prefix@/share/java @@ -10,4 +16,17 @@ TANGO_REST_SERVER_JAR=$JAVALIB/RestServer.jar JAVA_OPTS="-Xmx2G -server -Xshare:off -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_HOME/TangoRestServer.hprof -XX:-OmitStackTraceInFastThrow" -@JAVA@ $JAVA_OPTS -Duser.dir=$LOG_HOME -DTANGO_HOST=$TANGO_HOST -DLOG_HOME=$LOG_HOME -DLOG_LEVEL=$LOG_LEVEL -jar $TANGO_REST_SERVER_JAR $* org.tango.TangoRestServer $* $@ \ No newline at end of file +INSTANCE="$1" +shift + +@JAVA@ \ + $JAVA_OPTS \ + -Duser.dir=$LOG_HOME \ + -DTANGO_HOST=$TANGO_HOST \ + -DLOG_HOME=$LOG_HOME \ + -DLOG_LEVEL=$LOG_LEVEL \ + -jar $TANGO_REST_SERVER_JAR \ + "$INSTANCE" \ + org.tango.TangoRestServer \ + "$INSTANCE" \ + "$@" From 8e04b617bfe3d9cb25334edb21ef5f99beb10269 Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Fri, 26 Apr 2019 10:24:08 +0200 Subject: [PATCH 15/23] Remove zmq.hpp (#23) (#28) --- assets/lib/cpp/client/Makefile.am | 3 +- assets/lib/cpp/client/zmq.hpp | 305 ------------------------------ 2 files changed, 1 insertion(+), 307 deletions(-) delete mode 100644 assets/lib/cpp/client/zmq.hpp diff --git a/assets/lib/cpp/client/Makefile.am b/assets/lib/cpp/client/Makefile.am index 8e447503a..6eee86b39 100644 --- a/assets/lib/cpp/client/Makefile.am +++ b/assets/lib/cpp/client/Makefile.am @@ -87,5 +87,4 @@ tangoinclude_HEADERS = accessproxy.h \ devapi_attr.tpp \ devapi_utils.tpp \ api_util.tpp \ - devapi_pipe.tpp \ - zmq.hpp + devapi_pipe.tpp diff --git a/assets/lib/cpp/client/zmq.hpp b/assets/lib/cpp/client/zmq.hpp deleted file mode 100644 index 450802de0..000000000 --- a/assets/lib/cpp/client/zmq.hpp +++ /dev/null @@ -1,305 +0,0 @@ -/* - Copyright (c) 2007-2011 iMatix Corporation - Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file - - This file is part of 0MQ. - - 0MQ 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 3 of the License, or - (at your option) any later version. - - 0MQ 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 program. If not, see . -*/ - -#ifndef __ZMQ_HPP_INCLUDED__ -#define __ZMQ_HPP_INCLUDED__ - -#include - -#include -#include -#include - -namespace zmq -{ - - typedef zmq_free_fn free_fn; - typedef zmq_pollitem_t pollitem_t; - - class error_t : public std::exception - { - public: - - error_t () : errnum (zmq_errno ()) {} - - virtual const char *what () const throw () - { - return zmq_strerror (errnum); - } - - int num () const - { - return errnum; - } - - private: - - int errnum; - }; - - inline int poll (zmq_pollitem_t *items_, int nitems_, long timeout_ = -1) - { - int rc = zmq_poll (items_, nitems_, timeout_); - if (rc < 0) - throw error_t (); - return rc; - } - - inline void version (int *major_, int *minor_, int *patch_) - { - zmq_version (major_, minor_, patch_); - } - - class message_t - { - friend class socket_t; - - public: - - inline message_t () - { - int rc = zmq_msg_init (&msg); - if (rc != 0) - throw error_t (); - } - - inline message_t (size_t size_) - { - int rc = zmq_msg_init_size (&msg, size_); - if (rc != 0) - throw error_t (); - } - - inline message_t (void *data_, size_t size_, free_fn *ffn_, - void *hint_ = NULL) - { - int rc = zmq_msg_init_data (&msg, data_, size_, ffn_, hint_); - if (rc != 0) - throw error_t (); - } - - inline ~message_t () - { - int rc = zmq_msg_close (&msg); - assert (rc == 0); - } - - inline void rebuild () - { - int rc = zmq_msg_close (&msg); - if (rc != 0) - throw error_t (); - rc = zmq_msg_init (&msg); - if (rc != 0) - throw error_t (); - } - - inline void rebuild (size_t size_) - { - int rc = zmq_msg_close (&msg); - if (rc != 0) - throw error_t (); - rc = zmq_msg_init_size (&msg, size_); - if (rc != 0) - throw error_t (); - } - - inline void rebuild (void *data_, size_t size_, free_fn *ffn_, - void *hint_ = NULL) - { - int rc = zmq_msg_close (&msg); - if (rc != 0) - throw error_t (); - rc = zmq_msg_init_data (&msg, data_, size_, ffn_, hint_); - if (rc != 0) - throw error_t (); - } - - inline void move (message_t *msg_) - { - int rc = zmq_msg_move (&msg, &(msg_->msg)); - if (rc != 0) - throw error_t (); - } - - inline void copy (message_t *msg_) - { - int rc = zmq_msg_copy (&msg, &(msg_->msg)); - if (rc != 0) - throw error_t (); - } - - inline void *data () - { - return zmq_msg_data (&msg); - } - - inline size_t size () - { - return zmq_msg_size (&msg); - } - - private: - - // The underlying message - zmq_msg_t msg; - - // Disable implicit message copying, so that users won't use shared - // messages (less efficient) without being aware of the fact. - message_t (const message_t&); - void operator = (const message_t&); - }; - - class context_t - { - friend class socket_t; - - public: - - inline context_t (int io_threads_) - { - ptr = zmq_init (io_threads_); - if (ptr == NULL) - throw error_t (); - } - - inline ~context_t () - { - int rc = zmq_term (ptr); - assert (rc == 0); - } - - // Be careful with this, it's probably only useful for - // using the C api together with an existing C++ api. - // Normally you should never need to use this. - inline operator void* () - { - return ptr; - } - - private: - - void *ptr; - - context_t (const context_t&); - void operator = (const context_t&); - }; - - class socket_t - { - public: - - inline socket_t (context_t &context_, int type_) - { - ptr = zmq_socket (context_.ptr, type_); - if (ptr == NULL) - throw error_t (); - } - - inline ~socket_t () - { - close(); - } - - inline operator void* () - { - return ptr; - } - - inline void close() - { - if(ptr == NULL) - // already closed - return ; - int rc = zmq_close (ptr); - if (rc != 0) - throw error_t (); - ptr = 0 ; - } - - inline void setsockopt (int option_, const void *optval_, - size_t optvallen_) - { - int rc = zmq_setsockopt (ptr, option_, optval_, optvallen_); - if (rc != 0) - throw error_t (); - } - - inline void getsockopt (int option_, void *optval_, - size_t *optvallen_) - { - int rc = zmq_getsockopt (ptr, option_, optval_, optvallen_); - if (rc != 0) - throw error_t (); - } - - inline void bind (const char *addr_) - { - int rc = zmq_bind (ptr, addr_); - if (rc != 0) - throw error_t (); - } - - inline void connect (const char *addr_) - { - int rc = zmq_connect (ptr, addr_); - if (rc != 0) - throw error_t (); - } - - inline void disconnect (const char *addr_) - { - int rc = zmq_disconnect (ptr, addr_); - if (rc != 0) - throw error_t (); - } - - inline bool send (message_t &msg_, int flags_ = 0) - { - int nbytes = zmq_sendmsg (ptr, &(msg_.msg), flags_); - if (nbytes >= 0) - return true; - if (zmq_errno () == EAGAIN) - return false; - throw error_t (); - } - - inline bool recv (message_t *msg_, int flags_ = 0) - { - int nbytes = zmq_recvmsg (ptr, &(msg_->msg), flags_); - if (nbytes >= 0) - return true; - if (zmq_errno () == EAGAIN) - return false; - throw error_t (); - } - - private: - - void *ptr; - - socket_t (const socket_t&); - void operator = (const socket_t&); - }; - -} - -#endif - From 2d85c1b35a36a812363de01e5953fc26e5cd12f2 Mon Sep 17 00:00:00 2001 From: Ingvord Date: Fri, 3 May 2019 11:18:27 +0200 Subject: [PATCH 16/23] Upgrade rest-server to 1.11 --- distribution.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution.properties b/distribution.properties index ad64621ca..55467002e 100644 --- a/distribution.properties +++ b/distribution.properties @@ -22,7 +22,7 @@ dbbench-ver=1.3 jssh-terminal-ver=1.13 log-viewer-ver=2.0.5 pogo-ver=9.6.18 -rest-server-ver=1.9 +rest-server-ver=1.11 #tool_panels= #cppserver TangoTest=TangoTest-Release-2.1 From 834c5b64e6184ea3b0cd0fd6e380661175b82f28 Mon Sep 17 00:00:00 2001 From: Michal Liszcz Date: Thu, 9 May 2019 09:47:09 +0200 Subject: [PATCH 17/23] Add logback configuration file (#21) (#29) --- assets/lib/java/Makefile.am | 8 +++++- assets/lib/java/TangoRestServer.in | 2 ++ assets/lib/java/TangoVers.in | 5 +++- assets/lib/java/astor.in | 10 +++++-- assets/lib/java/atkmoni.in | 7 ++++- assets/lib/java/atkpanel.in | 8 +++++- assets/lib/java/atktuning.in | 7 ++++- assets/lib/java/cvstag.in | 7 ++++- assets/lib/java/devicetree.in | 7 ++++- assets/lib/java/jdraw.in | 7 +++-- assets/lib/java/jive.in | 7 ++++- assets/lib/java/logback-server.xml | 45 ++++++++++++++++++++++++++++++ assets/lib/java/logback.xml | 19 +++++++++++++ assets/lib/java/logviewer.in | 8 +++++- assets/lib/java/pogo.in | 6 +++- assets/lib/java/synopticappli.in | 10 +++++-- assets/lib/java/tg_devtest.in | 8 +++++- 17 files changed, 154 insertions(+), 17 deletions(-) create mode 100644 assets/lib/java/logback-server.xml create mode 100644 assets/lib/java/logback.xml diff --git a/assets/lib/java/Makefile.am b/assets/lib/java/Makefile.am index ab2d09753..cbfaf9513 100644 --- a/assets/lib/java/Makefile.am +++ b/assets/lib/java/Makefile.am @@ -4,6 +4,7 @@ # the link instead of keeping them as links javadir = $(datadir)/java + dist_java_DATA = \ @ASTOR_JAR@ \ @ATK_CORE_JAR@ \ @@ -18,6 +19,12 @@ dist_java_DATA = \ @JSSH_TERMINAL_JAR@ \ @REST_SERVER_JAR@ +javaresourcesdir = $(datadir)/tango + +dist_javaresources_DATA = \ + logback.xml \ + logback-server.xml + if TANGO_JAVA_ENABLED bin_SCRIPTS = \ astor \ @@ -53,7 +60,6 @@ $(bin_SCRIPTS): Makefile chmod a-w $@.tmp mv $@.tmp $@ - astor: $(srcdir)/astor.in jive: $(srcdir)/jive.in pogo: $(srcdir)/pogo.in diff --git a/assets/lib/java/TangoRestServer.in b/assets/lib/java/TangoRestServer.in index 07dc088c0..c644e1c1c 100644 --- a/assets/lib/java/TangoRestServer.in +++ b/assets/lib/java/TangoRestServer.in @@ -13,6 +13,7 @@ JAVALIB=@prefix@/share/java LOG_HOME=/var/tmp/TangoRestServer LOG_LEVEL=ERROR TANGO_REST_SERVER_JAR=$JAVALIB/RestServer.jar +LOGBACK=${TANGO_LOGBACK_SERVER:-@prefix@/share/tango/logback-server.xml} JAVA_OPTS="-Xmx2G -server -Xshare:off -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_HOME/TangoRestServer.hprof -XX:-OmitStackTraceInFastThrow" @@ -25,6 +26,7 @@ shift -DTANGO_HOST=$TANGO_HOST \ -DLOG_HOME=$LOG_HOME \ -DLOG_LEVEL=$LOG_LEVEL \ + -Dlogback.configurationFile="$LOGBACK" \ -jar $TANGO_REST_SERVER_JAR \ "$INSTANCE" \ org.tango.TangoRestServer \ diff --git a/assets/lib/java/TangoVers.in b/assets/lib/java/TangoVers.in index 929e8e3d6..38d890974 100644 --- a/assets/lib/java/TangoVers.in +++ b/assets/lib/java/TangoVers.in @@ -5,7 +5,10 @@ LIB_DIR=@prefix@/share/java; export LIB_DIR CLASSPATH=$LIB_DIR/JTango.jar:$LIB_DIR/Astor.jar export CLASSPATH +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} # # Start the java virtual machine # -@JAVA@ admin.astor.tango_release.JTangoVersion +@JAVA@ \ + -Dlogback.configurationFile="$LOGBACK" \ + admin.astor.tango_release.JTangoVersion diff --git a/assets/lib/java/astor.in b/assets/lib/java/astor.in index 906186867..7cdd054b9 100644 --- a/assets/lib/java/astor.in +++ b/assets/lib/java/astor.in @@ -61,10 +61,16 @@ export ATK_CLASS CLASSPATH=$TANGO_CLASS:$ASTOR_CLASS:$JIVE_CLASS:$ATK_CLASS:$LOGVIEWER:$JSSHTERM:$DBBENCH:$LOG4J export CLASSPATH +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} + #--------------------------------------------------------- # Start the Astor process #--------------------------------------------------------- # -@JAVA@ -mx128m -DTANGO_HOST=$TANGO_HOST admin.astor.Astor $* - +@JAVA@ \ + -mx128m \ + -DTANGO_HOST=$TANGO_HOST \ + -Dlogback.configurationFile="$LOGBACK" \ + admin.astor.Astor \ + "$@" diff --git a/assets/lib/java/atkmoni.in b/assets/lib/java/atkmoni.in index c3a840bc3..c3bb7595d 100644 --- a/assets/lib/java/atkmoni.in +++ b/assets/lib/java/atkmoni.in @@ -20,10 +20,15 @@ APPLI_MAIN_CLASS=Trend; export APPLI_MAIN_CLASS CLASSPATH=$TANGO:$TACO:$TANGOATK export CLASSPATH echo "CLASSPATH=$CLASSPATH" +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} #--------------------------------------------------------- # Start the atkmoni process #--------------------------------------------------------- # -@JAVA@ -DTANGO_HOST=$TANGO_HOST $APPLI_PACKAGE.$APPLI_MAIN_CLASS $* +@JAVA@ \ + -DTANGO_HOST=$TANGO_HOST \ + -Dlogback.configurationFile="$LOGBACK" \ + $APPLI_PACKAGE.$APPLI_MAIN_CLASS \ + "$@" diff --git a/assets/lib/java/atkpanel.in b/assets/lib/java/atkpanel.in index a7d04f85c..7f12b2f55 100644 --- a/assets/lib/java/atkpanel.in +++ b/assets/lib/java/atkpanel.in @@ -18,9 +18,15 @@ ATKPANEL=$LIB_DIR/ATKPanel.jar CLASSPATH=$ATKPANEL:$TANGOATK:$TANGO export CLASSPATH +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} #--------------------------------------------------------- # Start the atkpanel process #--------------------------------------------------------- -@JAVA@ -mx128m -DTANGO_HOST=$TANGO_HOST atkpanel.MainPanel $* +@JAVA@ \ + -mx128m \ + -DTANGO_HOST=$TANGO_HOST \ + -Dlogback.configurationFile="$LOGBACK" \ + atkpanel.MainPanel \ + "$@" diff --git a/assets/lib/java/atktuning.in b/assets/lib/java/atktuning.in index c02afa0c6..5e1954a80 100644 --- a/assets/lib/java/atktuning.in +++ b/assets/lib/java/atktuning.in @@ -18,9 +18,14 @@ ATKPANEL=$LIB_DIR/ATKTuning.jar CLASSPATH=$ATKPANEL:$TANGOATK:$TANGO export CLASSPATH +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} #--------------------------------------------------------- # Start the atktuning process #--------------------------------------------------------- -@JAVA@ -DTANGO_HOST=$TANGO_HOST atktuning.MainPanel $* +@JAVA@ \ + -DTANGO_HOST=$TANGO_HOST \ + -Dlogback.configurationFile="$LOGBACK" \ + atktuning.MainPanel \ + "$@" diff --git a/assets/lib/java/cvstag.in b/assets/lib/java/cvstag.in index 9a295b964..17ba95702 100644 --- a/assets/lib/java/cvstag.in +++ b/assets/lib/java/cvstag.in @@ -16,8 +16,13 @@ POGO_CLASS=$APP_DIR/Pogo.jar; export POGO_CLASS CLASSPATH=$POGO_CLASS:$TANGO_CLASS; export CLASSPATH +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} + #--------------------------------------------------------- # Execute java class #--------------------------------------------------------- -@JAVA@ pogo.make_util.TagModule $@ +@JAVA@ \ + -Dlogback.configurationFile="$LOGBACK" \ + pogo.make_util.TagModule \ + "$@" diff --git a/assets/lib/java/devicetree.in b/assets/lib/java/devicetree.in index 23f15092b..40c7c8dfe 100644 --- a/assets/lib/java/devicetree.in +++ b/assets/lib/java/devicetree.in @@ -8,6 +8,11 @@ JAVALIB=@prefix@/share/java; JAVABIN=@prefix@/share/java; CLASSPATH=$JAVALIB/JTango.jar:$JAVALIB/ATKWidget.jar:$JAVALIB/ATKCore.jar:$JAVABIN/Jive.jar:$JAVABIN/ATKPanel.jar:$JAVABIN/DeviceTree.jar export CLASSPATH +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} echo Running Device Tree... -@JAVA@ -DTANGO_HOST=$TANGO_HOST explorer.Main $@ +@JAVA@ \ + -DTANGO_HOST=$TANGO_HOST \ + -Dlogback.configurationFile="$LOGBACK" \ + explorer.Main \ + "$@" diff --git a/assets/lib/java/jdraw.in b/assets/lib/java/jdraw.in index c8a5b7fe1..d37a30d32 100644 --- a/assets/lib/java/jdraw.in +++ b/assets/lib/java/jdraw.in @@ -20,6 +20,7 @@ APPLI_MAIN_CLASS=JDrawEditorFrame; export APPLI_MAIN_CLASS CLASSPATH=$TANGOATK:$TANGO export CLASSPATH echo "CLASSPATH=$CLASSPATH" +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} echo Running Jdraw ... @@ -28,5 +29,7 @@ echo Running Jdraw ... #--------------------------------------------------------- # -@JAVA@ $APPLI_PACKAGE.$APPLI_MAIN_CLASS $@ - +@JAVA@ \ + -Dlogback.configurationFile="$LOGBACK" \ + $APPLI_PACKAGE.$APPLI_MAIN_CLASS \ + "$@" diff --git a/assets/lib/java/jive.in b/assets/lib/java/jive.in index 9db2ad3d4..6044a6767 100644 --- a/assets/lib/java/jive.in +++ b/assets/lib/java/jive.in @@ -15,8 +15,13 @@ ATK=$JAVALIB/ATKCore.jar:$JAVALIB/ATKWidget.jar:$JAVABIN/ATKPanel.jar LOGVIEWER=$JAVALIB/LogViewer.jar ASTOR=$JAVALIB/Astor.jar:$JAVALIB/tools_panel.jar LOG4J=$JAVALIB/log4j.jar +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} CLASSPATH=$JAVALIB/JTango.jar:$JAVABIN/Jive.jar:$ATK:$LOGVIEWER:$LOG4J:$ASTOR:. export CLASSPATH -@JAVA@ -mx128m -DTANGO_HOST=$TANGO_HOST $applet_name $@ +@JAVA@ \ + -mx128m \ + -DTANGO_HOST=$TANGO_HOST \ + -Dlogback.configurationFile="$LOGBACK" \ + $applet_name $@ diff --git a/assets/lib/java/logback-server.xml b/assets/lib/java/logback-server.xml new file mode 100644 index 000000000..b084bf885 --- /dev/null +++ b/assets/lib/java/logback-server.xml @@ -0,0 +1,45 @@ + + + + + + + + + ${layoutPattern} + + + + + + + + + + + + + ${logPath}/${serverName}.log + true + + ${logPath}/${serverName}-%i.log + 1 + 3 + + + 10MB + + + + ${layoutPattern} + + + + + + + + + + + diff --git a/assets/lib/java/logback.xml b/assets/lib/java/logback.xml new file mode 100644 index 000000000..5dd2c17a2 --- /dev/null +++ b/assets/lib/java/logback.xml @@ -0,0 +1,19 @@ + + + + + + + + + ${layoutPattern} + + + + + + + + + + diff --git a/assets/lib/java/logviewer.in b/assets/lib/java/logviewer.in index 148cd1df7..05451abe5 100644 --- a/assets/lib/java/logviewer.in +++ b/assets/lib/java/logviewer.in @@ -18,4 +18,10 @@ ATKJAR=$ATKBIN/ATKCore.jar:$ATKBIN/ATKWidget.jar:$ATKBIN/log4j.jar CLASSPATH=$JAVALIB/JTango.jar:$TLVBIN/LogViewer.jar:$ATKJAR:. export CLASSPATH -@JAVA@ -DTANGO_HOST=$TANGO_HOST $applet_name $* +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} + +@JAVA@ \ + -DTANGO_HOST=$TANGO_HOST \ + -Dlogback.configurationFile="$LOGBACK" \ + $applet_name \ + "$@" diff --git a/assets/lib/java/pogo.in b/assets/lib/java/pogo.in index f90b5bfb3..e9011b3e6 100644 --- a/assets/lib/java/pogo.in +++ b/assets/lib/java/pogo.in @@ -59,6 +59,8 @@ POGO_CLASS=$APP_DIR/Pogo.jar; export POGO_CLASS CLASSPATH=$PREF_DIR:$POGO_CLASS; export CLASSPATH +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} + #--------------------------------------------------------- # Start the Pogo process #--------------------------------------------------------- @@ -70,4 +72,6 @@ echo "Starting Pogo Appli under $MY_OS. " -DIN_LANG=$POGO_LANG \ -DEDITOR=$POGO_EDITOR \ -Dfile.encoding=ISO-8859-1 \ - org.tango.pogo.pogo_gui.Pogo $* + -Dlogback.configurationFile="$LOGBACK" \ + org.tango.pogo.pogo_gui.Pogo \ + "$@" diff --git a/assets/lib/java/synopticappli.in b/assets/lib/java/synopticappli.in index 21dac27a7..328f0503b 100644 --- a/assets/lib/java/synopticappli.in +++ b/assets/lib/java/synopticappli.in @@ -27,10 +27,16 @@ CLASSPATH=$TACO:$TANGO:$TANGOATK:$ATKPANEL export CLASSPATH echo "CLASSPATH=$CLASSPATH" +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} + #--------------------------------------------------------- # Start the synoptic appli process #--------------------------------------------------------- # -@JAVA@ -mx128m -DTANGO_HOST=$TANGO_HOST $APPLI_PACKAGE.$APPLI_MAIN_CLASS $* - +@JAVA@ \ + -mx128m \ + -DTANGO_HOST=$TANGO_HOST \ + -Dlogback.configurationFile="$LOGBACK" \ + $APPLI_PACKAGE.$APPLI_MAIN_CLASS \ + "$@" diff --git a/assets/lib/java/tg_devtest.in b/assets/lib/java/tg_devtest.in index ccbbee307..9344a4f01 100644 --- a/assets/lib/java/tg_devtest.in +++ b/assets/lib/java/tg_devtest.in @@ -11,6 +11,12 @@ TANGOATK=$JAVALIB/ATKCore.jar:$JAVALIB/ATKWidget.jar CLASSPATH=$JAVALIB/JTango.jar:$JAVALIB/Jive.jar:$TANGOATK export CLASSPATH +LOGBACK=${TANGO_LOGBACK:-@prefix@/share/tango/logback.xml} + echo Starting... -@JAVA@ -DTANGO_HOST=$TANGO_HOST jive.ExecDev $1 +@JAVA@ \ + -DTANGO_HOST=$TANGO_HOST \ + -Dlogback.configurationFile="$LOGBACK" \ + jive.ExecDev \ + "$1" From 026ef43a321eff02c1cf896476d7f32f96bee8fc Mon Sep 17 00:00:00 2001 From: Michal Liszcz Date: Tue, 14 May 2019 17:53:13 +0200 Subject: [PATCH 18/23] Merge liblog4tango into libtango (change to convenience lib) (#30) (#31) Change log4tango into a libtool convenience library. liblog4tango.so is no longer generated, but log4tango objects are still compiled and are now linked into libtango.so --- assets/lib/cpp/log4tango/src/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/lib/cpp/log4tango/src/Makefile.am b/assets/lib/cpp/log4tango/src/Makefile.am index d4bf8eda4..e2d6457e4 100644 --- a/assets/lib/cpp/log4tango/src/Makefile.am +++ b/assets/lib/cpp/log4tango/src/Makefile.am @@ -1,4 +1,4 @@ -lib_LTLIBRARIES = liblog4tango.la +noinst_LTLIBRARIES = liblog4tango.la INCLUDES = -I../include -I$(top_srcdir)/include From f409a5abc8777cd747ff0301d020706db5628a3c Mon Sep 17 00:00:00 2001 From: Ingvord Date: Tue, 14 May 2019 21:10:02 +0300 Subject: [PATCH 19/23] Update README --- assets/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/README b/assets/README index 0a9f36d85..6c08256c6 100644 --- a/assets/README +++ b/assets/README @@ -539,7 +539,7 @@ Changes between Tango distribution 9.2.5a and 9.3.3 - Updated JSSHTerminal to Release 1.13 - Updated LogViewer to Release 2.0.5 - Updated Pogo to Release 9.6.18 -- Added rest-server Release 1.9 +- Added rest-server Release 1.11 - Updated TangoTest to Release 2.1 - Updated TangoDatabase to Release 5.9 - Updated TangoAccessControl to Release 2.14 From f503ccb07229adfe76dbbc5916422ced88b0febf Mon Sep 17 00:00:00 2001 From: Michal Liszcz Date: Fri, 24 May 2019 10:38:56 +0200 Subject: [PATCH 20/23] Remove my.cnf config file (tango-controls/TangoDatabase#16) (#35) --- assets/README | 10 +++++++++- assets/configure.ac | 1 - assets/cppserver/database/Makefile.am | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/assets/README b/assets/README index 6c08256c6..7948afc0d 100644 --- a/assets/README +++ b/assets/README @@ -62,7 +62,7 @@ This source code release contains : (1) Tango C++ library source files and java library and application jar files -(2) The Tango database device server source files and the database configuration files (.my.cnf). +(2) The Tango database device server source files. (3) The Jive application. @@ -265,6 +265,14 @@ allow you to select which database user configure will use. You can also use the user and password entries of the my.cnf file to set-up your connection to the database. +Note: It is recommended to setup the database to use latin1 character set. +Especially, any other character set with characters longer than 3 bytes +will not work. Character set can be specified in my.cnf configuration file: + +[mysqld] +character_set_server=latin1 +collation_server=latin1_swedish_ci + To disable any access to the database use the --disable-dbcreate option. Database server, mysql and libz diff --git a/assets/configure.ac b/assets/configure.ac index cb94f07c1..8bb1ccf89 100644 --- a/assets/configure.ac +++ b/assets/configure.ac @@ -481,7 +481,6 @@ AC_OUTPUT(Makefile cppserver/database/Makefile cppserver/database/create_db.sql cppserver/database/create_db.sh - cppserver/database/my.cnf cppserver/database/stored_proc.sql cppserver/database/create_db_tables.sql cppserver/database/update_db.sh diff --git a/assets/cppserver/database/Makefile.am b/assets/cppserver/database/Makefile.am index d9ac3a679..279fd386f 100644 --- a/assets/cppserver/database/Makefile.am +++ b/assets/cppserver/database/Makefile.am @@ -31,7 +31,7 @@ DataBaseds_SOURCES=ClassFactory.cpp \ if TANGO_DB_CREATE_ENABLED dbdir=${pkgdatadir}/db -db_DATA=create_db.sh create_db.sql my.cnf create_db_tables.sql stored_proc.sql update_db.sh update_db.sql update_db8.sql update_db7.sql rem_history.sql +db_DATA=create_db.sh create_db.sql create_db_tables.sql stored_proc.sql update_db.sh update_db.sql update_db8.sql update_db7.sql rem_history.sql ## This is to make sure that the create-db script is run on each make all. ## See create_db.sh for more information. @@ -40,7 +40,7 @@ all-local: .force endif -EXTRA_DIST = create_db.sh.in create_db.sql.in my.cnf.in create_db_tables.sql.in stored_proc.sql.in \ +EXTRA_DIST = create_db.sh.in create_db.sql.in create_db_tables.sql.in stored_proc.sql.in \ update_db.sh.in update_db8.sql.in update_db7.sql.in update_db.sql.in rem_history.sql.in .force: From 9d9883f61ef1200f45385e837268210200e14eae Mon Sep 17 00:00:00 2001 From: Michal Liszcz Date: Fri, 24 May 2019 18:29:29 +0200 Subject: [PATCH 21/23] Remove log4tango from tango.pc & makefiles; add dummy liblog4tango.so (#33) --- assets/cppserver/database/Makefile.am | 4 ++-- assets/cppserver/starter/Makefile.am | 1 - assets/cppserver/tangoaccesscontrol/Makefile.am | 1 - assets/cppserver/tangotest/Makefile.am | 1 - assets/lib/cpp/client/Makefile.am | 2 +- assets/lib/cpp/log4tango/src/Makefile.am | 8 ++++++-- assets/lib/cpp/tango.pc.in | 2 +- assets/utils/tango_admin/Makefile.am | 1 - build.xml | 7 +++++++ 9 files changed, 17 insertions(+), 10 deletions(-) diff --git a/assets/cppserver/database/Makefile.am b/assets/cppserver/database/Makefile.am index 279fd386f..8a49347e1 100644 --- a/assets/cppserver/database/Makefile.am +++ b/assets/cppserver/database/Makefile.am @@ -9,8 +9,8 @@ AM_CPPFLAGS = $(ORB_INCLUDE_PREFIX) $(LIBZMQ_CFLAGS) \ AM_CXXFLAGS= -Wall -D_FORTIFY_SOURCE=2 -O1 -fPIE -LDADD = -L$(top_builddir)/lib/cpp/client -ltango -L$(top_builddir)/lib/cpp/log4tango/src \ - -llog4tango $(DB_LDFLAGS) \ +LDADD = -L$(top_builddir)/lib/cpp/client -ltango \ + $(DB_LDFLAGS) \ $(DB_LDLIBS) $(ZLIB_LDFLAGS) $(ZLIB_LIBS) $(LIBZMQ_LIBS) AM_LDFLAGS = -Wl,-z,now -pie diff --git a/assets/cppserver/starter/Makefile.am b/assets/cppserver/starter/Makefile.am index 307df76cd..e497cc630 100644 --- a/assets/cppserver/starter/Makefile.am +++ b/assets/cppserver/starter/Makefile.am @@ -7,7 +7,6 @@ AM_CPPFLAGS = -I$(top_srcdir)/lib/cpp/server \ -I$(top_builddir)/lib/cpp/log4tango/include $(LIBZMQ_CFLAGS) LDADD = -L$(top_builddir)/lib/cpp/client -ltango \ - -L$(top_builddir)/lib/cpp/log4tango/src -llog4tango \ $(LIBZMQ_LIBS) bin_PROGRAMS=Starter diff --git a/assets/cppserver/tangoaccesscontrol/Makefile.am b/assets/cppserver/tangoaccesscontrol/Makefile.am index b69ddb544..46a8cbb40 100644 --- a/assets/cppserver/tangoaccesscontrol/Makefile.am +++ b/assets/cppserver/tangoaccesscontrol/Makefile.am @@ -21,6 +21,5 @@ TangoAccessControl_SOURCES=ClassFactory.cpp \ TangoAccessControl_LDADD = -L$(top_builddir)/lib/cpp/client -ltango \ - -L$(top_builddir)/lib/cpp/log4tango/src -llog4tango \ $(DB_LDFLAGS) $(DB_LDLIBS) $(LIBZMQ_LIBS) \ ../AbstractClass/AccessControl/libaccesscontrol.la diff --git a/assets/cppserver/tangotest/Makefile.am b/assets/cppserver/tangotest/Makefile.am index dec614dee..c75ff73c4 100644 --- a/assets/cppserver/tangotest/Makefile.am +++ b/assets/cppserver/tangotest/Makefile.am @@ -6,7 +6,6 @@ AM_CPPFLAGS = -I$(top_srcdir)/lib/cpp/client \ -I$(top_builddir)/lib/cpp/log4tango/include $(LIBZMQ_CFLAGS) LDADD = -L$(top_builddir)/lib/cpp/client -ltango \ - -L$(top_builddir)/lib/cpp/log4tango/src -llog4tango \ $(LIBZMQ_LIBS) bin_PROGRAMS=TangoTest diff --git a/assets/lib/cpp/client/Makefile.am b/assets/lib/cpp/client/Makefile.am index 6eee86b39..71fa848ea 100644 --- a/assets/lib/cpp/client/Makefile.am +++ b/assets/lib/cpp/client/Makefile.am @@ -15,7 +15,7 @@ libtango_la_LIBADD = ../server/libserver.la \ ../server/idl/libidl.la \ ../server/jpeg/libjpeg.la \ ../server/jpeg_mmx/libjpeg_mmx.la \ - ../log4tango/src/liblog4tango.la \ + ../log4tango/src/liblog4tangointernal.la \ $(LIBZMQ_LIBS) # We need to set the -version-info for libtool so that libtool will diff --git a/assets/lib/cpp/log4tango/src/Makefile.am b/assets/lib/cpp/log4tango/src/Makefile.am index e2d6457e4..4de916289 100644 --- a/assets/lib/cpp/log4tango/src/Makefile.am +++ b/assets/lib/cpp/log4tango/src/Makefile.am @@ -1,10 +1,10 @@ -noinst_LTLIBRARIES = liblog4tango.la +noinst_LTLIBRARIES = liblog4tangointernal.la INCLUDES = -I../include -I$(top_srcdir)/include noinst_HEADERS = snprintf.c -liblog4tango_la_SOURCES = \ +liblog4tangointernal_la_SOURCES = \ Appender.cpp \ AppenderAttachable.cpp \ LayoutAppender.cpp \ @@ -31,4 +31,8 @@ liblog4tango_la_SOURCES = \ PortabilityImpl.hh \ PortabilityImpl.cpp +liblog4tangointernal_la_LDFLAGS = -version-info @LT_VERSION@ + +lib_LTLIBRARIES = liblog4tango.la liblog4tango_la_LDFLAGS = -version-info @LT_VERSION@ +liblog4tango_la_SOURCES = diff --git a/assets/lib/cpp/tango.pc.in b/assets/lib/cpp/tango.pc.in index 8d5b61c7f..820b59117 100644 --- a/assets/lib/cpp/tango.pc.in +++ b/assets/lib/cpp/tango.pc.in @@ -5,7 +5,7 @@ includedir=@includedir@ Name: tango Description: The tango constrol system library -Requires: omniDynamic4 >= 4.1.6, omniCOS4, log4tango, libzmq +Requires: omniDynamic4 >= 4.1.6, omniCOS4, libzmq Version: @VERSION@ Libs: -L${libdir} -ltango Cflags: @CPP_ELEVEN@ -I${includedir}/tango diff --git a/assets/utils/tango_admin/Makefile.am b/assets/utils/tango_admin/Makefile.am index 00ddb6774..5193caeae 100644 --- a/assets/utils/tango_admin/Makefile.am +++ b/assets/utils/tango_admin/Makefile.am @@ -6,7 +6,6 @@ AM_CPPFLAGS = -I$(top_srcdir)/lib/cpp/client \ -I$(top_builddir)/lib/cpp/log4tango/include $(LIBZMQ_CFLAGS) LDADD = -L$(top_builddir)/lib/cpp/client -ltango \ - -L$(top_builddir)/lib/cpp/log4tango/src -llog4tango \ $(LIBZMQ_LIBS) bin_PROGRAMS=tango_admin diff --git a/build.xml b/build.xml index dbbd087d9..0651aae95 100644 --- a/build.xml +++ b/build.xml @@ -76,6 +76,13 @@ + + + + + + + From 07ac6142143f4aa7302631123adb68f4b9ae3789 Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Wed, 5 Jun 2019 01:40:14 +0200 Subject: [PATCH 22/23] Add CMake opt files (#34) (#36) * Add CMake opt files (#34) Add cmake_common_target.opt and cmake_tango.opt to the distribution in order to be able to generate CMakeLists.txt files for Device Servers from Pogo. * remove -std option from cmake_tango.opt * Compile with -std=c++0x when using g++ < 6.1 --- assets/pogo/preferences/Makefile.am | 10 ++-- .../pogo/preferences/cmake_common_target.opt | 14 +++++ assets/pogo/preferences/cmake_tango.opt.in | 54 +++++++++++++++++++ assets/pogo/preferences/tango.opt.in | 13 +++-- 4 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 assets/pogo/preferences/cmake_common_target.opt create mode 100644 assets/pogo/preferences/cmake_tango.opt.in diff --git a/assets/pogo/preferences/Makefile.am b/assets/pogo/preferences/Makefile.am index 60655f546..1932ecb74 100644 --- a/assets/pogo/preferences/Makefile.am +++ b/assets/pogo/preferences/Makefile.am @@ -7,10 +7,12 @@ edit = sed \ preferencesdir = $(datadir)/pogo/preferences -dist_preferences_DATA = common_target.opt +dist_preferences_DATA = common_target.opt \ + cmake_common_target.opt nodist_preferences_DATA = Pogo.site_properties \ - tango.opt + tango.opt \ + cmake_tango.opt $(nodist_preferences_DATA): Makefile @@ -24,7 +26,9 @@ $(nodist_preferences_DATA): Makefile CLEANFILES = $(nodist_preferences_DATA) Pogo.site_properties: $(srcdir)/Pogo.site_properties.in tango.opt: $(srcdir)/tango.opt.in +cmake_tango.opt: $(srcdir)/cmake_tango.opt.in EXTRA_DIST = \ Pogo.site_properties.in \ - tango.opt.in + tango.opt.in \ + cmake_tango.opt.in diff --git a/assets/pogo/preferences/cmake_common_target.opt b/assets/pogo/preferences/cmake_common_target.opt new file mode 100644 index 000000000..dce67a3d5 --- /dev/null +++ b/assets/pogo/preferences/cmake_common_target.opt @@ -0,0 +1,14 @@ + +# +# Set library directories +# +link_directories(${USER_LIB_DIR} ${TANGO_LIB_HOME}) + +# +# Compile and link +# +message("SERVER_NAME=${SERVER_NAME}") +message("SERVER_SRC=${SERVER_SRC}") +add_executable(${SERVER_NAME} ${SERVER_SRC}) +target_link_libraries(${SERVER_NAME} ${USER_LIBS} ${TANGO_LIBS}) + diff --git a/assets/pogo/preferences/cmake_tango.opt.in b/assets/pogo/preferences/cmake_tango.opt.in new file mode 100644 index 000000000..8549d3ca9 --- /dev/null +++ b/assets/pogo/preferences/cmake_tango.opt.in @@ -0,0 +1,54 @@ +# +# Set default PATH +# +set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin/") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) + +if(DEFINED TANGO_HOME) + message("-DTANGO_HOME specified in the command line") +else() + set(TANGO_HOME $ENV{TANGO_HOME}) +endif(DEFINED TANGO_HOME) + +if(DEFINED TANGO_HOME) + message("TANGO_HOME = ${TANGO_HOME}") +else() + set(TANGO_HOME @prefix@) +endif(DEFINED TANGO_HOME) + +set(ENV{PKG_CONFIG_PATH} "${TANGO_HOME}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}") + +if(DEFINED OMNI_HOME) + message("-DOMNI_HOME specified in the command line") +else() + set(OMNI_HOME $ENV{OMNI_HOME}) +endif(DEFINED OMNI_HOME) +if(DEFINED OMNI_HOME) + message("OMNI_HOME = ${OMNI_HOME}") + set(ENV{PKG_CONFIG_PATH} "${OMNI_HOME}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}") +endif(DEFINED OMNI_HOME) + + +if(DEFINED ZMQ_HOME) + message("-DZMQ_HOME specified in the command line") +else() + set(ZMQ_HOME $ENV{ZMQ_HOME}) +endif(DEFINED ZMQ_HOME) +if(DEFINED ZMQ_HOME) + message("ZMQ_HOME = ${ZMQ_HOME}") + set(ENV{PKG_CONFIG_PATH} "${ZMQ_HOME}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}") +endif(DEFINED ZMQ_HOME) + +# +# Compiler flags +# +set(CMAKE_CXX_FLAGS "${CXXFLAGS_USER} ${CMAKE_CXX_FLAGS}") + +find_package(PkgConfig REQUIRED) +pkg_check_modules(PKG_TANGO REQUIRED tango) + +set(TANGO_INCLUDES ${PKG_TANGO_INCLUDE_DIRS}) +set(TANGO_LIBS ${PKG_TANGO_LIBRARIES}) +set(TANGO_LIB_HOME ${PKG_TANGO_LIBRARY_DIRS}) + +add_definitions (${PKG_TANGO_CFLAGS_OTHER}) diff --git a/assets/pogo/preferences/tango.opt.in b/assets/pogo/preferences/tango.opt.in index 633dea6a7..26db3d4ad 100644 --- a/assets/pogo/preferences/tango.opt.in +++ b/assets/pogo/preferences/tango.opt.in @@ -4,17 +4,22 @@ #-- gcc version #------------------------------------------------------------------------------ GCC_MAJOR_VERSION_GT4 := $(shell expr `c++ -dumpversion | cut -f1 -d.` \> 4) +GCC_MAJOR_VERSION_LT6 := $(shell expr `c++ -dumpversion | cut -f1 -d.` \< 6) GCC_MAJOR_VERSION_EQ4 := $(shell expr `c++ -dumpversion | cut -f1 -d.` \== 4) +GCC_MAJOR_VERSION_EQ6 := $(shell expr `c++ -dumpversion | cut -f1 -d.` \== 6) GCC_MINOR_VERSION_GTEQ3 := $(shell expr `c++ -dumpversion | cut -f2 -d.` \>= 3) -ifeq ($(GCC_MAJOR_VERSION_GT4),1) +GCC_MINOR_VERSION_LT1 := $(shell expr `c++ -dumpversion | cut -f2 -d.` \< 1) + +ifeq ($(GCC_MAJOR_VERSION_LT6),1) CXX11 = -std=c++0x else - ifeq ($(GCC_MAJOR_VERSION_EQ4),1) - ifeq ($(GCC_MINOR_VERSION_GTEQ3),1) + ifeq ($(GCC_MAJOR_VERSION_EQ6),1) + ifeq ($(GCC_MINOR_VERSION_LT1),1) CXX11 = -std=c++0x endif endif endif + #------------------------------------------------------------------------------ #-- TANGO_HOME #------------------------------------------------------------------------------ @@ -159,7 +164,7 @@ ifdef CXXFLAGS_USR CXXFLAGS_USER = $(CXXFLAGS_USR) endif -CXXFLAGS += -D_REENTRANT -W $(INCLUDE_DIRS) $(CXXFLAGS_USER) $(CXX11) -Dlinux +CXXFLAGS += -D_REENTRANT -W $(INCLUDE_DIRS) $(CXXFLAGS_USER) $(CXX11) -Dlinux #------------------------------------------------------------------------------ #-- CFLAGS From a22b0ee46cff397dbdad74a253c997169f374eef Mon Sep 17 00:00:00 2001 From: Reynald Bourtembourg Date: Wed, 5 Jun 2019 01:50:31 +0200 Subject: [PATCH 23/23] Update to latest available release versions (#37) Update to latest available release versions Update Jive to Release 7.22 Update ATK to Release 9.3.6 Update Pogo to Release 9.6.23 Update rest-server to Release 1.14 Update TangoDatabase to Release 5.11 Update JTango to 9.5.14 --- assets/README | 12 ++++++------ distribution.properties | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/assets/README b/assets/README index 7948afc0d..d9b87b565 100644 --- a/assets/README +++ b/assets/README @@ -538,18 +538,18 @@ Changes between Tango distribution 9.2.5a and 9.3.3 -------------------------------------------------- - Updated C++ library to Release 9.3.3 -- Updated JTango to Release 9.5.13 -- Updated Jive to Release 7.21 -- Updated ATK to Release 9.3.2 +- Updated JTango to Release 9.5.14 +- Updated Jive to Release 7.22 +- Updated ATK to Release 9.3.6 - Updated AtkPanel to Release 5.8 - Updated atktuning to Release 4.7 - Updated Astor to Release 7.2.5 - Updated JSSHTerminal to Release 1.13 - Updated LogViewer to Release 2.0.5 -- Updated Pogo to Release 9.6.18 -- Added rest-server Release 1.11 +- Updated Pogo to Release 9.6.23 +- Added rest-server Release 1.14 - Updated TangoTest to Release 2.1 -- Updated TangoDatabase to Release 5.9 +- Updated TangoDatabase to Release 5.11 - Updated TangoAccessControl to Release 2.14 - Updated Starter to Release 7.0 - Updated tango_admin to Release 1.14 diff --git a/distribution.properties b/distribution.properties index 55467002e..376d37f23 100644 --- a/distribution.properties +++ b/distribution.properties @@ -11,22 +11,22 @@ rest-server-root-repo=https://github.com/tango-controls/rest-server/releases version-info=12:3:3 #lib cppTango=9.3.3 -JTango=JTango-9.5.13 +JTango=JTango-9.5.14 tango-idl=5.0.1 -jive-ver=7.21 -atk-ver=9.3.2 +jive-ver=7.22 +atk-ver=9.3.6 atk-panel-ver=5.8 atk-tuning-ver=4.7 astor-ver=7.2.5 dbbench-ver=1.3 jssh-terminal-ver=1.13 log-viewer-ver=2.0.5 -pogo-ver=9.6.18 -rest-server-ver=1.11 +pogo-ver=9.6.23 +rest-server-ver=1.14 #tool_panels= #cppserver TangoTest=TangoTest-Release-2.1 -TangoDatabase=Database-Release-5.9 +TangoDatabase=Database-Release-5.11 TangoAccessControl=TangoAccessControl-Release-2.14 starter=Starter-7.0 #doc