import of www.freescada.com/public-dist/libmbus-0.7.0.tar.gz

This commit is contained in:
James Michael DuPont 2012-02-16 15:46:48 +01:00
commit 19135a6bc1
89 changed files with 85783 additions and 0 deletions

32
COPYING Normal file

@ -0,0 +1,32 @@
Copyright (C) 2010-2011, Raditex AB
All rights reserved.
FreeSCADA
http://www.FreeSCADA.com
freescada@freescada.com
The libmbus library is a component of FreeSCADA that is published as open source, and it is free for anyone to use as long as due credit it given to FreeSCADA and Raditex Control in derivative work based on the libmbus library.
Main developers:
* Robert Johansson <rob@raditex.nu>
Other contributers:
* Markus Bergkvist kindly contributed numerous patches that improved the libmbus API and increased compatibility with the M-BUS standard.
LICENSE:
Copyright (c) 2010-2011, Raditex Control AB
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of the Raditex Control AB nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

1
INSTALL Symbolic link

@ -0,0 +1 @@
/usr/share/automake-1.11/INSTALL

25
Makefile-static Normal file

@ -0,0 +1,25 @@
# Copyright (c) 2010
# Robert Johansson
# Raditex AB.
# All rights reserved.
LIB = libmbus.so
CFLAGS = -Wall -W -g -fPIC -I.
HEADERS = mbus.h mbus-protocol.h
OBJS = mbus.o mbus-protocol.o
$(LIB): $(OBJS)
gcc -shared -o $(LIB) $(OBJS)
all: $(LIB)
clean:
rm -rf *.o *core core $(LIB)
test:
(cd test && make)
install: all
cp $(LIB) /usr/local/freescada/lib
cp $(HEADERS) /usr/local/freescada/include

12
Makefile.am Normal file

@ -0,0 +1,12 @@
#
#
#
PACKAGE = @PACKAGE@
VERSION = @VERSION@
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libmbus.pc
SUBDIRS = mbus bin
ACLOCAL = aclocal -I .
ACLOCAL_AMFLAGS = -Werror -I m4

776
Makefile.in Normal file

