Initial commit

This commit is contained in:
Laurence Withers 2007-10-13 18:15:32 +00:00
commit c3b542d8c5
32 changed files with 1674 additions and 0 deletions

1
src/docs/.params Normal file
View file

@ -0,0 +1 @@
docs doxygen docs

179
src/docs/Doxyfile.in Normal file
View file

@ -0,0 +1,179 @@
# liblwevent/src/docs/Doxyfile.in
#
# (c)2007, Laurence Withers, <l@lwithers.me.uk>.
# Released under the GNU GPLv2. See file COPYING or
# http://www.gnu.org/copyleft/gpl.html for details.
#
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = liblwevent
OUTPUT_DIRECTORY =
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = YES
FULL_PATH_NAMES = NO
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = YES
DETAILS_AT_TOP = YES
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = NO
EXTRACT_LOCAL_METHODS = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = YES
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = NO
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = NO
SHOW_DIRECTORIES = NO
FILE_VERSION_FILTER =
QUIET = YES
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = YES
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
INPUT_ENCODING = UTF-8
FILE_PATTERNS =
RECURSIVE = NO
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
IMAGE_PATH = src/docs
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = NO
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 250
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
GENERATE_AUTOGEN_DEF = NO
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED = DOXYGEN
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
CLASS_DIAGRAMS = YES
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = NO
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = NO
INCLUDED_BY_GRAPH = NO
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = NO
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
DOT_TRANSPARENT = YES
DOT_MULTI_TARGETS = YES
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
SEARCHENGINE = NO

30
src/docs/MainPage.dox Normal file
View file

@ -0,0 +1,30 @@
/* liblwevent/src/docs/MainPage.dox
*
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
* Released under the GNU GPLv2. See file COPYING or
* http://www.gnu.org/copyleft/gpl.html for details.
*/
/*! \mainpage Lightweight Event Library
This library is a lightweight wrapper around the \c epoll(7) facility. Its purpose is to provide a
slightly higher level interface for simplicity and speed of development. Effectively, it provides an
API consisting of the common operations used by programs written using an event-driven, finite state
machine (or other object-based) paradigm.
Its features are as follows:
\li simple event loop interface (see section \ref eventloop)
\li wrapper functions for adding and removing file descriptors (see section \ref fdevent)
\li signal functions (TODO)
\li timer functions (TODO)
\li safe inter-object actions (one object may free another at any time)
\li O(1) design to match that of \c epoll(7)
See the page \ref libdesign for detailed information on the implementation.
*/
/* options for text editors
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
vim: expandtab:ts=4:sw=4:syntax=doxygen
*/

1
src/docs/build.default Normal file
View file

@ -0,0 +1 @@
source src/docs/build.docs

43
src/docs/build.docs Normal file
View file

@ -0,0 +1,43 @@
# These are external variables, and shouldn't clash with anything else
# docs_BUILT
#
MONOLITHIC_DOC="${MONOLITHIC_DOC} $(echo src/docs/*.dox)"
build_target monolithic
if [ -z ${docs_BUILT} ]
then
echo "Building documentation with Doxygen..."
DOXYFILE=obj/Doxyfile.docs
if [ ! -e ${DOXYFILE} ]
then
do_cmd cp src/docs/Doxyfile.in ${DOXYFILE} || return 1
echo "INPUT = ${MONOLITHIC_DOC}" >> ${DOXYFILE}
echo "PROJECT_NUMBER = ${VERSION}" >> ${DOXYFILE}
fi
MODIFIED=0
for file in ${MONOLITHIC_DOC}
do
if [ ${file} -nt html/index.html ]
then
MODIFIED=1
break
fi
done
if [ ${MODIFIED} -ne 0 ]
then
do_cmd doxygen ${DOXYFILE} || return 1
print_success "Documentation built"
else
print_success "Documentation is up to date"
fi
docs_BUILT=1
fi
# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
# vim: syntax=sh:expandtab:ts=4:sw=4

1
src/docs/build.install Normal file
View file

@ -0,0 +1 @@
source src/docs/build.install-docs

View file

