|  06 Sep 2009, Exaos Lee, Bug Report, Delete key "/A_Str" problem   | 
| Another problem while using odbedit.
I tried the batch mode of "odbedit". I created a key as "/A_Str" by mistake and 
wanted to delete it. Then "odbedit" failed to accept the "Return" key. Please see 
the screen-shot attached. :-( | 
|  06 Sep 2009, Exaos Lee, Suggestion, Could not create strings other than 32 characters with odbedit -c "..." command | 
| > Ok, I added a command
> 
> odbedit -c "create STRING Test[8][40]"
> 
> which works now. Please update to SVN revision 4555 of odbedit.c
> 
> - Stefan
If I want to create only one string, should I write like this:
  odbedit -c "create STRING Test[] [256]"
OK. I need it. I will try the new odbedit. | 
|  06 Sep 2009, Exaos Lee, Bug Report, Compiling error of "src/history_odbc.cxx"   | 
| Version svn-r4556, I got a compiling error as below: 
 
/opt/DAQ/bot/midas/src/history_odbc.cxx: In member function 'virtual int 
SqlODBC::GetNumRows()':
/opt/DAQ/bot/midas/src/history_odbc.cxx:589: error: cannot convert 'SQLINTEGER*' 
to 'long int*' for argument '2' to 'SQLRETURN SQLRowCount(void*, long int*)'
/opt/DAQ/bot/midas/src/history_odbc.cxx: In member function 'virtual const char* 
SqlODBC::GetColumn(int)':
/opt/DAQ/bot/midas/src/history_odbc.cxx:638: error: cannot convert 'SQLINTEGER*' 
to 'long int*' for argument '6' to 'SQLRETURN SQLGetData(void*, SQLUSMALLINT, 
SQLSMALLINT, void*, long int, long int*)'
make[2]: *** [CMakeFiles/midas-static.dir/src/history_odbc.cxx.o] Error 1
make[2]: Leaving directory `/opt/DAQ/bot/midas/build'
make[1]: *** [CMakeFiles/midas-static.dir/all] Error 2
make[1]: Leaving directory `/opt/DAQ/bot/midas/build'
 The detail error log is attached. I used my CMake script without any optimization flags. I will try the default Makefile again.
 | 
|  06 Sep 2009, Exaos Lee, Bug Report, Compiling error of "src/history_odbc.cxx" | 
| 
 | Exaos Lee wrote: |  | Version svn-r4556, I got a compiling error as below: The detail error log is attached. I used my CMake script without any optimization flags. I will try the default Makefile again.
 | 
 
 BUG is confirmed using the default "Makefile".
 | 
|  06 Sep 2009, Exaos Lee, Bug Fix, Maybe a fix   | 
| Changing "SQLINTEGER" to "SQLLEN" maybe let the compiling pass. See the attached diff. 
 But I failed in another error. It was the problem in CMakeLists.txt. (FIXED)
 | 
