/cantools

Primary LanguageShellGNU General Public License v3.0GPL-3.0

General Information
===================

cantools is a set of libraries and command line tools for handling
ASC, BLF, CLG, VSB, MDF, and DBC files from Vector-Informatik and
others. The tools can be used to analyze and convert the data to other
formats:

* dbcls lists the contents of a DBC file.
* cantomat converts log files in ASC, BLF, CLG, VSB format to a MAT
* file (MATLAB format)
* mdftomat converts log files in MDF format to a MAT file (up to MDF
  version 3.x) 

Some tools are available for testing of converters:

* matdump displays the content of a MAT file as ASCII text
* dbccopy copies a DBC file

The tools 'asctomat' and 'mdftomat' require the package matio,
which in turn requires the package hdf5. Support for these
tools is optional; either disable them with '--disable-matlab'
configure option or make sure hdf5 and matio dependencies are
installed first (see instructions below).

Since hdf5 is intended only for native builds,
it is recommended to disable the optional tools on cross-compile
builds of cantools in order to avoid this dependency
https://support.hdfgroup.org/HDF5/faq/compile.html#cross

Shared libraries for parsing and accessing these files are also
provided:

* libcandbc, libcanasc, libcanblf, libcanclg, libcanvsb, libcanmdf for 
  parsing of DBC, ASC, BLF, CLG, VSB, MDF files 


Installation of hdf5
=====================
Prerequisites: zlib-devel, bison, flex, make, gcc

matio can be built with libhdf5, here is how to:

1) download:
   wget 'http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.8.16.tar.bz2'
2) unpack:
   tar xjf hdf5-1.8.16.tar.bz2
3) build:
   cd hdf5-1.8.16
   ./configure --with-zlib=/usr/include,/lib --prefix=/usr
   CFLAGS=-std=c99 make
   CFLAGS=-std=c99 make check
   
4) install:
   make install


Installation of matio
=====================
Prerequisites: autotools, zlib-devel, make, gcc

1) download matio-1.5.10.tar.gz:
   wget 'http://downloads.sourceforge.net/matio/matio-1.5.10.tar.gz?use_mirror=' -O matio-1.5.10.tar.gz
   or
   curl -o matio-1.5.10.tar.gz -L 'http://downloads.sourceforge.net/matio/matio-1.5.10.tar.gz?use_mirror='
2) unpack:
   tar xzf matio-1.5.10.tar.gz
3) configure:
   cd matio-1.5.10
   CFLAGS=-DZ_PREFIX ./configure --with-zlib=/ --with-hdf5=/ --prefix=/usr
4) build and install:
   make ; make install

Installation of cantools
========================
Prerequisites: autotools, matio, bison, flex, make, gcc

download and extract cantools-*.tar.gz
cd cantools
libtoolize
autoreconf -f -i
./configure
make
make install

Compilation of cantools on Windows Subsystem for Linux (WSL)
====================
sudo apt-get install gcc libz-dev libmatio-dev pkg-config flex bison check libglib2.0 subversion automake
git clone https://github.com/aheit/cantools cantools-code
cd cantools-code
./configure
make

Execute Unit Test(s)
====================
     - run 'make check'
     - all tests should PASS

Debugging DBC parser
====================
Edit Makefile:
     - uncomment the line DEFS=$(YYDEBUG)
     - add "extern int yydebug; yydebug = 1;" to the main program
     - recompile

Profiling
=========
Edit Makefile:
     - add flag "-pg" to CFLAGS

Troubleshooting
===============
1) Error: ./libtool: line 860: X--tag=CC: command not found
   Reason: libtool scripts from a different environment are used
   Fix: execute "autoreconf -f -i; make"

2) Error: matio.h: No such file or directory
   Reason: matio is not installed
   Fix: install matio  (see "Installation of matio")

3) Error: configure stops with "Error! You need to install libmatio first."
   Reason: linker did not find matio in the library path
   Fix: install matio to /usr instead of /usr/local. Set PREFIX to
   /usr at configuration time (see "Installation of matio")

4) Error while compiling matio-1.5:
     libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I. -DZ_PREFIX -c mat.c  -DDLL_EXPORT -DPIC -o .libs/mat.o
     mat.c: In function `Mat_VarReadInfo':
     mat.c:1710: warning: dereferencing `void *' pointer
     mat.c:1710: error: request for member `_flags' in something not a structure or union
     mat.c: In function `Mat_VarReadNext':
     mat.c:1762: warning: dereferencing `void *' pointer
     mat.c:1762: error: request for member `_flags' in something not a structure or union
   Reason: incorrect definition in _mat_t
   Fix: in file matio_private.h, replace line 
    void *fp;               /**< File pointer for the MAT file */
   by
    FILE *fp;               /**< File pointer for the MAT file */

5) Error message from make: "configure.ac:36: error: required file
   './compile' not found" (or similar)
   Reason: platform specific automake scripts are not provided by the
   source distribution. 
   Fix: run 'autoreconf -f -i'