@ -0,0 +1,21 @@
build_target docs
# create documentation directories
echo "Installing documentation into ${DOCSDIR}"
build_dir_tree "${DOCSDIR}/html" || return 1
# copy across the Doxygen-generated documentation
for file in html/*
do
install_file ${file} ${DOCSDIR}/html 0644 || return 1
done
# copy across the generic files
for file in COPYING README
do
install_file ${file} ${DOCSDIR} 0644 || return 1
done
print_success "Documentation installed"
# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
# vim: syntax=sh:expandtab:ts=4:sw=4

49
src/docs/libdesign.dox Normal file
View file

@ -0,0 +1,49 @@
/* liblwevent/src/docs/libdesign.dox
*
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
* Released under the GNU GPLv2. See file COPYING or
* http://www.gnu.org/copyleft/gpl.html for details.
*/
/*! \page libdesign Library design
\section libdesign_O1 O(1) design
Like the \c epoll(7) facility, \a liblwevent is designed to be O(1): execution time does not scale
with number of active file descriptors, and is instead constant (per event). Effectively, this means
that the library \em never stores or scans a list of active objects; instead, objects are associated
solely with file descriptors, and the kernel maintains this association in its file descriptor
table.
As a consequence, the library does not have information about which (if any) objects are active. It
cannot be used to directly implement per-object timeouts, since there would be no way of determining
which objects to scan when computing what the timeouts should be, and no way of knowing which
objects did not receive events after a call to \c epoll_wait(2).
\section libdesign_interobject Inter-object actions
Unlike \a libevent (see \c event(3)), liblwevent directly supports safe inter-object actions. This
means that one object can safely free (or modify) another, at any time, without fear of crashing.
Consider an event loop watching two objects, A and B. When either object's file descriptor is
closed, the other object should be freed. Now imagine that the remote side of B is shut down and,
before the kernel schedules in the event loop's process, A becomes ready for reading. The kernel,
unaware of the semantics of the link between these two objects, will return two events: \c EPOLLHUP
for B, and EPOLLIN for A. The process is scheduled in, and processes B's event first. It closes the
file descriptor associated with A and destroys the associated user-space information (write buffers
etc.). But then it comes to process the event for A, which is now invalid, and has dangling pointers.
\a liblwevent provides a mechanism for dealing with this sequence of events. Each object has an
\em invalid flag, normally cleared. When B destroys the information associated with A, the struct
lwevent object associated with A persists with its invalid flag set, and a pointer to it is placed
onto a list. When the event for A is processed, \a liblwevent notices the invalid flag and skips the
event. When all events have been processed, the library iterates through the list of invalid events
and frees the remaining objects. This ensures robust operation regardless of the order in which
events occur.
*/
/* options for text editors
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
vim: expandtab:ts=4:sw=4:syntax=doxygen
*/

1
src/libgslevent/.params Normal file
View file

@ -0,0 +1 @@
lib c liblwevent lwevent.h

View file

@ -0,0 +1,16 @@
/* liblwevent/src/liblwevent/000_TopHeader.h
*
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
* Released under the GNU GPLv2. See file COPYING or
* http://www.gnu.org/copyleft/gpl.html for details.
*/
#ifndef HEADER_liblwevent
#define HEADER_liblwevent
/* standard includes, or includes needed for type declarations */
/* options for text editors
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
vim: expandtab:ts=4:sw=4:syntax=c.doxygen
*/

View file

@ -0,0 +1,15 @@
/* liblwevent/src/liblwevent/000_TopSource.c
*
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
* Released under the GNU GPLv2. See file COPYING or
* http://www.gnu.org/copyleft/gpl.html for details.
*/
#include "lwevent.h"
/* Below are all the includes used throughout the library. */
/* options for text editors
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
vim: expandtab:ts=4:sw=4
*/

View file

@ -0,0 +1,67 @@
/* liblwevent/src/liblwevent/200_eventloop.h
*
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
* Released under the GNU GPLv2. See file COPYING or
* http://www.gnu.org/copyleft/gpl.html for details.
*/
/*! \defgroup eventloop Main event loop
This module controls overall program flow. The two main functions of interest are
lwevent_loop(), which implements a full event-driven programming loop (only returning when the
program should exit), and lwevent_wait(), which implements a single run of the event loop.
*/
/*!@{*/
/*! \brief Event loop exit flag.
This flag, if set, signifies that lwevent_loop() should exit after its next iteration. It can be
set by a signal handler or any other function in the program at any time. It is scanned after each
loop is completely processed.
*/
extern volatile int lwevent_loop_exit;
/*! \brief Event loop (loop forever).
\retval 0 on success (event loop exited due to lwevent_loop_exit flag).
\retval -1 on error (system call failed; see \a errno).
This function will call lwevent_wait() in a loop forever. The loop can be aborted by setting the
flag lwevent_loop_exit to non-zero. The loop will also be aborted if lwevent_wait() returns an
error (in which case \a errno can be used to determine the error).
*/
int lwevent_loop(void);
/*! \brief Event loop (loop once).
\param timeout_ms A timeout, in milliseconds. This function will return as soon as any events occur,
but will return after \a timeout_ms milliseconds have elapsed.
\retval 0 on success (events occurred, timeout occurred).
\retval -1 on error (system call failed; see \a errno).
This function will run the event loop once, returning as soon as events are available (or the
timeout, in milliseconds, occurs). If any events do occur, they will be dispatched to the relevant
callback objects. The final action of this function is to free the memory associated with any
objects that are closed during the callbacks.
*/
int lwevent_wait(int timeout_ms);
/*!@}*/
/* options for text editors
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
vim: expandtab:ts=4:sw=4:syntax=c.doxygen
*/

