## ## gcsd ## ## gcsd the generic command sequencer daemon can be used to serialize ## commands sent over various paralell communication channels to a ## single command output. It can be seen as a multiplexer for any ## kind of communication between a single resource and various clients ## which want to submit commands to it or query information from it. ## gcsd is written in C and Lua. The goal is to provide an easy to ## understand high level API based on Lua which can be used to ## implement the business logic of the so formed multiplexer daemon. ## ## ## Copyright (C) 2009-2010 Markus Grueneis ## Christian Pointner ## ## This file is part of gcsd. ## ## gcsd 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 3 of the License, or ## any later version. ## ## gcsd 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 gcsd. If not, see . ## ifneq ($(MAKECMDGOALS),distclean) include include.mk endif EXECUTABLE := gcsd # sysexec.o \ C_OBJS := log.o \ l_log.o \ options.o \ string_list.o \ sig_handler.o \ l_sig_handler.o \ l_rawio.o \ l_tcp.o \ l_util.o \ l_timer.o \ gcsd.o C_SRCS := $(C_OBJS:%.o=%.c) #MODULES := dummy debug_shell #MODULE_SRC := $(MODULES:%=modules/%.lua) LUA_SRCS := client_list.lua \ module_list.lua \ command_queue.lua \ command_table.lua \ response_table.lua \ dispatch_tables.lua \ main_loop.lua LUA_BYTECODE := $(EXECUTABLE).lc LUA_BYTECODE_OBJ := $(EXECUTABLE)_lua_bytecode.o .PHONY: cleanlua clean cleanall distclean manpage install install-bin install-etc install-man uninstall remove purge all: $(EXECUTABLE) %.d: %.c @set -e; rm -f $@; \ $(CC) -MM $(CFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$; echo '(re)building $@' ifneq ($(MAKECMDGOALS),distclean) -include $(C_SRCS:%.c=%.d) endif $(EXECUTABLE): $(C_OBJS) $(LUA_BYTECODE_OBJ) $(CC) $(C_OBJS) $(LUA_BYTECODE_OBJ) -o $@ $(LDFLAGS) %.o: %.c $(CC) $(CFLAGS) -c $< $(LUA_BYTECODE): $(LUA_SRCS) $(LUAC) -o $@ $(LUA_SRCS) $(LUA_BYTECODE_OBJ): $(LUA_BYTECODE) $(LUA) ../tools/bin2c.lua $(LUA_BYTECODE) $(@:%.o=%) > $(@:%.o=%.c) $(CC) $(@:%.o=%.c) -c -o $@ strip: $(EXECUTABLE) $(LUA_BYTECODE) $(LUAC) -s -o $(LUA_BYTECODE) $(LUA_BYTECODE) $(MAKE) $(STRIP) -s $(EXECUTABLE) distclean: cleanall find . -name *.o -exec rm -f {} \; find . -name "*.\~*" -exec rm -rf {} \; rm -f include.mk rm -f config.h cleanlua: rm -f $(LUA_BYTECODE) rm -f $(LUA_BYTECODE_OBJ) rm -f $(LUA_BYTECODE_OBJ:%.o=%.c) clean: cleanlua rm -f *.o rm -f *.d rm -f *.d.* rm -f $(EXECUTABLE) rm -f $(EXECUTABLE).exe cleanall: clean $(MAKE) --directory="../doc/" clean manpage: $(MAKE) --directory="../doc/" manpage INSTALL_TARGETS := install-bin install-etc REMOVE_TARGETS := remove-bin remove-etc ifdef MANDIR INSTALL_TARGETS += install-man REMOVE_TARGETS += remove-man endif ifdef EXAMPLESDIR INSTALL_TARGETS += install-examples REMOVE_TARGETS += remove-examples endif install: all $(INSTALL_TARGETS) install-bin: $(EXECUTABLE) $(INSTALL) -d $(DESTDIR)$(BINDIR) $(INSTALL) -m 755 $(EXECUTABLE) $(DESTDIR)$(BINDIR) install-etc: $(INSTALL) -d $(DESTDIR)$(ETCDIR)/$(EXECUTABLE) @ echo "example configurations can be found at $(EXAMPLESDIR)/$(EXECUTABLE)" > $(DESTDIR)$(ETCDIR)/$(EXECUTABLE)/README install-examples: $(INSTALL) -d $(DESTDIR)$(EXAMPLESDIR)/$(EXECUTABLE) install-man: manpage $(INSTALL) -d $(DESTDIR)$(MANDIR)/man8/ $(INSTALL) -m 644 ../doc/gcsd.8 $(DESTDIR)$(MANDIR)/man8/$(EXECUTABLE).8 uninstall: remove remove: $(REMOVE_TARGETS) remove-bin: rm -f $(DESTDIR)$(BINDIR)/$(EXECUTABLE) remove-etc: rm -f $(DESTDIR)$(ETCDIR)/init.d/$(EXECUTABLE) remove-examples: rm -rf $(DESTDIR)$(EXAMPLESDIR)/$(EXECUTABLE)/ remove-man: rm -f $(DESTDIR)$(MANDIR)/man8/$(EXECUTABLE).8 purge: remove rm -rf $(DESTDIR)$(ETCDIR)/$(EXECUTABLE)/