From MidasWiki
Jump to: navigation, search

The midas git repository uses tags to denote specific releases. Tags are of the format midas-YEAR-MONTH-SUFFIX, e.g. midas-2019-06-b. This page details the major changes in each release, and highlights how to update client code to adapt to any changes that are not backwards-compatible.


Releases midas-2019-06-a, midas-2019-06-b.

Relevant elog entries - 1564 (midas-2019-06 with cmake and c++) and 1526 (How to convert C midas frontends to C++).


  • Migration from C to C++. You will have to make changes to your clients (see upgrade guide below).
  • Ability to compile using cmake/cmake3 as well as make. To use cmake, you can either build manually with mkdir build; cd build; cmake ..; make; make install, or use the handy shortcut make cmake3. Note that the location where libraries and executables are built has changed - the OS-specific subdirectories (e.g. /linux/lib) has been replaced by a common /lib and /bin.
  • mxml and mscb are now included as git submodules. See the "upgrade guide" instructions for how to checkout the latest version of these modules.

Bug fixes

Known issues

  • cmake/cmake3 - ZLIB support is not detected, so gzipped files cannot be written by the logger. Will be fixed in the next release, or you can update midas to a commit after August 2.
  • mxml can segfault due to a double free. Will be fixed in the next release, or you can update mxml to commit f6fc49d: cd mxml; git checkout f6fc49d; cd .. and re-compile midas.

Upgrade guide

Updating midas

# Grab the new code
git checkout develop
git pull
git checkout midas-2019-06-b
git pull
git submodule update --init # this will checkout correct versions of mxml and mscb

# Tidy up the old build - be sure to delete the deprecated linux directory!
make clean
make cclean
rm -rf linux/bin
rm -rf linux/lib
rmdir linux

# Build the new midas
mkdir build 
cd build 
cmake ..
make install

If you have a script that sets up environment variables, you should change PATH from $MIDASSYS/linux/bin to $MIDASSYS/bin.

You should then restart mserver, mlogger, mhttpd, and any other midas programs that you run.

Cleanup old packages that are now submodules

As mxml and mscb are included as submodules now, you can remove the external packages that were downloaded previously (assuming they aren't used by other experiments on the same machine). E.g.

rm -r $HOME/packages/mxml # new location $MIDASSYS/mxml
rm -r $HOME/packages/mscb # new location $MIDASSYS/mscb

Update experiment frontends

The migration from C to C++ is one of the biggest user-facing changes in midas for a long time. Unfortunately it requires manual work from experimenters to update their client code:

  1. Update your Makefile
    1. Update library search path for code that links against libmidas or mfe.o ($MIDASSYS/linux/lib becomes $MIDASSYS/lib)
    2. If you reference mxml in your Makefile, change the include path to $MIDASSYS/mxml
    3. If you explicitly have the compiler as gcc, change it to g++
  2. Update frontend code to use mfe.h and build as C++
    1. Add #include "mfe.h" after including midas.h
    2. Remove extern C brackets around mfe-related code. Ideally there should be no extern C brackets anywhere.
    3. Ensure that frontend_name and frontend_file_name are const char* rather than char*.
    4. If you define your own global HNDLE hDB, change it to extern HNDLE hDB to pick up the one provided by mfe.
    5. Ensure that poll_event and interrupt_configure() use INT rather than INT[] for the source argument.
    6. If you use extern int frontend_index, change it to use the get_frontend_index() function from mfe.h instead.
    7. Ensure that the last argument to bk_create is cast to (void**)
  3. Try to compile, and fix any more compilation errors. Examples may include:
    1. Duplicate or mismatched declarations of functions defined in mfe.h (fix the mismatched declarations in your code)
    2. bool debug colliding with declaration in mfe.h (suggest to rename the variable in the client)
    3. Return value of malloc() etc needs to be cast to the correct data type (e.g. char* s = (char*)malloc(...))

An example diff of a frontend is:

  #include "midas.h"
+ #include "mfe.h"
  #include "msystem.h"
  #include "utils1.h"

- #ifdef __cplusplus
- extern "C" {
- #endif

- char *frontend_name = FE_NAME;
+ const char *frontend_name = FE_NAME;

+ extern HNDLE hDB;

- #ifdef __cplusplus
- }
- #endif

- extern "C" int frontend_index;

  INT frontend_init() {
-   printf("We are running as frontend index %d", frontend_index);
+   printf("We are running as frontend index %d", get_frontend_index());
    return SUCCESS;

- extern "C" INT interrupt_configure(INT cmd, INT[] source, PTYPE adr) {
+ INT interrupt_configure(INT cmd, INT source, PTYPE adr) {
   return 0;


Releases midas-2019-05-cxx and midas-2019-05-before-cmake were development tags that are not intended to be used more widely.


Releases midas-2019-03-f through midas-2019-03-h.

Relevant elog entries: 1513 (midas-2019-03-f), 1530 (midas-2019-03-g), 1543 (midas-2019-03-h).


  • ODB and event buffer access is now fully thread-safe
  • Stability improvements

Bug fixes

Upgrade guide

git pull
git checkout midas-2019-03-h
make clean


Releases midas-2019-02-a and midas-2019-02-b.


  • Format of ODB dumps in midas files can now be specified using new ODB key /Logger/Channels/<N>/Settings/ODB dump format. Note that the default dump format is now json; if your analysis tools parse the ODB dump at the start/end of your midas files, you may want to change the setting to xml.
  • Location of most recent end-of-run ODB dump can be set using new ODB key /Logger/ODB Last Dump File.
  • New mhttpd_exec_script() javascript function to execute a custom script.
  • Rationalised and more secure URL scheme for webpages served by mhttpd
  • Conversion of many midas pages to more responsive design
  • Stability and usability improvements

Bug fixes

Upgrade guide

git pull
git checkout midas-2019-02-b
make clean


Release midas-2018-12-a.


Releases midas-2017-10-a.


Releases midas-2017-07-a through midas-2017-07-c.