View file

@ -0,0 +1,111 @@
/* liblwevent/src/liblwevent/300_fdevent.h
*
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
* Released under the GNU GPLv2. See file COPYING or
* http://www.gnu.org/copyleft/gpl.html for details.
*/
/*! \defgroup fdevent File descriptor event management
This module contains functions for managing file descriptor-based events. For each file descriptor
to be monitored, a struct lwevent is instantiated with lwevent_new(). This opaque object contains
all the details needed to provide callbacks when events occur (see section \ref fdparams for more
information).
*/
/*!@{*/
/*! \brief Opaque file descriptor event structure.
This structure is associated with a single file descriptor. It holds the details used to
implement callbacks whenever the file descriptor is ready for I/O. The structure cannot be
dereferenced; instead, the functions used in the section \ref fdparams can be used to store or
retrieve associated values.
*/
struct lwevent
#ifndef DOXYGEN
;
#else
{
/*! \brief Dummy variable for doxygen */
int dummy;
};
#endif
/*! \brief Event callback function pointer.
\param ev Pointer to event structure.
\param revents Bitmask of returned events (see \c epoll(7)).
This is the type of function pointer used for event callbacks. The event callback function will be
called from lwevent_wait() or lwevent_loop() with a pointer to the associated event structure and
a bitmask of events which have occurred.
*/
typedef void (*lwevent_callback)(struct lwevent* ev, int revents);
/*! \brief Create new event structure associated with a file descriptor.
\param fd File descriptor to monitor.
\param events Bitmask of events to watch for, and epoll flags (see \c epoll(7)).
\param callback Pointer to function to call whenever an event occurs.
\returns Pointer to new lwevent structure on success.
\retval 0 on error (and see \a errno).
This function will create and register with \c epoll(7) a lwevent structure associated with the
file descriptor \a fd. Initially, the object will have the callback function specified in
\a callback, but this (and other attributes) can be changed; see section \ref fdparams.
Once a lwevent structure has been created for \a fd, \a fd should not be passed to \c close(2)
directly. Instead, when it is time to close the file descriptor, pass the associated lwevent
structure to lwevent_free().
*/
struct lwevent* lwevent_new(int fd, int events, lwevent_callback callback);
/*! \brief Free an event structure and close its associated file descriptor.
\param ev Event structure. May be 0.
This function will close the file descriptor associated with \a ev, call the destructor if one is
registered (see section \ref fdparams), and free the memory used by \a ev. It may be called at any
time in the event loop. If called with a null argument, it is a no-op.
Whenever this function is called, the object \a ev is marked as invalid. If it has already been
marked as invalid, the function is a no-op. Otherwise, the file descriptor is immediately closed
with \c close(2), and the destructor is also called. The object \a ev itself is not actually freed
at this point; it is placed onto a list of invalid objects, and is only freed at the very end of a
call to lwevent_wait().
This behaviour is what allows an object to be freed at any time without fear of crashing. If two
events are returned from lwevent_wait(), and the callback of the first event calls lwevent_free()
on the second event's object, the second callback can be aborted (since the event object will still
exist, but is marked as invalid). Further objects may call lwevent_free() on the invalid object
without consequence. At the end of the event loop, once no more callbacks are queued, the invalid
objects are freed. This means that you cannot continue to refer to invalid objects after a completed
call to lwevent_wait().
*/
void lwevent_free(struct lwevent* ev);
int lwevent_deactivate(struct lwevent* ev);
int lwevent_reactivate(struct lwevent* ev);
/*!@}*/
/* options for text editors
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
vim: expandtab:ts=4:sw=4:syntax=c.doxygen
*/