|  06 Sep 2009, Exaos Lee, Suggestion, Updated "CMakeLists.txt"   | 
| Add installation commands. Please see the attachment. | 
|  06 Sep 2009, Exaos Lee, Bug Report, Delete key "/A_Str" problem | 
| > Another problem while using odbedit.
> I tried the batch mode of "odbedit". I created a key as "/A_Str" by mistake and 
> wanted to delete it. Then "odbedit" failed to accept the "Return" key. Please see 
> the screen-shot attached. :-(
This bug has been fixed in the latest repository.
I encountered it in svn-r4488. | 
|  06 Sep 2009, Exaos Lee, Suggestion, Could not create strings other than 32 characters with odbedit -c "..." command | 
| > > Ok, I added a command
> > 
> > odbedit -c "create STRING Test[8][40]"
> > 
> > which works now. Please update to SVN revision 4555 of odbedit.c
> > 
> > - Stefan
> 
> If I want to create only one string, should I write like this:
> 
>   odbedit -c "create STRING Test[] [256]"
> 
> OK. I need it. I will try the new odbedit.
"create STRING test[1][256]" works. | 
|  07 Sep 2009, Exaos Lee, Forum, deprecated conversion from string constant to ‘char*’   | 
| I encountered many warning while building MIDAS (svn r4556). Please see the
attached log file. Most of them are caused by type conversion from string to
"char*".
Though I can ignore all the warning without any problem, I still hate to see
them. :-) | 
|  27 Sep 2009, Exaos Lee, Forum, deprecated conversion from string constant to ‘char*’ | 
| > There is no "type conversions". The compiler is whining about code like this:
> 
> /* data type names */
> static char *tid_name[] = {
>    "NULL",
>    "BYTE",
>    ...
> 
> I guess we should keep the compiler happy and make them "static const char*".
> 
> BTW, my compiler is SL5.2 gcc-4.1.2 and it does not complain. What's your compiler?
> 
> K.O.
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.4-2' --with-
bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-
languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch -
-enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-
gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 
--program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --
enable-mpfr --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --
host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.3.4 (Debian 4.3.4-2) | 
|  29 Sep 2009, Exaos Lee, Bug Report, Error invoking 'odbedit': db_validate_size | 
| Revision: r4567 Error output:
 
$ odbedit -e expcvadc
odbedit: /opt/DAQ/repos/bot/midas/src/odb.c:651: db_validate_sizes: Assertion `sizeof(EQUIPMENT_INFO) == 400' failed.
zsh: abort      odbedit -e expcvadc
 | 
|  29 Sep 2009, Exaos Lee, Bug Report, Error invoking 'odbedit': db_validate_size | 
| It seems to be fixed in svn-r4568: 
-----------------------------------------------------------------------
r4568 | olchanski | 2009-09-27 23:56:39 +0800 (日, 27  9月 2009) | 5 lines
mhttpd: compile using the C++ compiler.
mhttpd: fix wrong initialization of /History/ODBC_DSN
odb.c: size of EQUIPMENT_INFO has changed.
Makefile: use "-O2" compiler flag instead of "-O3" - to fix SL5 gcc crash (ICE) 
 But another compiling error:
 
Linking CXX executable bin/mh2sql
CMakeFiles/mh2sql.dir/utils/mh2sql.cxx.o: In function `main':
/opt/DAQ/repos/bot/midas/utils/mh2sql.cxx:150: undefined reference to `MakeMidasHistoryODBC()'
 | 
|  08 Oct 2009, Exaos Lee, Bug Report, Multiple definition of `SqlODBC::SqlODBC() | 
| I found there are two SqlODBC defined in different sources. 
$ grep -n "class SqlODBC" src/*
src/history_odbc.cxx:282:class SqlODBC: public SqlBase
src/history_sql.cxx:293:class SqlODBC: public SqlBase
Both of them will be archived into one library libmidas.a if "HAVE_ODBC" defined. Then if you build a shared library, you will get a link error as the following:
 
Linking CXX shared library lib/libmidas.so
/usr/bin/cmake -E cmake_link_script CMakeFiles/midas-shared.dir/link.txt --verbose=1
/usr/bin/c++  -fPIC   -shared -Wl,-soname,libmidas.so -o lib/libmidas.so CMakeFiles/midas-shared.dir/src/ftplib.c.o CMakeFiles/midas-shared.dir/src/midas.c.o CMakeFiles/midas-shared.dir/src/system.c.o CMakeFiles/midas-shared.dir/src/mrpc.c.o CMakeFiles/midas-shared.dir/src/odb.c.o CMakeFiles/midas-shared.dir/src/ybos.c.o CMakeFiles/midas-shared.dir/src/history.c.o CMakeFiles/midas-shared.dir/src/alarm.c.o CMakeFiles/midas-shared.dir/src/elog.c.o CMakeFiles/midas-shared.dir/opt/DAQ/repos/bot/mxml/mxml.c.o CMakeFiles/midas-shared.dir/opt/DAQ/repos/bot/mxml/strlcpy.c.o CMakeFiles/midas-shared.dir/src/history_odbc.cxx.o CMakeFiles/midas-shared.dir/src/history_sql.cxx.o 
CMakeFiles/midas-shared.dir/src/history_sql.cxx.o: In function `SqlODBC':
/opt/DAQ/repos/bot/midas/src/history_sql.cxx:200: multiple definition of `SqlODBC::SqlODBC()'
CMakeFiles/midas-shared.dir/src/history_odbc.cxx.o:/opt/DAQ/repos/bot/midas/src/history_odbc.cxx:315: first defined here
...
history_odbc.cxx:727: first defined here
collect2: ld returned 1 exit status
make[2]: *** [lib/libmidas.so] Error 1
 Why is the class "SqlODBC" duplicated?
 | 
|  09 Oct 2009, Exaos Lee, Bug Report, Building error of history_midas.cxx due to missing declaration   | 
| 
Platform: Debian Linux testing
Compiler: gcc 4.3.4 (Debian 4.3.4-2)
Arch: x86
Description:
  The "g++" is whining while compiling history_midas.cxx. Please see the attached log file.
This can be fixed by add "#include <cstdlib>" to the C++ source. You know, different versions
of g++ don't act the same way. I think, maybe in version 4.2 or before, g++ can automatically
include the C header "stdlib.h" (which in C++ should be <cstdlib> because of some confusion
between C and C++), but not in version 4.3 or later. I tested g++-4.4, the problem still exists.
And g++-4.2 gives no error.
 | 
|  15 Oct 2009, Exaos Lee, Suggestion, Building MIDAS using CMake   | 
| The attached zip file is the updated configurations for building MIDAS using CMake. It works with svn-r4604. If you want to use it, please follow the steps here:
 
 
 | Quote: |  | 
 
  Unzip the attachment, copy CMakeLists.txt and directory "cmake" into the midas source tree.$ cp -rp CMakeLists.txt cmake/ <Path-to-MIDAS-tree>/ Make a build dir, and change to it.
 Execute cmake as this$ cmake -DCMAKE_INSTALL_PREFIX=<path-to-install> <path-to-MIDAS-tree> Make and install
 | 
 You may use 'cmake -G <generator-name>' to  generate building files for Unix Makefiles, Eclipse CDT4, KDevelop3 or Xcode, etc. I didn't test with other platforms. It now works with Unix Makefiles under Linux system. Please feedback any bugs to me: Exaos.Lee(AT)gmail.com .
 | 
|  19 Oct 2009, Exaos Lee, Forum, It' better to fix this warnings | 
| > There is no "type conversions". The compiler is whining about code like this: >
 > /* data type names */
 > static char *tid_name[] = {
 >    "NULL",
 >    "BYTE",
 >    ...
 >
 > I guess we should keep the compiler happy and make them "static const char*".
 >
 > BTW, my compiler is SL5.2 gcc-4.1.2 and it does not complain. What's your compiler?
 >
 > K.O.
 
 When I use "make" with odbedit, the generated "experim.h" also contains such codes as:
 
#define EXPCVADC_COMMON_STR(_name) char *_name[] = {\
"[.]",\
...
This will cause "type conversion" warnings. I hope that "odbedit" can generate codes like this:
#define EXPCVADC_COMMON_STR(_name) const char *_name[] = {\
"[.]",\
...
In fact, "const char*" is enough to suppress the warnings. Using "const char* foo=\"blarblar\"" is a good habit because it can avoid the following bugs:
char *s = "whatever";
...
strcpy(s, "Hello, this is a string longer than the initial one.");
The above code can successfully generate an executable, but it will encounter segmentation fault while executing. "const char*" means we should not change the variable in other place, which is important to suppress bugs. 
 Another problem, if I change the "experim.h" as I wished, new warnings appeared when the compiler parsing the following code:
 
status = db_create_record(hDB, 0, set_str, strcomb(expcvadc_settings_str));
Warning: 
cvadcfe.c: In function ‘frontend_init’:
cvadcfe.c:144: warning: passing argument 1 of ‘strcomb’ from incompatible pointer type
 | 
|  02 Nov 2009, Exaos Lee, Bug Fix, Build error due to missing header   | 
| I encountered a build error as "sort undefined...". It is caused by missing C++ header <algorithm> in which "sort" is defined. It can be fixed as the attachment. 
 Environment:
 G++: 4.3.4
 Platform: Debian Linux testing
 
 > I committed an updated lazylogger with updated documentation. The new version supports subruns and
 > can save to external storage arbitrary files (i.e. odb dump files). It also moves most book keeping out of
 > odb to permit handling more files on bigger storage disks.
 >
 > Example lazylogger scripts for castor (CERN) and dcache (TRIUMF) are in the directory "utils".
 >
 > The lazylogger documentation was updated to remove obsolete information and to describe the new
 > functions. As usual "make dox; cd doxfiles/html; firefox index.html" or see my copy at:
 >
 > http://ladd00.triumf.ca/~olchansk/midas/Utilities.html#lazylogger_task
 >
 > svn rev 4615, 4616.
 > K.O.
 | 
|  02 Nov 2009, Exaos Lee, Suggestion, New cmake files   | 
| Though ended with ".c", "lazylogger.c" has to be build with C++ compiler. I have 
to modify my CMakeLists.txt. 
Please see the attachment if you need it. It works with svn-r4616. | 
|  23 Nov 2009, Exaos Lee, Suggestion, Scripts for "midas-config"    | 
| Supposing you have installed MIDAS to some directory such as "/opt/MIDAS/r4621", you have to write some Makefile as the following while building some applications based on the version installed: 
 
 | Quote: |  | 
CFLAGS += -I/opt/MIDAS/r4621/include -DOS_LINUX -g -O2 -Wall -fPIC
LIBS += -lutil -lpthread -lodbc -lz
....
 | 
 Why not use a script to record your MIDAS building options? When you want to build something based on it, just type something such as
 
 
 | Quote: |  | 
M_CFLAGS := `midas-config --cflags`
M_LIBS := `midas-config --libs`
 | 
 You needn't to check your installed options each time when you build something against it. Each time you install a new version of MIDAS, you only need to update the script called 'midas-config'. I wrote a sample script named "genconf.sh" in the first zipped attachment. The 2nd "midas-config" is a sampled generated by it. Also a diff of Makefile is included. I hope it may help.
  | 
|  08 Apr 2010, Exaos Lee, Forum, How to stop a run with a timer? | 
| I want to let the run stop and start periodically. But I looked through the ODB
and didn't find anything may help. I also checked the FAQ online and didn't find
answer either. Who can help me? Thank you. |