@ -0,0 +1,776 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = .
DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(srcdir)/libmbus.pc.in $(top_srcdir)/configure COPYING \
INSTALL config.guess config.sub depcomp install-sh ltmain.sh \
missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = libmbus.pc
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
DATA = $(pkgconfig_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
distdir dist dist-all distcheck
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d "$(distdir)" \
|| { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr "$(distdir)"; }; }
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = aclocal -I .
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
#
#
#
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libmbus.pc
SUBDIRS = mbus bin
ACLOCAL_AMFLAGS = -Werror -I m4
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
am--refresh:
@:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: $(am__configure_deps)
$(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
config.h: stamp-h1
@if test ! -f $@; then \
rm -f stamp-h1; \
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
else :; fi
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h
$(srcdir)/config.h.in: $(am__configure_deps)
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
rm -f stamp-h1
touch $@
distclean-hdr:
-rm -f config.h stamp-h1
libmbus.pc: $(top_builddir)/config.status $(srcdir)/libmbus.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool config.lt
install-pkgconfigDATA: $(pkgconfig_DATA)
@$(NORMAL_INSTALL)
test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
done
uninstall-pkgconfigDATA:
@$(NORMAL_UNINSTALL)
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
$(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
-test -n "$(am__skip_mode_fix)" \
|| find "$(distdir)" -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-lzma: distdir
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
$(am__remove_distdir)
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
$(am__remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lzma*) \
lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
*.tar.xz*) \
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
&& cd "$$am__cwd" \
|| exit 1
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@$(am__cd) '$(distuninstallcheck_dir)' \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile $(DATA) config.h
installdirs: installdirs-recursive
installdirs-am:
for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr \
distclean-libtool distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am: install-pkgconfigDATA
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am: uninstall-pkgconfigDATA
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
ctags-recursive install-am install-strip tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \
clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
distcheck distclean distclean-generic distclean-hdr \
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-pkgconfigDATA install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am uninstall-pkgconfigDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

956
aclocal.m4 vendored Normal file

@ -0,0 +1,956 @@
# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
[m4_warning([this file was generated for autoconf 2.68.
You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically `autoreconf'.])])
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
# Automake X.Y traces this macro to ensure aclocal.m4 has been
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.11'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
m4_if([$1], [1.11.1], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
# _AM_AUTOCONF_VERSION(VERSION)
# -----------------------------
# aclocal traces this macro to find the Autoconf version.
# This is a private macro too. Using m4_define simplifies
# the logic in aclocal, which can simply ignore this definition.
m4_define([_AM_AUTOCONF_VERSION], [])
# AM_SET_CURRENT_AUTOMAKE_VERSION
# -------------------------------
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.11.1])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
#
# Of course, Automake must honor this variable whenever it calls a
# tool from the auxiliary directory. The problem is that $srcdir (and
# therefore $ac_aux_dir as well) can be either absolute or relative,
# depending on how configure is run. This is pretty annoying, since
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
# source directory, any form will work fine, but in subdirectories a
# relative path needs to be adjusted first.
#
# $ac_aux_dir/missing
# fails when called from a subdirectory if $ac_aux_dir is relative
# $top_srcdir/$ac_aux_dir/missing
# fails if $ac_aux_dir is absolute,
# fails when called from a subdirectory in a VPATH build with
# a relative $ac_aux_dir
#
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
# are both prefixed by $srcdir. In an in-source build this is usually
# harmless because $srcdir is `.', but things will broke when you
# start a VPATH build or use an absolute $srcdir.
#
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
# and then we would define $MISSING as
# MISSING="\${SHELL} $am_aux_dir/missing"
# This will work as long as MISSING is not called from configure, because
# unfortunately $(top_srcdir) has no meaning in configure.
# However there are other variables, like CC, which are often used in
# configure, and could therefore not use this "fixed" $ac_aux_dir.
#
# Another solution, used here, is to always expand $ac_aux_dir to an
# absolute PATH. The drawback is that using absolute paths prevent a
# configured tree to be moved without reconfiguration.
AC_DEFUN([AM_AUX_DIR_EXPAND],
[dnl Rely on autoconf to set up CDPATH properly.
AC_PREREQ([2.50])dnl
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
])
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 9
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
# Define a conditional.
AC_DEFUN([AM_CONDITIONAL],
[AC_PREREQ(2.52)dnl
ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
AC_SUBST([$1_TRUE])dnl
AC_SUBST([$1_FALSE])dnl
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
_AM_SUBST_NOTMAKE([$1_FALSE])dnl
m4_define([_AM_COND_VALUE_$1], [$2])dnl
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi
AC_CONFIG_COMMANDS_PRE(
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
AC_MSG_ERROR([[conditional "$1" was never defined.
Usually this means the macro was only invoked conditionally.]])
fi])])
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 10
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
# _AM_DEPENDENCIES(NAME)
# ----------------------
# See how the compiler implements dependency checking.
# NAME is "CC", "CXX", "GCJ", or "OBJC".
# We try a few techniques and use that to set a single cache variable.
#
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
# dependency, and given that the user is not expected to run this macro,
# just rely on AC_PROG_CC.
AC_DEFUN([_AM_DEPENDENCIES],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
[$1], CXX, [depcc="$CXX" am_compiler_list=],
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
[$1], UPC, [depcc="$UPC" am_compiler_list=],
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
[depcc="$$1" am_compiler_list=])
AC_CACHE_CHECK([dependency style of $depcc],
[am_cv_$1_dependencies_compiler_type],
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named `D' -- because `-MD' means `put the output
# in D'.
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
cp "$am_depcomp" conftest.dir
cd conftest.dir
# We will build objects and dependencies in a subdirectory because
# it helps to detect inapplicable dependency modes. For instance
# both Tru64's cc and ICC support -MD to output dependencies as a
# side effect of compilation, but ICC will put the dependencies in
# the current directory while Tru64 will put them in the object
# directory.
mkdir sub
am_cv_$1_dependencies_compiler_type=none
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
fi
am__universal=false
m4_case([$1], [CC],
[case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac],
[CXX],
[case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac])
for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and
# we should not choose a depcomp mode which is confused by this.
#
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
# Solaris 8's {/usr,}/bin/sh.
touch sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this. Also, some Intel
# versions had trouble with output in subdirs
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in
gcc)
# This depmode causes a compiler race in universal mode.
test "$am__universal" = false || continue
;;
nosideeffect)
# after this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested
if test "x$enable_dependency_tracking" = xyes; then
continue
else
break
fi
;;
msvisualcpp | msvcmsys)
# This compiler won't grok `-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
am__minus_obj=
;;
none) break ;;
esac
if depmode=$depmode \
source=sub/conftest.c object=$am__obj \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
>/dev/null 2>conftest.err &&
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
# that says an option was ignored or not supported.
# When given -MP, icc 7.0 and 7.1 complain thusly:
# icc: Command line warning: ignoring option '-M'; no argument required
# The diagnosis changed in icc 8.0:
# icc: Command line remark: option '-MP' not supported
if (grep 'ignoring option' conftest.err ||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
am_cv_$1_dependencies_compiler_type=$depmode
break
fi
fi
done
cd ..
rm -rf conftest.dir
else
am_cv_$1_dependencies_compiler_type=none
fi
])
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
AM_CONDITIONAL([am__fastdep$1], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
])
# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
AC_DEFUN([AM_SET_DEPDIR],
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
])
# AM_DEP_TRACK
# ------------
AC_DEFUN([AM_DEP_TRACK],
[AC_ARG_ENABLE(dependency-tracking,
[ --disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors])
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])dnl
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
])
# Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
#serial 5
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
[{
# Autoconf 2.62 quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting.
case $CONFIG_FILES in
*\'*) eval set x "$CONFIG_FILES" ;;
*) set x $CONFIG_FILES ;;
esac
shift
for mf
do
# Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not.
# We used to match only the files named `Makefile.in', but
# some people rename them; so instead we look at the file content.
# Grep'ing the first line is not enough: some people post-process
# each Makefile.in and add a new line on top of each file to say so.
# Grep'ing the whole file is not good either: AIX grep has a line
# limit of 2048, but all sed's we know have understand at least 4000.
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
dirpart=`AS_DIRNAME("$mf")`
else
continue
fi
# Extract the definition of DEPDIR, am__include, and am__quote
# from the Makefile without running `make'.
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# When using ansi2knr, U may be empty or an underscore; expand it
U=`sed -n 's/^U = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
# simplest approach to changing $(DEPDIR) to its actual value in the
# expansion.
for file in `sed -n "
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`AS_DIRNAME(["$file"])`
AS_MKDIR_P([$dirpart/$fdir])
# echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file"
done
done
}
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
# AM_OUTPUT_DEPENDENCY_COMMANDS
# -----------------------------
# This macro should only be invoked once -- use via AC_REQUIRE.
#
# This code is only required when automatic dependency tracking
# is enabled. FIXME. This creates each `.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])
# Do all the work for Automake. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 16
# This macro actually does too much. Some checks are only needed if
# your package does certain things. But this isn't really a big deal.
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
# AM_INIT_AUTOMAKE([OPTIONS])
# -----------------------------------------------
# The call with PACKAGE and VERSION arguments is the old style
# call (pre autoconf-2.50), which is being phased out. PACKAGE
# and VERSION should now be passed to AC_INIT and removed from
# the call to AM_INIT_AUTOMAKE.
# We support both call styles for the transition. After
# the next Automake release, Autoconf can make the AC_INIT
# arguments mandatory, and then we can depend on a new Autoconf
# release and drop the old call support.
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_PREREQ([2.62])dnl
dnl Autoconf wants to disallow AM_ names. We explicitly allow
dnl the ones we care about.
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
AC_REQUIRE([AC_PROG_INSTALL])dnl
if test "`cd $srcdir && pwd`" != "`pwd`"; then
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
# is not polluted with repeated "-I."
AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
# test to see if srcdir already configured
if test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi
fi
# test whether we have cygpath
if test -z "$CYGPATH_W"; then
if (cygpath --version) >/dev/null 2>/dev/null; then
CYGPATH_W='cygpath -w'
else
CYGPATH_W=echo
fi
fi
AC_SUBST([CYGPATH_W])
# Define the identity of the package.
dnl Distinguish between old-style and new-style calls.
m4_ifval([$2],
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
AC_SUBST([PACKAGE], [$1])dnl
AC_SUBST([VERSION], [$2])],
[_AM_SET_OPTIONS([$1])dnl
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
[m4_fatal([AC_INIT should be called with package and version arguments])])dnl
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
_AM_IF_OPTION([no-define],,
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
AC_REQUIRE([AC_ARG_PROGRAM])dnl
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
AM_MISSING_PROG(AUTOCONF, autoconf)
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo)
AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
[_AM_PROG_TAR([v7])])])
_AM_IF_OPTION([no-dependencies],,
[AC_PROVIDE_IFELSE([AC_PROG_CC],
[_AM_DEPENDENCIES(CC)],
[define([AC_PROG_CC],
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_CXX],
[_AM_DEPENDENCIES(CXX)],
[define([AC_PROG_CXX],
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
[_AM_DEPENDENCIES(OBJC)],
[define([AC_PROG_OBJC],
defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
])
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
AC_CONFIG_COMMANDS_PRE(dnl
[m4_provide_if([_AM_COMPILER_EXEEXT],
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
])
dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
dnl mangled by Autoconf and run in a shell conditional statement.
m4_define([_AC_COMPILER_EXEEXT],
m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
# When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header
# that is generated. The stamp files are numbered to have different names.
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
# loop where config.status creates the headers, so we can generate
# our stamp files there.
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
[# Compute $1's index in $config_headers.
_am_arg=$1
_am_stamp_count=1
for _am_header in $config_headers :; do
case $_am_header in
$_am_arg | $_am_arg:* )
break ;;
* )
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
esac
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
if test x"${install_sh}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
*)
install_sh="\${SHELL} $am_aux_dir/install-sh"
esac
fi
AC_SUBST(install_sh)])
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 2
# Check whether the underlying file-system supports filenames
# with a leading dot. For instance MS-DOS doesn't.
AC_DEFUN([AM_SET_LEADING_DOT],
[rm -rf .tst 2>/dev/null
mkdir .tst 2>/dev/null
if test -d .tst; then
am__leading_dot=.
else
am__leading_dot=_
fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 4
# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
am__doit:
@echo this is the am__doit target
.PHONY: am__doit
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
am__include="#"
am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# Ignore all kinds of additional output from `make'.
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=include
am__quote=
_am_result=GNU
;;
esac
# Now try BSD make style include.
if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=.include
am__quote="\""
_am_result=BSD
;;
esac
fi
AC_SUBST([am__include])
AC_SUBST([am__quote])
AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 6
# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
AC_DEFUN([AM_MISSING_PROG],
[AC_REQUIRE([AM_MISSING_HAS_RUN])
$1=${$1-"${am_missing_run}$2"}
AC_SUBST($1)])
# AM_MISSING_HAS_RUN
# ------------------
# Define MISSING if not defined so far and test if it supports --run.
# If it does, set am_missing_run to use it, otherwise, to nothing.
AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([missing])dnl
if test x"${MISSING+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
*)
MISSING="\${SHELL} $am_aux_dir/missing" ;;
esac
fi
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
else
am_missing_run=
AC_MSG_WARN([`missing' script is too old or missing])
fi
])
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_MKDIR_P
# ---------------
# Check for `mkdir -p'.
AC_DEFUN([AM_PROG_MKDIR_P],
[AC_PREREQ([2.60])dnl
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
dnl while keeping a definition of mkdir_p for backward compatibility.
dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
dnl Makefile.ins that do not define MKDIR_P, so we do our own
dnl adjustment using top_builddir (which is defined more often than
dnl MKDIR_P).
AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
case $mkdir_p in
[[\\/$]]* | ?:[[\\/]]*) ;;
*/*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
esac
])
# Helper functions for option handling. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 4
# _AM_MANGLE_OPTION(NAME)
# -----------------------
AC_DEFUN([_AM_MANGLE_OPTION],
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
# _AM_SET_OPTION(NAME)
# ------------------------------
# Set option NAME. Presently that only means defining a flag for this option.
AC_DEFUN([_AM_SET_OPTION],
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
# _AM_SET_OPTIONS(OPTIONS)
# ----------------------------------
# OPTIONS is a space-separated list of Automake options.
AC_DEFUN([_AM_SET_OPTIONS],
[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
# -------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
# Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 5
# AM_SANITY_CHECK
# ---------------
AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
echo timestamp > conftest.file
# Reject unsafe characters in $srcdir or the absolute working directory
# name. Accept space and tab only in the latter.
am_lf='
'
case `pwd` in
*[[\\\"\#\$\&\'\`$am_lf]]*)
AC_MSG_ERROR([unsafe absolute working directory name]);;
esac
case $srcdir in
*[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
esac
# Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
if test "$[*]" = "X"; then
# -L didn't work.
set X `ls -t "$srcdir/configure" conftest.file`
fi
rm -f conftest.file
if test "$[*]" != "X $srcdir/configure conftest.file" \
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
# If neither matched, then we have a broken ls. This can happen
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
alias in your environment])
fi
test "$[2]" = conftest.file
)
then
# Ok.
:
else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
AC_MSG_RESULT(yes)])
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_INSTALL_STRIP
# ---------------------
# One issue with vendor `install' (even GNU) is that you can't
# specify the program used to strip binaries. This is especially
# annoying in cross-compiling environments, where the build's strip
# is unlikely to handle the host's binaries.
# Fortunately install-sh will honor a STRIPPROG variable, so we
# always use install-sh in `make install-strip', and initialize
# STRIPPROG with the value of the STRIP variable (set by the user).
AC_DEFUN([AM_PROG_INSTALL_STRIP],
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
# Installed binaries are usually stripped using `strip' when the user
# run `make install-strip'. However `strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
# will honor the `STRIP' environment variable to overrule this program.
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
if test "$cross_compiling" != no; then
AC_CHECK_TOOL([STRIP], [strip], :)
fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 2
# _AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
# This macro is traced by Automake.
AC_DEFUN([_AM_SUBST_NOTMAKE])
# AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
# Public sister of _AM_SUBST_NOTMAKE.
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 2
# _AM_PROG_TAR(FORMAT)
# --------------------
# Check how to create a tarball in format FORMAT.
# FORMAT should be one of `v7', `ustar', or `pax'.
#
# Substitute a variable $(am__tar) that is a command
# writing to stdout a FORMAT-tarball containing the directory
# $tardir.
# tardir=directory && $(am__tar) > result.tar
#
# Substitute a variable $(am__untar) that extract such
# a tarball read from stdin.
# $(am__untar) < result.tar
AC_DEFUN([_AM_PROG_TAR],
[# Always define AMTAR for backward compatibility.
AM_MISSING_PROG([AMTAR], [tar])
m4_if([$1], [v7],
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
[m4_case([$1], [ustar],, [pax],,
[m4_fatal([Unknown tar format])])
AC_MSG_CHECKING([how to create a $1 tar archive])
# Loop over all known methods to create a tar archive until one works.
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
# Do not fold the above two line into one, because Tru64 sh and
# Solaris sh will not grok spaces in the rhs of `-'.
for _am_tool in $_am_tools
do
case $_am_tool in
gnutar)
for _am_tar in tar gnutar gtar;
do
AM_RUN_LOG([$_am_tar --version]) && break
done
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
am__untar="$_am_tar -xf -"
;;
plaintar)
# Must skip GNU tar: if it does not support --format= it doesn't create
# ustar tarball either.
(tar --version) >/dev/null 2>&1 && continue
am__tar='tar chf - "$$tardir"'
am__tar_='tar chf - "$tardir"'
am__untar='tar xf -'
;;
pax)
am__tar='pax -L -x $1 -w "$$tardir"'
am__tar_='pax -L -x $1 -w "$tardir"'
am__untar='pax -r'
;;
cpio)
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
am__untar='cpio -i -H $1 -d'
;;
none)
am__tar=false
am__tar_=false
am__untar=false
;;
esac
# If the value was cached, stop now. We just wanted to have am__tar
# and am__untar set.
test -n "${am_cv_prog_tar_$1}" && break
# tar/untar a dummy directory, and stop if the command works
rm -rf conftest.dir
mkdir conftest.dir
echo GrepMe > conftest.dir/file
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
rm -rf conftest.dir
if test -s conftest.tar; then
AM_RUN_LOG([$am__untar <conftest.tar])
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
fi
done
rm -rf conftest.dir
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
m4_include([m4/libtool.m4])
m4_include([m4/ltoptions.m4])
m4_include([m4/ltsugar.m4])
m4_include([m4/ltversion.m4])
m4_include([m4/lt~obsolete.m4])

3818
autom4te.cache/output.0 Normal file

File diff suppressed because it is too large Load Diff

14187
autom4te.cache/output.1 Normal file

File diff suppressed because it is too large Load Diff

14187
autom4te.cache/output.2 Normal file

File diff suppressed because it is too large Load Diff

356
autom4te.cache/requests Normal file

@ -0,0 +1,356 @@
# This file was generated by Autom4te Sun May 1 09:53:53 UTC 2011.
# It contains the lists of macros which have been traced.
# It can be safely removed.
@request = (
bless( [
'0',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'configure.ac'
],
{
'AM_PROG_F77_C_O' => 1,
'_LT_AC_TAGCONFIG' => 1,
'm4_pattern_forbid' => 1,
'AC_INIT' => 1,
'_AM_COND_IF' => 1,
'AC_CANONICAL_TARGET' => 1,
'AC_SUBST' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_FC_SRCEXT' => 1,
'AC_CANONICAL_HOST' => 1,
'AC_PROG_LIBTOOL' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AM_PATH_GUILE' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AC_REQUIRE_AUX_FILE' => 1,
'AC_CONFIG_LINKS' => 1,
'LT_SUPPORTED_TAG' => 1,
'm4_sinclude' => 1,
'AM_MAINTAINER_MODE' => 1,
'AM_NLS' => 1,
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
'AM_MAKEFILE_INCLUDE' => 1,
'_m4_warn' => 1,
'AM_PROG_CXX_C_O' => 1,
'_AM_MAKEFILE_INCLUDE' => 1,
'_AM_COND_ENDIF' => 1,
'AM_ENABLE_MULTILIB' => 1,
'AM_PROG_MOC' => 1,
'AM_SILENT_RULES' => 1,
'AC_CONFIG_FILES' => 1,
'LT_INIT' => 1,
'include' => 1,
'AM_PROG_AR' => 1,
'AM_GNU_GETTEXT' => 1,
'AC_LIBSOURCE' => 1,
'AM_PROG_FC_C_O' => 1,
'AC_CANONICAL_BUILD' => 1,
'AC_FC_FREEFORM' => 1,
'AH_OUTPUT' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'm4_pattern_allow' => 1,
'sinclude' => 1,
'AM_PROG_CC_C_O' => 1,
'AM_XGETTEXT_OPTION' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AM_CONDITIONAL' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AM_POT_TOOLS' => 1,
'm4_include' => 1,
'_AM_COND_ELSE' => 1,
'AC_SUBST_TRACE' => 1
}
], 'Autom4te::Request' ),
bless( [
'1',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'/usr/share/aclocal/argz.m4',
'/usr/share/aclocal/ltdl.m4',
'/usr/share/aclocal-1.11/amversion.m4',
'/usr/share/aclocal-1.11/auxdir.m4',
'/usr/share/aclocal-1.11/cond.m4',
'/usr/share/aclocal-1.11/depend.m4',
'/usr/share/aclocal-1.11/depout.m4',
'/usr/share/aclocal-1.11/init.m4',
'/usr/share/aclocal-1.11/install-sh.m4',
'/usr/share/aclocal-1.11/lead-dot.m4',
'/usr/share/aclocal-1.11/make.m4',
'/usr/share/aclocal-1.11/missing.m4',
'/usr/share/aclocal-1.11/mkdirp.m4',
'/usr/share/aclocal-1.11/options.m4',
'/usr/share/aclocal-1.11/runlog.m4',
'/usr/share/aclocal-1.11/sanity.m4',
'/usr/share/aclocal-1.11/silent.m4',
'/usr/share/aclocal-1.11/strip.m4',
'/usr/share/aclocal-1.11/substnot.m4',
'/usr/share/aclocal-1.11/tar.m4',
'm4/libtool.m4',
'm4/ltoptions.m4',
'm4/ltsugar.m4',
'm4/ltversion.m4',
'm4/lt~obsolete.m4',
'configure.ac'
],
{
'AM_ENABLE_STATIC' => 1,
'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
'_LT_AC_SHELL_INIT' => 1,
'AC_DEFUN' => 1,
'_LT_AC_LANG_CXX_CONFIG' => 1,
'AC_PROG_LIBTOOL' => 1,
'AM_PROG_MKDIR_P' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AM_SUBST_NOTMAKE' => 1,
'AM_MISSING_PROG' => 1,
'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
'_LT_AC_LANG_C_CONFIG' => 1,
'AM_PROG_INSTALL_STRIP' => 1,
'_m4_warn' => 1,
'AC_LIBTOOL_OBJDIR' => 1,
'gl_FUNC_ARGZ' => 1,
'LTOBSOLETE_VERSION' => 1,
'AM_SANITY_CHECK' => 1,
'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1,
'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
'LT_LIB_M' => 1,
'_LT_AC_CHECK_DLFCN' => 1,
'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
'LTSUGAR_VERSION' => 1,
'_LT_PROG_LTMAIN' => 1,
'LT_SYS_SYMBOL_USCORE' => 1,
'_AM_PROG_TAR' => 1,
'AC_LIBTOOL_GCJ' => 1,
'_LT_WITH_SYSROOT' => 1,
'LT_SYS_DLOPEN_DEPLIBS' => 1,
'LT_FUNC_DLSYM_USCORE' => 1,
'AC_LIBTOOL_CONFIG' => 1,
'_LT_AC_LANG_F77' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'AC_LTDL_DLLIB' => 1,
'_AM_AUTOCONF_VERSION' => 1,
'AM_DISABLE_SHARED' => 1,
'_LT_PROG_ECHO_BACKSLASH' => 1,
'_LTDL_SETUP' => 1,
'AM_PROG_LIBTOOL' => 1,
'_LT_AC_LANG_CXX' => 1,
'AC_LIB_LTDL' => 1,
'_LT_AC_FILE_LTDLL_C' => 1,
'AM_PROG_LD' => 1,
'AU_DEFUN' => 1,
'AC_PROG_NM' => 1,
'AC_LIBTOOL_DLOPEN' => 1,
'AC_PROG_LD' => 1,
'AC_PROG_LD_GNU' => 1,
'AC_ENABLE_FAST_INSTALL' => 1,
'AC_LIBTOOL_FC' => 1,
'LTDL_CONVENIENCE' => 1,
'_AM_SET_OPTION' => 1,
'AC_LTDL_PREOPEN' => 1,
'_LT_LINKER_BOILERPLATE' => 1,
'_LT_PREPARE_SED_QUOTE_VARS' => 1,
'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
'AC_LIBTOOL_PROG_CC_C_O' => 1,
'gl_PREREQ_ARGZ' => 1,
'LT_SUPPORTED_TAG' => 1,
'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'LT_PROG_RC' => 1,
'LT_SYS_MODULE_EXT' => 1,
'AC_DEFUN_ONCE' => 1,
'_LT_AC_LANG_GCJ' => 1,
'AC_LTDL_OBJDIR' => 1,
'_LT_PATH_TOOL_PREFIX' => 1,
'AC_LIBTOOL_RC' => 1,
'AM_SILENT_RULES' => 1,
'AC_DISABLE_FAST_INSTALL' => 1,
'_LT_AC_PROG_ECHO_BACKSLASH' => 1,
'_LT_AC_SYS_LIBPATH_AIX' => 1,
'_LT_AC_TRY_DLOPEN_SELF' => 1,
'include' => 1,
'LT_AC_PROG_SED' => 1,
'AM_ENABLE_SHARED' => 1,
'LTDL_INSTALLABLE' => 1,
'_LT_AC_LANG_GCJ_CONFIG' => 1,
'AC_ENABLE_SHARED' => 1,
'AC_ENABLE_STATIC' => 1,
'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
'_LT_REQUIRED_DARWIN_CHECKS' => 1,
'_LT_AC_TAGVAR' => 1,
'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
'AM_CONDITIONAL' => 1,
'LT_LIB_DLLOAD' => 1,
'LTDL_INIT' => 1,
'_LT_PROG_F77' => 1,
'_LT_PROG_CXX' => 1,
'LTVERSION_VERSION' => 1,
'AM_PROG_INSTALL_SH' => 1,
'm4_include' => 1,
'AC_PROG_EGREP' => 1,
'_AC_AM_CONFIG_HEADER_HOOK' => 1,
'AC_PATH_MAGIC' => 1,
'AC_LTDL_SYSSEARCHPATH' => 1,
'AM_MAKE_INCLUDE' => 1,
'LT_CMD_MAX_LEN' => 1,
'_LT_AC_TAGCONFIG' => 1,
'm4_pattern_forbid' => 1,
'_LT_LINKER_OPTION' => 1,
'AC_LIBTOOL_COMPILER_OPTION' => 1,
'AC_DISABLE_SHARED' => 1,
'_LT_COMPILER_BOILERPLATE' => 1,
'AC_LIBTOOL_WIN32_DLL' => 1,
'AC_LIBTOOL_SETUP' => 1,
'AC_PROG_LD_RELOAD_FLAG' => 1,
'AC_LTDL_DLSYM_USCORE' => 1,
'AM_MISSING_HAS_RUN' => 1,
'LT_LANG' => 1,
'LT_SYS_DLSEARCH_PATH' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AC_LIBTOOL_DLOPEN_SELF' => 1,
'LT_OUTPUT' => 1,
'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
'AC_WITH_LTDL' => 1,
'AC_LIBTOOL_LINKER_OPTION' => 1,
'LT_AC_PROG_RC' => 1,
'AC_LIBTOOL_CXX' => 1,
'LT_INIT' => 1,
'LT_AC_PROG_GCJ' => 1,
'LT_SYS_DLOPEN_SELF' => 1,
'AM_DEP_TRACK' => 1,
'AM_DISABLE_STATIC' => 1,
'_LT_AC_PROG_CXXCPP' => 1,
'_AC_PROG_LIBTOOL' => 1,
'_AM_IF_OPTION' => 1,
'AC_PATH_TOOL_PREFIX' => 1,
'AC_LIBTOOL_F77' => 1,
'm4_pattern_allow' => 1,
'AM_SET_LEADING_DOT' => 1,
'LT_AC_PROG_EGREP' => 1,
'_LT_PROG_FC' => 1,
'_AM_DEPENDENCIES' => 1,
'AC_LIBTOOL_LANG_C_CONFIG' => 1,
'LTOPTIONS_VERSION' => 1,
'_LT_AC_SYS_COMPILER' => 1,
'AM_PROG_NM' => 1,
'AC_LIBLTDL_CONVENIENCE' => 1,
'AC_DEPLIBS_CHECK_METHOD' => 1,
'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
'AC_LIBLTDL_INSTALLABLE' => 1,
'AC_LTDL_ENABLE_INSTALL' => 1,
'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
'LT_PROG_GCJ' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AC_DISABLE_STATIC' => 1,
'LT_PATH_NM' => 1,
'AC_LTDL_SHLIBEXT' => 1,
'_LT_AC_LOCK' => 1,
'_LT_AC_LANG_RC_CONFIG' => 1,
'LT_SYS_MODULE_PATH' => 1,
'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
'LT_WITH_LTDL' => 1,
'AC_LTDL_SHLIBPATH' => 1,
'AM_AUX_DIR_EXPAND' => 1,
'_LT_AC_LANG_F77_CONFIG' => 1,
'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
'_AM_SET_OPTIONS' => 1,
'_LT_COMPILER_OPTION' => 1,
'_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'AM_RUN_LOG' => 1,
'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1,
'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1,
'AC_LIBTOOL_PICMODE' => 1,
'LT_PATH_LD' => 1,
'AC_CHECK_LIBM' => 1,
'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
'_AM_MANGLE_OPTION' => 1,
'AC_LTDL_SYMBOL_USCORE' => 1,
'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
'AM_SET_DEPDIR' => 1,
'_LT_CC_BASENAME' => 1,
'_LT_LIBOBJ' => 1
}
], 'Autom4te::Request' ),
bless( [
'2',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'aclocal.m4',
'configure.ac'
],
{
'_LT_AC_TAGCONFIG' => 1,
'AM_PROG_F77_C_O' => 1,
'm4_pattern_forbid' => 1,
'AC_INIT' => 1,
'_AM_COND_IF' => 1,
'AC_CANONICAL_TARGET' => 1,
'AC_SUBST' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_FC_SRCEXT' => 1,
'AC_CANONICAL_HOST' => 1,
'AC_PROG_LIBTOOL' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AM_PATH_GUILE' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AC_REQUIRE_AUX_FILE' => 1,
'AC_CONFIG_LINKS' => 1,
'm4_sinclude' => 1,
'LT_SUPPORTED_TAG' => 1,
'AM_MAINTAINER_MODE' => 1,
'AM_NLS' => 1,
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
'AM_MAKEFILE_INCLUDE' => 1,
'_m4_warn' => 1,
'AM_PROG_CXX_C_O' => 1,
'_AM_COND_ENDIF' => 1,
'_AM_MAKEFILE_INCLUDE' => 1,
'AM_ENABLE_MULTILIB' => 1,
'AM_SILENT_RULES' => 1,
'AM_PROG_MOC' => 1,
'AC_CONFIG_FILES' => 1,
'LT_INIT' => 1,
'include' => 1,
'AM_PROG_AR' => 1,
'AM_GNU_GETTEXT' => 1,
'AC_LIBSOURCE' => 1,
'AM_PROG_FC_C_O' => 1,
'AC_CANONICAL_BUILD' => 1,
'AC_FC_FREEFORM' => 1,
'AH_OUTPUT' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'sinclude' => 1,
'AM_PROG_CC_C_O' => 1,
'm4_pattern_allow' => 1,
'AM_XGETTEXT_OPTION' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AM_CONDITIONAL' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AM_POT_TOOLS' => 1,
'm4_include' => 1,
'_AM_COND_ELSE' => 1,
'AC_SUBST_TRACE' => 1
}
], 'Autom4te::Request' )
);

201
autom4te.cache/traces.0 Normal file

@ -0,0 +1,201 @@
m4trace:configure.ac:11: -1- AC_INIT([mbus], [0.7.0], [info@rscada.se], [mbus], [http://www.freescada.com/libmbus/])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?A[CHUM]_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([_AC_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
m4trace:configure.ac:11: -1- m4_pattern_allow([^AS_FLAGS$])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?m4_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^dnl$])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?AS_])
m4trace:configure.ac:11: -1- AC_SUBST([SHELL])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([SHELL])
m4trace:configure.ac:11: -1- m4_pattern_allow([^SHELL$])
m4trace:configure.ac:11: -1- AC_SUBST([PATH_SEPARATOR])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PATH_SEPARATOR$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_NAME])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_NAME$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_VERSION$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_STRING])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_STRING$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_URL])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_URL$])
m4trace:configure.ac:11: -1- AC_SUBST([exec_prefix], [NONE])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([exec_prefix])
m4trace:configure.ac:11: -1- m4_pattern_allow([^exec_prefix$])
m4trace:configure.ac:11: -1- AC_SUBST([prefix], [NONE])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([prefix])
m4trace:configure.ac:11: -1- m4_pattern_allow([^prefix$])
m4trace:configure.ac:11: -1- AC_SUBST([program_transform_name], [s,x,x,])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([program_transform_name])
m4trace:configure.ac:11: -1- m4_pattern_allow([^program_transform_name$])
m4trace:configure.ac:11: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([bindir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^bindir$])
m4trace:configure.ac:11: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([sbindir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^sbindir$])
m4trace:configure.ac:11: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([libexecdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^libexecdir$])
m4trace:configure.ac:11: -1- AC_SUBST([datarootdir], ['${prefix}/share'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([datarootdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^datarootdir$])
m4trace:configure.ac:11: -1- AC_SUBST([datadir], ['${datarootdir}'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([datadir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^datadir$])
m4trace:configure.ac:11: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([sysconfdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^sysconfdir$])
m4trace:configure.ac:11: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([sharedstatedir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^sharedstatedir$])
m4trace:configure.ac:11: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([localstatedir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^localstatedir$])
m4trace:configure.ac:11: -1- AC_SUBST([includedir], ['${prefix}/include'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([includedir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^includedir$])
m4trace:configure.ac:11: -1- AC_SUBST([oldincludedir], ['/usr/include'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([oldincludedir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^oldincludedir$])
m4trace:configure.ac:11: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
['${datarootdir}/doc/${PACKAGE_TARNAME}'],
['${datarootdir}/doc/${PACKAGE}'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([docdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^docdir$])
m4trace:configure.ac:11: -1- AC_SUBST([infodir], ['${datarootdir}/info'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([infodir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^infodir$])
m4trace:configure.ac:11: -1- AC_SUBST([htmldir], ['${docdir}'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([htmldir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^htmldir$])
m4trace:configure.ac:11: -1- AC_SUBST([dvidir], ['${docdir}'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([dvidir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^dvidir$])
m4trace:configure.ac:11: -1- AC_SUBST([pdfdir], ['${docdir}'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([pdfdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^pdfdir$])
m4trace:configure.ac:11: -1- AC_SUBST([psdir], ['${docdir}'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([psdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^psdir$])
m4trace:configure.ac:11: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([libdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^libdir$])
m4trace:configure.ac:11: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([localedir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^localedir$])
m4trace:configure.ac:11: -1- AC_SUBST([mandir], ['${datarootdir}/man'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([mandir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^mandir$])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_NAME$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
@%:@undef PACKAGE_NAME])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
@%:@undef PACKAGE_TARNAME])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_VERSION$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
@%:@undef PACKAGE_VERSION])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_STRING$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
@%:@undef PACKAGE_STRING])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
@%:@undef PACKAGE_BUGREPORT])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_URL$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */
@%:@undef PACKAGE_URL])
m4trace:configure.ac:11: -1- AC_SUBST([DEFS])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([DEFS])
m4trace:configure.ac:11: -1- m4_pattern_allow([^DEFS$])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_C])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([ECHO_C])
m4trace:configure.ac:11: -1- m4_pattern_allow([^ECHO_C$])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_N])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([ECHO_N])
m4trace:configure.ac:11: -1- m4_pattern_allow([^ECHO_N$])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_T])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([ECHO_T])
m4trace:configure.ac:11: -1- m4_pattern_allow([^ECHO_T$])
m4trace:configure.ac:11: -1- AC_SUBST([LIBS])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:11: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:11: -1- AC_SUBST([build_alias])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([build_alias])
m4trace:configure.ac:11: -1- m4_pattern_allow([^build_alias$])
m4trace:configure.ac:11: -1- AC_SUBST([host_alias])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([host_alias])
m4trace:configure.ac:11: -1- m4_pattern_allow([^host_alias$])
m4trace:configure.ac:11: -1- AC_SUBST([target_alias])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([target_alias])
m4trace:configure.ac:11: -1- m4_pattern_allow([^target_alias$])
m4trace:configure.ac:22: -1- AC_SUBST([CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:22: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CFLAGS])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CFLAGS$])
m4trace:configure.ac:22: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([LDFLAGS])
m4trace:configure.ac:22: -1- m4_pattern_allow([^LDFLAGS$])
m4trace:configure.ac:22: -1- AC_SUBST([LIBS])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:22: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:22: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CPPFLAGS])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CPPFLAGS$])
m4trace:configure.ac:22: -1- AC_SUBST([CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:22: -1- AC_SUBST([CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:22: -1- AC_SUBST([CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:22: -1- AC_SUBST([CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:22: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([ac_ct_CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^ac_ct_CC$])
m4trace:configure.ac:22: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([EXEEXT])
m4trace:configure.ac:22: -1- m4_pattern_allow([^EXEEXT$])
m4trace:configure.ac:22: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([OBJEXT])
m4trace:configure.ac:22: -1- m4_pattern_allow([^OBJEXT$])
m4trace:configure.ac:24: -1- AC_CONFIG_HEADERS([config.h])
m4trace:configure.ac:25: -1- AC_CONFIG_FILES([Makefile mbus/Makefile test/Makefile bin/Makefile libmbus.pc])
m4trace:configure.ac:26: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
m4trace:configure.ac:26: -1- m4_pattern_allow([^LIB@&t@OBJS$])
m4trace:configure.ac:26: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([LTLIBOBJS])
m4trace:configure.ac:26: -1- m4_pattern_allow([^LTLIBOBJS$])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([top_builddir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([top_build_prefix])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([srcdir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([abs_srcdir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([top_srcdir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([abs_top_srcdir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([builddir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([abs_builddir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([abs_top_builddir])

2401
autom4te.cache/traces.1 Normal file

File diff suppressed because it is too large Load Diff

537
autom4te.cache/traces.2 Normal file

@ -0,0 +1,537 @@
m4trace:aclocal.m4:952: -1- m4_include([m4/libtool.m4])
m4trace:aclocal.m4:953: -1- m4_include([m4/ltoptions.m4])
m4trace:aclocal.m4:954: -1- m4_include([m4/ltsugar.m4])
m4trace:aclocal.m4:955: -1- m4_include([m4/ltversion.m4])
m4trace:aclocal.m4:956: -1- m4_include([m4/lt~obsolete.m4])
m4trace:configure.ac:11: -1- AC_INIT([mbus], [0.7.0], [info@rscada.se], [mbus], [http://www.freescada.com/libmbus/])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?A[CHUM]_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([_AC_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
m4trace:configure.ac:11: -1- m4_pattern_allow([^AS_FLAGS$])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?m4_])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^dnl$])
m4trace:configure.ac:11: -1- m4_pattern_forbid([^_?AS_])
m4trace:configure.ac:11: -1- AC_SUBST([SHELL])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([SHELL])
m4trace:configure.ac:11: -1- m4_pattern_allow([^SHELL$])
m4trace:configure.ac:11: -1- AC_SUBST([PATH_SEPARATOR])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PATH_SEPARATOR$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_NAME])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_NAME$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_VERSION$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_STRING])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_STRING$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
m4trace:configure.ac:11: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([PACKAGE_URL])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_URL$])
m4trace:configure.ac:11: -1- AC_SUBST([exec_prefix], [NONE])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([exec_prefix])
m4trace:configure.ac:11: -1- m4_pattern_allow([^exec_prefix$])
m4trace:configure.ac:11: -1- AC_SUBST([prefix], [NONE])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([prefix])
m4trace:configure.ac:11: -1- m4_pattern_allow([^prefix$])
m4trace:configure.ac:11: -1- AC_SUBST([program_transform_name], [s,x,x,])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([program_transform_name])
m4trace:configure.ac:11: -1- m4_pattern_allow([^program_transform_name$])
m4trace:configure.ac:11: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([bindir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^bindir$])
m4trace:configure.ac:11: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([sbindir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^sbindir$])
m4trace:configure.ac:11: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([libexecdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^libexecdir$])
m4trace:configure.ac:11: -1- AC_SUBST([datarootdir], ['${prefix}/share'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([datarootdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^datarootdir$])
m4trace:configure.ac:11: -1- AC_SUBST([datadir], ['${datarootdir}'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([datadir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^datadir$])
m4trace:configure.ac:11: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([sysconfdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^sysconfdir$])
m4trace:configure.ac:11: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([sharedstatedir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^sharedstatedir$])
m4trace:configure.ac:11: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([localstatedir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^localstatedir$])
m4trace:configure.ac:11: -1- AC_SUBST([includedir], ['${prefix}/include'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([includedir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^includedir$])
m4trace:configure.ac:11: -1- AC_SUBST([oldincludedir], ['/usr/include'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([oldincludedir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^oldincludedir$])
m4trace:configure.ac:11: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
['${datarootdir}/doc/${PACKAGE_TARNAME}'],
['${datarootdir}/doc/${PACKAGE}'])])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([docdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^docdir$])
m4trace:configure.ac:11: -1- AC_SUBST([infodir], ['${datarootdir}/info'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([infodir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^infodir$])
m4trace:configure.ac:11: -1- AC_SUBST([htmldir], ['${docdir}'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([htmldir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^htmldir$])
m4trace:configure.ac:11: -1- AC_SUBST([dvidir], ['${docdir}'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([dvidir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^dvidir$])
m4trace:configure.ac:11: -1- AC_SUBST([pdfdir], ['${docdir}'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([pdfdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^pdfdir$])
m4trace:configure.ac:11: -1- AC_SUBST([psdir], ['${docdir}'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([psdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^psdir$])
m4trace:configure.ac:11: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([libdir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^libdir$])
m4trace:configure.ac:11: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([localedir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^localedir$])
m4trace:configure.ac:11: -1- AC_SUBST([mandir], ['${datarootdir}/man'])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([mandir])
m4trace:configure.ac:11: -1- m4_pattern_allow([^mandir$])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_NAME$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
@%:@undef PACKAGE_NAME])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
@%:@undef PACKAGE_TARNAME])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_VERSION$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
@%:@undef PACKAGE_VERSION])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_STRING$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
@%:@undef PACKAGE_STRING])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
@%:@undef PACKAGE_BUGREPORT])
m4trace:configure.ac:11: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL])
m4trace:configure.ac:11: -1- m4_pattern_allow([^PACKAGE_URL$])
m4trace:configure.ac:11: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */
@%:@undef PACKAGE_URL])
m4trace:configure.ac:11: -1- AC_SUBST([DEFS])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([DEFS])
m4trace:configure.ac:11: -1- m4_pattern_allow([^DEFS$])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_C])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([ECHO_C])
m4trace:configure.ac:11: -1- m4_pattern_allow([^ECHO_C$])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_N])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([ECHO_N])
m4trace:configure.ac:11: -1- m4_pattern_allow([^ECHO_N$])
m4trace:configure.ac:11: -1- AC_SUBST([ECHO_T])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([ECHO_T])
m4trace:configure.ac:11: -1- m4_pattern_allow([^ECHO_T$])
m4trace:configure.ac:11: -1- AC_SUBST([LIBS])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:11: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:11: -1- AC_SUBST([build_alias])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([build_alias])
m4trace:configure.ac:11: -1- m4_pattern_allow([^build_alias$])
m4trace:configure.ac:11: -1- AC_SUBST([host_alias])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([host_alias])
m4trace:configure.ac:11: -1- m4_pattern_allow([^host_alias$])
m4trace:configure.ac:11: -1- AC_SUBST([target_alias])
m4trace:configure.ac:11: -1- AC_SUBST_TRACE([target_alias])
m4trace:configure.ac:11: -1- m4_pattern_allow([^target_alias$])
m4trace:configure.ac:12: -1- AM_INIT_AUTOMAKE([-Wall -Werror foreign])
m4trace:configure.ac:12: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
m4trace:configure.ac:12: -1- AM_AUTOMAKE_VERSION([1.11.1])
m4trace:configure.ac:12: -1- AC_REQUIRE_AUX_FILE([install-sh])
m4trace:configure.ac:12: -1- AC_SUBST([INSTALL_PROGRAM])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([INSTALL_PROGRAM])
m4trace:configure.ac:12: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
m4trace:configure.ac:12: -1- AC_SUBST([INSTALL_SCRIPT])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([INSTALL_SCRIPT])
m4trace:configure.ac:12: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
m4trace:configure.ac:12: -1- AC_SUBST([INSTALL_DATA])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([INSTALL_DATA])
m4trace:configure.ac:12: -1- m4_pattern_allow([^INSTALL_DATA$])
m4trace:configure.ac:12: -1- AC_SUBST([am__isrc], [' -I$(srcdir)'])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([am__isrc])
m4trace:configure.ac:12: -1- m4_pattern_allow([^am__isrc$])
m4trace:configure.ac:12: -1- _AM_SUBST_NOTMAKE([am__isrc])
m4trace:configure.ac:12: -1- AC_SUBST([CYGPATH_W])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([CYGPATH_W])
m4trace:configure.ac:12: -1- m4_pattern_allow([^CYGPATH_W$])
m4trace:configure.ac:12: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([PACKAGE])
m4trace:configure.ac:12: -1- m4_pattern_allow([^PACKAGE$])
m4trace:configure.ac:12: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([VERSION])
m4trace:configure.ac:12: -1- m4_pattern_allow([^VERSION$])
m4trace:configure.ac:12: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE])
m4trace:configure.ac:12: -1- m4_pattern_allow([^PACKAGE$])
m4trace:configure.ac:12: -1- AH_OUTPUT([PACKAGE], [/* Name of package */
@%:@undef PACKAGE])
m4trace:configure.ac:12: -1- AC_DEFINE_TRACE_LITERAL([VERSION])
m4trace:configure.ac:12: -1- m4_pattern_allow([^VERSION$])
m4trace:configure.ac:12: -1- AH_OUTPUT([VERSION], [/* Version number of package */
@%:@undef VERSION])
m4trace:configure.ac:12: -1- AC_REQUIRE_AUX_FILE([missing])
m4trace:configure.ac:12: -1- AC_SUBST([ACLOCAL])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([ACLOCAL])
m4trace:configure.ac:12: -1- m4_pattern_allow([^ACLOCAL$])
m4trace:configure.ac:12: -1- AC_SUBST([AUTOCONF])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([AUTOCONF])
m4trace:configure.ac:12: -1- m4_pattern_allow([^AUTOCONF$])
m4trace:configure.ac:12: -1- AC_SUBST([AUTOMAKE])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([AUTOMAKE])
m4trace:configure.ac:12: -1- m4_pattern_allow([^AUTOMAKE$])
m4trace:configure.ac:12: -1- AC_SUBST([AUTOHEADER])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([AUTOHEADER])
m4trace:configure.ac:12: -1- m4_pattern_allow([^AUTOHEADER$])
m4trace:configure.ac:12: -1- AC_SUBST([MAKEINFO])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([MAKEINFO])
m4trace:configure.ac:12: -1- m4_pattern_allow([^MAKEINFO$])
m4trace:configure.ac:12: -1- AC_SUBST([install_sh])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([install_sh])
m4trace:configure.ac:12: -1- m4_pattern_allow([^install_sh$])
m4trace:configure.ac:12: -1- AC_SUBST([STRIP])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([STRIP])
m4trace:configure.ac:12: -1- m4_pattern_allow([^STRIP$])
m4trace:configure.ac:12: -1- AC_SUBST([INSTALL_STRIP_PROGRAM])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM])
m4trace:configure.ac:12: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$])
m4trace:configure.ac:12: -1- AC_REQUIRE_AUX_FILE([install-sh])
m4trace:configure.ac:12: -1- AC_SUBST([MKDIR_P])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([MKDIR_P])
m4trace:configure.ac:12: -1- m4_pattern_allow([^MKDIR_P$])
m4trace:configure.ac:12: -1- AC_SUBST([mkdir_p], ["$MKDIR_P"])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([mkdir_p])
m4trace:configure.ac:12: -1- m4_pattern_allow([^mkdir_p$])
m4trace:configure.ac:12: -1- AC_SUBST([AWK])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([AWK])
m4trace:configure.ac:12: -1- m4_pattern_allow([^AWK$])
m4trace:configure.ac:12: -1- AC_SUBST([SET_MAKE])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([SET_MAKE])
m4trace:configure.ac:12: -1- m4_pattern_allow([^SET_MAKE$])
m4trace:configure.ac:12: -1- AC_SUBST([am__leading_dot])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([am__leading_dot])
m4trace:configure.ac:12: -1- m4_pattern_allow([^am__leading_dot$])
m4trace:configure.ac:12: -1- AC_SUBST([AMTAR])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([AMTAR])
m4trace:configure.ac:12: -1- m4_pattern_allow([^AMTAR$])
m4trace:configure.ac:12: -1- AC_SUBST([am__tar])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([am__tar])
m4trace:configure.ac:12: -1- m4_pattern_allow([^am__tar$])
m4trace:configure.ac:12: -1- AC_SUBST([am__untar])
m4trace:configure.ac:12: -1- AC_SUBST_TRACE([am__untar])
m4trace:configure.ac:12: -1- m4_pattern_allow([^am__untar$])
m4trace:configure.ac:16: -1- _m4_warn([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete.
You should run autoupdate.], [m4/libtool.m4:108: AM_PROG_LIBTOOL is expanded from...
configure.ac:16: the top level])
m4trace:configure.ac:16: -1- LT_INIT
m4trace:configure.ac:16: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$])
m4trace:configure.ac:16: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])
m4trace:configure.ac:16: -1- AC_REQUIRE_AUX_FILE([ltmain.sh])
m4trace:configure.ac:16: -1- AC_SUBST([LIBTOOL])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([LIBTOOL])
m4trace:configure.ac:16: -1- m4_pattern_allow([^LIBTOOL$])
m4trace:configure.ac:16: -1- AC_CANONICAL_HOST
m4trace:configure.ac:16: -1- AC_CANONICAL_BUILD
m4trace:configure.ac:16: -1- AC_REQUIRE_AUX_FILE([config.sub])
m4trace:configure.ac:16: -1- AC_REQUIRE_AUX_FILE([config.guess])
m4trace:configure.ac:16: -1- AC_SUBST([build], [$ac_cv_build])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([build])
m4trace:configure.ac:16: -1- m4_pattern_allow([^build$])
m4trace:configure.ac:16: -1- AC_SUBST([build_cpu], [$[1]])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([build_cpu])
m4trace:configure.ac:16: -1- m4_pattern_allow([^build_cpu$])
m4trace:configure.ac:16: -1- AC_SUBST([build_vendor], [$[2]])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([build_vendor])
m4trace:configure.ac:16: -1- m4_pattern_allow([^build_vendor$])
m4trace:configure.ac:16: -1- AC_SUBST([build_os])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([build_os])
m4trace:configure.ac:16: -1- m4_pattern_allow([^build_os$])
m4trace:configure.ac:16: -1- AC_SUBST([host], [$ac_cv_host])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([host])
m4trace:configure.ac:16: -1- m4_pattern_allow([^host$])
m4trace:configure.ac:16: -1- AC_SUBST([host_cpu], [$[1]])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([host_cpu])
m4trace:configure.ac:16: -1- m4_pattern_allow([^host_cpu$])
m4trace:configure.ac:16: -1- AC_SUBST([host_vendor], [$[2]])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([host_vendor])
m4trace:configure.ac:16: -1- m4_pattern_allow([^host_vendor$])
m4trace:configure.ac:16: -1- AC_SUBST([host_os])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([host_os])
m4trace:configure.ac:16: -1- m4_pattern_allow([^host_os$])
m4trace:configure.ac:16: -1- AC_SUBST([CC])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:16: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CFLAGS])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CFLAGS$])
m4trace:configure.ac:16: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([LDFLAGS])
m4trace:configure.ac:16: -1- m4_pattern_allow([^LDFLAGS$])
m4trace:configure.ac:16: -1- AC_SUBST([LIBS])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:16: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:16: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CPPFLAGS])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CPPFLAGS$])
m4trace:configure.ac:16: -1- AC_SUBST([CC])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:16: -1- AC_SUBST([CC])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:16: -1- AC_SUBST([CC])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:16: -1- AC_SUBST([CC])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:16: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([ac_ct_CC])
m4trace:configure.ac:16: -1- m4_pattern_allow([^ac_ct_CC$])
m4trace:configure.ac:16: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([EXEEXT])
m4trace:configure.ac:16: -1- m4_pattern_allow([^EXEEXT$])
m4trace:configure.ac:16: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([OBJEXT])
m4trace:configure.ac:16: -1- m4_pattern_allow([^OBJEXT$])
m4trace:configure.ac:16: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([DEPDIR])
m4trace:configure.ac:16: -1- m4_pattern_allow([^DEPDIR$])
m4trace:configure.ac:16: -1- AC_SUBST([am__include])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([am__include])
m4trace:configure.ac:16: -1- m4_pattern_allow([^am__include$])
m4trace:configure.ac:16: -1- AC_SUBST([am__quote])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([am__quote])
m4trace:configure.ac:16: -1- m4_pattern_allow([^am__quote$])
m4trace:configure.ac:16: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
m4trace:configure.ac:16: -1- AC_SUBST([AMDEP_TRUE])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([AMDEP_TRUE])
m4trace:configure.ac:16: -1- m4_pattern_allow([^AMDEP_TRUE$])
m4trace:configure.ac:16: -1- AC_SUBST([AMDEP_FALSE])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([AMDEP_FALSE])
m4trace:configure.ac:16: -1- m4_pattern_allow([^AMDEP_FALSE$])
m4trace:configure.ac:16: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE])
m4trace:configure.ac:16: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE])
m4trace:configure.ac:16: -1- AC_SUBST([AMDEPBACKSLASH])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([AMDEPBACKSLASH])
m4trace:configure.ac:16: -1- m4_pattern_allow([^AMDEPBACKSLASH$])
m4trace:configure.ac:16: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])
m4trace:configure.ac:16: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CCDEPMODE])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CCDEPMODE$])
m4trace:configure.ac:16: -1- AM_CONDITIONAL([am__fastdepCC], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:16: -1- AC_SUBST([am__fastdepCC_TRUE])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE])
m4trace:configure.ac:16: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])
m4trace:configure.ac:16: -1- AC_SUBST([am__fastdepCC_FALSE])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE])
m4trace:configure.ac:16: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])
m4trace:configure.ac:16: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE])
m4trace:configure.ac:16: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE])
m4trace:configure.ac:16: -1- AC_SUBST([SED])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([SED])
m4trace:configure.ac:16: -1- m4_pattern_allow([^SED$])
m4trace:configure.ac:16: -1- AC_SUBST([GREP])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([GREP])
m4trace:configure.ac:16: -1- m4_pattern_allow([^GREP$])
m4trace:configure.ac:16: -1- AC_SUBST([EGREP])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([EGREP])
m4trace:configure.ac:16: -1- m4_pattern_allow([^EGREP$])
m4trace:configure.ac:16: -1- AC_SUBST([FGREP])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([FGREP])
m4trace:configure.ac:16: -1- m4_pattern_allow([^FGREP$])
m4trace:configure.ac:16: -1- AC_SUBST([GREP])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([GREP])
m4trace:configure.ac:16: -1- m4_pattern_allow([^GREP$])
m4trace:configure.ac:16: -1- AC_SUBST([LD])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([LD])
m4trace:configure.ac:16: -1- m4_pattern_allow([^LD$])
m4trace:configure.ac:16: -1- AC_SUBST([DUMPBIN])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([DUMPBIN])
m4trace:configure.ac:16: -1- m4_pattern_allow([^DUMPBIN$])
m4trace:configure.ac:16: -1- AC_SUBST([ac_ct_DUMPBIN])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([ac_ct_DUMPBIN])
m4trace:configure.ac:16: -1- m4_pattern_allow([^ac_ct_DUMPBIN$])
m4trace:configure.ac:16: -1- AC_SUBST([DUMPBIN])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([DUMPBIN])
m4trace:configure.ac:16: -1- m4_pattern_allow([^DUMPBIN$])
m4trace:configure.ac:16: -1- AC_SUBST([NM])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([NM])
m4trace:configure.ac:16: -1- m4_pattern_allow([^NM$])
m4trace:configure.ac:16: -1- AC_SUBST([LN_S], [$as_ln_s])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([LN_S])
m4trace:configure.ac:16: -1- m4_pattern_allow([^LN_S$])
m4trace:configure.ac:16: -1- AC_SUBST([OBJDUMP])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([OBJDUMP])
m4trace:configure.ac:16: -1- m4_pattern_allow([^OBJDUMP$])
m4trace:configure.ac:16: -1- AC_SUBST([OBJDUMP])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([OBJDUMP])
m4trace:configure.ac:16: -1- m4_pattern_allow([^OBJDUMP$])
m4trace:configure.ac:16: -1- AC_SUBST([DLLTOOL])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([DLLTOOL])
m4trace:configure.ac:16: -1- m4_pattern_allow([^DLLTOOL$])
m4trace:configure.ac:16: -1- AC_SUBST([DLLTOOL])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([DLLTOOL])
m4trace:configure.ac:16: -1- m4_pattern_allow([^DLLTOOL$])
m4trace:configure.ac:16: -1- AC_SUBST([AR])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([AR])
m4trace:configure.ac:16: -1- m4_pattern_allow([^AR$])
m4trace:configure.ac:16: -1- AC_SUBST([ac_ct_AR])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([ac_ct_AR])
m4trace:configure.ac:16: -1- m4_pattern_allow([^ac_ct_AR$])
m4trace:configure.ac:16: -1- AC_SUBST([STRIP])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([STRIP])
m4trace:configure.ac:16: -1- m4_pattern_allow([^STRIP$])
m4trace:configure.ac:16: -1- AC_SUBST([RANLIB])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([RANLIB])
m4trace:configure.ac:16: -1- m4_pattern_allow([^RANLIB$])
m4trace:configure.ac:16: -1- m4_pattern_allow([LT_OBJDIR])
m4trace:configure.ac:16: -1- AC_DEFINE_TRACE_LITERAL([LT_OBJDIR])
m4trace:configure.ac:16: -1- m4_pattern_allow([^LT_OBJDIR$])
m4trace:configure.ac:16: -1- AH_OUTPUT([LT_OBJDIR], [/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
@%:@undef LT_OBJDIR])
m4trace:configure.ac:16: -1- LT_SUPPORTED_TAG([CC])
m4trace:configure.ac:16: -1- AC_SUBST([MANIFEST_TOOL])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([MANIFEST_TOOL])
m4trace:configure.ac:16: -1- m4_pattern_allow([^MANIFEST_TOOL$])
m4trace:configure.ac:16: -1- AC_SUBST([DSYMUTIL])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([DSYMUTIL])
m4trace:configure.ac:16: -1- m4_pattern_allow([^DSYMUTIL$])
m4trace:configure.ac:16: -1- AC_SUBST([NMEDIT])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([NMEDIT])
m4trace:configure.ac:16: -1- m4_pattern_allow([^NMEDIT$])
m4trace:configure.ac:16: -1- AC_SUBST([LIPO])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([LIPO])
m4trace:configure.ac:16: -1- m4_pattern_allow([^LIPO$])
m4trace:configure.ac:16: -1- AC_SUBST([OTOOL])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([OTOOL])
m4trace:configure.ac:16: -1- m4_pattern_allow([^OTOOL$])
m4trace:configure.ac:16: -1- AC_SUBST([OTOOL64])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([OTOOL64])
m4trace:configure.ac:16: -1- m4_pattern_allow([^OTOOL64$])
m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
@%:@undef HAVE_DLFCN_H])
m4trace:configure.ac:16: -1- AC_SUBST([CPP])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CPP])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CPP$])
m4trace:configure.ac:16: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CPPFLAGS])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CPPFLAGS$])
m4trace:configure.ac:16: -1- AC_SUBST([CPP])
m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CPP])
m4trace:configure.ac:16: -1- m4_pattern_allow([^CPP$])
m4trace:configure.ac:16: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:16: -1- m4_pattern_allow([^STDC_HEADERS$])
m4trace:configure.ac:16: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
@%:@undef STDC_HEADERS])
m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
@%:@undef HAVE_SYS_TYPES_H])
m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
@%:@undef HAVE_SYS_STAT_H])
m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
@%:@undef HAVE_STDLIB_H])
m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
@%:@undef HAVE_STRING_H])
m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
@%:@undef HAVE_MEMORY_H])
m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
@%:@undef HAVE_STRINGS_H])
m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
@%:@undef HAVE_INTTYPES_H])
m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
@%:@undef HAVE_STDINT_H])
m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
@%:@undef HAVE_UNISTD_H])
m4trace:configure.ac:16: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DLFCN_H])
m4trace:configure.ac:16: -1- m4_pattern_allow([^HAVE_DLFCN_H$])
m4trace:configure.ac:22: -1- AC_SUBST([CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:22: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CFLAGS])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CFLAGS$])
m4trace:configure.ac:22: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([LDFLAGS])
m4trace:configure.ac:22: -1- m4_pattern_allow([^LDFLAGS$])
m4trace:configure.ac:22: -1- AC_SUBST([LIBS])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:22: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:22: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CPPFLAGS])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CPPFLAGS$])
m4trace:configure.ac:22: -1- AC_SUBST([CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:22: -1- AC_SUBST([CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:22: -1- AC_SUBST([CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:22: -1- AC_SUBST([CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:22: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([ac_ct_CC])
m4trace:configure.ac:22: -1- m4_pattern_allow([^ac_ct_CC$])
m4trace:configure.ac:22: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([CCDEPMODE])
m4trace:configure.ac:22: -1- m4_pattern_allow([^CCDEPMODE$])
m4trace:configure.ac:22: -1- AM_CONDITIONAL([am__fastdepCC], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:22: -1- AC_SUBST([am__fastdepCC_TRUE])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE])
m4trace:configure.ac:22: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])
m4trace:configure.ac:22: -1- AC_SUBST([am__fastdepCC_FALSE])
m4trace:configure.ac:22: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE])
m4trace:configure.ac:22: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])
m4trace:configure.ac:22: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE])
m4trace:configure.ac:22: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE])
m4trace:configure.ac:24: -1- AC_CONFIG_HEADERS([config.h])
m4trace:configure.ac:25: -1- AC_CONFIG_FILES([Makefile mbus/Makefile test/Makefile bin/Makefile libmbus.pc])
m4trace:configure.ac:26: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
m4trace:configure.ac:26: -1- m4_pattern_allow([^LIB@&t@OBJS$])
m4trace:configure.ac:26: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([LTLIBOBJS])
m4trace:configure.ac:26: -1- m4_pattern_allow([^LTLIBOBJS$])
m4trace:configure.ac:26: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])
m4trace:configure.ac:26: -1- AC_SUBST([am__EXEEXT_TRUE])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE])
m4trace:configure.ac:26: -1- m4_pattern_allow([^am__EXEEXT_TRUE$])
m4trace:configure.ac:26: -1- AC_SUBST([am__EXEEXT_FALSE])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE])
m4trace:configure.ac:26: -1- m4_pattern_allow([^am__EXEEXT_FALSE$])
m4trace:configure.ac:26: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE])
m4trace:configure.ac:26: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([top_builddir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([top_build_prefix])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([srcdir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([abs_srcdir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([top_srcdir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([abs_top_srcdir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([builddir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([abs_builddir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([abs_top_builddir])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([INSTALL])
m4trace:configure.ac:26: -1- AC_SUBST_TRACE([MKDIR_P])
m4trace:configure.ac:26: -1- AC_REQUIRE_AUX_FILE([ltmain.sh])

24
bin/Makefile-static Normal file

@ -0,0 +1,24 @@
#
# Copyright (C) 2011, Robert Johansson, Raditex AB
# All rights reserved.
#
# FreeSCADA
# http://www.FreeSCADA.com
# freescada@freescada.com
#
CFLAGS=-Wall -g -I..
LDFLAGS=-L.. -lm -lmbus
all: mbus-tcp-scan mbus-tcp-request-data
%.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
mbus-tcp-scan: mbus-tcp-scan.o mbus-tcp.o
gcc -o $@ $^ $(LDFLAGS)
mbus-tcp-request-data: mbus-tcp-request-data.o mbus-tcp.o
gcc -o $@ $^ $(LDFLAGS)
clean:
rm -rf mbus-tcp-request-data mbus-tcp-scan *.o *~

54
bin/Makefile.am Normal file

@ -0,0 +1,54 @@
# ------------------------------------------------------------------------------
# Copyright (C) 2010, Raditex AB
# All rights reserved.
#
# FreeSCADA
# http://www.FreeSCADA.com
# freescada@freescada.com
#
# ------------------------------------------------------------------------------
PACKAGE = @PACKAGE@
VERSION = @VERSION@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/src
noinst_HEADERS =
bin_PROGRAMS = mbus-tcp-scan mbus-tcp-request-data \
mbus-tcp-select-secondary mbus-tcp-scan-secondary \
mbus-serial-scan mbus-serial-request-data \
mbus-serial-select-secondary mbus-serial-scan-secondary
# tcp
mbus_tcp_scan_LDFLAGS = -L$(top_builddir)/mbus
mbus_tcp_scan_LDADD = -lmbus
mbus_tcp_scan_SOURCES = mbus-tcp-scan.c
mbus_tcp_request_data_LDFLAGS = -L$(top_builddir)/mbus
mbus_tcp_request_data_LDADD = -lmbus
mbus_tcp_request_data_SOURCES = mbus-tcp-request-data.c
mbus_tcp_select_secondary_LDFLAGS = -L$(top_builddir)/mbus
mbus_tcp_select_secondary_LDADD = -lmbus
mbus_tcp_select_secondary_SOURCES = mbus-tcp-select-secondary.c
mbus_tcp_scan_secondary_LDFLAGS = -L$(top_builddir)/mbus
mbus_tcp_scan_secondary_LDADD = -lmbus
mbus_tcp_scan_secondary_SOURCES = mbus-tcp-scan-secondary.c
# serial
mbus_serial_scan_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_scan_LDADD = -lmbus
mbus_serial_scan_SOURCES = mbus-serial-scan.c
mbus_serial_request_data_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_request_data_LDADD = -lmbus
mbus_serial_request_data_SOURCES = mbus-serial-request-data.c
mbus_serial_select_secondary_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_select_secondary_LDADD = -lmbus
mbus_serial_select_secondary_SOURCES = mbus-serial-select-secondary.c
mbus_serial_scan_secondary_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_scan_secondary_LDADD = -lmbus
mbus_serial_scan_secondary_SOURCES = mbus-serial-scan-secondary.c

652
bin/Makefile.in Normal file

@ -0,0 +1,652 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = mbus-tcp-scan$(EXEEXT) mbus-tcp-request-data$(EXEEXT) \
mbus-tcp-select-secondary$(EXEEXT) \
mbus-tcp-scan-secondary$(EXEEXT) mbus-serial-scan$(EXEEXT) \
mbus-serial-request-data$(EXEEXT) \
mbus-serial-select-secondary$(EXEEXT) \
mbus-serial-scan-secondary$(EXEEXT)
subdir = bin
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
am_mbus_serial_request_data_OBJECTS = \
mbus-serial-request-data.$(OBJEXT)
mbus_serial_request_data_OBJECTS = \
$(am_mbus_serial_request_data_OBJECTS)
mbus_serial_request_data_DEPENDENCIES =
mbus_serial_request_data_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mbus_serial_request_data_LDFLAGS) $(LDFLAGS) -o $@
am_mbus_serial_scan_OBJECTS = mbus-serial-scan.$(OBJEXT)
mbus_serial_scan_OBJECTS = $(am_mbus_serial_scan_OBJECTS)
mbus_serial_scan_DEPENDENCIES =
mbus_serial_scan_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mbus_serial_scan_LDFLAGS) $(LDFLAGS) -o $@
am_mbus_serial_scan_secondary_OBJECTS = \
mbus-serial-scan-secondary.$(OBJEXT)
mbus_serial_scan_secondary_OBJECTS = \
$(am_mbus_serial_scan_secondary_OBJECTS)
mbus_serial_scan_secondary_DEPENDENCIES =
mbus_serial_scan_secondary_LINK = $(LIBTOOL) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(mbus_serial_scan_secondary_LDFLAGS) \
$(LDFLAGS) -o $@
am_mbus_serial_select_secondary_OBJECTS = \
mbus-serial-select-secondary.$(OBJEXT)
mbus_serial_select_secondary_OBJECTS = \
$(am_mbus_serial_select_secondary_OBJECTS)
mbus_serial_select_secondary_DEPENDENCIES =
mbus_serial_select_secondary_LINK = $(LIBTOOL) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(mbus_serial_select_secondary_LDFLAGS) \
$(LDFLAGS) -o $@
am_mbus_tcp_request_data_OBJECTS = mbus-tcp-request-data.$(OBJEXT)
mbus_tcp_request_data_OBJECTS = $(am_mbus_tcp_request_data_OBJECTS)
mbus_tcp_request_data_DEPENDENCIES =
mbus_tcp_request_data_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mbus_tcp_request_data_LDFLAGS) $(LDFLAGS) -o $@
am_mbus_tcp_scan_OBJECTS = mbus-tcp-scan.$(OBJEXT)
mbus_tcp_scan_OBJECTS = $(am_mbus_tcp_scan_OBJECTS)
mbus_tcp_scan_DEPENDENCIES =
mbus_tcp_scan_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mbus_tcp_scan_LDFLAGS) $(LDFLAGS) -o $@
am_mbus_tcp_scan_secondary_OBJECTS = \
mbus-tcp-scan-secondary.$(OBJEXT)
mbus_tcp_scan_secondary_OBJECTS = \
$(am_mbus_tcp_scan_secondary_OBJECTS)
mbus_tcp_scan_secondary_DEPENDENCIES =
mbus_tcp_scan_secondary_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mbus_tcp_scan_secondary_LDFLAGS) $(LDFLAGS) -o $@
am_mbus_tcp_select_secondary_OBJECTS = \
mbus-tcp-select-secondary.$(OBJEXT)
mbus_tcp_select_secondary_OBJECTS = \
$(am_mbus_tcp_select_secondary_OBJECTS)
mbus_tcp_select_secondary_DEPENDENCIES =
mbus_tcp_select_secondary_LINK = $(LIBTOOL) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(mbus_tcp_select_secondary_LDFLAGS) \
$(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(mbus_serial_request_data_SOURCES) \
$(mbus_serial_scan_SOURCES) \
$(mbus_serial_scan_secondary_SOURCES) \
$(mbus_serial_select_secondary_SOURCES) \
$(mbus_tcp_request_data_SOURCES) $(mbus_tcp_scan_SOURCES) \
$(mbus_tcp_scan_secondary_SOURCES) \
$(mbus_tcp_select_secondary_SOURCES)
DIST_SOURCES = $(mbus_serial_request_data_SOURCES) \
$(mbus_serial_scan_SOURCES) \
$(mbus_serial_scan_secondary_SOURCES) \
$(mbus_serial_select_secondary_SOURCES) \
$(mbus_tcp_request_data_SOURCES) $(mbus_tcp_scan_SOURCES) \
$(mbus_tcp_scan_secondary_SOURCES) \
$(mbus_tcp_select_secondary_SOURCES)
HEADERS = $(noinst_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
# ------------------------------------------------------------------------------
# Copyright (C) 2010, Raditex AB
# All rights reserved.
#
# FreeSCADA
# http://www.FreeSCADA.com
# freescada@freescada.com
#
# ------------------------------------------------------------------------------
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/src
noinst_HEADERS =
# tcp
mbus_tcp_scan_LDFLAGS = -L$(top_builddir)/mbus
mbus_tcp_scan_LDADD = -lmbus
mbus_tcp_scan_SOURCES = mbus-tcp-scan.c
mbus_tcp_request_data_LDFLAGS = -L$(top_builddir)/mbus
mbus_tcp_request_data_LDADD = -lmbus
mbus_tcp_request_data_SOURCES = mbus-tcp-request-data.c
mbus_tcp_select_secondary_LDFLAGS = -L$(top_builddir)/mbus
mbus_tcp_select_secondary_LDADD = -lmbus
mbus_tcp_select_secondary_SOURCES = mbus-tcp-select-secondary.c
mbus_tcp_scan_secondary_LDFLAGS = -L$(top_builddir)/mbus
mbus_tcp_scan_secondary_LDADD = -lmbus
mbus_tcp_scan_secondary_SOURCES = mbus-tcp-scan-secondary.c
# serial
mbus_serial_scan_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_scan_LDADD = -lmbus
mbus_serial_scan_SOURCES = mbus-serial-scan.c
mbus_serial_request_data_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_request_data_LDADD = -lmbus
mbus_serial_request_data_SOURCES = mbus-serial-request-data.c
mbus_serial_select_secondary_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_select_secondary_LDADD = -lmbus
mbus_serial_select_secondary_SOURCES = mbus-serial-select-secondary.c
mbus_serial_scan_secondary_LDFLAGS = -L$(top_builddir)/mbus
mbus_serial_scan_secondary_LDADD = -lmbus
mbus_serial_scan_secondary_SOURCES = mbus-serial-scan-secondary.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bin/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign bin/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) files[d] = files[d] " " $$1; \
else { print "f", $$3 "/" $$4, $$1; } } \
END { for (d in files) print "f", d, files[d] }' | \
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
} \
; done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
clean-binPROGRAMS:
@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
mbus-serial-request-data$(EXEEXT): $(mbus_serial_request_data_OBJECTS) $(mbus_serial_request_data_DEPENDENCIES)
@rm -f mbus-serial-request-data$(EXEEXT)
$(mbus_serial_request_data_LINK) $(mbus_serial_request_data_OBJECTS) $(mbus_serial_request_data_LDADD) $(LIBS)
mbus-serial-scan$(EXEEXT): $(mbus_serial_scan_OBJECTS) $(mbus_serial_scan_DEPENDENCIES)
@rm -f mbus-serial-scan$(EXEEXT)
$(mbus_serial_scan_LINK) $(mbus_serial_scan_OBJECTS) $(mbus_serial_scan_LDADD) $(LIBS)
mbus-serial-scan-secondary$(EXEEXT): $(mbus_serial_scan_secondary_OBJECTS) $(mbus_serial_scan_secondary_DEPENDENCIES)
@rm -f mbus-serial-scan-secondary$(EXEEXT)
$(mbus_serial_scan_secondary_LINK) $(mbus_serial_scan_secondary_OBJECTS) $(mbus_serial_scan_secondary_LDADD) $(LIBS)
mbus-serial-select-secondary$(EXEEXT): $(mbus_serial_select_secondary_OBJECTS) $(mbus_serial_select_secondary_DEPENDENCIES)
@rm -f mbus-serial-select-secondary$(EXEEXT)
$(mbus_serial_select_secondary_LINK) $(mbus_serial_select_secondary_OBJECTS) $(mbus_serial_select_secondary_LDADD) $(LIBS)
mbus-tcp-request-data$(EXEEXT): $(mbus_tcp_request_data_OBJECTS) $(mbus_tcp_request_data_DEPENDENCIES)
@rm -f mbus-tcp-request-data$(EXEEXT)
$(mbus_tcp_request_data_LINK) $(mbus_tcp_request_data_OBJECTS) $(mbus_tcp_request_data_LDADD) $(LIBS)
mbus-tcp-scan$(EXEEXT): $(mbus_tcp_scan_OBJECTS) $(mbus_tcp_scan_DEPENDENCIES)
@rm -f mbus-tcp-scan$(EXEEXT)
$(mbus_tcp_scan_LINK) $(mbus_tcp_scan_OBJECTS) $(mbus_tcp_scan_LDADD) $(LIBS)
mbus-tcp-scan-secondary$(EXEEXT): $(mbus_tcp_scan_secondary_OBJECTS) $(mbus_tcp_scan_secondary_DEPENDENCIES)
@rm -f mbus-tcp-scan-secondary$(EXEEXT)
$(mbus_tcp_scan_secondary_LINK) $(mbus_tcp_scan_secondary_OBJECTS) $(mbus_tcp_scan_secondary_LDADD) $(LIBS)
mbus-tcp-select-secondary$(EXEEXT): $(mbus_tcp_select_secondary_OBJECTS) $(mbus_tcp_select_secondary_DEPENDENCIES)
@rm -f mbus-tcp-select-secondary$(EXEEXT)
$(mbus_tcp_select_secondary_LINK) $(mbus_tcp_select_secondary_OBJECTS) $(mbus_tcp_select_secondary_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-serial-request-data.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-serial-scan-secondary.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-serial-scan.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-serial-select-secondary.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-tcp-request-data.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-tcp-scan-secondary.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-tcp-scan.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-tcp-select-secondary.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-binPROGRAMS
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-libtool ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-binPROGRAMS install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am \
uninstall-binPROGRAMS
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

@ -0,0 +1,150 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <mbus/mbus.h>
static int debug = 0;
//------------------------------------------------------------------------------
// Scan for devices using secondary addressing.
//------------------------------------------------------------------------------
int
main(int argc, char **argv)
{
mbus_frame reply;
mbus_frame_data reply_data;
mbus_handle *handle = NULL;
char *device, *addr_str, matching_addr[16];
int address, baudrate = 9600;
if (argc == 3)
{
device = argv[1];
addr_str = argv[2];
}
else if (argc == 4 && strcmp(argv[1], "-d") == 0)
{
device = argv[2];
addr_str = argv[3];
debug = 1;
}
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
{
baudrate = atoi(argv[2]);
device = argv[3];
addr_str = argv[4];
}
else if (argc == 6 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
{
baudrate = atoi(argv[3]);
device = argv[4];
addr_str = argv[5];
debug = 1;
}
else
{
fprintf(stderr, "usage: %s [-d] [-b BAUDRATE] device mbus-address\n", argv[0]);
fprintf(stderr, " optional flag -d for debug printout\n");
fprintf(stderr, " optional flag -b for selecting baudrate\n");
return 0;
}
if ((handle = mbus_connect_serial(device)) == NULL)
{
fprintf(stderr, "Failed to setup connection to M-bus gateway\n");
return -1;
}
if (mbus_serial_set_baudrate(handle->m_serial_handle, baudrate) == -1)
{
printf("Failed to set baud rate.\n");
return -1;
}
if (strlen(addr_str) == 16)
{
// secondary addressing
int probe_ret;
probe_ret = mbus_probe_secondary_address(handle, addr_str, matching_addr);
if (probe_ret == MBUS_PROBE_COLLISION)
{
fprintf(stderr, "%s: Error: The address mask [%s] matches more than one device.\n", __PRETTY_FUNCTION__, addr_str);
return -1;
}
else if (probe_ret == MBUS_PROBE_NOTHING)
{
fprintf(stderr, "%s: Error: The selected secondary address does not match any device [%s].\n", __PRETTY_FUNCTION__, addr_str);
return -1;
}
else if (probe_ret == MBUS_PROBE_ERROR)
{
fprintf(stderr, "%s: Error: Failed to probe secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str);
return -1;
}
// else MBUS_PROBE_SINGLE
if (mbus_send_request_frame(handle, 253) == -1)
{
fprintf(stderr, "Failed to send M-Bus request frame.\n");
return -1;
}
}
else
{
// primary addressing
address = atoi(addr_str);
if (mbus_send_request_frame(handle, address) == -1)
{
fprintf(stderr, "Failed to send M-Bus request frame.\n");
return -1;
}
}
if (mbus_recv_frame(handle, &reply) == -1)
{
fprintf(stderr, "Failed to receive M-Bus response frame.\n");
return -1;
}
//
// parse data and print in XML format
//
if (debug)
{
mbus_frame_print(&reply);
}
mbus_frame_data_parse(&reply, &reply_data);
printf("%s", mbus_frame_data_xml(&reply_data));
// manual free
if (reply_data.data_var.record)
{
mbus_data_record_free(reply_data.data_var.record); // free's up the whole list
}
mbus_disconnect(handle);
return 0;
}

@ -0,0 +1,88 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <mbus/mbus.h>
//------------------------------------------------------------------------------
// Scan for devices using secondary addressing.
//------------------------------------------------------------------------------
int
main(int argc, char **argv)
{
char *device, *addr_mask;
int address, baudrate = 9600;
mbus_handle *handle = NULL;
if (argc == 2)
{
device = argv[1];
addr_mask = strdup("FFFFFFFFFFFFFFFF");
}
else if (argc == 3)
{
device = argv[1];
addr_mask = strdup(argv[2]);
}
else if (argc == 4 && strcmp(argv[1], "-b") == 0)
{
baudrate = atoi(argv[2]);
device = argv[3];
addr_mask = strdup("FFFFFFFFFFFFFFFF");
}
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
{
baudrate = atoi(argv[2]);
device = argv[3];
addr_mask = strdup(argv[4]);
}
else
{
fprintf(stderr, "usage: %s [-b BAUDRATE] device [address-mask]\n", argv[0]);
fprintf(stderr, "\trestrict the search by supplying an optional address mask on the form\n");
fprintf(stderr, "\t'FFFFFFFFFFFFFFFF' where F is a wildcard character\n");
return 0;
}
if (strlen(addr_mask) != 16)
{
fprintf(stderr, "Misformatted secondary address mask. Must be 16 character HEX number.\n");
return -1;
}
if ((handle = mbus_connect_serial(device)) == NULL)
{
fprintf(stderr, "Failed to setup connection to M-bus gateway: %s\n", mbus_error_str());
return -1;
}
if (mbus_serial_set_baudrate(handle->m_serial_handle, baudrate) == -1)
{
printf("Failed to set baud rate.\n");
return -1;
}
mbus_scan_2nd_address_range(handle, 0, addr_mask);
mbus_disconnect(handle);
//printf("Summary: Tried %ld address masks and found %d devices.\n", probe_count, match_count);
free(addr_mask);
return 0;
}

84
bin/mbus-serial-scan.c Normal file

@ -0,0 +1,84 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <mbus/mbus.h>
//------------------------------------------------------------------------------
// Primary addressing scanning of mbus devices.
//------------------------------------------------------------------------------
int
main(int argc, char **argv)
{
mbus_handle *handle;
char *device;
int address, baudrate = 9600;
if (argc == 2)
{
device = argv[1];
}
else if (argc == 4 && strcmp(argv[1], "-b") == 0)
{
baudrate = atoi(argv[2]);
device = argv[3];
}
else
{
fprintf(stderr, "usage: %s [-b BAUDRATE] device\n", argv[0]);
return 0;
}
if ((handle = mbus_connect_serial(device)) == NULL)
{
printf("Failed to setup connection to M-bus gateway\n");
return -1;
}
if (mbus_serial_set_baudrate(handle->m_serial_handle, baudrate) == -1)
{
printf("Failed to set baud rate.\n");
return -1;
}
for (address = 0; address < 254; address++)
{
mbus_frame reply;
memset((void *)&reply, 0, sizeof(mbus_frame));
if (mbus_send_ping_frame(handle, address) == -1)
{
printf("Scan failed. Could not send ping frame: %s\n", mbus_error_str());
return -1;
}
if (mbus_recv_frame(handle, &reply) == -1)
{
continue;
}
if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK)
{
printf("Found a M-Bus device at address %d\n", address);
}
}
mbus_disconnect(handle);
return 0;
}

@ -0,0 +1,117 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <mbus/mbus.h>
//------------------------------------------------------------------------------
// Execution starts here:
//------------------------------------------------------------------------------
int
main(int argc, char **argv)
{
mbus_handle *handle;
mbus_frame reply;
char *device, *addr;
int address, ret, baudrate = 9600;
if (argc == 3)
{
device = argv[1];
addr = strdup(argv[2]);
}
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
{
baudrate = atoi(argv[2]);
device = argv[3];
addr = strdup(argv[4]);
}
else
{
fprintf(stderr, "usage: %s device secondary-mbus-address\n", argv[0]);
return 0;
}
if (strlen(addr) != 16)
{
printf("Misformatted secondary address. Must be 16 character HEX number.\n");
return -1;
}
if ((handle = mbus_connect_serial(device)) == NULL)
{
printf("Failed to setup connection to M-bus device: %s\n", mbus_error_str());
return -1;
}
if (mbus_serial_set_baudrate(handle->m_serial_handle, baudrate) == -1)
{
printf("Failed to set baud rate.\n");
return -1;
}
if (mbus_send_select_frame(handle, addr) == -1)
{
printf("Failed to send selection frame: %s\n", mbus_error_str());
return -1;
}
ret = mbus_recv_frame(handle, &reply);
if (ret == -1)
{
printf("No reply from device with secondary address %s: %s\n", argv[2], mbus_error_str());
return -1;
}
if (ret == -2)
{
printf("Invalid reply from %s: The address address probably match more than one device: %s\n", argv[2], mbus_error_str());
return -1;
}
if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK)
{
if (mbus_send_request_frame(handle, 253) == -1)
{
printf("Failed to send request to selected secondary device: %s\n", mbus_error_str());
return -1;
}
if (mbus_recv_frame(handle, &reply) == -1)
{
printf("Failed to recieve reply from selected secondary device: %s\n", mbus_error_str());
return -1;
}
if (mbus_frame_type(&reply) != MBUS_FRAME_TYPE_ACK)
{
printf("Recieved a reply from secondarily addressed device: Searched for [%s] and found [%s].\n",
argv[2], mbus_frame_get_secondary_address(&reply));
}
}
else
{
printf("Unknown reply:\n");
mbus_frame_print(&reply);
}
free(addr);
mbus_disconnect(handle);
return 0;
}

132
bin/mbus-tcp-request-data.c Normal file

@ -0,0 +1,132 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <mbus/mbus.h>
static int debug = 0;
//------------------------------------------------------------------------------
// Execution starts here:
//------------------------------------------------------------------------------
int
main(int argc, char **argv)
{
mbus_frame reply;
mbus_frame_data reply_data;
mbus_handle *handle = NULL;
char *host, *addr_str, matching_addr[16];
int port, address;
if (argc == 4)
{
host = argv[1];
port = atoi(argv[2]);
addr_str = argv[3];
debug = 0;
}
else if (argc == 5 && strcmp(argv[1], "-d") == 0)
{
host = argv[2];
port = atoi(argv[3]);
addr_str = argv[4];
debug = 1;
}
else
{
fprintf(stderr, "usage: %s [-d] host port mbus-address\n", argv[0]);
fprintf(stderr, " optional flag -d for debug printout\n");
return 0;
}
if ((handle = mbus_connect_tcp(host, port)) == NULL)
{
fprintf(stderr, "Failed to setup connection to M-bus gateway\n");
return -1;
}
if (strlen(addr_str) == 16)
{
// secondary addressing
int probe_ret;
probe_ret = mbus_probe_secondary_address(handle, addr_str, matching_addr);
if (probe_ret == MBUS_PROBE_COLLISION)
{
fprintf(stderr, "%s: Error: The address mask [%s] matches more than one device.\n", __PRETTY_FUNCTION__, addr_str);
return -1;
}
else if (probe_ret == MBUS_PROBE_NOTHING)
{
fprintf(stderr, "%s: Error: The selected secondary address does not match any device [%s].\n", __PRETTY_FUNCTION__, addr_str);
return -1;
}
else if (probe_ret == MBUS_PROBE_ERROR)
{
fprintf(stderr, "%s: Error: Failed to probe secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str);
return -1;
}
// else MBUS_PROBE_SINGLE
if (mbus_send_request_frame(handle, 253) == -1)
{
fprintf(stderr, "Failed to send M-Bus request frame.\n");
return -1;
}
}
else
{
// primary addressing
address = atoi(addr_str);
if (mbus_send_request_frame(handle, address) == -1)
{
fprintf(stderr, "Failed to send M-Bus request frame.\n");
return -1;
}
}
if (mbus_recv_frame(handle, &reply) == -1)
{
fprintf(stderr, "Failed to receive M-Bus response frame.\n");
return -1;
}
//
// parse data and print in XML format
//
if (debug)
{
mbus_frame_print(&reply);
}
mbus_frame_data_parse(&reply, &reply_data);
printf("%s", mbus_frame_data_xml(&reply_data));
// manual free
if (reply_data.data_var.record)
{
mbus_data_record_free(reply_data.data_var.record); // free's up the whole list
}
mbus_disconnect(handle);
return 0;
}

@ -0,0 +1,73 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <mbus/mbus.h>
static mbus_handle *handle = NULL;
//------------------------------------------------------------------------------
// Execution starts here:
//------------------------------------------------------------------------------
int
main(int argc, char **argv)
{
char *host, *addr_mask;
int port, address;
if (argc != 4 && argc != 3)
{
fprintf(stderr, "usage: %s host port [address-mask]\n", argv[0]);
fprintf(stderr, "\trestrict the search by supplying an optional address mask on the form\n");
fprintf(stderr, "\t'FFFFFFFFFFFFFFFF' where F is a wildcard character\n");
return 0;
}
host = argv[1];
port = atoi(argv[2]);
if (argc == 4)
{
addr_mask = strdup(argv[3]);
}
else
{
addr_mask = strdup("FFFFFFFFFFFFFFFF");
}
if (strlen(addr_mask) != 16)
{
fprintf(stderr, "Misformatted secondary address mask. Must be 16 character HEX number.\n");
return -1;
}
if ((handle = mbus_connect_tcp(host, port)) == NULL)
{
fprintf(stderr, "Failed to setup connection to M-bus gateway: %s\n", mbus_error_str());
return -1;
}
mbus_scan_2nd_address_range(handle, 0, addr_mask);
mbus_disconnect(handle);
//printf("Summary: Tried %ld address masks and found %d devices.\n", probe_count, match_count);
free(addr_mask);
return 0;
}

70
bin/mbus-tcp-scan.c Normal file

@ -0,0 +1,70 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <mbus/mbus.h>
//------------------------------------------------------------------------------
// Execution starts here:
//------------------------------------------------------------------------------
int
main(int argc, char **argv)
{
mbus_handle *handle;
char *host;
int port, address;
if (argc != 3)
{
printf("usage: %s host port\n", argv[0]);
return 0;
}
host = argv[1];
port = atoi(argv[2]);
if ((handle = mbus_connect_tcp(host, port)) == NULL)
{
printf("Scan failed: Could not setup connection to M-bus gateway: %s\n", mbus_error_str());
return -1;
}
for (address = 0; address < 254; address++)
{
mbus_frame reply;
if (mbus_send_ping_frame(handle, address) == -1)
{
printf("Scan failed. Could not send ping frame: %s\n", mbus_error_str());
return -1;
}
if (mbus_recv_frame(handle, &reply) == -1)
{
continue;
}
if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK)
{
printf("Found a M-Bus device at address %d\n", address);
}
}
mbus_disconnect(handle);
return 0;
}

@ -0,0 +1,104 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <mbus/mbus.h>
//------------------------------------------------------------------------------
// Execution starts here:
//------------------------------------------------------------------------------
int
main(int argc, char **argv)
{
mbus_handle *handle;
mbus_frame reply;
char *host, *addr;
int port, address, ret;
if (argc != 4)
{
printf("usage: %s host port secondary-mbus-address\n", argv[0]);
return 0;
}
host = argv[1];
port = atoi(argv[2]);
addr = strdup(argv[3]);
if (strlen(argv[3]) != 16)
{
printf("Misformatted secondary address. Must be 16 character HEX number.\n");
return -1;
}
if ((handle = mbus_connect_tcp(host, port)) == NULL)
{
printf("Failed to setup connection to M-bus gateway: %s\n", mbus_error_str());
return -1;
}
if (mbus_send_select_frame(handle, addr) == -1)
{
printf("Failed to send selection frame: %s\n", mbus_error_str());
return -1;
}
ret = mbus_recv_frame(handle, &reply);
if (ret == -1)
{
printf("No reply from device with secondary address %s: %s\n", argv[3], mbus_error_str());
return -1;
}
if (ret == -2)
{
printf("Invalid reply from %s: The address address probably match more than one device: %s\n", argv[3], mbus_error_str());
return -1;
}
if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK)
{
if (mbus_send_request_frame(handle, 253) == -1)
{
printf("Failed to send request to selected secondary device: %s\n", mbus_error_str());
return -1;
}
if (mbus_recv_frame(handle, &reply) == -1)
{
printf("Failed to recieve reply from selected secondary device: %s\n", mbus_error_str());
return -1;
}
if (mbus_frame_type(&reply) != MBUS_FRAME_TYPE_ACK)
{
printf("Recieved a reply from secondarily addressed device: Searched for [%s] and found [%s].\n",
argv[3], mbus_frame_get_secondary_address(&reply));
}
}
else
{
printf("Unknown reply:\n");
mbus_frame_print(&reply);
}
free(addr);
mbus_disconnect(handle);
return 0;
}

134
bin/mbus_serial_scan.c Normal file

@ -0,0 +1,134 @@
#include <sys/types.h>
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "mbus-protocol.h"
__attribute__((noreturn)) static void
usage(void)
{
extern char *__progname;
fprintf(stderr, "%s device|file\n", __progname);
exit(-1);
}
void parse_file(const char *);
void scan_device(const char *);
int
main(int argc, char *argv[])
{
struct stat sb;
if (argc != 2)
usage();
bzero(&sb, sizeof(sb));
if(stat(argv[1], &sb))
err(-1, "stat on '%s' failed", argv[1]);
if(S_ISREG(sb.st_mode))
parse_file(argv[1]);
else if(S_ISBLK(sb.st_mode))
scan_device(argv[1]);
else
usage();
return (0);
}
void
parse_file(const char *path)
{
int fd, len;
u_char buf[256];
mbus_frame reply;
mbus_frame_data frame_data;
bzero(buf, sizeof(buf));
if((fd = open(path, O_RDONLY, 0)) == -1)
err(-1, "open '%s'", path);
len = read(fd, buf, sizeof(buf));
close(fd);
bzero(&reply, sizeof(reply));
bzero(&frame_data, sizeof(frame_data));
mbus_parse(&reply, buf, len);
mbus_frame_data_parse(&reply, &frame_data);
mbus_frame_print(&reply);
mbus_frame_data_print_xml(&frame_data);
}
void
scan_device(const char *path)
{
int fd, len;
/* int fd2;*/
ssize_t i, rc;
u_char buf[256];
mbus_frame *frame, *reply;
mbus_frame_data frame_data;
struct termios tio;
if((fd = open(path, O_RDWR | O_NOCTTY | O_NONBLOCK, 0)) == -1)
err(-1, "failed to open device %s", path);
bzero(buf, sizeof(buf));
tcgetattr(fd, &tio);
cfsetispeed(&tio, B2400);
cfsetospeed(&tio, B2400);
cfmakeraw(&tio);
tio.c_cflag |= PARENB;
tcsetattr(fd, TCSANOW, &tio);
if((rc = read(fd, buf, sizeof(buf))) > 0) {
for(i = 0; i < rc; i++)
printf(":%.2X ", buf[i]);
printf("\n");
}
frame = mbus_frame_new(MBUS_FRAME_TYPE_SHORT);
reply = mbus_frame_new(MBUS_FRAME_TYPE_SHORT);
frame->control = MBUS_CONTROL_MASK_REQ_UD2 | MBUS_CONTROL_MASK_DIR_M2S;
frame->address = 0;
while(frame->address <= 0) {
frame->address = MBUS_ADDRESS_BROADCAST_REPLY;
mbus_frame_print(frame);
if((len = mbus_frame_pack(frame, buf, sizeof(buf))) > 0) {
if((rc = write(fd, buf, len)) != len)
warn("writing %zd", rc);
usleep(1000000);
len = 0;
while((rc = read(fd, buf+len, sizeof(buf)-len)) > 0) {
len += rc;
usleep(1000000);
}
/* printf("%d\n", fd2 = open("output.bin", O_WRONLY | O_CREAT | O_TRUNC, 0));*/
/* write(fd2, buf, len);*/
/* printf("%d", len);*/
/* close(fd2);*/
mbus_parse(reply, buf, len);
mbus_frame_data_parse(reply, &frame_data);
mbus_frame_print(reply);
mbus_frame_data_print_xml(&frame_data);
}
frame->address++;
}
mbus_frame_free(reply);
mbus_frame_free(frame);
close(fd);
}

208
bin/mbus_slave_init.c Normal file

@ -0,0 +1,208 @@
//------------------------------------------------------------------------------
// Copyright (C) 2010, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <mbus.h>
static gboolean server_io(GIOChannel *gio, GIOCondition condition, gpointer data);
static GIOChannel *gio_server;
#define PACKET_BUFF_SIZE 128
static int addr = 0x01;
//------------------------------------------------------------------------------
// send a data request packet to from master to slave
//------------------------------------------------------------------------------
static gboolean
send_packet_timeout(gpointer data)
{
static gchar *func_name = "send_packet_timer";
u_char buff[256];
int len, ret;
mbus_frame *frame;
frame = mbus_frame_new(MBUS_FRAME_TYPE_SHORT);
frame->control = MBUS_CONTROL_MASK_SND_NKE | MBUS_CONTROL_MASK_DIR_M2S; // data request from master to slave
frame->address = addr; // address
//if ((ret = mbus_frame_print(frame)) < 0)
//{
// printf("%s: mbus_frame_print -> %d\n", __PRETTY_FUNCTION__, ret);
// return -1;
//}
if ((len = mbus_frame_pack(frame, buff, sizeof(buff))) == -1)
{
printf("%s: mbus_frame_pack -> %d\n", __PRETTY_FUNCTION__, ret);
mbus_frame_free(frame);
return -1;
}
if (fs_net_send(gio_server, buff, len) < len)
{
g_message("%s: failed to write data to server", func_name);
}
mbus_frame_free(frame);
return FALSE;
}
//------------------------------------------------------------------------------
// client_io:
//
//------------------------------------------------------------------------------
static gboolean
server_io(GIOChannel *gio, GIOCondition condition, gpointer data)
{
static gchar *func_name = "server_io";
gchar buff[PACKET_BUFF_SIZE];
gint len, len_tot = 0;
int fd;
FsNetBuffer *nbdata;
bzero((void *)buff, sizeof(buff));
mbus_frame *frame;
mbus_frame_data frame_data;
//
// init
//
if ((fd = g_io_channel_unix_get_fd(gio)) < 0)
{
g_warning("%s: Failed to aquire socket fd.", func_name);
return FALSE;
}
if (condition & (G_IO_HUP|G_IO_NVAL|G_IO_ERR))
{
exit(0);
}
if ((nbdata = fs_net_buffer_get(gio)) == NULL)
{
g_warning("%s: Serious error, couldn't retrieve data buffer for GIO Channel.", func_name);
return FALSE;
}
//
// start reading data
//
frame = mbus_frame_new(MBUS_FRAME_TYPE_ANY);
len_tot = 1;
while (len > 0)
{
if ((len = fs_net_read_data_nonblocking(gio, nbdata, len_tot)) < 0)
{
if (len == -2 && nbdata->offset == 0)
{
// Return value -2 is a special return value that we use to indicate
// that the read operation was interrupted due to unavailability of
// data (so we got an try-again error, preventing a blocking read).
//
// Restart the read operation later.
mbus_frame_free(frame);
return TRUE;
}
if (len == -1)
{
fs_net_buffer_free(gio);
fs_net_socket_close(fd);
exit(0);
}
}
nbdata->offset = len_tot; // start next read at the correct offset
len = mbus_parse(frame, nbdata->buff, len_tot);
len_tot += len;
}
if (len == -1)
{
mbus_frame_free(frame);
return TRUE;
}
//
// parse data and print in XML format
//
mbus_frame_data_parse(frame, &frame_data);
printf("%s", mbus_frame_data_xml(&frame_data));
//
// Free and exit
//
mbus_frame_free(frame);
exit(0);
return TRUE;
}
//------------------------------------------------------------------------------
// Execution starts here:
//
//------------------------------------------------------------------------------
int
main(int argc, char **argv)
{
static gchar *func_name = "mbus_test1", *host;
int port;
GMainLoop *gloop;
if (argc != 4)
{
g_message("%s: usage: %s host port mbus-address", func_name, argv[0]);
return 0;
}
host = argv[1];
port = atoi(argv[2]);
addr = atoi(argv[3]);
if ((gio_server = fs_net_connection_setup(host, port, (void *)server_io, NULL)) == NULL)
{
g_warning("%s: Failed to setup connection to server.\n", func_name);
return -1;
}
// Register new data buffer for the new GIO Channel.
if (fs_net_buffer_new(gio_server) != 0)
{
g_warning("%s: Failed to allocate GIO channel data buffer.", __PRETTY_FUNCTION__);
return -1;
}
/* setup a timer */
g_timeout_add(100, send_packet_timeout, NULL);
/* Pass over flow control to GLIB */
gloop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(gloop);
/* Never reached */
return 0;
}

18
build.sh Normal file

@ -0,0 +1,18 @@
#!/bin/sh
#
if [ -f Makefile ]; then
#
# use existing automake files
#
echo >> /dev/null
else
#
# regenerate automake files
#
automake --add-missing
autoreconf --install
./configure
fi
make

1517
config.guess vendored Executable file

File diff suppressed because it is too large Load Diff

62
config.h.in Normal file

@ -0,0 +1,62 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#undef LT_OBJDIR
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Version number of package */
#undef VERSION

1760
config.sub vendored Executable file

File diff suppressed because it is too large Load Diff

14187
configure vendored Executable file

File diff suppressed because it is too large Load Diff

41
configure.ac Normal file

@ -0,0 +1,41 @@
dnl ----------------------------------------------------------------------------
dnl Copyright (C) 2010, Raditex AB
dnl All rights reserved.
dnl
dnl FreeSCADA
dnl http://www.FreeSCADA.com
dnl freescada@freescada.com
dnl
dnl ----------------------------------------------------------------------------
AC_INIT([mbus], [0.7.0], [info@rscada.se], [mbus], [http://www.freescada.com/libmbus/])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_MACRO_DIR([m4])
AM_PROG_LIBTOOL
LDFLAGS="$LDFLAGS -version-info 0:7:0"
dnl ----------------------
dnl
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile mbus/Makefile test/Makefile bin/Makefile libmbus.pc])
AC_OUTPUT
echo \
"----------------------------------------------------------
Configuration:
Source location: ${srcdir}
Compile: ${CC}
Compiler flags: ${CFLAGS}
Linker flags: ${LDFLAGS}
Host system type: ${host}
Install path: ${prefix}
See config.h for further configuration.
----------------------------------------------------------"

1
depcomp Symbolic link

@ -0,0 +1 @@
/usr/share/automake-1.11/depcomp

1630
doxygen.cfg Normal file

File diff suppressed because it is too large Load Diff

BIN
hardware/MBus_USB.pdf Normal file

Binary file not shown.

24
hardware/MBus_USB.txt Normal file

@ -0,0 +1,24 @@
The convertor is very simple - there are three main parts:
- MBus level converter
- power Voltage converter
- USB serial converter
Voltage converter - "catalogue" use of MC34063 in step-up configuration set for about 34V output voltage and few tens of mA. You can use any other IC/setup which would do the job. Note that if you use other voltage output than 34V (note tha MBus limits) you need to adjust the voltage divider (see below) or use 12V Zener diode instead of R9.
MBus level converter - it is based on the original design from Uni Paderborn (http://www.m-bus.com/files/minimaster.tif or http://www.m-bus.de/pw1.shtml). It was just "inverted" to use common ground and low voltage IO signals. Also the 12V output voltage drop is done by simple divider (R9/R8) which is OK here (stable voltage, current is amplified).
Basically no part of the convertor is critical - except of the 12V diff (see above) and current sensing R12.
The USB serial convertor is not covered here as it does not make sense to make one. Get a USB serial cable - ideal one is an old phone data cable as these are without the RS232 level convertor (i.e. exactly what we want).
One sidenote explanation. Typical USB RS232 cable contains two main chips: USB to TTL/CMOS serial converter (this is the "smart" one - e.g. variants of FT232 or PL2303) and TTL/CMOS to RS232 voltage converter (variants of MAX232). We need just the first part as we have our own voltage converter - here CMOS/TTL to MBus instead.
The bottom line is - get either a cable which does not have the RS232 converter or a cable which can be easily opened/dissected and the converter bypassed.
Finally a small disclaimer - this is for educational purposes, there is no warranty of any sort.
From technical perspective this works only for few slaves as it is only a simple converter and the power is very limited as well.
Contributed by Tomas Menzl.

520
install-sh Executable file

@ -0,0 +1,520 @@
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2009-04-28.21; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch.
nl='
'
IFS=" "" $nl"
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit=${DOITPROG-}
if test -z "$doit"; then
doit_exec=exec
else
doit_exec=$doit
fi
# Put in absolute file names if you don't have them in your path;
# or use environment vars.
chgrpprog=${CHGRPPROG-chgrp}
chmodprog=${CHMODPROG-chmod}
chownprog=${CHOWNPROG-chown}
cmpprog=${CMPPROG-cmp}
cpprog=${CPPROG-cp}
mkdirprog=${MKDIRPROG-mkdir}
mvprog=${MVPROG-mv}
rmprog=${RMPROG-rm}
stripprog=${STRIPPROG-strip}
posix_glob='?'
initialize_posix_glob='
test "$posix_glob" != "?" || {
if (set -f) 2>/dev/null; then
posix_glob=
else
posix_glob=:
fi
}
'
posix_mkdir=
# Desired mode of installed file.
mode=0755
chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
mvcmd=$mvprog
rmcmd="$rmprog -f"
stripcmd=
src=
dst=
dir_arg=
dst_arg=
copy_on_change=false
no_target_directory=
usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
Options:
--help display this help and exit.
--version display version info and exit.
-c (ignored)
-C install only if different (preserve the last data modification time)
-d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
-s $stripprog installed files.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
RMPROG STRIPPROG
"
while test $# -ne 0; do
case $1 in
-c) ;;
-C) copy_on_change=true;;
-d) dir_arg=true;;
-g) chgrpcmd="$chgrpprog $2"
shift;;
--help) echo "$usage"; exit $?;;
-m) mode=$2
case $mode in
*' '* | *' '* | *'
'* | *'*'* | *'?'* | *'['*)
echo "$0: invalid mode: $mode" >&2
exit 1;;
esac
shift;;
-o) chowncmd="$chownprog $2"
shift;;
-s) stripcmd=$stripprog;;
-t) dst_arg=$2
shift;;
-T) no_target_directory=true;;
--version) echo "$0 $scriptversion"; exit $?;;
--) shift
break;;
-*) echo "$0: invalid option: $1" >&2
exit 1;;
*) break;;
esac
shift
done
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dst_arg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dst_arg"
shift # fnord
fi
shift # arg
dst_arg=$arg
done
fi
if test $# -eq 0; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
fi
# It's OK to call `install-sh -d' without argument.
# This can happen when creating conditional directories.
exit 0
fi
if test -z "$dir_arg"; then
trap '(exit $?); exit' 1 2 13 15
# Set umask so as not to create temps with too-generous modes.
# However, 'strip' requires both read and write access to temps.
case $mode in
# Optimize common cases.
*644) cp_umask=133;;
*755) cp_umask=22;;
*[0-7])
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw='% 200'
fi
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
*)
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw=,u+rw
fi
cp_umask=$mode$u_plus_rw;;
esac
fi
for src
do
# Protect names starting with `-'.
case $src in
-*) src=./$src;;
esac
if test -n "$dir_arg"; then
dst=$src
dstdir=$dst
test -d "$dstdir"
dstdir_status=$?
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if test ! -f "$src" && test ! -d "$src"; then
echo "$0: $src does not exist." >&2
exit 1
fi
if test -z "$dst_arg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dst_arg
# Protect names starting with `-'.
case $dst in
-*) dst=./$dst;;
esac
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
if test -n "$no_target_directory"; then
echo "$0: $dst_arg: Is a directory" >&2
exit 1
fi
dstdir=$dst
dst=$dstdir/`basename "$src"`
dstdir_status=0
else
# Prefer dirname, but fall back on a substitute if dirname fails.
dstdir=`
(dirname "$dst") 2>/dev/null ||
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$dst" : 'X\(//\)[^/]' \| \
X"$dst" : 'X\(//\)$' \| \
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$dst" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'
`
test -d "$dstdir"
dstdir_status=$?
fi
fi
obsolete_mkdir_used=false
if test $dstdir_status != 0; then
case $posix_mkdir in
'')
# Create intermediate dirs using mode 755 as modified by the umask.
# This is like FreeBSD 'install' as of 1997-10-28.
umask=`umask`
case $stripcmd.$umask in
# Optimize common cases.
*[2367][2367]) mkdir_umask=$umask;;
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
*[0-7])
mkdir_umask=`expr $umask + 22 \
- $umask % 100 % 40 + $umask % 20 \
- $umask % 10 % 4 + $umask % 2
`;;
*) mkdir_umask=$umask,go-w;;
esac
# With -d, create the new directory with the user-specified mode.
# Otherwise, rely on $mkdir_umask.
if test -n "$dir_arg"; then
mkdir_mode=-m$mode
else
mkdir_mode=
fi
posix_mkdir=false
case $umask in
*[123567][0-7][0-7])
# POSIX mkdir -p sets u+wx bits regardless of umask, which
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
if (umask $mkdir_umask &&
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writeable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
ls_ld_tmpdir=`ls -ld "$tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
rmdir "$tmpdir/d" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
fi
trap '' 0;;
esac;;
esac
if
$posix_mkdir && (
umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
)
then :
else
# The umask is ridiculous, or mkdir does not conform to POSIX,
# or it failed possibly due to a race condition. Create the
# directory the slow way, step by step, checking for races as we go.
case $dstdir in
/*) prefix='/';;
-*) prefix='./';;
*) prefix='';;
esac
eval "$initialize_posix_glob"
oIFS=$IFS
IFS=/
$posix_glob set -f
set fnord $dstdir
shift
$posix_glob set +f
IFS=$oIFS
prefixes=
for d
do
test -z "$d" && continue
prefix=$prefix$d
if test -d "$prefix"; then
prefixes=
else
if $posix_mkdir; then
(umask=$mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
# Don't fail if two instances are running concurrently.
test -d "$prefix" || exit 1
else
case $prefix in
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
*) qprefix=$prefix;;
esac
prefixes="$prefixes '$qprefix'"
fi
fi
prefix=$prefix/
done
if test -n "$prefixes"; then
# Don't fail if two instances are running concurrently.
(umask $mkdir_umask &&
eval "\$doit_exec \$mkdirprog $prefixes") ||
test -d "$dstdir" || exit 1
obsolete_mkdir_used=true
fi
fi
fi
if test -n "$dir_arg"; then
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
else
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# Copy the file name to the temp name.
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits.
#
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $cpprog $src $dsttmp" command.
#
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
# If -C, don't bother to copy if it wouldn't change the file.
if $copy_on_change &&
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
eval "$initialize_posix_glob" &&
$posix_glob set -f &&
set X $old && old=:$2:$4:$5:$6 &&
set X $new && new=:$2:$4:$5:$6 &&
$posix_glob set +f &&
test "$old" = "$new" &&
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
then
rm -f "$dsttmp"
else
# Rename the file to the real destination.
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
# The rename failed, perhaps because mv can't rename something else
# to itself, or perhaps because mv is so ancient that it does not
# support -f.
{
# Now remove or move aside any old file at destination location.
# We try this two ways since rm can't unlink itself on some
# systems and the destination file might be busy for other
# reasons. In this case, the final cleanup might fail but the new
# file should still install successfully.
{
test ! -f "$dst" ||
$doit $rmcmd -f "$dst" 2>/dev/null ||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
} ||
{ echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1
}
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dst"
}
fi || exit 1
trap '' 0
fi
done
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

12
libmbus.pc Normal file

@ -0,0 +1,12 @@
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: libmbus
Description: Open source M-bus (Meter-Bus) library.
Requires:
Version: 0.6.1
URL: http://www.freescada.com/libmbus/
Libs: -L${libdir} -lmbus
Cflags: -I${includedir}

12
libmbus.pc.in Normal file

@ -0,0 +1,12 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: libmbus
Description: Open source M-bus (Meter-Bus) library.
Requires:
Version: @PACKAGE_VERSION@
URL: http://www.freescada.com/libmbus/
Libs: -L${libdir} -lmbus
Cflags: -I${includedir}

9642
ltmain.sh Executable file

File diff suppressed because it is too large Load Diff

7851
m4/libtool.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

369
m4/ltoptions.m4 vendored Normal file

@ -0,0 +1,369 @@
# Helper functions for option handling. -*- Autoconf -*-
#
# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 7 ltoptions.m4
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
# ------------------------------------------
m4_define([_LT_MANGLE_OPTION],
[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
# ---------------------------------------
# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
# matching handler defined, dispatch to it. Other OPTION-NAMEs are
# saved as a flag.
m4_define([_LT_SET_OPTION],
[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
_LT_MANGLE_DEFUN([$1], [$2]),
[m4_warning([Unknown $1 option `$2'])])[]dnl
])
# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
# ------------------------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
m4_define([_LT_IF_OPTION],
[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
# -------------------------------------------------------
# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
# are set.
m4_define([_LT_UNLESS_OPTIONS],
[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
[m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
[m4_define([$0_found])])])[]dnl
m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
])[]dnl
])
# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
# ----------------------------------------
# OPTION-LIST is a space-separated list of Libtool options associated
# with MACRO-NAME. If any OPTION has a matching handler declared with
# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
# the unknown option and exit.
m4_defun([_LT_SET_OPTIONS],
[# Set options
m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
[_LT_SET_OPTION([$1], _LT_Option)])
m4_if([$1],[LT_INIT],[
dnl
dnl Simply set some default values (i.e off) if boolean options were not
dnl specified:
_LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
])
_LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
])
dnl
dnl If no reference was made to various pairs of opposing options, then
dnl we run the default mode handler for the pair. For example, if neither
dnl `shared' nor `disable-shared' was passed, we enable building of shared
dnl archives by default:
_LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
_LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
_LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
_LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
[_LT_ENABLE_FAST_INSTALL])
])
])# _LT_SET_OPTIONS
## --------------------------------- ##
## Macros to handle LT_INIT options. ##
## --------------------------------- ##
# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
# -----------------------------------------
m4_define([_LT_MANGLE_DEFUN],
[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
# -----------------------------------------------
m4_define([LT_OPTION_DEFINE],
[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
])# LT_OPTION_DEFINE
# dlopen
# ------
LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
])
AU_DEFUN([AC_LIBTOOL_DLOPEN],
[_LT_SET_OPTION([LT_INIT], [dlopen])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `dlopen' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
# win32-dll
# ---------
# Declare package support for building win32 dll's.
LT_OPTION_DEFINE([LT_INIT], [win32-dll],
[enable_win32_dll=yes
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
AC_CHECK_TOOL(AS, as, false)
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
AC_CHECK_TOOL(OBJDUMP, objdump, false)
;;
esac
test -z "$AS" && AS=as
_LT_DECL([], [AS], [1], [Assembler program])dnl
test -z "$DLLTOOL" && DLLTOOL=dlltool
_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
test -z "$OBJDUMP" && OBJDUMP=objdump
_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
])# win32-dll
AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
_LT_SET_OPTION([LT_INIT], [win32-dll])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `win32-dll' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
# _LT_ENABLE_SHARED([DEFAULT])
# ----------------------------
# implement the --enable-shared flag, and supports the `shared' and
# `disable-shared' LT_INIT options.
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_SHARED],
[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([shared],
[AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_shared=yes ;;
no) enable_shared=no ;;
*)
enable_shared=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
enable_shared=yes
fi
done
IFS="$lt_save_ifs"
;;
esac],
[enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
_LT_DECL([build_libtool_libs], [enable_shared], [0],
[Whether or not to build shared libraries])
])# _LT_ENABLE_SHARED
LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
# Old names:
AC_DEFUN([AC_ENABLE_SHARED],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
])
AC_DEFUN([AC_DISABLE_SHARED],
[_LT_SET_OPTION([LT_INIT], [disable-shared])
])
AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_ENABLE_SHARED], [])
dnl AC_DEFUN([AM_DISABLE_SHARED], [])
# _LT_ENABLE_STATIC([DEFAULT])
# ----------------------------
# implement the --enable-static flag, and support the `static' and
# `disable-static' LT_INIT options.
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_STATIC],
[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([static],
[AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_static=yes ;;
no) enable_static=no ;;
*)
enable_static=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
enable_static=yes
fi
done
IFS="$lt_save_ifs"
;;
esac],
[enable_static=]_LT_ENABLE_STATIC_DEFAULT)
_LT_DECL([build_old_libs], [enable_static], [0],
[Whether or not to build static libraries])
])# _LT_ENABLE_STATIC
LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
# Old names:
AC_DEFUN([AC_ENABLE_STATIC],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
])
AC_DEFUN([AC_DISABLE_STATIC],
[_LT_SET_OPTION([LT_INIT], [disable-static])
])
AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_ENABLE_STATIC], [])
dnl AC_DEFUN([AM_DISABLE_STATIC], [])
# _LT_ENABLE_FAST_INSTALL([DEFAULT])
# ----------------------------------
# implement the --enable-fast-install flag, and support the `fast-install'
# and `disable-fast-install' LT_INIT options.
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_FAST_INSTALL],
[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([fast-install],
[AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
[optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_fast_install=yes ;;
no) enable_fast_install=no ;;
*)
enable_fast_install=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
enable_fast_install=yes
fi
done
IFS="$lt_save_ifs"
;;
esac],
[enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
_LT_DECL([fast_install], [enable_fast_install], [0],
[Whether or not to optimize for fast installation])dnl
])# _LT_ENABLE_FAST_INSTALL
LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
# Old names:
AU_DEFUN([AC_ENABLE_FAST_INSTALL],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
the `fast-install' option into LT_INIT's first parameter.])
])
AU_DEFUN([AC_DISABLE_FAST_INSTALL],
[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
the `disable-fast-install' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
# _LT_WITH_PIC([MODE])
# --------------------
# implement the --with-pic flag, and support the `pic-only' and `no-pic'
# LT_INIT options.
# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
m4_define([_LT_WITH_PIC],
[AC_ARG_WITH([pic],
[AS_HELP_STRING([--with-pic],
[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
[pic_mode="$withval"],
[pic_mode=default])
test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
])# _LT_WITH_PIC
LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
# Old name:
AU_DEFUN([AC_LIBTOOL_PICMODE],
[_LT_SET_OPTION([LT_INIT], [pic-only])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `pic-only' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
## ----------------- ##
## LTDL_INIT Options ##
## ----------------- ##
m4_define([_LTDL_MODE], [])
LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
[m4_define([_LTDL_MODE], [nonrecursive])])
LT_OPTION_DEFINE([LTDL_INIT], [recursive],
[m4_define([_LTDL_MODE], [recursive])])
LT_OPTION_DEFINE([LTDL_INIT], [subproject],
[m4_define([_LTDL_MODE], [subproject])])
m4_define([_LTDL_TYPE], [])
LT_OPTION_DEFINE([LTDL_INIT], [installable],
[m4_define([_LTDL_TYPE], [installable])])
LT_OPTION_DEFINE([LTDL_INIT], [convenience],
[m4_define([_LTDL_TYPE], [convenience])])

123
m4/ltsugar.m4 vendored Normal file

@ -0,0 +1,123 @@
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
#
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 6 ltsugar.m4
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
# lt_join(SEP, ARG1, [ARG2...])
# -----------------------------
# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
# associated separator.
# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
# versions in m4sugar had bugs.
m4_define([lt_join],
[m4_if([$#], [1], [],
[$#], [2], [[$2]],
[m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
m4_define([_lt_join],
[m4_if([$#$2], [2], [],
[m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
# lt_car(LIST)
# lt_cdr(LIST)
# ------------
# Manipulate m4 lists.
# These macros are necessary as long as will still need to support
# Autoconf-2.59 which quotes differently.
m4_define([lt_car], [[$1]])
m4_define([lt_cdr],
[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
[$#], 1, [],
[m4_dquote(m4_shift($@))])])
m4_define([lt_unquote], $1)
# lt_append(MACRO-NAME, STRING, [SEPARATOR])
# ------------------------------------------
# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
# Note that neither SEPARATOR nor STRING are expanded; they are appended
# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
# No SEPARATOR is output if MACRO-NAME was previously undefined (different
# than defined and empty).
#
# This macro is needed until we can rely on Autoconf 2.62, since earlier
# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
m4_define([lt_append],
[m4_define([$1],
m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
# ----------------------------------------------------------
# Produce a SEP delimited list of all paired combinations of elements of
# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
# has the form PREFIXmINFIXSUFFIXn.
# Needed until we can rely on m4_combine added in Autoconf 2.62.
m4_define([lt_combine],
[m4_if(m4_eval([$# > 3]), [1],
[m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
[[m4_foreach([_Lt_prefix], [$2],
[m4_foreach([_Lt_suffix],
]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
# -----------------------------------------------------------------------
# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
m4_define([lt_if_append_uniq],
[m4_ifdef([$1],
[m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
[lt_append([$1], [$2], [$3])$4],
[$5])],
[lt_append([$1], [$2], [$3])$4])])
# lt_dict_add(DICT, KEY, VALUE)
# -----------------------------
m4_define([lt_dict_add],
[m4_define([$1($2)], [$3])])
# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
# --------------------------------------------
m4_define([lt_dict_add_subkey],
[m4_define([$1($2:$3)], [$4])])
# lt_dict_fetch(DICT, KEY, [SUBKEY])
# ----------------------------------
m4_define([lt_dict_fetch],
[m4_ifval([$3],
m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
# -----------------------------------------------------------------
m4_define([lt_if_dict_fetch],
[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
[$5],
[$6])])
# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
# --------------------------------------------------------------
m4_define([lt_dict_filter],
[m4_if([$5], [], [],
[lt_join(m4_quote(m4_default([$4], [[, ]])),
lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
[lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
])

23
m4/ltversion.m4 vendored Normal file

@ -0,0 +1,23 @@
# ltversion.m4 -- version numbers -*- Autoconf -*-
#
# Copyright (C) 2004 Free Software Foundation, Inc.
# Written by Scott James Remnant, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# @configure_input@
# serial 3293 ltversion.m4
# This file is part of GNU Libtool
m4_define([LT_PACKAGE_VERSION], [2.4])
m4_define([LT_PACKAGE_REVISION], [1.3293])
AC_DEFUN([LTVERSION_VERSION],
[macro_version='2.4'
macro_revision='1.3293'
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
_LT_DECL(, macro_revision, 0)
])

98
m4/lt~obsolete.m4 vendored Normal file

@ -0,0 +1,98 @@
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
#
# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
# Written by Scott James Remnant, 2004.
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 5 lt~obsolete.m4
# These exist entirely to fool aclocal when bootstrapping libtool.
#
# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
# which have later been changed to m4_define as they aren't part of the
# exported API, or moved to Autoconf or Automake where they belong.
#
# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
# using a macro with the same name in our local m4/libtool.m4 it'll
# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
# and doesn't know about Autoconf macros at all.)
#
# So we provide this file, which has a silly filename so it's always
# included after everything else. This provides aclocal with the
# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
# because those macros already exist, or will be overwritten later.
# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
#
# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
# Yes, that means every name once taken will need to remain here until
# we give up compatibility with versions before 1.7, at which point
# we need to keep only those names which we still refer to.
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])

18
mbus/Makefile.am Normal file

@ -0,0 +1,18 @@
# ------------------------------------------------------------------------------
# Copyright (C) 2010, Raditex AB
# All rights reserved.
#
# FreeSCADA
# http://www.FreeSCADA.com
# freescada@freescada.com
#
# ------------------------------------------------------------------------------
PACKAGE = @PACKAGE@
VERSION = @VERSION@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir)
pkginclude_HEADERS = mbus.h mbus-protocol.h mbus-tcp.h mbus-serial.h mbus-protocol-aux.h
lib_LTLIBRARIES = libmbus.la
libmbus_la_SOURCES = mbus.c mbus-protocol.c mbus-tcp.c mbus-serial.c mbus-protocol-aux.c

557
mbus/Makefile.in Normal file

@ -0,0 +1,557 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = mbus
DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libmbus_la_LIBADD =
am_libmbus_la_OBJECTS = mbus.lo mbus-protocol.lo mbus-tcp.lo \
mbus-serial.lo mbus-protocol-aux.lo
libmbus_la_OBJECTS = $(am_libmbus_la_OBJECTS)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(libmbus_la_SOURCES)
DIST_SOURCES = $(libmbus_la_SOURCES)
HEADERS = $(pkginclude_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
# ------------------------------------------------------------------------------
# Copyright (C) 2010, Raditex AB
# All rights reserved.
#
# FreeSCADA
# http://www.FreeSCADA.com
# freescada@freescada.com
#
# ------------------------------------------------------------------------------
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir)
pkginclude_HEADERS = mbus.h mbus-protocol.h mbus-tcp.h mbus-serial.h mbus-protocol-aux.h
lib_LTLIBRARIES = libmbus.la
libmbus_la_SOURCES = mbus.c mbus-protocol.c mbus-tcp.c mbus-serial.c mbus-protocol-aux.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mbus/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign mbus/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
list2=; for p in $$list; do \
if test -f $$p; then \
list2="$$list2 $$p"; \
else :; fi; \
done; \
test -z "$$list2" || { \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
}
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
for p in $$list; do \
$(am__strip_dir) \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
done
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libmbus.la: $(libmbus_la_OBJECTS) $(libmbus_la_DEPENDENCIES)
$(LINK) -rpath $(libdir) $(libmbus_la_OBJECTS) $(libmbus_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-protocol-aux.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-protocol.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-serial.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus-tcp.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
install-pkgincludeHEADERS: $(pkginclude_HEADERS)
@$(NORMAL_INSTALL)
test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
$(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
done
uninstall-pkgincludeHEADERS:
@$(NORMAL_UNINSTALL)
@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-pkgincludeHEADERS
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-libLTLIBRARIES
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am \
install-libLTLIBRARIES install-man install-pdf install-pdf-am \
install-pkgincludeHEADERS install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am \
uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

1529
mbus/mbus-protocol-aux.c Normal file

File diff suppressed because it is too large Load Diff

326
mbus/mbus-protocol-aux.h Normal file

@ -0,0 +1,326 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson and contributors, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
// Contributors:
// Large parts of this file was contributed by Tomas Menzl.
//
//------------------------------------------------------------------------------
/**
* @file mbus-protocol-aux.h
*
* @brief Auxiliary functions to the Freescada libmbus library
*
* The idea is to simplify the basic task of querying MBus slaves and
* the data processing.
* Typical use might be (in oversimplified "pseudocode"):
* \verbatim
* mbus_handle = mbus_connect_serial(device);
* or
* mbus_handle = mbus_connect_tcp(host, port);
*
* ...
*
* mbus_read_slave(mbus_handle, addresses, &reply);
* mbus_frame_data_parse(reply, &frameData);
* // check the header / record type (fixed/variable)
*
* // for fixed use mbus_data_fixed_medium and 2x mbus_parse_fixed_record
* mbus_data_fixed_medium
* mbusRecord = mbus_parse_fixed_record() // first record
* // process mbusRecord
* mbusRecord = mbus_parse_fixed_record() // second record
* // process mbusRecord
*
* // for variable use mbus_parse_variable_record
* for each record
* mbusRecord = mbus_parse_variable_record(record)
* // process mbusRecord
*
* ...
*
* mbus_disconnect(mbus_handle);
* \endverbatim
*
* Note that the quantity values are partially "normalized". For example energy
* is in Wh even when originally used "decimal" prefixes like MWh. This seems to
* be sensible as it make easier any processing of a dataset with huge
* fluctuation (no need to lookup/convert the prefixes). Also the potential
* conversion to desired units is pretty easy.
*
* On the other hand we acknowledge that use of certain units are expected so we
* do not convert all units to Si (i.e. no conversion from J to Wh or Bar to Pa.)
*/
#ifndef __MBUS_PROTOCOL_AUX_H__
#define __MBUS_PROTOCOL_AUX_H__
#include <mbus/mbus.h>
#include <mbus/mbus-protocol.h>
#include <mbus/mbus-serial.h>
#include <mbus/mbus-tcp.h>
#define MBUS_PROBE_NOTHING 0
#define MBUS_PROBE_SINGLE 1
#define MBUS_PROBE_COLLISION 2
#define MBUS_PROBE_ERROR -1
/**
* Unified MBus handle type encapsulating either Serial or TCP gateway.
*/
typedef struct _mbus_handle {
char is_serial; /**< _handle type (non zero for serial) */
union {
mbus_tcp_handle * m_tcp_handle; /**< TCP gateway handle */
mbus_serial_handle * m_serial_handle; /**< Serial gateway handle */
};
} mbus_handle;
/**
* MBus slave address type (primary/secodary address)
*/
typedef struct _mbus_address {
char is_primary; /**< Address type (non zero for primary) */
union {
int primary; /**< Primary address (for slaves shall be from 1 to 250) */
char * secondary; /**< Secondary address (shall be 16 digits) */
};
} mbus_address;
/**
* _string type
*
* In general support binary strings (octet string, non zero terminated)
* but so far almost all strings are zero terminated ("texts").
*/
typedef struct _mbus_string {
char * value; /**< Buffer */
int size; /**< _size */
} mbus_string;
/**
* Quantity value type union
*/
typedef union _mbus_value {
double real_val; /**< Numerical */
mbus_string str_val; /**< Text/binary */
} mbus_value;
/**
* Single measured quantity record type
*/
typedef struct _mbus_record {
mbus_value value; /**< Quantity value */
char is_numeric; /**< Quantity value type (nonzero is numeric) */
char *unit; /**< Quantity unit (e.g. Wh) */
char *function_medium; /**< Quantity medium or function (e.g. Electricity) */
char *quantity; /**< Quantity type (e.g. Energy) */
} mbus_record;
/**
* Connects to serial gateway and initializes MBus handle
*
* @param device Serial device (like /dev/ttyUSB0 or /dev/ttyS0)
*
* @return Initialized "unified" handler when successful, NULL otherwise;
*/
mbus_handle * mbus_connect_serial(const char * device);
/**
* Connects to TCP gateway and initializes MBus handle
*
* @param host Gateway host
* @param port Gateway port
*
* @return Initialized "unified" handler when successful, NULL otherwise;
*/
mbus_handle * mbus_connect_tcp(const char *host, int port);
/**
* Disconnects the "unified" handle.
*
* @param handle Initialized handle
*
* @return Zero when successful.
*/
int mbus_disconnect(mbus_handle * handle);
/**
* Receives a frame using "unified" handle
*
* @param handle Initialized handle
* @param frame Received frame
*
* @return Zero when successful.
*/
int mbus_recv_frame(mbus_handle * handle, mbus_frame *frame);
/**
* Sends frame using "unified" handle
*
* @param handle Initialized handle
* @param frame Frame to send
*
* @return Zero when successful.
*/
int mbus_send_frame(mbus_handle * handle, mbus_frame *frame);
/**
* Sends secodary address selection frame using "unified" handle
*
* @param handle Initialized handle
* @param secondary_addr_str Secondary address
*
* @return Zero when successful.
*/
int mbus_send_select_frame(mbus_handle * handle, const char *secondary_addr_str);
/**
* Sends request frame to given slave using "unified" handle
*
* @param handle Initialized handle
* @param address Address (0-255)
*
* @return Zero when successful.
*/
int mbus_send_data_request_frame(mbus_handle * handle, int address);
/**
* Probe/address slave by secondary address using "unified" handle
*
* @param handle Initialized handle
* @param mask Address/mask to probe
* @param matching_addr Matched address (the buffer has tobe at least 16 bytes)
*
* @return See MBUS_PROBE_* constants
*/
int mbus_probe_secondary_address(mbus_handle * handle, const char *mask, char *matching_addr);
/**
* Read data from given slave using "unified" handle and address types
*
* @param handle Initialized handle
* @param address Address of the slave
* @param reply Reply from the slave
*
* @return Zero when successful.
*/
int mbus_read_slave(mbus_handle *handle, mbus_address *address, mbus_frame *reply);
/**
* Allocate new data record. Use #mbus_record_free when finished.
*
* @return pointer to the new record, NULL when failed
*/
mbus_record * mbus_record_new();
/**
* Destructor for mbus_record
*
* @param rec record to be freed
*/
void mbus_record_free(mbus_record *rec);
/**
* Create/parse single counter from the fixed data structure
*
* @param statusByte status byte
* @param medium_unit_byte medium/unit byte
* @param data pointer to the data counter (4 bytes)
*
* @return Newly allocated record if succesful, NULL otherwise. Later on need to use #mbus_record_free
*/
mbus_record *mbus_parse_fixed_record(char statusByte, char medium_unit_byte, u_char *data);
/**
* Create/parse single counter from the variable data structure record
*
* @param data record data to be parsed
*
* @return Newly allocated record if succesful, NULL otherwise. Later on need to use #mbus_record_free
*/
mbus_record * mbus_parse_variable_record(mbus_data_record *record);
/**
* Get normalized counter value for a fixed counter
*
* Get "normalized" value and unit of the counter
*
* @param medium_unit_byte medium/unit byte of the fixed counter
* @param medium_value raw counter value
* @param unit_out units of the counter - use free when done
* @param value_out resulting counter value
* @param quantity_out parsed quantity, when done use "free"
*
* @return zero when OK
*/
int mbus_data_fixed_normalize(int medium_unit_byte, long medium_value, char **unit_out, double *value_out, char **quantity_out);
/**
* Decode value of a variable data structure
*
* @param record record to be decoded
* @param value_out_real numerical counter value output (when numerical)
* @param value_out_str string counter value output (when string, NULL otherwise), when finished use "free *value_out_str"
* @param value_out_str_size string counter value size
*
* @return zero when OK
*/
int mbus_data_variable_value_decode(mbus_record *record, double *value_out_real, char **value_out_str, int *value_out_str_size);
/**
* Decode units and normalize value using VIF/VIFE (used internally by mbus_vib_unit_normalize)
*
* @param vif VIF (including standard extensions)
* @param value already parsed "raw" numerical value
* @param unit_out parsed unit, when done use "free"
* @param value_out normalized value
* @param quantity_out parsed quantity, when done use "free"
*
* @return zero when OK
*/
int mbus_vif_unit_normalize(int vif, double value, char **unit_out, double *value_out, char **quantity_out);
/**
* Decode units and normalize value from VIB
*
* @param vib mbus value information block of the variable record
* @param value already parsed "raw" numerical value
* @param unit_out parsed unit, when done use "free"
* @param value_out normalized value
* @param quantity_out parsed quantity, when done use "free"
*
* @return zero when OK
*/
int mbus_vib_unit_normalize(mbus_value_information_block *vib, double value, char **unit_out, double *value_out, char ** quantity_out);
/**
* Iterate over secondary addresses, send a probe package to all addresses matching
* the given addresses mask.
*
* @param pos current address
* @param addr_mask address mask to
*
* @return zero when OK
*/
int mbus_scan_2nd_address_range(mbus_handle * handle, int pos, char *addr_mask);
#endif // __MBUS_PROTOCOL_AUX_H__

3032
mbus/mbus-protocol.c Normal file

File diff suppressed because it is too large Load Diff

534
mbus/mbus-protocol.h Normal file

@ -0,0 +1,534 @@
//------------------------------------------------------------------------------
// Copyright (C) 2010-2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
/**
* @file mbus-protocol.h
*
* @brief Functions and data structures for M-Bus protocol parsing.
*
*/
#ifndef _MBUS_PROTOCOL_H_
#define _MBUS_PROTOCOL_H_
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>
//
// Packet formats:
//
// ACK: size = 1 byte
//
// byte1: ack = 0xE5
//
// SHORT: size = 5 byte
//
// byte1: start = 0x10
// byte2: control = ...
// byte3: address = ...
// byte4: chksum = ...
// byte5: stop = 0x16
//
// CONTROL: size = 9 byte
//
// byte1: start1 = 0x68
// byte2: length1 = ...
// byte3: length2 = ...
// byte4: start2 = 0x68
// byte5: control = ...
// byte6: address = ...
// byte7: ctl.info= ...
// byte8: chksum = ...
// byte9: stop = 0x16
//
// LONG: size = N >= 9 byte
//
// byte1: start1 = 0x68
// byte2: length1 = ...
// byte3: length2 = ...
// byte4: start2 = 0x68
// byte5: control = ...
// byte6: address = ...
// byte7: ctl.info= ...
// byte8: data = ...
// ... = ...
// byteN-1: chksum = ...
// byteN: stop = 0x16
//
//
//
typedef struct _mbus_frame {
u_char start1;
u_char length1;
u_char length2;
u_char start2;
u_char control;
u_char address;
u_char control_information;
// variable data field
u_char checksum;
u_char stop;
u_char data[252];
size_t data_size;
int type;
//mbus_frame_data frame_data;
} mbus_frame;
typedef struct _mbus_slave_data {
int state_fcb;
int state_acd;
} mbus_slave_data;
#define NITEMS(x) (sizeof(x)/sizeof(x[0]))
//------------------------------------------------------------------------------
// MBUS FRAME DATA FORMATS
//
// DATA RECORDS
#define MBUS_DIB_DIF_EXTENSION_BIT 0x80
#define MBUS_DIB_VIF_EXTENSION_BIT 0x80
typedef struct _mbus_data_information_block {
u_char dif;
u_char dife[10];
size_t ndife;
} mbus_data_information_block;
typedef struct _mbus_value_information_block {
u_char vif;
u_char vife[10];
size_t nvife;
u_char custom_vif[128];
} mbus_value_information_block;
typedef struct _mbus_data_record_header {
mbus_data_information_block dib;
mbus_value_information_block vib;
} mbus_data_record_header;
typedef struct _mbus_data_record {
mbus_data_record_header drh;
u_char data[234];
size_t data_len;
void *next;
} mbus_data_record;
//
// HEADER FOR VARIABLE LENGTH DATA FORMAT
//
typedef struct _mbus_data_variable_header {
//Ident.Nr. Manufr. Version Medium Access No. Status Signature
//4 Byte 2 Byte 1 Byte 1 Byte 1 Byte 1 Byte 2 Byte
// ex
// 88 63 80 09 82 4D 02 04 15 00 00 00
u_char id_bcd[4]; // 88 63 80 09
u_char manufacturer[2]; // 82 4D
u_char version; // 02
u_char medium; // 04
u_char access_no; // 15
u_char status; // 00
u_char signature[2]; // 00 00
} mbus_data_variable_header;
//
// VARIABLE LENGTH DATA FORMAT
//
typedef struct _mbus_data_variable {
mbus_data_variable_header header;
mbus_data_record *record; // XXX: this max num must be dynamic
size_t nrecords;
u_char *data;
size_t data_len;
// are these needed/used?
u_char mdh;
u_char *mfg_data;
size_t mfg_data_len;
} mbus_data_variable;
//
// FIXED LENGTH DATA FORMAT
//
typedef struct _mbus_data_fixed {
// ex
// 35 01 00 00 counter 2 = 135 l (historic value)
//
// e.g.
//
// 78 56 34 12 identification number = 12345678
// 0A transmission counter = 0Ah = 10d
// 00 status 00h: counters coded BCD, actual values, no errors
// E9 7E Type&Unit: medium water, unit1 = 1l, unit2 = 1l (same, but historic)
// 01 00 00 00 counter 1 = 1l (actual value)
// 35 01 00 00 counter 2 = 135 l (historic value)
u_char id_bcd[4];
u_char tx_cnt;
u_char status;
u_char cnt1_type;
u_char cnt2_type;
u_char cnt1_val[4];
u_char cnt2_val[4];
} mbus_data_fixed;
//
// ABSTRACT DATA FORMAT (either fixed or variable length)
//
#define MBUS_DATA_TYPE_FIXED 1
#define MBUS_DATA_TYPE_VARIABLE 2
typedef struct _mbus_frame_data {
mbus_data_variable data_var;
mbus_data_fixed data_fix;
int type;
} mbus_frame_data;
//
// HEADER FOR SECONDARY ADDRESSING
//
typedef struct _mbus_data_secondary_address {
//Ident.Nr. Manufr. Version Medium
//4 Byte 2 Byte 1 Byte 1 Byte
// ex
// 14 49 10 01 10 57 01 06
u_char id_bcd[4]; // 14 49 10 01
u_char manufacturer[2]; // 10 57
u_char version; // 01
u_char medium; // 06
} mbus_data_secondary_address;
//
// for compatibility with non-gcc compilers:
//
//#ifndef __PRETTY_FUNCTION__
//#define __PRETTY_FUNCTION__ "libmbus"
//#endif
//------------------------------------------------------------------------------
// FRAME types
//
#define MBUS_FRAME_TYPE_ANY 0x00
#define MBUS_FRAME_TYPE_ACK 0x01
#define MBUS_FRAME_TYPE_SHORT 0x02
#define MBUS_FRAME_TYPE_CONTROL 0x03
#define MBUS_FRAME_TYPE_LONG 0x04
#define MBUS_FRAME_ACK_BASE_SIZE 1
#define MBUS_FRAME_SHORT_BASE_SIZE 5
#define MBUS_FRAME_CONTROL_BASE_SIZE 9
#define MBUS_FRAME_LONG_BASE_SIZE 9
#define MBUS_FRAME_BASE_SIZE_ACK 1
#define MBUS_FRAME_BASE_SIZE_SHORT 5
#define MBUS_FRAME_BASE_SIZE_CONTROL 9
#define MBUS_FRAME_BASE_SIZE_LONG 9
#define MBUS_FRAME_FIXED_SIZE_ACK 1
#define MBUS_FRAME_FIXED_SIZE_SHORT 5
#define MBUS_FRAME_FIXED_SIZE_CONTROL 6
#define MBUS_FRAME_FIXED_SIZE_LONG 6
//
// Frame start/stop bits
//
#define MBUS_FRAME_ACK_START 0xE5
#define MBUS_FRAME_SHORT_START 0x10
#define MBUS_FRAME_CONTROL_START 0x68
#define MBUS_FRAME_LONG_START 0x68
#define MBUS_FRAME_STOP 0x16
//
//
//
#define MBUS_MAX_PRIMARY_SLAVES 256
//
// Control field
//
#define MBUS_CONTROL_FIELD_DIRECTION 0x07
#define MBUS_CONTROL_FIELD_FCB 0x06
#define MBUS_CONTROL_FIELD_ACD 0x06
#define MBUS_CONTROL_FIELD_FCV 0x05
#define MBUS_CONTROL_FIELD_DFC 0x05
#define MBUS_CONTROL_FIELD_F3 0x04
#define MBUS_CONTROL_FIELD_F2 0x03
#define MBUS_CONTROL_FIELD_F1 0x02
#define MBUS_CONTROL_FIELD_F0 0x01
#define MBUS_CONTROL_MASK_SND_NKE 0x40
#define MBUS_CONTROL_MASK_SND_UD 0x53
#define MBUS_CONTROL_MASK_REQ_UD2 0x5B
#define MBUS_CONTROL_MASK_REQ_UD1 0x5A
#define MBUS_CONTROL_MASK_RSP_UD 0x08
#define MBUS_CONTROL_MASK_FCB 0x20
#define MBUS_CONTROL_MASK_FCV 0x10
#define MBUS_CONTROL_MASK_ACD 0x20
#define MBUS_CONTROL_MASK_DFC 0x10
#define MBUS_CONTROL_MASK_DIR 0x40
#define MBUS_CONTROL_MASK_DIR_M2S 0x40
#define MBUS_CONTROL_MASK_DIR_S2M 0x00
//
// Address field
//
#define MBUS_ADDRESS_BROADCAST_REPLY 0xFE
#define MBUS_ADDRESS_BROADCAST_NOREPLY 0xFF
#define MBUS_ADDRESS_NETWORK_LAYER 0xFD
//
// Control Information field
//
//Mode 1 Mode 2 Application Definition in
// 51h 55h data send EN1434-3
// 52h 56h selection of slaves Usergroup July ́93
// 50h application reset Usergroup March ́94
// 54h synronize action suggestion
// B8h set baudrate to 300 baud Usergroup July ́93
// B9h set baudrate to 600 baud Usergroup July ́93
// BAh set baudrate to 1200 baud Usergroup July ́93
// BBh set baudrate to 2400 baud Usergroup July ́93
// BCh set baudrate to 4800 baud Usergroup July ́93
// BDh set baudrate to 9600 baud Usergroup July ́93
// BEh set baudrate to 19200 baud suggestion
// BFh set baudrate to 38400 baud suggestion
// B1h request readout of complete RAM content Techem suggestion
// B2h send user data (not standardized RAM write) Techem suggestion
// B3h initialize test calibration mode Usergroup July ́93
// B4h EEPROM read Techem suggestion
// B6h start software test Techem suggestion
// 90h to 97h codes used for hashing longer recommended
#define MBUS_CONTROL_INFO_DATA_SEND 0x51
#define MBUS_CONTROL_INFO_DATA_SEND_MSB 0x55
#define MBUS_CONTROL_INFO_SELECT_SLAVE 0x52
#define MBUS_CONTROL_INFO_SELECT_SLAVE_MSB 0x56
#define MBUS_CONTROL_INFO_APPLICATION_RESET 0x50
#define MBUS_CONTROL_INFO_SYNC_ACTION 0x54
#define MBUS_CONTROL_INFO_SET_BAUDRATE_300 0xB8
#define MBUS_CONTROL_INFO_SET_BAUDRATE_600 0xB9
#define MBUS_CONTROL_INFO_SET_BAUDRATE_1200 0xBA
#define MBUS_CONTROL_INFO_SET_BAUDRATE_2400 0xBB
#define MBUS_CONTROL_INFO_SET_BAUDRATE_4800 0xBC
#define MBUS_CONTROL_INFO_SET_BAUDRATE_9600 0xBD
#define MBUS_CONTROL_INFO_SET_BAUDRATE_19200 0xBE
#define MBUS_CONTROL_INFO_SET_BAUDRATE_38400 0xBF
#define MBUS_CONTROL_INFO_REQUEST_RAM_READ 0xB1
#define MBUS_CONTROL_INFO_SEND_USER_DATA 0xB2
#define MBUS_CONTROL_INFO_INIT_TEST_CALIB 0xB3
#define MBUS_CONTROL_INFO_EEPROM_READ 0xB4
#define MBUS_CONTROL_INFO_SW_TEST_START 0xB6
#define MBUS_CONTROL_INFO_RESP_FIXED 0x73
#define MBUS_CONTROL_INFO_RESP_FIXED_MSB 0x77
#define MBUS_CONTROL_INFO_RESP_VARIABLE 0x72
#define MBUS_CONTROL_INFO_RESP_VARIABLE_MSB 0x76
//
// DATA BITS
//
#define MBUS_DATA_FIXED_STATUS_FORMAT_MASK 0x80
#define MBUS_DATA_FIXED_STATUS_FORMAT_BCD 0x00
#define MBUS_DATA_FIXED_STATUS_FORMAT_INT 0x80
#define MBUS_DATA_FIXED_STATUS_DATE_MASK 0x40
#define MBUS_DATA_FIXED_STATUS_DATE_STORED 0x40
#define MBUS_DATA_FIXED_STATUS_DATE_CURRENT 0x00
//
// data record fields
//
#define MBUS_DATA_RECORD_DIF_MASK_INST 0x00
#define MBUS_DATA_RECORD_DIF_MASK_MIN 0x10
#define MBUS_DATA_RECORD_DIF_MASK_TYPE_INT32 0x04
#define MBUS_DATA_RECORD_DIF_MASK_STORAGE_NO 0x40
#define MBUS_DATA_RECORD_DIF_MASK_EXTENTION 0x80
//
// FIXED DATA FLAGS
//
//
// VARIABLE DATA FLAGS
//
#define MBUS_VARIABLE_DATA_MEDIUM_OTHER 0x00
#define MBUS_VARIABLE_DATA_MEDIUM_OIL 0x01
#define MBUS_VARIABLE_DATA_MEDIUM_ELECTRICITY 0x02
#define MBUS_VARIABLE_DATA_MEDIUM_GAS 0x03
#define MBUS_VARIABLE_DATA_MEDIUM_HEAT 0x04
#define MBUS_VARIABLE_DATA_MEDIUM_STEAM 0x05
#define MBUS_VARIABLE_DATA_MEDIUM_HOT_WATER 0x06
#define MBUS_VARIABLE_DATA_MEDIUM_WATER 0x07
#define MBUS_VARIABLE_DATA_MEDIUM_HEAT_COST 0x08
#define MBUS_VARIABLE_DATA_MEDIUM_COMPR_AIR 0x09
#define MBUS_VARIABLE_DATA_MEDIUM_COOL_OUT 0x0A
#define MBUS_VARIABLE_DATA_MEDIUM_COOL_IN 0x0B
#define MBUS_VARIABLE_DATA_MEDIUM_BUS 0x0E
#define MBUS_VARIABLE_DATA_MEDIUM_COLD_WATER 0x16
#define MBUS_VARIABLE_DATA_MEDIUM_DUAL_WATER 0x17
#define MBUS_VARIABLE_DATA_MEDIUM_PRESSURE 0x18
#define MBUS_VARIABLE_DATA_MEDIUM_ADC 0x19
//
// variable length records
//
mbus_data_record *mbus_data_record_new();
void mbus_data_record_free(mbus_data_record *record);
void mbus_data_record_append(mbus_data_variable *data, mbus_data_record *record);
// XXX: Add application reset subcodes
mbus_frame *mbus_frame_new(int frame_type);
int mbus_frame_free(mbus_frame *frame);
mbus_frame_data *mbus_frame_data_new();
void mbus_frame_data_free(mbus_frame_data *data);
//
//
//
int mbus_frame_calc_checksum(mbus_frame *frame);
int mbus_frame_calc_length (mbus_frame *frame);
//
// Parse/Pack to bin
//
int mbus_parse(mbus_frame *frame, u_char *data, size_t data_size);
int mbus_data_fixed_parse (mbus_frame *frame, mbus_data_fixed *data);
int mbus_data_variable_parse(mbus_frame *frame, mbus_data_variable *data);
int mbus_frame_data_parse (mbus_frame *frame, mbus_frame_data *data);
int mbus_frame_pack(mbus_frame *frame, u_char *data, size_t data_size);
int mbus_frame_verify(mbus_frame *frame);
int mbus_frame_internal_pack(mbus_frame *frame, mbus_frame_data *frame_data);
//
// data parsing
//
const char *mbus_data_record_function(mbus_data_record *record);
const char *mbus_data_fixed_function(int status);
//
// M-Bus frame data struct access/write functions
//
int mbus_frame_type(mbus_frame *frame);
//
// Slave status data register.
//
mbus_slave_data *mbus_slave_data_get(size_t i);
//
// XML generating functions
//
void mbus_str_xml_encode(u_char *dst, const u_char *src, size_t max_len);
char *mbus_data_xml(mbus_frame_data *data);
char *mbus_data_variable_xml(mbus_data_variable *data);
char *mbus_data_fixed_xml(mbus_data_fixed *data);
char *mbus_frame_data_xml(mbus_frame_data *data);
char *mbus_data_variable_header_xml(mbus_data_variable_header *header);
//
// Debug/dump
//
int mbus_frame_print(mbus_frame *frame);
int mbus_frame_data_print(mbus_frame_data *data);
int mbus_data_fixed_print(mbus_data_fixed *data);
int mbus_data_variable_header_print(mbus_data_variable_header *header);
int mbus_data_variable_print(mbus_data_variable *data);
char *mbus_error_str();
void mbus_error_str_set(char *message);
void mbus_error_reset();
//
// data encode/decode functions
//
int mbus_data_manufacturer_encode(u_char *m_data, u_char *m_code);
const char *mbus_decode_manufacturer(u_char byte1, u_char byte2);
int mbus_data_bcd_encode(u_char *bcd_data, size_t bcd_data_size, int value);
int mbus_data_int_encode(u_char *int_data, size_t int_data_size, int value);
long mbus_data_bcd_decode(u_char *bcd_data, size_t bcd_data_size);
int mbus_data_int_decode(u_char *int_data, size_t int_data_size);
long mbus_data_long_decode(u_char *int_data, size_t int_data_size);
void mbus_data_tm_decode(struct tm *t, u_char *t_data, size_t t_data_size);
void mbus_data_str_decode(u_char *dst, const u_char *src, size_t len);
const char *mbus_data_fixed_medium(mbus_data_fixed *data);
const char *mbus_data_fixed_unit(int medium_unit_byte);
const char *mbus_data_variable_medium_lookup(u_char medium);
const char *mbus_unit_prefix(int exp);
const char *mbus_vib_unit_lookup(mbus_value_information_block *vib);
const char *mbus_vif_unit_lookup(u_char vif);
u_char mbus_dif_datalength_lookup(u_char dif);
char *mbus_frame_get_secondary_address(mbus_frame *frame);
int mbus_frame_select_secondary_pack(mbus_frame *frame, char *address);
#endif /* _MBUS_PROTOCOL_H_ */

229
mbus/mbus-serial.c Normal file

@ -0,0 +1,229 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <stdio.h>
#include <strings.h>
#include <termios.h>
#include <errno.h>
#include <string.h>
#include <mbus/mbus.h>
#include <mbus/mbus-serial.h>
#define PACKET_BUFF_SIZE 2048
//------------------------------------------------------------------------------
/// Set up a serial connection handle.
//------------------------------------------------------------------------------
mbus_serial_handle *
mbus_serial_connect(char *device)
{
mbus_serial_handle *handle;
if (device == NULL)
{
return NULL;
}
if ((handle = (mbus_serial_handle *)malloc(sizeof(mbus_serial_handle))) == NULL)
{
fprintf(stderr, "%s: failed to allocate memory for handle\n", __PRETTY_FUNCTION__);
return NULL;
}
handle->device = device; // strdup?
//
// create the SERIAL connection
//
// Use blocking read and handle it by serial port VMIN/VTIME setting
if ((handle->fd = open(handle->device, O_RDWR | O_NOCTTY)) < 0)
{
fprintf(stderr, "%s: failed to open tty.", __PRETTY_FUNCTION__);
return NULL;
}
bzero(&(handle->t), sizeof(handle->t));
handle->t.c_cflag |= (CS8|CREAD|CLOCAL);
handle->t.c_cflag |= PARENB;
// No received data still OK
handle->t.c_cc[VMIN] = 0;
// Wait at most 0.2 sec.Note that it starts after first received byte!!
// I.e. if CMIN>0 and there are no data we would still wait forever...
//
// The specification mentions link layer response timeout this way:
// The time structure of various link layer communication types is described in EN60870-5-1. The answer time
// between the end of a master send telegram and the beginning of the response telegram of the slave shall be
// between 11 bit times and (330 bit times + 50ms).
//
// For 2400Bd this means (330 + 11) / 2400 + 0.05 = 188.75 ms (added 11 bit periods to receive first byte).
// I.e. timeout of 0.2s seems appropriate for 2400Bd.
handle->t.c_cc[VTIME] = 2;
cfsetispeed(&(handle->t), B2400);
cfsetospeed(&(handle->t), B2400);
#ifdef MBUS_SERIAL_DEBUG
printf("%s: t.c_cflag = %x\n", __PRETTY_FUNCTION__, handle->t.c_cflag);
printf("%s: t.c_oflag = %x\n", __PRETTY_FUNCTION__, handle->t.c_oflag);
printf("%s: t.c_iflag = %x\n", __PRETTY_FUNCTION__, handle->t.c_iflag);
printf("%s: t.c_lflag = %x\n", __PRETTY_FUNCTION__, handle->t.c_lflag);
#endif
tcsetattr(handle->fd, TCSANOW, &(handle->t));
return handle;
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
int
mbus_serial_set_baudrate(mbus_serial_handle *handle, int baudrate)
{
if (handle == NULL)
return -1;
switch (baudrate)
{
case 300:
cfsetispeed(&(handle->t), B300);
cfsetospeed(&(handle->t), B300);
return 0;
case 1200:
cfsetispeed(&(handle->t), B1200);
cfsetospeed(&(handle->t), B1200);
return 0;
case 2400:
cfsetispeed(&(handle->t), B2400);
cfsetospeed(&(handle->t), B2400);
return 0;
case 9600:
cfsetispeed(&(handle->t), B9600);
cfsetospeed(&(handle->t), B9600);
return 0;
default:
return -1; // unsupported baudrate
}
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
int
mbus_serial_disconnect(mbus_serial_handle *handle)
{
if (handle == NULL)
{
return -1;
}
close(handle->fd);
free(handle);
return 0;
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
int
mbus_serial_send_frame(mbus_serial_handle *handle, mbus_frame *frame)
{
u_char buff[PACKET_BUFF_SIZE];
int len, ret;
if (handle == NULL || frame == NULL)
{
return -1;
}
if ((len = mbus_frame_pack(frame, buff, sizeof(buff))) == -1)
{
fprintf(stderr, "%s: mbus_frame_pack failed\n", __PRETTY_FUNCTION__);
return -1;
}
if ((ret = write(handle->fd, buff, len)) != len)
{
fprintf(stderr, "%s: Failed to write frame to socket (ret = %d: %s)\n", __PRETTY_FUNCTION__, ret, strerror(errno));
return -1;
}
return 0;
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
int
mbus_serial_recv_frame(mbus_serial_handle *handle, mbus_frame *frame)
{
char buff[PACKET_BUFF_SIZE];
int len, remaining, nread;
bzero((void *)buff, sizeof(buff));
//
// read data until a packet is received
//
remaining = 1; // start by reading 1 byte
len = 0;
do {
//printf("%s: Attempt to read %d bytes [len = %d]\n", __PRETTY_FUNCTION__, remaining, len);
if ((nread = read(handle->fd, &buff[len], remaining)) == -1)
{
// fprintf(stderr, "%s: aborting recv frame (remaining = %d, len = %d, nread = %d)\n",
// __PRETTY_FUNCTION__, remaining, len, nread);
return -1;
}
// printf("%s: Got %d byte [remaining %d, len %d]\n", __PRETTY_FUNCTION__, nread, remaining, len);
len += nread;
} while ((remaining = mbus_parse(frame, buff, len)) > 0);
if(remaining < 0)
{
// Would be OK when e.g. scanning the bus, otherwise it is a failure.
// printf("%s: M-Bus layer failed to receive complete data.\n", __PRETTY_FUNCTION__);
return -1;
}
if (len == -1)
{
fprintf(stderr, "%s: M-Bus layer failed to parse data.\n", __PRETTY_FUNCTION__);
return -1;
}
return 0;
}

42
mbus/mbus-serial.h Normal file

@ -0,0 +1,42 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
/**
* @file mbus-serial.h
*
* @brief Functions and data structures for sending M-Bus data via RS232.
*
*/
#ifndef MBUS_SERIAL_H
#define MBUS_SERIAL_H
#include <termios.h>
#include <mbus/mbus.h>
typedef struct _mbus_serial_handle {
char *device;
int fd;
struct termios t;
} mbus_serial_handle;
mbus_serial_handle *mbus_serial_connect(char *device);
int mbus_serial_disconnect(mbus_serial_handle *handle);
int mbus_serial_send_frame(mbus_serial_handle *handle, mbus_frame *frame);
int mbus_serial_recv_frame(mbus_serial_handle *handle, mbus_frame *frame);
int mbus_serial_set_baudrate(mbus_serial_handle *handle, int baudrate);
#endif /* MBUS_SERIAL_H */

195
mbus/mbus-tcp.c Normal file

@ -0,0 +1,195 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <unistd.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <strings.h>
#include <mbus/mbus.h>
#include <mbus/mbus-tcp.h>
#define PACKET_BUFF_SIZE 2048
//------------------------------------------------------------------------------
/// Setup a TCP/IP handle.
//------------------------------------------------------------------------------
mbus_tcp_handle *
mbus_tcp_connect(char *host, int port)
{
mbus_tcp_handle *handle;
struct hostent *host_addr;
struct sockaddr_in s;
struct timeval time_out;
if (host == NULL)
{
return NULL;
}
if ((handle = (mbus_tcp_handle *)malloc(sizeof(mbus_tcp_handle))) == NULL)
{
char error_str[128];
snprintf(error_str, sizeof(error_str), "%s: failed to allocate memory for handle\n", __PRETTY_FUNCTION__);
mbus_error_str_set(error_str);
return NULL;
}
handle->host = host; // strdup ?
handle->port = port;
//
// create the TCP connection
//
if ((handle->sock = socket(AF_INET,SOCK_STREAM, 0)) < 0)
{
char error_str[128];
snprintf(error_str, sizeof(error_str), "%s: failed to setup a socket.", __PRETTY_FUNCTION__);
mbus_error_str_set(error_str);
return NULL;
}
s.sin_family = AF_INET;
s.sin_port = htons(port);
/* resolve hostname */
if ((host_addr = gethostbyname(host)) == NULL)
{
char error_str[128];
snprintf(error_str, sizeof(error_str), "%s: unknown host: %s", __PRETTY_FUNCTION__, host);
mbus_error_str_set(error_str);
free(handle);
return NULL;
}
bcopy((void *)(host_addr->h_addr), (void *)(&s.sin_addr), host_addr->h_length);
if (connect(handle->sock, (struct sockaddr *)&s, sizeof(s)) < 0)
{
char error_str[128];
snprintf(error_str, sizeof(error_str), "%s: Failed to establish connection to %s:%d", __PRETTY_FUNCTION__, host, port);
mbus_error_str_set(error_str);
free(handle);
return NULL;
}
// Set a timeout
time_out.tv_sec = 2; //seconds
time_out.tv_usec = 0;
setsockopt(handle->sock, SOL_SOCKET, SO_SNDTIMEO, &time_out, sizeof(time_out));
setsockopt(handle->sock, SOL_SOCKET, SO_RCVTIMEO, &time_out, sizeof(time_out));
return handle;
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
int
mbus_tcp_disconnect(mbus_tcp_handle *handle)
{
if (handle == NULL)
{
return -1;
}
close(handle->sock);
free(handle);
return 0;
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
int
mbus_tcp_send_frame(mbus_tcp_handle *handle, mbus_frame *frame)
{
u_char buff[PACKET_BUFF_SIZE];
int len, ret;
if (handle == NULL || frame == NULL)
{
return -1;
}
if ((len = mbus_frame_pack(frame, buff, sizeof(buff))) == -1)
{
char error_str[128];
snprintf(error_str, sizeof(error_str), "%s: mbus_frame_pack failed\n", __PRETTY_FUNCTION__);
mbus_error_str_set(error_str);
return -1;
}
if ((ret = write(handle->sock, buff, len)) != len)
{
char error_str[128];
snprintf(error_str, sizeof(error_str), "%s: Failed to write frame to socket (ret = %d)\n", __PRETTY_FUNCTION__, ret);
mbus_error_str_set(error_str);
return -1;
}
return 0;
}
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
int
mbus_tcp_recv_frame(mbus_tcp_handle *handle, mbus_frame *frame)
{
char buff[PACKET_BUFF_SIZE];
int len, remaining, nread;
bzero((void *)buff, sizeof(buff));
//
// read data until a packet is received
//
remaining = 1; // start by reading 1 byte
len = 0;
do {
//printf("%s: Attempt to read %d bytes [len = %d]", __PRETTY_FUNCTION__, remaining, len);
if ((nread = read(handle->sock, &buff[len], remaining)) == -1)
{
mbus_error_str_set("M-Bus tcp transport layer failed to read data.");
//fprintf(stderr, "%s: aborting recv frame (remaining = %d, len = %d, nread = %d)",
// __PRETTY_FUNCTION__, remaining, len, nread);
return -1;
}
//printf("%s: Got %d byte [remaining %d, len %d]", __PRETTY_FUNCTION__, nread, remaining, len);
len += nread;
} while ((remaining = mbus_parse(frame, buff, len)) > 0);
if (remaining < 0)
{
mbus_error_str_set("M-Bus layer failed to parse data.");
return -2;
}
return 0;
}

41
mbus/mbus-tcp.h Normal file

@ -0,0 +1,41 @@
//------------------------------------------------------------------------------
// Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
/**
* @file mbus-tcp.h
*
* @brief Functions and data structures for sending M-Bus data via TCP.
*
*/
#ifndef MBUS_TCP_H
#define MBUS_TCP_H
#include <mbus/mbus.h>
typedef struct _mbus_tcp_handle {
char *host;
int port;
int sock;
} mbus_tcp_handle;
mbus_tcp_handle *mbus_tcp_connect(char *host, int port);
int mbus_tcp_disconnect(mbus_tcp_handle *handle);
int mbus_tcp_send_frame(mbus_tcp_handle *handle, mbus_frame *frame);
int mbus_tcp_recv_frame(mbus_tcp_handle *handle, mbus_frame *frame);
#endif /* MBUS_TCP_H */

17
mbus/mbus.c Normal file

@ -0,0 +1,17 @@
//------------------------------------------------------------------------------
// Copyright (C) 2010, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <mbus/mbus-protocol.h>
//
//
//
int mbus_init() {return 0;}

46
mbus/mbus.h Normal file

@ -0,0 +1,46 @@
//------------------------------------------------------------------------------
// Copyright (C) 2010, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
/**
* @file mbus.h
*
* @brief Main include file for the Freescada libmbus library.
*
* Include this file to access the libmbus API:
\verbatim
#include <mbus/mbus.h>
\endverbatim
*
*/
/*! \mainpage libmbus
*
* These pages contain automatically generated documentation for the libmbus
* API. For examples on how to use the libmbus library, see the applications
* in the bin directory in the source code distribution.
*
* For more information, see http://www.freescada.com/libmbus
*
*/
#ifndef _MBUS_H_
#define _MBUS_H_
#include <mbus/mbus-protocol.h>
#include <mbus/mbus-protocol-aux.h>
#include <mbus/mbus-tcp.h>
#include <mbus/mbus-serial.h>
//
//
//
int mbus_init();
#endif /* _MBUS_H_ */

376
missing Executable file

@ -0,0 +1,376 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
scriptversion=2009-04-28.21; # UTC
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
# 2008, 2009 Free Software Foundation, Inc.
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program 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 General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
if test $# -eq 0; then
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
fi
run=:
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
# In the cases where this matters, `missing' is being run in the
# srcdir already.
if test -f configure.ac; then
configure_ac=configure.ac
else
configure_ac=configure.in
fi
msg="missing on your system"
case $1 in
--run)
# Try to run requested program, and just exit if it succeeds.
run=
shift
"$@" && exit 0
# Exit code 63 means version mismatch. This often happens
# when the user try to use an ancient version of a tool on
# a file that requires a minimum version. In this case we
# we should proceed has if the program had been absent, or
# if --run hadn't been passed.
if test $? = 63; then
run=:
msg="probably too old"
fi
;;
-h|--h|--he|--hel|--help)
echo "\
$0 [OPTION]... PROGRAM [ARGUMENT]...
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
error status if there is no known handling for PROGRAM.
Options:
-h, --help display this help and exit
-v, --version output version information and exit
--run try to run the given command, and emulate it if it fails
Supported PROGRAM values:
aclocal touch file \`aclocal.m4'
autoconf touch file \`configure'
autoheader touch file \`config.h.in'
autom4te touch the output file, or create a stub one
automake touch all \`Makefile.in' files
bison create \`y.tab.[ch]', if possible, from existing .[ch]
flex create \`lex.yy.c', if possible, from existing .c
help2man touch the output file
lex create \`lex.yy.c', if possible, from existing .c
makeinfo touch the output file
tar try tar, gnutar, gtar, then tar without non-portable flags
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
\`g' are ignored when checking the name.
Send bug reports to <bug-automake@gnu.org>."
exit $?
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing $scriptversion (GNU Automake)"
exit $?
;;
-*)
echo 1>&2 "$0: Unknown \`$1' option"
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
;;
esac
# normalize program name to check for.
program=`echo "$1" | sed '
s/^gnu-//; t
s/^gnu//; t
s/^g//; t'`
# Now exit if we have it, but it failed. Also exit now if we
# don't have it and --version was passed (most likely to detect
# the program). This is about non-GNU programs, so use $1 not
# $program.
case $1 in
lex*|yacc*)
# Not GNU programs, they don't have --version.
;;
tar*)
if test -n "$run"; then
echo 1>&2 "ERROR: \`tar' requires --run"
exit 1
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
exit 1
fi
;;
*)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
exit 1
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
# Could not run --version or --help. This is probably someone
# running `$TOOL --version' or `$TOOL --help' to check whether
# $TOOL exists and not knowing $TOOL uses missing.
exit 1
fi
;;
esac
# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case $program in
aclocal*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
to install the \`Automake' and \`Perl' packages. Grab them from
any GNU archive site."
touch aclocal.m4
;;
autoconf*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`${configure_ac}'. You might want to install the
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
archive site."
touch configure
;;
autoheader*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`acconfig.h' or \`${configure_ac}'. You might want
to install the \`Autoconf' and \`GNU m4' packages. Grab them
from any GNU archive site."
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
test -z "$files" && files="config.h"
touch_files=
for f in $files; do
case $f in
*:*) touch_files="$touch_files "`echo "$f" |
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
*) touch_files="$touch_files $f.in";;
esac
done
touch $touch_files
;;
automake*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
You might want to install the \`Automake' and \`Perl' packages.
Grab them from any GNU archive site."
find . -type f -name Makefile.am -print |
sed 's/\.am$/.in/' |
while read f; do touch "$f"; done
;;
autom4te*)
echo 1>&2 "\
WARNING: \`$1' is needed, but is $msg.
You might have modified some files without having the
proper tools for further handling them.
You can get \`$1' as part of \`Autoconf' from any GNU
archive site."
file=`echo "$*" | sed -n "$sed_output"`
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
if test -f "$file"; then
touch $file
else
test -z "$file" || exec >$file
echo "#! /bin/sh"
echo "# Created by GNU Automake missing as a replacement of"
echo "# $ $@"
echo "exit 0"
chmod +x $file
exit 1
fi
;;
bison*|yacc*)
echo 1>&2 "\
WARNING: \`$1' $msg. You should only need it if
you modified a \`.y' file. You may need the \`Bison' package
in order for those modifications to take effect. You can get
\`Bison' from any GNU archive site."
rm -f y.tab.c y.tab.h
if test $# -ne 1; then
eval LASTARG="\${$#}"
case $LASTARG in
*.y)
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
if test -f "$SRCFILE"; then
cp "$SRCFILE" y.tab.c
fi
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
if test -f "$SRCFILE"; then
cp "$SRCFILE" y.tab.h
fi
;;
esac
fi
if test ! -f y.tab.h; then
echo >y.tab.h
fi
if test ! -f y.tab.c; then
echo 'main() { return 0; }' >y.tab.c
fi
;;
lex*|flex*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a \`.l' file. You may need the \`Flex' package
in order for those modifications to take effect. You can get
\`Flex' from any GNU archive site."
rm -f lex.yy.c
if test $# -ne 1; then
eval LASTARG="\${$#}"
case $LASTARG in
*.l)
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
if test -f "$SRCFILE"; then
cp "$SRCFILE" lex.yy.c
fi
;;
esac
fi
if test ! -f lex.yy.c; then
echo 'main() { return 0; }' >lex.yy.c
fi
;;
help2man*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a dependency of a manual page. You may need the
\`Help2man' package in order for those modifications to take
effect. You can get \`Help2man' from any GNU archive site."
file=`echo "$*" | sed -n "$sed_output"`
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
if test -f "$file"; then
touch $file
else
test -z "$file" || exec >$file
echo ".ab help2man is required to generate this page"
exit $?
fi
;;
makeinfo*)
echo 1>&2 "\
WARNING: \`$1' is $msg. You should only need it if
you modified a \`.texi' or \`.texinfo' file, or any other file
indirectly affecting the aspect of the manual. The spurious
call might also be the consequence of using a buggy \`make' (AIX,
DU, IRIX). You might want to install the \`Texinfo' package or
the \`GNU make' package. Grab either from any GNU archive site."
# The file to touch is that specified with -o ...
file=`echo "$*" | sed -n "$sed_output"`
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
if test -z "$file"; then
# ... or it is the one specified with @setfilename ...
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
file=`sed -n '
/^@setfilename/{
s/.* \([^ ]*\) *$/\1/
p
q
}' $infile`
# ... or it is derived from the source name (dir/f.texi becomes f.info)
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
fi
# If the file does not exist, the user really needs makeinfo;
# let's fail without touching anything.
test -f $file || exit 1
touch $file
;;
tar*)
shift
# We have already tried tar in the generic part.
# Look for gnutar/gtar before invocation to avoid ugly error
# messages.
if (gnutar --version > /dev/null 2>&1); then
gnutar "$@" && exit 0
fi
if (gtar --version > /dev/null 2>&1); then
gtar "$@" && exit 0
fi
firstarg="$1"
if shift; then
case $firstarg in
*o*)
firstarg=`echo "$firstarg" | sed s/o//`
tar "$firstarg" "$@" && exit 0
;;
esac
case $firstarg in
*h*)
firstarg=`echo "$firstarg" | sed s/h//`
tar "$firstarg" "$@" && exit 0
;;
esac
fi
echo 1>&2 "\
WARNING: I can't seem to be able to run \`tar' with the given arguments.
You may want to install GNU tar or Free paxutils, or check the
command line arguments."
exit 1
;;
*)
echo 1>&2 "\
WARNING: \`$1' is needed, and is $msg.
You might have modified some files without having the
proper tools for further handling them. Check the \`README' file,
it often tells you about the needed prerequisites for installing
this package. You may also peek at any GNU archive site, in case
some other package would contain this missing \`$1' program."
exit 1
;;
esac
exit 0
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

36
release_notes.txt Normal file

@ -0,0 +1,36 @@
Release notes for libmbus
Version 0.7.0 (2012-02-07):
------------------
Added support for variable-length VIF ASCII encoding. Added support for setting baud rates as command-line argument for the serial communication utilities. Thanks to Stefan Wahren for bug fixes and improvements.
Version 0.6.0 (2011-11-06):
---------------------------
Added support for decoding of more DIF and VIF types. Thanks to Pelle van der Heide for patches for imporoved support for ABB mbus devices. Several bug fixes, many of which provided by Tomas Menzl. Added a new auxillary API for simplifying development of custom mbus applications, and which contains a unified API for TCP and serial MBUS communication. Many thanks to Tomas Menzl for major contributions.
Version 0.5.0 (2011-08-06):
---------------------------
Added serial transport layer. Removed unnecessary GLib dependency. Added support for secondary address selection and probing. Many thanks to Uwe Grohnwaldt for assisting with a test environment for devices using secondary addressing.
Version 0.4.0 (2011-03-21):
---------------------------
Added unit tests. Some minor backwards-incompatible API changes (related to generation of XML represenation). Support for dynamic number of records in variable-length data frames. Support for more medium and unit types. This release also includes several patches from Markus Bergkvist.
Version 0.3.0 (2010-11-23):
---------------------------
Added support for CUSTOMER_LOCATION VIF type, activated slave_data status register. Also applied several patches from Markus Bergkvist that improved the API.
Version 0.2.0 (2010-08-07):
---------------------------
Expanded M-Bus support. Now using autotools.
Version 0.1.0 (2010-04-15):
---------------------------
Initial release FreeSCADAs Meter-Bus library: libmbus, has been published under an open source license.

29
test/Makefile.am Normal file

@ -0,0 +1,29 @@
# ------------------------------------------------------------------------------
# Copyright (C) 2010, Raditex AB
# All rights reserved.
#
# FreeSCADA
# http://www.FreeSCADA.com
# freescada@freescada.com
#
# ------------------------------------------------------------------------------
PACKAGE = @PACKAGE@
VERSION = @VERSION@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/mbus
noinst_HEADERS =
noinst_PROGRAMS = mbus_unit_test1 mbus_parse mbus_parse_hex
mbus_unit_test1_LDFLAGS = -L$(top_builddir)/mbus
mbus_unit_test1_LDADD = -lmbus -lcunit -lncurses
mbus_unit_test1_SOURCES = mbus_unit_test1.c
mbus_parse_LDFLAGS = -L$(top_builddir)/mbus
mbus_parse_LDADD = -lmbus
mbus_parse_SOURCES = mbus_parse.c
mbus_parse_hex_LDFLAGS = -L$(top_builddir)/mbus
mbus_parse_hex_LDADD = -lmbus
mbus_parse_hex_SOURCES = mbus_parse_hex.c

518
test/Makefile.in Normal file

@ -0,0 +1,518 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = mbus_unit_test1$(EXEEXT) mbus_parse$(EXEEXT) \
mbus_parse_hex$(EXEEXT)
subdir = test
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
am_mbus_parse_OBJECTS = mbus_parse.$(OBJEXT)
mbus_parse_OBJECTS = $(am_mbus_parse_OBJECTS)
mbus_parse_DEPENDENCIES =
mbus_parse_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mbus_parse_LDFLAGS) $(LDFLAGS) -o $@
am_mbus_parse_hex_OBJECTS = mbus_parse_hex.$(OBJEXT)
mbus_parse_hex_OBJECTS = $(am_mbus_parse_hex_OBJECTS)
mbus_parse_hex_DEPENDENCIES =
mbus_parse_hex_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mbus_parse_hex_LDFLAGS) $(LDFLAGS) -o $@
am_mbus_unit_test1_OBJECTS = mbus_unit_test1.$(OBJEXT)
mbus_unit_test1_OBJECTS = $(am_mbus_unit_test1_OBJECTS)
mbus_unit_test1_DEPENDENCIES =
mbus_unit_test1_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(mbus_unit_test1_LDFLAGS) $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(mbus_parse_SOURCES) $(mbus_parse_hex_SOURCES) \
$(mbus_unit_test1_SOURCES)
DIST_SOURCES = $(mbus_parse_SOURCES) $(mbus_parse_hex_SOURCES) \
$(mbus_unit_test1_SOURCES)
HEADERS = $(noinst_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
# ------------------------------------------------------------------------------
# Copyright (C) 2010, Raditex AB
# All rights reserved.
#
# FreeSCADA
# http://www.FreeSCADA.com
# freescada@freescada.com
#
# ------------------------------------------------------------------------------
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/mbus
noinst_HEADERS =
mbus_unit_test1_LDFLAGS = -L$(top_builddir)/mbus
mbus_unit_test1_LDADD = -lmbus -lcunit -lncurses
mbus_unit_test1_SOURCES = mbus_unit_test1.c
mbus_parse_LDFLAGS = -L$(top_builddir)/mbus
mbus_parse_LDADD = -lmbus
mbus_parse_SOURCES = mbus_parse.c
mbus_parse_hex_LDFLAGS = -L$(top_builddir)/mbus
mbus_parse_hex_LDADD = -lmbus
mbus_parse_hex_SOURCES = mbus_parse_hex.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign test/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstPROGRAMS:
@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
mbus_parse$(EXEEXT): $(mbus_parse_OBJECTS) $(mbus_parse_DEPENDENCIES)
@rm -f mbus_parse$(EXEEXT)
$(mbus_parse_LINK) $(mbus_parse_OBJECTS) $(mbus_parse_LDADD) $(LIBS)
mbus_parse_hex$(EXEEXT): $(mbus_parse_hex_OBJECTS) $(mbus_parse_hex_DEPENDENCIES)
@rm -f mbus_parse_hex$(EXEEXT)
$(mbus_parse_hex_LINK) $(mbus_parse_hex_OBJECTS) $(mbus_parse_hex_LDADD) $(LIBS)
mbus_unit_test1$(EXEEXT): $(mbus_unit_test1_OBJECTS) $(mbus_unit_test1_DEPENDENCIES)
@rm -f mbus_unit_test1$(EXEEXT)
$(mbus_unit_test1_LINK) $(mbus_unit_test1_OBJECTS) $(mbus_unit_test1_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus_parse.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus_parse_hex.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbus_unit_test1.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS) $(HEADERS)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstPROGRAMS ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

57
test/mbus_parse.c Normal file

@ -0,0 +1,57 @@
//------------------------------------------------------------------------------
// Copyright (C) 2010, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <mbus/mbus-protocol.h>
int
main(int argc, char *argv[])
{
int fd, len;
u_char buf[1024];
mbus_frame reply;
mbus_frame_data frame_data;
if (argc != 2)
{
fprintf(stderr, "%s binary-file\n", argv[0]);
return -1;
}
if ((fd = open(argv[1], O_RDONLY, 0)) == -1)
{
fprintf(stderr, "%s: failed to open '%s'", argv[0], argv[1]);
return -1;
}
bzero(buf, sizeof(buf));
len = read(fd, buf, sizeof(buf));
close(fd);
bzero(&reply, sizeof(reply));
bzero(&frame_data, sizeof(frame_data));
mbus_parse(&reply, buf, len);
mbus_frame_data_parse(&reply, &frame_data);
mbus_frame_print(&reply);
printf("%s", mbus_frame_data_xml(&frame_data));
}

74
test/mbus_parse_hex.c Normal file

@ -0,0 +1,74 @@
//------------------------------------------------------------------------------
// Copyright (C) 2010, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <sys/types.h>
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <mbus/mbus-protocol.h>
int
main(int argc, char *argv[])
{
int fd, len, i;
u_char raw_buff[4096], buff[4096], *ptr, *endptr;
mbus_frame reply;
mbus_frame_data frame_data;
if (argc != 2)
{
fprintf(stderr, "%s binary-file\n", argv[0]);
return -1;
}
if ((fd = open(argv[1], O_RDONLY, 0)) == -1)
{
fprintf(stderr, "%s: failed to open '%s'", argv[0], argv[1]);
return -1;
}
bzero(raw_buff, sizeof(raw_buff));
len = read(fd, raw_buff, sizeof(raw_buff));
close(fd);
i = 0;
ptr = 0;
endptr = raw_buff;
while (i < sizeof(buff)-1)
{
ptr = endptr;
buff[i] = (u_char)strtol(ptr, (char **)&endptr, 16);
// abort at non hex value
if (ptr == endptr)
break;
i++;
}
bzero(&reply, sizeof(reply));
bzero(&frame_data, sizeof(frame_data));
mbus_parse(&reply, buff, i);
mbus_frame_data_parse(&reply, &frame_data);
//mbus_frame_print(&reply);
//mbus_frame_data_print(&frame_data);
printf("%s", mbus_frame_data_xml(&frame_data));
}

182
test/mbus_unit_test1.c Normal file

@ -0,0 +1,182 @@
//------------------------------------------------------------------------------
// Copyright (C) 2010, Raditex AB
// All rights reserved.
//
// FreeSCADA
// http://www.FreeSCADA.com
// freescada@freescada.com
//
//------------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "CUnit/Basic.h"
#include <mbus/mbus-protocol.h>
static char *test_frame_table[][2] = {
// {"test-frames/frame1.hex", "test-frames/frame1.xml"},
{"test-frames/frame2.hex", "test-frames/frame2.xml"},
{"test-frames/kamstrup_multical_601.hex", "test-frames/kamstrup_multical_601.xml"},
{"test-frames/manual_frame2.hex", "test-frames/manual_frame2.xml"},
{"test-frames/manual_frame3.hex", "test-frames/manual_frame3.xml"},
{"test-frames/manual_frame7.hex", "test-frames/manual_frame7.xml"},
{"test-frames/svm_f22_telegram1.hex", "test-frames/svm_f22_telegram1.xml"},
{"test-frames/electricity-meter-1.hex", "test-frames/electricity-meter-1.xml"},
{"test-frames/electricity-meter-2.hex", "test-frames/electricity-meter-2.xml"},
};
static int no_test_frames = 6;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
char *read_file(char *filename)
{
FILE *f;
size_t size, size2;
char *file_content;
if ((f = fopen(filename, "r")) == NULL)
{
fprintf(stderr, "%s: Failed to open file %s.\n", __PRETTY_FUNCTION__, filename);
return NULL;
}
fseek(f, 0, SEEK_END);
size = ftell(f);
fseek(f, 0, SEEK_SET);
if ((file_content = (char *)malloc(size+1)) == NULL)
{
fprintf(stderr, "%s: Failed to allocate memory of size %d.\n", __PRETTY_FUNCTION__, size);
fclose(f);
return NULL;
}
if ((size2 = fread(file_content, 1, size, f)) != size)
{
fprintf(stderr, "%s: Failed to read file content (%s, %d:%d).\n", __PRETTY_FUNCTION__, filename, size, size2);
free(file_content);
fclose(f);
return NULL;
}
file_content[size] = 0;
fclose(f);
return file_content;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int
hex_to_bin(char *buff, size_t buff_size, char *hex_buff)
{
char *ptr, *endptr;
int i;
i = 0;
ptr = 0;
endptr = hex_buff;
while ((ptr != endptr) && i < buff_size-1)
{
ptr = endptr;
buff[i++] = (u_char)strtol(ptr, (char **)&endptr, 16);
}
return i;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int init_suite(void)
{
return 0;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int clean_suite(void)
{
return 0;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void test_frames(void)
{
int i, len;
for (i = 0; i < no_test_frames; i++)
{
mbus_frame frame;
mbus_frame_data frame_data;
char *hex, bin[2048], *xml_ref, *xml = NULL;
hex = read_file(test_frame_table[i][0]);
xml_ref = read_file(test_frame_table[i][1]);
len = hex_to_bin(bin, sizeof(bin), hex);
mbus_parse(&frame, bin, len);
mbus_frame_data_parse(&frame, &frame_data);
xml = mbus_frame_data_xml(&frame_data);
//printf("xml = %s\n", xml);
//printf("xml_ref = %s\n", xml_ref);
CU_ASSERT(xml != NULL);
if (xml)
{
int res = strcmp(xml, xml_ref);
CU_ASSERT(res == 0);
if (res != NULL)
{
printf("Unit test failed for %s\n", test_frame_table[i][0]);
}
}
if (hex) free(hex);
if (xml_ref) free(xml_ref);
}
return;
}
//------------------------------------------------------------------------------
// setup and run the tests
//------------------------------------------------------------------------------
int main()
{
CU_pSuite pSuite = NULL;
if (CUE_SUCCESS != CU_initialize_registry())
{
return CU_get_error();
}
if ((pSuite = CU_add_suite("MBUS frame parse test suite", init_suite, clean_suite)) == NULL)
{
CU_cleanup_registry();
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "test_frames", test_frames))
{
CU_cleanup_registry();
return CU_get_error();
}
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();
CU_cleanup_registry();
return CU_get_error();
}

@ -0,0 +1 @@
68 92 92 68 08 01 72 3E 02 00 05 43 4C 12 02 13 00 00 00 8C 10 04 52 12 00 00 8C 11 04 52 12 00 00 8C 20 04 33 44 77 01 8C 21 04 33 44 77 01 02 FD C9 FF 01 ED 00 02 FD DB FF 01 20 00 02 AC FF 01 4F 00 82 40 AC FF 01 EE FF 02 FD C9 FF 02 E7 00 02 FD DB FF 02 23 00 02 AC FF 02 51 00 82 40 AC FF 02 F1 FF 02 FD C9 FF 03 E4 00 02 FD DB FF 03 45 00 02 AC FF 03 A0 00 82 40 AC FF 03 E0 FF 02 FF 68 00 00 02 AC FF 00 40 01 82 40 AC FF 00 BF FF 01 FF 13 04 D9 16

@ -0,0 +1,133 @@
<MBusData>
<SlaveInformation>
<Id>5000244</Id>
<Manufacturer>SBC</Manufacturer>
<Version>18</Version>
<Medium>Electricity</Medium>
<AccessNumber>19</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>1252</Value>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>1252</Value>
</DataRecord>
<DataRecord id="2">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>1774433</Value>
</DataRecord>
<DataRecord id="3">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>1774433</Value>
</DataRecord>
<DataRecord id="4">
<Function>Instantaneous value</Function>
<Unit> V</Unit>
<Value>237</Value>
</DataRecord>
<DataRecord id="5">
<Function>Instantaneous value</Function>
<Unit>1e-1 A</Unit>
<Value>32</Value>
</DataRecord>
<DataRecord id="6">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>79</Value>
</DataRecord>
<DataRecord id="7">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>65518</Value>
</DataRecord>
<DataRecord id="8">
<Function>Instantaneous value</Function>
<Unit> V</Unit>
<Value>231</Value>
</DataRecord>
<DataRecord id="9">
<Function>Instantaneous value</Function>
<Unit>1e-1 A</Unit>
<Value>35</Value>
</DataRecord>
<DataRecord id="10">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>81</Value>
</DataRecord>
<DataRecord id="11">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>65521</Value>
</DataRecord>
<DataRecord id="12">
<Function>Instantaneous value</Function>
<Unit> V</Unit>
<Value>228</Value>
</DataRecord>
<DataRecord id="13">
<Function>Instantaneous value</Function>
<Unit>1e-1 A</Unit>
<Value>69</Value>
</DataRecord>
<DataRecord id="14">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>160</Value>
</DataRecord>
<DataRecord id="15">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>65504</Value>
</DataRecord>
<DataRecord id="16">
<Function>Instantaneous value</Function>
<Unit>Manufacturer specific</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="17">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>320</Value>
</DataRecord>
<DataRecord id="18">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>65471</Value>
</DataRecord>
<DataRecord id="19">
<Function>Instantaneous value</Function>
<Unit>Manufacturer specific</Unit>
<Value>4</Value>
</DataRecord>
</MBusData>

@ -0,0 +1 @@
68 92 92 68 08 02 72 E5 02 00 05 00 00 12 02 25 00 00 00 8C 10 04 54 02 00 00 8C 11 04 54 02 00 00 8C 20 04 28 41 44 00 8C 21 04 28 41 44 00 02 FD C9 FF 01 E9 00 02 FD DB FF 01 01 00 02 AC FF 01 00 00 82 40 AC FF 01 00 00 02 FD C9 FF 02 EA 00 02 FD DB FF 02 00 00 02 AC FF 02 00 00 82 40 AC FF 02 00 00 02 FD C9 FF 03 EB 00 02 FD DB FF 03 01 00 02 AC FF 03 00 00 82 40 AC FF 03 00 00 02 FF 68 00 00 02 AC FF 00 00 00 82 40 AC FF 00 00 00 01 FF 13 04 E9 16

@ -0,0 +1,133 @@
<MBusData>
<SlaveInformation>
<Id>5000345</Id>
<Manufacturer>@@@</Manufacturer>
<Version>18</Version>
<Medium>Electricity</Medium>
<AccessNumber>37</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>254</Value>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>254</Value>
</DataRecord>
<DataRecord id="2">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>444128</Value>
</DataRecord>
<DataRecord id="3">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>444128</Value>
</DataRecord>
<DataRecord id="4">
<Function>Instantaneous value</Function>
<Unit> V</Unit>
<Value>233</Value>
</DataRecord>
<DataRecord id="5">
<Function>Instantaneous value</Function>
<Unit>1e-1 A</Unit>
<Value>1</Value>
</DataRecord>
<DataRecord id="6">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="7">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="8">
<Function>Instantaneous value</Function>
<Unit> V</Unit>
<Value>234</Value>
</DataRecord>
<DataRecord id="9">
<Function>Instantaneous value</Function>
<Unit>1e-1 A</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="10">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="11">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="12">
<Function>Instantaneous value</Function>
<Unit> V</Unit>
<Value>235</Value>
</DataRecord>
<DataRecord id="13">
<Function>Instantaneous value</Function>
<Unit>1e-1 A</Unit>
<Value>1</Value>
</DataRecord>
<DataRecord id="14">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="15">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="16">
<Function>Instantaneous value</Function>
<Unit>Manufacturer specific</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="17">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="18">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="19">
<Function>Instantaneous value</Function>
<Unit>Manufacturer specific</Unit>
<Value>4</Value>
</DataRecord>
</MBusData>

@ -0,0 +1 @@
68 54 54 68 08 00 72 58 09 06 10 65 32 16 0E 7B 00 00 00 0F 5F 42 01 11 FF FF FF FF 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E6 16

@ -0,0 +1,17 @@
<MBusData>
<SlaveInformation>
<Id>10060958</Id>
<Manufacturer>LSE</Manufacturer>
<Version>22</Version>
<Medium>Bus/System</Medium>
<AccessNumber>123</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Manufacturer specific</Function>
</DataRecord>
</MBusData>

@ -0,0 +1 @@
68 1F 1F 68 08 02 72 78 56 34 12 24 40 01 07 55 00 00 00 03 13 15 31 00 DA 02 3B 13 01 8B 60 04 37 18 02 18 16

@ -0,0 +1,31 @@
<MBusData>
<SlaveInformation>
<Id>12345678</Id>
<Manufacturer>PAD</Manufacturer>
<Version>1</Version>
<Medium>Water</Medium>
<AccessNumber>85</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>12565</Value>
</DataRecord>
<DataRecord id="1">
<Function>Maximum value</Function>
<Unit>Volume flow (m m^3/h)</Unit>
<Value>113</Value>
</DataRecord>
<DataRecord id="2">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>21837</Value>
</DataRecord>
</MBusData>

@ -0,0 +1 @@
68 F7 F7 68 08 11 72 17 58 85 06 2D 2C 08 04 04 00 00 00 0C 78 17 58 85 06 04 06 E7 91 00 00 04 14 2C DB 00 00 04 22 D9 03 00 00 04 59 B9 27 00 00 04 5D 08 12 00 00 04 61 B1 15 00 00 04 2D 5B 01 00 00 14 2D C0 01 00 00 04 3B 1F 02 00 00 14 3B 74 02 00 00 84 10 06 00 00 00 00 84 20 06 00 00 00 00 84 40 14 00 00 00 00 84 80 40 14 00 00 00 00 84 C0 40 06 00 00 00 00 04 6D 1A 2F 65 11 44 06 51 82 00 00 44 14 B2 C3 00 00 54 2D 26 02 00 00 54 3B 03 04 00 00 C4 10 06 00 00 00 00 C4 20 06 00 00 00 00 C4 40 14 00 00 00 00 C4 80 40 14 00 00 00 00 C4 C0 40 06 00 00 00 00 42 6C 5F 1C 0F 00 00 00 00 E7 E4 00 00 63 66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5B C9 A5 02 34 53 00 00 E0 B2 03 00 89 9C 68 00 00 00 00 00 01 00 01 07 07 09 01 03 00 00 00 00 00 98 16

@ -0,0 +1,179 @@
<MBusData>
<SlaveInformation>
<Id>6855817</Id>
<Manufacturer>KAM</Manufacturer>
<Version>8</Version>
<Medium>Heat</Medium>
<AccessNumber>4</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Fabrication number</Unit>
<Value>6855817</Value>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>37351</Value>
</DataRecord>
<DataRecord id="2">
<Function>Instantaneous value</Function>
<Unit>Volume (1e-2 m^3)</Unit>
<Value>56108</Value>
</DataRecord>
<DataRecord id="3">
<Function>Instantaneous value</Function>
<Unit>On time (hours)</Unit>
<Value>985</Value>
</DataRecord>
<DataRecord id="4">
<Function>Instantaneous value</Function>
<Unit>Flow temperature (1e-2 deg C)</Unit>
<Value>10169</Value>
</DataRecord>
<DataRecord id="5">
<Function>Instantaneous value</Function>
<Unit>Return temperature (1e-2 deg C)</Unit>
<Value>4616</Value>
</DataRecord>
<DataRecord id="6">
<Function>Instantaneous value</Function>
<Unit>Temperature Difference (1e-2 deg C)</Unit>
<Value>5553</Value>
</DataRecord>
<DataRecord id="7">
<Function>Instantaneous value</Function>
<Unit>Power (100 W)</Unit>
<Value>347</Value>
</DataRecord>
<DataRecord id="8">
<Function>Maximum value</Function>
<Unit>Power (100 W)</Unit>
<Value>448</Value>
</DataRecord>
<DataRecord id="9">
<Function>Instantaneous value</Function>
<Unit>Volume flow (m m^3/h)</Unit>
<Value>543</Value>
</DataRecord>
<DataRecord id="10">
<Function>Maximum value</Function>
<Unit>Volume flow (m m^3/h)</Unit>
<Value>628</Value>
</DataRecord>
<DataRecord id="11">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="12">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="13">
<Function>Instantaneous value</Function>
<Unit>Volume (1e-2 m^3)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="14">
<Function>Instantaneous value</Function>
<Unit>Volume (1e-2 m^3)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="15">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="16">
<Function>Instantaneous value</Function>
<Unit>Time Point (time &amp; date)</Unit>
<Value>2011-01-05T15:26:00</Value>
</DataRecord>
<DataRecord id="17">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>33361</Value>
</DataRecord>
<DataRecord id="18">
<Function>Instantaneous value</Function>
<Unit>Volume (1e-2 m^3)</Unit>
<Value>50098</Value>
</DataRecord>
<DataRecord id="19">
<Function>Maximum value</Function>
<Unit>Power (100 W)</Unit>
<Value>550</Value>
</DataRecord>
<DataRecord id="20">
<Function>Maximum value</Function>
<Unit>Volume flow (m m^3/h)</Unit>
<Value>1027</Value>
</DataRecord>
<DataRecord id="21">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="22">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="23">
<Function>Instantaneous value</Function>
<Unit>Volume (1e-2 m^3)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="24">
<Function>Instantaneous value</Function>
<Unit>Volume (1e-2 m^3)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="25">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="26">
<Function>Instantaneous value</Function>
<Unit>Time Point (date)</Unit>
<Value>2010-12-31</Value>
</DataRecord>
<DataRecord id="27">
<Function>Manufacturer specific</Function>
</DataRecord>
</MBusData>

@ -0,0 +1 @@
68 13 13 68 08 05 73 78 56 34 12 0A 00 E9 7E 01 00 00 00 35 01 00 00 3C 16

@ -0,0 +1,22 @@
<MBusData>
<SlaveInformation>
<Id>12345678</Id>
<Medium>Water</Medium>
<AccessNumber>10</AccessNumber>
<Status>00</Status>
</SlaveInformation>
<DataRecord id="0">
<Function>Actual value</Function>
<Unit>l</Unit>
<Value>1</Value>
</DataRecord>
<DataRecord id="1">
<Function>Actual value</Function>
<Unit>reserved but historic</Unit>
<Value>135</Value>
</DataRecord>
</MBusData>

@ -0,0 +1 @@
68 1F 1F 68 08 02 72 78 56 34 12 24 40 01 07 55 00 00 00 03 13 15 31 00 DA 02 3B 13 01 8B 60 04 37 18 02 18 16

@ -0,0 +1,31 @@
<MBusData>
<SlaveInformation>
<Id>12345678</Id>
<Manufacturer>PAD</Manufacturer>
<Version>1</Version>
<Medium>Water</Medium>
<AccessNumber>85</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>12565</Value>
</DataRecord>
<DataRecord id="1">
<Function>Maximum value</Function>
<Unit>Volume flow (m m^3/h)</Unit>
<Value>113</Value>
</DataRecord>
<DataRecord id="2">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>21837</Value>
</DataRecord>
</MBusData>

@ -0,0 +1 @@
68 15 15 68 08 02 72 78 56 34 12 24 40 01 07 13 00 00 00 0C 78 04 03 02 01 9D 16

@ -0,0 +1,19 @@
<MBusData>
<SlaveInformation>
<Id>12345678</Id>
<Manufacturer>PAD</Manufacturer>
<Version>1</Version>
<Medium>Water</Medium>
<AccessNumber>19</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Fabrication number</Unit>
<Value>1020304</Value>
</DataRecord>
</MBusData>

@ -0,0 +1 @@
68 5C 5C 68 08 01 72 89 60 00 01 CD 4E 09 0C 94 70 00 00 04 06 6E 6D 00 00 04 13 45 C6 09 00 84 40 13 45 C6 09 00 02 5B F3 00 02 5F F3 00 02 62 00 00 04 22 E2 18 00 00 04 26 DB 18 00 00 04 3B 00 00 00 00 04 2C 00 00 00 00 04 6D 0C 15 A8 22 84 40 6E 00 00 00 00 84 80 40 6E 00 00 00 00 1F A7 16

@ -0,0 +1,95 @@
<MBusData>
<SlaveInformation>
<Id>1006089</Id>
<Manufacturer>SVM</Manufacturer>
<Version>9</Version>
<Medium>Heat (Volume measured at flow temperature: inlet)</Medium>
<AccessNumber>148</AccessNumber>
<Status>70</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>28014</Value>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>640581</Value>
</DataRecord>
<DataRecord id="2">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>640581</Value>
</DataRecord>
<DataRecord id="3">
<Function>Instantaneous value</Function>
<Unit>Flow temperature (deg C)</Unit>
<Value>243</Value>
</DataRecord>
<DataRecord id="4">
<Function>Instantaneous value</Function>
<Unit>Return temperature (deg C)</Unit>
<Value>243</Value>
</DataRecord>
<DataRecord id="5">
<Function>Instantaneous value</Function>
<Unit>Temperature Difference (1e-1 deg C)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="6">
<Function>Instantaneous value</Function>
<Unit>On time (hours)</Unit>
<Value>6370</Value>
</DataRecord>
<DataRecord id="7">
<Function>Instantaneous value</Function>
<Unit>Operating time (hours)</Unit>
<Value>6363</Value>
</DataRecord>
<DataRecord id="8">
<Function>Instantaneous value</Function>
<Unit>Volume flow (m m^3/h)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="9">
<Function>Instantaneous value</Function>
<Unit>Power (10 W)</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="10">
<Function>Instantaneous value</Function>
<Unit>Time Point (time &amp; date)</Unit>
<Value>2021-02-08T21:12:00</Value>
</DataRecord>
<DataRecord id="11">
<Function>Instantaneous value</Function>
<Unit>Units for H.C.A.</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="12">
<Function>Instantaneous value</Function>
<Unit>Units for H.C.A.</Unit>
<Value>0</Value>
</DataRecord>
<DataRecord id="13">
<Function>Manufacturer specific</Function>
</DataRecord>
</MBusData>

@ -0,0 +1 @@
D 04 04 68 53 FE 50 10 B1 16

@ -0,0 +1 @@
68 06 06 68 53 FE 51 01 7A 08 25 16

@ -0,0 +1 @@
68 0D 0D 68 53 FE 51 07 79 04 03 02 01 24 40 01 04 95 16

@ -0,0 +1 @@
68 0F 0F 68 53 FE 51 0C 79 78 56 34 12 0C 06 07 01 00 00 55 16

@ -0,0 +1 @@
68 96 96 68 08 00 72 04 11 29 00 7A 32 29 20 0C 28 00 00 0C 78 20 71 04 00 06 FD 0C FC 03 6D 00 2D 00 0D FD 0B 06 35 33 32 44 56 52 81 30 FD 7C 01 81 20 FD 7C 00 01 FD 7C 00 0F 02 78 04 00 02 7A 04 00 32 00 1E 09 32 08 00 00 34 10 00 00 00 00 31 18 00 34 18 FF FF FF FF 71 18 00 74 18 FF FF FF FF B1 01 18 00 B4 01 18 FF FF FF FF F1 01 18 00 F4 01 18 FF FF FF FF B1 02 18 00 B4 02 18 FF FF FF FF F1 02 18 00 31 28 00 34 28 FF FF FF FF 71 28 00 01 01 00 01 09 00 24 16

@ -0,0 +1 @@
68 96 96 68 08 00 72 04 11 29 00 7A 32 29 20 0C 28 00 00 0C 78 20 71 04 00 06 FD 0C FC 03 6D 00 2D 00 0D FD 0B 06 35 33 32 44 56 52 81 30 FD 7C 01 81 20 FD 7C 00 01 FD 7C 00 0F 02 78 04 00 02 7A 04 00 32 00 1E 09 32 08 00 00 34 10 00 00 00 00 31 18 00 34 18 FF FF FF FF 71 18 00 74 18 FF FF FF FF B1 01 18 00 B4 01 18 FF FF FF FF F1 01 18 00 F4 01 18 FF FF FF FF B1 02 18 00 B4 02 18 FF FF FF FF F1 02 18 00 31 28 00 34 28 FF FF FF FF 71 28 00 01 01 00 01 09 00 24 16

@ -0,0 +1 @@
68 DE DE 68 08 01 72 89 60 00 01 CD 4E 09 04 18 70 00 00 1F 45 00 3C 01 7F B0 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C5 00 84 11 98 A1 01 00 C9 18 00 00 00 00 00 01 58 04 87 24 81 01 5B 00 00 48 18 00 63 60 7D 7F 3E 5F 60 01 00 0A 01 02 99 00 00 0E 50 C3 00 00 7F 7F 80 01 0A 00 00 FF 02 00 02 18 00 00 00 00 28 10 36 20 06 02 BE 23 BF 23 0A 0B 10 28 10 36 20 06 02 BE 23 BF 23 0A 0B 10 28 10 36 00 00 00 00 00 93 92 C9 00 10 00 00 02 89 60 00 01 FF FF FF FF FF FF FF FF 08 06 08 13 08 5A 08 5E 08 62 08 3D 00 00 00 00 00 00 00 10 01 00 0D 01 45 00 46 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 0A 02 25 6E 02 6E 6D 00 00 F6 16