View file

@ -0,0 +1,30 @@
/* liblwevent/src/liblwevent/300_fdevent.h
*
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
* Released under the GNU GPLv2. See file COPYING or
* http://www.gnu.org/copyleft/gpl.html for details.
*/
int lwevent_get_fd(const struct lwevent* ev);
int lwevent_set_events(struct lwevent* ev, int events, int* old_events);
int lwevent_get_events(const struct lwevent* ev);
void lwevent_set_callback(struct lwevent* ev, lwevent_callback callback,
lwevent_callback* old_callback);
lwevent_callback lwevent_get_callback(const struct lwevent* ev);
void lwevent_set_user(struct lwevent* ev, void* user);
void* lwevent_get_user(const struct lwevent* ev);
typedef void (*lwevent_dtor)(struct lwevent* ev);
void lwevent_set_dtor(struct lwevent* ev, lwevent_dtor dtor, lwevent_dtor* old_dtor);
lwevent_dtor lwevent_get_dtor(struct lwevent* ev);
/* options for text editors
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
vim: expandtab:ts=4:sw=4:syntax=c.doxygen
*/

View file

@ -0,0 +1,13 @@
/* liblwevent/src/liblwevent/999_BottomHeader.h
*
* (c)2007, Laurence Withers, <l@lwithers.me.uk>.
* Released under the GNU GPLv2. See file COPYING or
* http://www.gnu.org/copyleft/gpl.html for details.
*/
#endif
/* options for text editors
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
vim: expandtab:ts=4:sw=4:syntax=c.doxygen
*/

View file

@ -0,0 +1 @@
source src/liblwevent/build.lib

View file

@ -0,0 +1 @@
source src/liblwevent/build.install-lib

View file

@ -0,0 +1,37 @@
build_target liblwevent
# make paths (this is for Gentoo in particular)
build_dir_tree "${LIBDIR}" || return 1
build_dir_tree "${BINDIR}" || return 1
build_dir_tree "${INCLUDEDIR}" || return 1
# install library
echo "Installing libraries into '${LIBDIR}'"
install_file ${liblwevent} ${LIBDIR} 0755 || return 1
BASE="${liblwevent_BASE}.so"
MAJOR="${BASE}.${SOMAJOR}"
MICRO="${MAJOR}.${SOMICRO}"
install_symlink "${BASE}" "${MICRO}" "${LIBDIR}"
# install header
echo "Installing header file '${liblwevent_HEADER}' into ${INCLUDEDIR}"
install_header ${liblwevent_HEADER} ${INCLUDEDIR} 0644 || return 1
# install config script
echo "Installing config script into ${BINDIR}"
CONFFILE="${INSTALL_PREFIX}${BINDIR}/liblwevent-config"
do_cmd rm -f "${CONFFILE}"
do_cmd_redir "${CONFFILE}" sed \
-e "s,@VERSION@,${VERSION}," \
-e "s,@DEP_CFLAGS@,${liblwevent_DEP_CFLAGS}," \
-e "s,@DEP_LIBS@,${liblwevent_DEP_LIBS}," \
-e "s,@LIB_DIR@,${LIBDIR}," \
-e "s,@INCLUDE_DIR@,${INCLUDEDIR}," \
src/liblwevent/config-script
do_cmd chmod 0755 "${CONFFILE}"
print_success "Done"
# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
# vim: syntax=sh:expandtab:ts=4:sw=4

55
src/libgslevent/build.lib Normal file
View file

