# Copyright (C) 2006-2010 David Sugar, Tycho Softworks.
#
# This file is free software; as a special exception the author 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.

MAINTAINERCLEANFILES = Makefile.in Makefile
RELEASE = $(LT_VERSION) -release $(LT_RELEASE)
AM_CXXFLAGS = $(UCOMMON_FLAGS)

pkgincludedir = $(includedir)/commoncpp
pkginclude_HEADERS = config.h export.h string.h exception.h thread.h \
	slog.h applog.h address.h socket.h tcp.h udp.h dccp.h mime.h file.h \
	process.h pointer.h serial.h tokenizer.h numbers.h object.h \
	commoncpp.h


