- updated INSTALL w/ more info on building ser
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Sat, 8 Dec 2001 22:06:27 +0000 (22:06 +0000)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Sat, 8 Dec 2001 22:06:27 +0000 (22:06 +0000)
- splited Makefile in Makefile, Makefile.sources, Makefile.defs, Makefile.rules,
- added Makefile.modules (included by each an every module)
- fixed a warning in textops
- updated all module Makefile to use Makefile.modules

INSTALL
Makefile
Makefile.defs [new file with mode: 0644]
Makefile.modules [new file with mode: 0644]
Makefile.rules [new file with mode: 0644]
Makefile.sources [new file with mode: 0644]
main.c
modules/tm/Makefile

diff --git a/INSTALL b/INSTALL
index fc709ea..3c31950 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -24,9 +24,49 @@ Arhitecture Notes:
        (>=0.12). 
        
 
+
+
+Howto:
+(NOTE: if make doesn't work try gmake  instead)
+
+- compile with default options:
+
+make   #builds only ser core, equivalent to make ser
+make modules
+
+or make all #builds everything
+
+- compile with profiling
+
+make PROFILE=-pg all
+
+-compile debug mode version
+
+make mode=debug all
+
+-compile debug version with profiling
+
+make mode=debug PROFILE=-pg all
+
+-compile only the print module
+
+make modules=modules/print modules
+
+-compile all the modules except textops
+
+make exclude_modules="CVS textops" modules
+
+
+
+Make targets:
+
 Clean:
+
 make clean   (clean the modules too)
 make proper  (clean also the dependencies)
+make distclean (the same as proper)
+make mantainer-clean (clean everything, including auto generated files,
+ tags, *.dbg a.s.o)
 
 Compile:
 
@@ -36,6 +76,16 @@ make
 make modules 
 or make modules exclude_modules="CVS print" etc.
 
+Make tags:
+
+make TAGS
+
+Create a tar.gz with the sources:
+
+make tar
+
+
+
 Install(not done yet):
 
 make prefix=/usr/local  install
index b71c03a..beea5ef 100644 (file)
--- a/Makefile
+++ b/Makefile
 #  Arch supported: Linux, FreeBSD, SunOS (tested on Solaris 6), WinNT (cygwin)
 
 auto_gen=lex.yy.c cfg.tab.c   #lexx, yacc etc
+
+#include  source related defs
+include Makefile.sources
+
 exclude_modules=CVS usrloc
-sources=$(filter-out $(auto_gen), $(wildcard *.c)) $(auto_gen)
-objs=$(sources:.c=.o)
-depends=$(sources:.c=.d)
 modules=$(filter-out $(addprefix modules/, $(exclude_modules)), \
                                                $(wildcard modules/*))
 
 NAME=ser
 
-# compile-time options
-# 
-# STATS allows to print out number of packets processed on CTRL-C; 
-# implementation still nasty and reports per-process
-# NO_DEBUG turns off some of the debug messages (DBG(...)).
-# NO_LOG completely turns of all the logging (and DBG(...))
-# EXTRA_DEBUG compiles in some extra debugging code
-# DNS_IP_HACK faster ip address resolver for ip strings (e.g "127.0.0.1")
-# SHM_MEM    compiles in shared mem. support, needed by some modules and
-#            by USE_SHM_MEM
-# PKG_MALLOC uses a faster malloc (exclusive w/ USE_SHM_MEM)
-# USE_SHM_MEM all pkg_malloc => shm_malloc (most mallocs use a common sh. mem.
-#           segment); don't define PKG_MALLOC if you want this!
-# DBG_QM_MALLOC - qm_malloc debug code, will cause pkg_malloc and shm_malloc
-#                  to keep and display lot of debuging information: file name,
-#                  function, line number of malloc/free call for each block,
-#                  extra error checking (trying to free the same pointer
-#                  twice, trying to free a pointer alloc'ed with a different
-#                  malloc etc.)
-DEFS=-DDNS_IP_HACK  -DSHM_MEM \
-        -DPKG_MALLOC #-DDBG_QM_MALLOC 
-#-DEXTRA_DEBUG
-# -DUSE_SHM_MEM
-#-DNO_DEBUG 
-#-DPKG_MALLOC
-#-DNO_DEBUG#-DSTATS -DNO_DEBUG 
-#-DNO_LOG
-
-PROFILE=  -pg #set this if you want profiling
-mode = debug
-#mode = release
-
-# platform dependent settings
-
-ARCH = $(shell uname -s)
-
-#common
-CC=gcc
-LD=gcc
-
-ifeq ($(mode), release)
-       CFLAGS=-O2 -Wcast-align $(PROFILE) -Winline#-Wmissing-prototypes 
-       LDFLAGS=-Wl,-O2 -Wl,-E $(PROFILE)
-       # we need -fPIC -DPIC only for shared objects, we don't need them for the 
-       # executable file, because it's always loaded at a fixed address
-       # -andrei
-else
-       CFLAGS=-g -fPIC -DPIC -Wcast-align -Winline $(PROFILE)
-       LDFLAGS=-g -Wl,-E $(PROFILE)
-endif
-
-LEX=flex
-YACC=bison
-YACC_FLAGS=-d -b cfg
-# on linux and freebsd keep it empty (e.g. LIBS= )
-# on solaris add -lxnet (e.g. LIBS= -lxnet)
-LIBS=-lfl -ldl
-
-
-ifeq ($(ARCH), Linux)
-
-endif
-ifeq  ($(ARCH), SunOS)
-
-MAKE=gmake
-YACC=yacc
-LDFLAGS=-O2 $(PROFILE)
-LIBS+=-L/usr/local/lib -lxnet # or -lnsl -lsocket or -lglibc ?
-
-endif
-ifeq ($(ARCH), FreeBSD)
-
-MAKE=gmake
-YACC=yacc
-LIBS= -lfl  #dlopen is in libc
-
-endif
-ifneq (,$(findstring CYGWIN, $(ARCH)))
+ALLDEP=Makefile Makefile.sources Makefile.defs Makefile.rules
 
-#cygwin is the same as common
+#include general defs (like CC, CFLAGS  a.s.o)
+include Makefile.defs
 
-endif
+#export relevant variables to the sub-makes
+export DEFS PROFILE CC  LD MKDEP MKTAGS CFLAGS LDFLAGS MOD_CFLAGS MOD_LDFLAGS
+export LEX YACC YACC_FLAGS
 
+# include the common rules
+include Makefile.rules
 
-MKDEP=gcc -MM $(DEFS)
-
-ALLDEP=Makefile
-
-export #export all variables for the sub-makes
-
-
-#implicit rules
-%.o:%.c $(ALLDEP)
-       $(CC) $(CFLAGS) $(DEFS) -c $< -o $@
-
-%.d: %.c $(ALLDEP)
-       set -e; $(MKDEP) $< \
-       |  sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \
-       [ -s $@ ] || rm -f $@
-
-
-# normal rules
-$(NAME): $(objs)
-       $(LD) $(LDFLAGS) $(objs) $(LIBS) -o $(NAME) 
+#extra targets 
 
 lex.yy.c: cfg.lex $(ALLDEP)
        $(LEX) $<
@@ -126,34 +36,21 @@ lex.yy.c: cfg.lex $(ALLDEP)
 cfg.tab.c: cfg.y $(ALLDEP)
        $(YACC) $(YACC_FLAGS) $<
 
-
-
 .PHONY: all
 all: $(NAME) modules
 
-.PHONY: dep
-dep: $(depends)
-
-.PHONY: clean
-clean:
-       -rm $(objs) $(NAME) 2>/dev/null
-       -for r in $(modules); do $(MAKE) -C $$r clean ; done
 
 .PHONY: modules
 modules:
-       -for r in $(modules); do \
+       -@for r in $(modules); do \
                echo  "" ; \
                echo  "" ; \
                $(MAKE) -C $$r ; \
        done
-
-
-.PHONY: proper
-proper: clean 
-       -rm $(depends) 2>/dev/null
-       -for r in $(modules); do $(MAKE) -C $$r proper ; done
-
-include $(depends)
-
+       
 dbg: ser
        gdb -command debug.gdb
+
+
+tar: mantainer-clean 
+       tar -C .. -zcf ../$(NAME)-$(RELEASE)_src.tar.gz  $(notdir $(CURDIR)) 
diff --git a/Makefile.defs b/Makefile.defs
new file mode 100644 (file)
index 0000000..4d643bd
--- /dev/null
@@ -0,0 +1,114 @@
+#
+# $Id$
+#
+# makefile defs (CC, LD,a.s.o)
+#
+
+
+#version number
+VERSION = 0
+PATCHLEVEL = 8
+SUBLEVEL = 4
+EXTRAVERSION =
+
+RELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
+ARCH = $(shell uname -s)
+
+# compile-time options
+# 
+# -DSTATS      
+#              allows to print out number of packets processed on CTRL-C; 
+#              implementation still nasty and reports per-process
+# -DNO_DEBUG   
+#              turns off some of the debug messages (DBG(...)).
+# -DNO_LOG     
+#              completely turns of all the logging (and DBG(...))
+# -DEXTRA_DEBUG        
+#              compiles in some extra debugging code
+# -DDNS_IP_HACK        
+#              faster ip address resolver for ip strings (e.g "127.0.0.1")
+# -DSHM_MEM    
+#              compiles in shared mem. support, needed by some modules and
+#              by USE_SHM_MEM
+# -DPKG_MALLOC 
+#              uses a faster malloc (exclusive w/ USE_SHM_MEM)
+# -DUSE_SHM_MEM        
+#              all pkg_malloc => shm_malloc (most mallocs use a common sh. 
+#              mem. segment); don't define PKG_MALLOC if you want this!
+# -DDBG_QM_MALLOC
+#              qm_malloc debug code, will cause pkg_malloc and shm_malloc
+#              to keep and display lot of debuging information: file name,
+#              function, line number of malloc/free call for each block,
+#              extra error checking (trying to free the same pointer
+#              twice, trying to free a pointer alloc'ed with a different
+#              malloc etc.)
+DEFS= -DNAME='"$(NAME)"' -DVERSION='"$(RELEASE)"' -DARCH='"$(ARCH)"' \
+        -DDNS_IP_HACK  -DSHM_MEM \
+        -DPKG_MALLOC -DDBG_QM_MALLOC -DNODEBUG
+#-DEXTRA_DEBUG
+# -DUSE_SHM_MEM
+#-DNO_DEBUG 
+#-DPKG_MALLOC
+#-DNO_DEBUG#-DSTATS -DNO_DEBUG 
+#-DNO_LOG
+
+PROFILE=  #-pg #set this if you want profiling
+#mode = debug
+mode = release
+
+# platform dependent settings
+
+
+#common
+CC=gcc
+LD=gcc
+MKDEP=gcc -MM $(DEFS)
+MKTAGS=ctags-exuberant -R .
+
+ifeq ($(mode), release)
+       CFLAGS=-O2 -Wcast-align $(PROFILE) -Winline#-Wmissing-prototypes 
+       LDFLAGS=-Wl,-O2 -Wl,-E $(PROFILE)
+       # we need -fPIC -DPIC only for shared objects, we don't need them for
+       # the executable file, because it's always loaded at a fixed address
+       # -andrei
+else
+       CFLAGS=-g -Wcast-align -Winline $(PROFILE)
+       LDFLAGS=-g -Wl,-E $(PROFILE)
+endif
+
+#*FLAGS used for compiling the modules
+MOD_CFLAGS=-fPIC -DPIC $(CFLAGS)
+MOD_LDFLAGS=-O2 -shared
+
+LEX=flex
+YACC=bison
+YACC_FLAGS=-d -b cfg
+# on linux and freebsd keep it empty (e.g. LIBS= )
+# on solaris add -lxnet (e.g. LIBS= -lxnet)
+LIBS=-lfl -ldl
+
+
+#arch specific stuff
+ifeq ($(ARCH), Linux)
+
+endif
+ifeq  ($(ARCH), SunOS)
+
+YACC=yacc
+LDFLAGS=-O2 $(PROFILE)
+MOD_LDFLAGS=-O2 -G
+LIBS+=-L/usr/local/lib -lxnet # or -lnsl -lsocket or -lglibc ?
+
+endif
+ifeq ($(ARCH), FreeBSD)
+
+YACC=yacc
+LIBS= -lfl  #dlopen is in libc
+
+endif
+ifneq (,$(findstring CYGWIN, $(ARCH)))
+
+#cygwin is the same as common
+
+endif
+
diff --git a/Makefile.modules b/Makefile.modules
new file mode 100644 (file)
index 0000000..b83937d
--- /dev/null
@@ -0,0 +1,31 @@
+#
+# $Id$
+#
+# module Makefile
+#(to be included from each module)
+#
+
+
+ALLDEP=Makefile ../../Makefile.sources ../../Makefile.rules \
+ ../../Makefile.modules
+
+ifeq ($(MAKELEVEL), 0)
+# make called directly in the module dir!
+
+$(warning "you should run make from the main ser directory")
+include ../../Makefile.defs
+ALLDEP+=../../Makefile.defs
+
+else
+# called by the main Makefile
+
+ALLDEP+=../../Makefile
+
+endif
+
+include ../../Makefile.sources
+
+CFLAGS:=$(MOD_CFLAGS)
+LDFLAGS:=$(MOD_LDFLAGS)
+
+include ../../Makefile.rules
diff --git a/Makefile.rules b/Makefile.rules
new file mode 100644 (file)
index 0000000..4493acf
--- /dev/null
@@ -0,0 +1,63 @@
+#
+# $Id$
+#
+#
+# common Makefile rules, included by main Makefile & the  modules
+#
+
+#
+# Uses: NAME, ALLDEP, CC, CFLAGS, DEFS, LIBS, MKDEP, auto_gen, depends, objs
+# (all this must  be defined previously!,  see Makefile.defs & Makefile)
+#
+
+
+
+#implicit rules
+%.o:%.c $(ALLDEP)
+       $(CC) $(CFLAGS) $(DEFS) -c $< -o $@
+
+%.d: %.c $(ALLDEP)
+       @set -e; $(MKDEP) $< \
+       |  sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \
+       [ -s $@ ] || rm -f $@
+
+
+# normal rules
+$(NAME): $(objs)
+       $(LD) $(LDFLAGS) $(objs) $(LIBS) -o $(NAME) 
+
+
+.PHONY: all
+all: $(NAME) modules
+
+.PHONY: dep
+dep: $(depends)
+
+.PHONY: clean
+clean:
+       -@rm $(objs) $(NAME) 2>/dev/null
+       -@for r in $(modules); do $(MAKE) -C $$r clean ; done
+
+
+
+.PHONY: proper
+.PHONY: distclean
+.PHONY: realclean
+proper realclean distclean: clean 
+       -@rm $(depends) 2>/dev/null
+       -@for r in $(modules); do $(MAKE) -C $$r proper ; done
+
+.PHONY: mantainer-cleaan
+mantainer-clean: distclean
+       -rm $(auto_gen) TAGS tags *.dbg .*.swp
+       -@for r in $(modules); do $(MAKE) -C $$r mantainer-clean ; done
+
+.PHONY: TAGS
+TAGS:
+       $(MKTAGS) 
+       
+
+ifneq (,$(filter-out clean proper distclean realclean mantainer-clean TAGS \
+               tar, $(MAKECMDGOALS)))
+include $(depends)
+endif
diff --git a/Makefile.sources b/Makefile.sources
new file mode 100644 (file)
index 0000000..91a4704
--- /dev/null
@@ -0,0 +1,17 @@
+#
+# $Id$
+#
+# common Makefile variables 
+# (source files, objs, etc)
+
+
+#
+# expects: auto_gen defined
+#
+# defines: sources, objs, depends
+#
+
+sources=$(filter-out $(auto_gen), $(wildcard *.c)) $(auto_gen)
+objs=$(sources:.c=.o)
+depends=$(sources:.c=.d)
+modules=
diff --git a/main.c b/main.c
index 6cbb513..fa67149 100644 (file)
--- a/main.c
+++ b/main.c
@@ -41,9 +41,9 @@
 #include <dmalloc.h>
 #endif
 
-
 static char id[]="@(#) $Id$";
-static char version[]="ser 0.8.3.9";
+static char version[]=  NAME " " VERSION " (" ARCH ")" ;
+static char compiled[]= __TIME__ __DATE__ ;
 static char flags[]=
 "STATS:"
 #ifdef STATS
@@ -81,7 +81,7 @@ static char flags[]=
 ;
 
 static char help_msg[]= "\
-Usage: ser -l address [-l address] [options]\n\
+Usage: " NAME " -l address [-l address] [options]\n\
 Options:\n\
     -c          Perform loop checks and compute branches\n\
     -f file      Configuration file (default " CFG_FILE ")\n\
@@ -357,7 +357,7 @@ static void sig_usr(int signo)
 #endif
        }
 bye:
-       DPrint("Thank you for flying ser\n");
+       DPrint("Thank you for flying " NAME "\n");
        exit(0);
 }
 
index 1261793..e969fb7 100644 (file)
@@ -1,51 +1,12 @@
 # $Id$
 #
-# print example module makefile
+# example module makefile
 #
 # 
 # WARNING: do not run this directly, it should be run by the master Makefile
 
 auto_gen=
-sources= $(filter-out $(auto_gen), $(wildcard *.c)) $(auto_gen) 
-objs= $(sources:.c=.o)
-depends= $(sources:.c=.d)
-
 NAME=tm.so
-
-SHLIB_LD_FLAGS= -shared
 LIBS= #-lpthread
-CFLAGS+= -fPIC -DPIC
-
-ALLDEP=Makefile ../../Makefile
-
-ifeq ($(ARCH), SunOS)
-LDFLAGS=-O2 -G 
-endif
-
-#implicit rules
-%.o:%.c $(ALLDEP)
-       $(CC) $(CFLAGS) $(DEFS) -c $< -o $@
-
-%.d: %.c
-       $(MKDEP) $< >$@
-
-
-$(NAME): $(objs)
-       $(LD) $(LDFLAGS) $(SHLIB_LD_FLAGS) $(objs) $(LIBS) -o $(NAME)
-
-
-.PHONY: all
-all: $(NAME)
-
-.PHONY: dep
-dep: $(depends)
-
-.PHONY: clean
-clean:
-       -rm -f $(objs) $(NAME)
-
-.PHONY: proper
-proper: clean
-       -rm $(depends)
 
-include $(depends)
+include ../../Makefile.modules