@ -0,0 +1,55 @@
# These are external variables, and shouldn't clash with anything else
# liblwevent
# liblwevent_BUILT
# liblwevent_HEADER
# liblwevent_BASE
# liblwevent_DEP_CFLAGS
# liblwevent_DEP_LIBS
if [ -z ${liblwevent_BUILT} ]
then
liblwevent_BASE=liblwevent
source src/liblwevent/soversion
liblwevent="obj/${liblwevent_BASE}.so.${SOMAJOR}.${SOMICRO}"
liblwevent_DEP_CFLAGS="" # @TODO@ cflags
liblwevent_DEP_LIBS="" # @TODO@ libs
SO_EXTRA="${liblwevent_DEP_CFLAGS} ${liblwevent_DEP_LIBS} -lc"
echo "Building library ${liblwevent}..."
do_cmd source src/liblwevent/build.monolithic || return 1
MODIFIED=0
for test in ${MONOLITHIC_TESTS} ${HDR} ${SRC}
do
if [ ${test} -nt ${liblwevent} ]
then
MODIFIED=1
break
fi
done
if [ ${MODIFIED} -ne 0 ]
then
echo " Compiling"
SONAME="${liblwevent_BASE}.so.${SOMAJOR}"
do_cmd ${CC} ${CFLAGS} -Iobj -shared -fpic -o "${liblwevent}" \
-Wl,-soname,${SONAME} \
${SRC} ${SO_EXTRA} || return 1
# make tests work
do_cmd ln -sf $(basename ${liblwevent}) obj/${SONAME} || return 1
print_success "Library built"
else
print_success "Library up to date"
fi
liblwevent_BUILT=1
liblwevent_HEADER=${HDR}
fi
# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
# vim: syntax=sh:expandtab:ts=4:sw=4

View file

@ -0,0 +1,21 @@
# These are external variables, and shouldn't clash with anything else
# liblwevent_MONOLITHIC
SRC="obj/liblwevent.c"
HDR="obj/lwevent.h"
MONOLITHIC_TESTS="src/liblwevent/build.lib src/liblwevent/build.monolithic"
if [ -z "${liblwevent_MONOLITHIC}" ]
then
MONOLITHIC_SOURCE="$(find src/liblwevent/ -name '*.h' | sort)"
make_monolithic ${HDR} Ch || return 1
MONOLITHIC_SOURCE="$(find src/liblwevent/ -name '*.c' | sort)"
make_monolithic ${SRC} C || return 1
liblwevent_MONOLITHIC=1
MONOLITHIC_DOC="${MONOLITHIC_DOC} ${HDR}"
fi
# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
# vim: syntax=sh:expandtab:ts=4:sw=4

View file

@ -0,0 +1,98 @@
#!/bin/bash
# liblwevent/src/liblwevent/config-script
#
# liblwevent-config template. Variables are finalised at install time.
#
dep_cflags="@DEP_CFLAGS@"
dep_libs="@DEP_LIBS@"
include_dir="@INCLUDE_DIR@"
include_dir_set="no"
lib_dir="@LIB_DIR@"
lib_dir_set="no"
usage() {
cat <<EOF
Usage: liblwevent-config [options]
Options:
[--version]
[--libs]
[--libdir[=DIR]]
[--cflags]
[--includedir[=DIR]]
EOF
exit $1
}
[ $# -eq 0 ] && usage 1 1>&2
while [ $# -gt 0 ]
do
case "$1" in
-*=*)
optarg="$(echo "$1" | sed 's/[-_a-zA-Z0-9]*=//')"
;;
*)
optarg=""
;;
esac
case "$1" in
--libdir=*)
lib_dir="${optarg}"
lib_dir_set="yes"
;;
--libdir)
echo_lib_dir="yes"
;;
--includedir=*)
include_dir="${optarg}"
include_dir_set="yes"
;;
--includedir)
echo_include_dir="yes"
;;
--version)
echo "@VERSION@"
exit 0
;;
--cflags)
[ "${include_dir}" != "/usr/include" ] && includes="-I${include_dir}"
echo_cflags="yes"
;;
--libs)
echo_libs="yes"
;;
*)
usage 1 1>&2
;;
esac
shift
done
[ "${echo_prefix}" == "yes" ] && echo "${prefix}"
[ "${echo_exec_prefix}" == "yes" ] && echo "${exec_prefix}"
[ "${echo_cflags}" == "yes" ] && echo "${dep_cflags} ${includes}"
[ "${echo_libs}" == "yes" ] && echo "${dep_libs} -L${lib_dir} -llwevent"
true
# vim: syntax=sh:expandtab:ts=4:sw=4
# kate: replace-trailing-space-save true; space-indent true; tab-width 4;

15
src/libgslevent/soversion Normal file
View file

@ -0,0 +1,15 @@
# liblwevent/src/liblwevent/soversion
#
# (c)2007, Laurence Withers, <l@lwithers.me.uk>.
# Released under the GNU GPLv2. See file COPYING or
# http://www.gnu.org/copyleft/gpl.html for details.
#
# SOMAJOR is included in the library's soname, and needs to be bumped
# after a binary-incompatible release. It is a single integer.
SOMAJOR=0
# SOMICRO is bumped every time there is a binary-compatible release.
SOMICRO=0