From a1eb3a36064e13c725c6d8f6301b43a431783afd Mon Sep 17 00:00:00 2001 From: jestin Date: Fri, 25 Jun 2004 18:27:39 +0000 Subject: le Makefile peut être utilisé sur Solaris, OSX et Linux. Par dégaut, c'est pour linux. ivy.c corrige un unbindmsg ivyprobe: -n pour le nom de l'agent, -v pour la version de la lib ivytcl: plein de problèmes réglés, d'autres introduits, notamment pour la gestion de la boucle d'évéenents sous windows ... Test.tcl déplacé dans les exemples --- src/Makefile | 118 +++++++++++++++++++------------ src/Makefile.mingw | 6 +- src/Makefile.osx | 134 ----------------------------------- src/Makefile.solaris | 192 --------------------------------------------------- src/Test.tcl | 17 ----- src/ivy.c | 84 +++++++++++++++++++++- src/ivyprobe.c | 28 ++++++-- src/ivysocket.c | 3 - src/ivytcl.c | 30 ++++---- src/version.h | 2 + 10 files changed, 199 insertions(+), 415 deletions(-) delete mode 100644 src/Makefile.osx delete mode 100644 src/Makefile.solaris delete mode 100755 src/Test.tcl diff --git a/src/Makefile b/src/Makefile index 836bb0f..7932216 100644 --- a/src/Makefile +++ b/src/Makefile @@ -8,38 +8,58 @@ # # Authors: François-Régis Colin # Stéphane Chatty +# Yannick Jestin # -# $Id$ -# # Please refer to file version.h for the # copyright notice regarding this software # +# change this in version.h too !!!! MAJOR=3 -MINOR=5 +MINOR=6 XTINC = -I/usr/X11R6/include -XTLIB = -L/usr/X11R6/lib +XTLIB = -L/usr/X11R6/lib -lXt -lX11 -lSM -lICE GTKINC = `gtk-config --cflags` -#GTKINC = -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include GTKLIB = `gtk-config --libs` -#GTKLIB = -L/usr/lib -L/usr/X11R6/lib GLUTINC = -I/usr/include -I. -GLUTLIB = -L. +GLUTLIB = -L. -lglut -lGLU -lGL -lX11 -lXmu +# use these if you want standard Tcl TCLINCL = -I/usr/include/tcl8.4 TCLLIB = -ltcl8.4 +# use these if you want to use Aqua Tcl on macOSX +#TCLINC = -I/Library/Frameworks/Tcl.framework/Headers +#TCLLIB = -framework Tcl +PCREINC = `pcre-config --cflags` +PCRELIB = `pcre-config --libs` +#PCREOBJ = `pcre-config --prefix`/lib/libpcre.a +PCREOBJ = + +EXTRALIB= +#EXTRALIB=-lsocket -lnsl # for solaris CC=gcc -CFLAGS = -g +LIBTOOL=ar q # linux and solaris +#LIBTOOL=libtool -static -o + +#REGEXP = -DGNU_REGEXP # deprecated ! +REGEXP = -DUSE_PCRE_REGEX +# on activeTCL , set #define CHANNEL to null, and add ivyloop.o in the ivytcl target, +# see below +CHANNEL = -DTCL_CHANNEL_INTEGRATION +CFLAGS = -g + OBJ = ivyloop.o timer.o ivysocket.o ivy.o GOBJ = ivyloop.o timer.o ivysocket.o givy.o XTOBJ = ivyxtloop.o ivysocket.o ivy.o GTKOBJ = ivygtkloop.o ivysocket.o ivy.o GLUTOBJ = ivyglutloop.o ivysocket.o ivy.o -TCLOBJ = ivytcl.o ivyloop.o timer.o ivysocket.o givy.o +TCLOBJ = ivytcl.o timer.o ivysocket.o givy.o +# WINDOWS add ivyloop.o if TCL_CHANNEL_INTEGRATION is not set TARGETS = ivyprobe ivygtkprobe ivyxtprobe -# not yiet need Modified Glut ivyglutprobe +TARGETLIBS=libivy.so.$(MAJOR).$(MINOR) libgivy.so.$(MAJOR).$(MINOR) libxtivy.so.$(MAJOR).$(MINOR) libgtkivy.so.$(MAJOR).$(MINOR) libtclivy.so.$(MAJOR).$(MINOR) +# not yet need Modified Glut ivyglutprobe .c.o: $(CC) $(CFLAGS) -c $*.c @@ -47,96 +67,106 @@ TARGETS = ivyprobe ivygtkprobe ivyxtprobe all: static-libs commands shared-libs static-libs: libivy.a libgivy.a libxtivy.a libgtkivy.a libtclivy.a -# not yiet need Modified Glut libglutivy.a +# not yet need Modified Glut libglutivy.a -shared-libs: libivy.so.$(MAJOR).$(MINOR) libgivy.so.$(MAJOR).$(MINOR) libxtivy.so.$(MAJOR).$(MINOR) libgtkivy.so.$(MAJOR).$(MINOR) libtclivy.so.$(MAJOR).$(MINOR) -# not yiet need Modified Glut libglutivy.so.$(MAJOR).$(MINOR) +shared-libs: $(TARGETLIBS) +# not yet need Modified Glut libglutivy.so.$(MAJOR).$(MINOR) commands: $(TARGETS) ivytcl.o: ivytcl.c - $(CC) -DGNU_REGEXP -c $(CFLAGS) $(TCLINCL) -o ivytcl.o ivytcl.c + $(CC) -c $(CFLAGS) $(TCLINCL) $(CHANNEL) ivytcl.c + +ivy.o: ivy.c + $(CC) -c $(CFLAGS) $(REGEXP) $(PCREINC) ivy.c givy.o: ivy.c - $(CC) -DGNU_REGEXP -c $(CFLAGS) -o givy.o ivy.c + $(CC) -c $(CFLAGS) -o givy.o ivy.c ivyglutloop.o: ivyglutloop.c ivyglutloop.h - $(CC) -c $(CFLAGS) $(GLUTINC) -o ivyglutloop.o ivyglutloop.c + $(CC) -c $(CFLAGS) $(GLUTINC) ivyglutloop.c ivygtkloop.o: ivygtkloop.c ivygtkloop.h - $(CC) -c $(CFLAGS) $(GTKINC) -o ivygtkloop.o ivygtkloop.c + $(CC) -c $(CFLAGS) $(GTKINC) ivygtkloop.c -ivyprobe: ivyprobe.o libivy.a - $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy - # SOLARIS: use this line - # $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy -lsocket -lnsl +ivyprobe: ivyprobe.o + $(CC) $(CFLAGS) -o $@ ivyprobe.o -L. -livy $(PCRELIB) $(EXTRALIB) ivyxtprobe.o : ivyprobe.c - $(CC) $(CFLAGS) -c ivyprobe.c -o ivyxtprobe.o $(XTINC) -DXTMAINLOOP + $(CC) $(CFLAGS) -DXTMAINLOOP -c ivyprobe.c -o $@ $(XTINC) ivyxtprobe: ivyxtprobe.o libxtivy.a - $(CC) -o ivyxtprobe ivyxtprobe.o -L. $(XTLIB) -lxtivy -lXt -lX11 -lSM -lICE + $(CC) -o $@ ivyxtprobe.o -L. $(XTLIB) -lxtivy $(PCRELIB) $(EXTRALIB) ivygtkprobe.o : ivyprobe.c - $(CC) $(CFLAGS) -c ivyprobe.c -o ivygtkprobe.o $(XTINC) -DGTKMAINLOOP + $(CC) $(CFLAGS) -DGTKMAINLOOP -c ivyprobe.c -o ivygtkprobe.o $(XTINC) ivygtkprobe: ivygtkprobe.o libgtkivy.a - $(CC) -o ivygtkprobe ivygtkprobe.o -L. $(GTKLIB) -lgtkivy -lgtk -lgdk -lglib -lX11 -lSM -lICE -lm + $(CC) -o ivygtkprobe ivygtkprobe.o -L. $(GTKLIB) -lgtkivy $(PCRELIB) $(EXTRALIB) ivyglutprobe.o : ivyprobe.c - $(CC) $(CFLAGS) -c ivyprobe.c -o ivyglutprobe.o $(GLUTINC) -DGLUTMAINLOOP + $(CC) $(CFLAGS) -DGLUTMAINLOOP -c ivyprobe.c -o ivyglutprobe.o $(GLUTINC) ivyglutprobe: ivyglutprobe.o libglutivy.a - $(CC) -o ivyglutprobe ivyglutprobe.o -L. $(GLUTLIB) -lglutivy -lglut -lGLU -lGL -lX11 -lXmu + $(CC) -o ivyglutprobe ivyglutprobe.o -L. $(GLUTLIB) -lglutivy $(PCRELIB) $(EXTRALIB) libivy.a: $(OBJ) rm -f $@ - ar q $@ $(OBJ) + $(LIBTOOL) $@ $(OBJ) libgivy.a: $(GOBJ) rm -f $@ - ar q $@ $(GOBJ) + $(LIBTOOL) $@ $(GOBJ) libxtivy.a: $(XTOBJ) rm -f $@ - ar cq $@ $(XTOBJ) + $(LIBTOOL) $@ $(XTOBJ) libgtkivy.a: $(GTKOBJ) rm -f $@ - ar cq $@ $(GTKOBJ) + $(LIBTOOL) $@ $(GTKOBJ) libglutivy.a: $(GLUTOBJ) rm -f $@ - ar cq $@ $(GLUTOBJ) + $(LIBTOOL) $@ $(GLUTOBJ) libtclivy.a: $(TCLOBJ) rm -f $@ - ar cq $@ $(TCLOBJ) + $(LIBTOOL) $@ $(TCLOBJ) $(PCREOBJ) +# TODO this PCREOBJ is a dirty hack libivy.so.$(MAJOR).$(MINOR): $(OBJ) - $(CC) -shared -Wl,-soname,libivy.so.$(MAJOR) -o $@ $(OBJ) -lc + $(CC) -shared -Wl,-soname,libivy.so.$(MAJOR) -o $@ $(OBJ) +# $(CC) -G -Wl,-h,libivy.so.$(MAJOR) -o $@ $(OBJ) #solaris +# libtool -dynamic -o $@ $(OBJ) $(PCRELIB) -lc libgivy.so.$(MAJOR).$(MINOR): $(GOBJ) - $(CC) -shared -Wl,-soname,libgivy.so.$(MAJOR) -o $@ $(GOBJ) -lc + $(CC) -shared -Wl,-soname,libgivy.so.$(MAJOR) -o $@ $(GOBJ) +# $(CC) -G -Wl,-h,libgivy.so.$(MAJOR) -o $@ $(GOBJ) #solaris +# libtool -dynamic -o $@ $(GOBJ) $(PCRELIB) -lc libxtivy.so.$(MAJOR).$(MINOR): $(XTOBJ) - $(CC) -shared -Wl,-soname,libxtivy.so.$(MAJOR) -o $@ \ - $(XTOBJ) $(XTLIB) -lXt -lX11 -lc + $(CC) -shared -Wl,-soname,libxtivy.so.$(MAJOR) -o $@ $(XTOBJ) $(XTLIB) +# $(CC) -G -Wl,-h,libxtivy.so.$(MAJOR) -o $@ $(XTOBJ) $(XTLIB) #solaris +# libtool -dynamic -o $@ $(XTOBJ) $(XTLIB) $(PCRELIB) -lc libgtkivy.so.$(MAJOR).$(MINOR): $(GTKOBJ) - $(CC) -shared -Wl,-soname,libgtkivy.so.$(MAJOR) -o $@ \ - $(GTKOBJ) $(GTKLIB) -lX11 -lc + $(CC) -shared -Wl,-soname,libgtkivy.so.$(MAJOR) -o $@ $(GTKOBJ) $(GTKLIB) +# $(CC) -G -Wl,-h,libgtkivy.so.$(MAJOR) -o $@ $(GTKOBJ) $(GTKLIB) #solaris +# libtool -dynamic -o $@ $(GTKOBJ) $(GTKLIB) $(PCRELIB) -lc libglutivy.so.$(MAJOR).$(MINOR): $(GTKOBJ) - $(CC) -shared -Wl,-soname,libglutivy.so.$(MAJOR) -o $@ \ - $(GLUTOBJ) $(GLUTLIB) -lX11 -lc + $(CC) -shared -Wl,-soname,libglutivy.so.$(MAJOR) -o $@ $(GLUTOBJ) $(GLUTLIB) +# $(CC) -G -Wl,-h,libglutivy.so.$(MAJOR) -o $@ $(GLUTOBJ) $(GLUTLIB) # solaris +# libtool -dynamic -o $@ $(GLUTOBJ) $(GLUTLIB) $(PCRELIB) -lc libtclivy.so.$(MAJOR).$(MINOR): $(TCLOBJ) - $(CC) -shared -Wl,-soname,libtclivy.so.$(MAJOR) -o $@ \ - $(TCLOBJ) $(TCLLIB) -lc + $(CC) -shared -Wl,-soname,libtclivy.so.$(MAJOR) -o $@ $(TCLOBJ) $(TCLLIB) $(PCREOBJ) +# $(CC) -G -Wl,-h,libtclivy.so.$(MAJOR) -o $@ $(TCLOBJ) $(TCLLIB) $(PCREOBJ) # solaris +# libtool -dynamic -o $@ $(TCLOBJ) $(TCLLIB) $(PCREOBJ) $(PCRELIB) -lc clean: - -rm -f $(TARGETS) *.o *.a *.so *.so.* *~ + -rm -f $(TARGETS) $(TARGETLIBS) *.o *.a *.so *.so.* *~ installlibs: static-libs shared-libs test -d $(PREFIX)/usr/lib || mkdirhier $(PREFIX)/usr/lib diff --git a/src/Makefile.mingw b/src/Makefile.mingw index 8ed6cee..6c98e87 100755 --- a/src/Makefile.mingw +++ b/src/Makefile.mingw @@ -17,15 +17,13 @@ MAJOR=3 -MINOR=5 +MINOR=6 RM=del #RM=rm -f XTINC = XTLIB = GTKINC = `gtk-config --cflags` -#GTKINC = -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include GTKLIB = `gtk-config --libs` -#GTKLIB = -L/usr/lib -L/usr/X11R6/lib GLUTINC = -I/usr/include -I. GLUTLIB = -L. TCLINCL = -I/usr/include/tcl8.4 @@ -71,8 +69,6 @@ ivygtkloop.o: ivygtkloop.c ivygtkloop.h ivyprobe: ivyprobe.o libivy.a $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy -lwsock32 -lregex -# SOLARIS: use this line -# $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy -lsocket -lnsl ivyxtprobe.o : ivyprobe.c $(CC) $(CFLAGS) -c ivyprobe.c -o ivyxtprobe.o $(XTINC) -DXTMAINLOOP diff --git a/src/Makefile.osx b/src/Makefile.osx deleted file mode 100644 index 5d626b3..0000000 --- a/src/Makefile.osx +++ /dev/null @@ -1,134 +0,0 @@ -# -# Ivy, C interface -# -# Copyright (C) 1997-1999 -# Centre d'Etudes de la Navigation Aérienne -# -# Makefile for OS X -# -# Authors: Marcellin Buisson -# -# $Id$ -# -# Please refer to file version.h for the -# copyright notice regarding this software -# - - - -MAJOR=3 -MINOR=5 - -CC=gcc -CFLAGS = -g -I/usr/X11R6/include -OBJ = ivyloop.o timer.o ivysocket.o ivy.o -GOBJ = ivyloop.o timer.o ivysocket.o givy.o -#GLUTOBJ = ivyglutloop.o ivysocket.o ivy.o -#TCLOBJ = ivytcl.o ivysocket.o givy.o -TARGETS = ivyprobe -# not yiet need Modified Glut ivyglutprobe - -.c.o: - $(CC) $(CFLAGS) -c $*.c - -all: static-libs commands shared-libs - -static-libs: libivy.a #libgivy.a libxtivy.a libgtkivy.a libtclivy.a -# not yiet need Modified Glut libglutivy.a - -shared-libs: libivy.$(MAJOR).$(MINOR).dylib #libivy.so.$(MAJOR).$(MINOR) #libgivy.so.$(MAJOR).$(MINOR) -# not yiet need Modified Glut libglutivy.so.$(MAJOR).$(MINOR) - -commands: $(TARGETS) - -givy.o: ivy.c - $(CC) -DGNU_REGEXP -c $(CFLAGS) -o givy.o ivy.c - -#ivyglutloop.o: ivyglutloop.c ivyglutloop.h -# $(CC) -c $(CFLAGS) $(GLUTINC) -o ivyglutloop.o ivyglutloop.c - -ivyprobe: ivyprobe.o libivy.a - $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy - -#ivyglutprobe.o : ivyprobe.c -# $(CC) $(CFLAGS) -c ivyprobe.c -o ivyglutprobe.o $(GLUTINC) -DGLUTMAINLOOP - -#ivyglutprobe: ivyglutprobe.o libglutivy.a -# $(CC) -o ivyglutprobe ivyglutprobe.o -L. $(GLUTLIB) -lglutivy -lglut -lGLU -lGL -lX11 -lXmu - -libivy.a: $(OBJ) - rm -f $@ -# ar q $@ $(OBJ) - ar r $@ $(OBJ) - ranlib $@ - -libgivy.a: $(GOBJ) - rm -f $@ -# ar q $@ $(GOBJ) - ar r $@ $(GOBJ) - -#libglutivy.a: $(GLUTOBJ) -# rm -f $@ -# ar cq $@ $(GLUTOBJ) - -libivy.$(MAJOR).$(MINOR).dylib: $(OBJ) - $(CC) -dynamiclib -o $@ $(OBJ) -lc - -#libivy.so.$(MAJOR).$(MINOR): $(OBJ) -# $(CC) -shared -Wl,-soname,libivy.so.$(MAJOR) -o $@ $(OBJ) -lc - -#libgivy.so.$(MAJOR).$(MINOR): $(GOBJ) -# $(CC) -shared -Wl,-soname,libgivy.so.$(MAJOR) -o $@ $(GOBJ) -lc - -#libglutivy.so.$(MAJOR).$(MINOR): $(GTKOBJ) -# $(CC) -shared -Wl,-soname,libglutivy.so.$(MAJOR) -o $@ \ -# $(GLUTOBJ) $(GLUTLIB) -lX11 -lc - -clean: - -rm -f $(TARGETS) *.o *.a *.so *.so.* *~ *.dylib - -installlibs: static-libs shared-libs - test -d $(PREFIX)/usr/lib || mkdirhier $(PREFIX)/usr/lib - - test -d $(PREFIX)/usr/include || mkdirhier $(PREFIX)/usr/include - install -m644 libivy.a $(PREFIX)/usr/lib - install -m644 libgivy.a $(PREFIX)/usr/lib -# install -m644 libtclivy.a $(PREFIX)/usr/lib - - install -m644 libivy.$(MAJOR).$(MINOR).dylib $(PREFIX)/usr/lib -# install -m644 libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib -# install -m644 libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib - - install -m644 *.h $(PREFIX)/usr/include - -installliblinks: installlibs - ln -sfh /usr/lib/libivy.$(MAJOR).$(MINOR).dylib $(PREFIX)/usr/lib/libivy.dylib - ln -sfh /usr/lib/libivy.$(MAJOR).$(MINOR).dylib $(PREFIX)/usr/lib/libivy.$(MAJOR).dylib - #ln -s /usr/lib/libtclivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libtclivy.so - #ln -s /usr/lib/libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libivy.so - #ln -s /usr/lib/libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libivy.so.$(MAJOR) - ln -s /usr/lib/libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libgivy.so - #ln -s /usr/lib/libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libgivy.so.$(MAJOR) - - -installbins: commands - test -d $(PREFIX)/usr/bin || mkdirhier $(PREFIX)/usr/bin - - install -m755 ivyprobe $(PREFIX)/usr/bin -# install -m755 ivyglutprobe $(PREFIX)/usr/X11R6/bin - -installdocs: - test -d $(PREFIX)/usr/doc/ivy-c || mkdirhier $(PREFIX)/usr/doc/ivy-c - for f in `find ../doc/*.html -type f -maxdepth 1`; do \ - install -m 644 $$f $(PREFIX)/usr/doc/ivy-c; \ - done - test -d $(PREFIX)/usr/man/man1 || mkdirhier $(PREFIX)/usr/man/man1 - for f in `find ../doc/*.1 -type f -maxdepth 1`; do \ - install -m 644 $$f $(PREFIX)/usr/man/man1; \ - done - -install: installlibs installbins installliblinks installdocs - -rpm:: - /usr/bin/rpmize - diff --git a/src/Makefile.solaris b/src/Makefile.solaris deleted file mode 100644 index cd3d93c..0000000 --- a/src/Makefile.solaris +++ /dev/null @@ -1,192 +0,0 @@ -# -# Ivy, C interface -# -# Copyright (C) 1997-2002 -# Centre d'Études de la Navigation Aérienne -# -# Makefile -# -# Authors: François-Régis Colin -# Stéphane Chatty -# -# $Id$ -# -# Please refer to file version.h for the -# copyright notice regarding this software -# - - -MAJOR=3 -MINOR=5 - -XTINC = -I/usr/X11R6/include -XTLIB = -L/usr/X11R6/lib -GTKINC = `gtk-config --cflags` -#GTKINC = -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include -GTKLIB = `gtk-config --libs` -#GTKLIB = -L/usr/lib -L/usr/X11R6/lib -GLUTINC = -I/usr/include -I. -GLUTLIB = -L. -TCLINC = -I/usr/include/ -TCLLIB = -ltcl - -CC=gcc -CFLAGS = -g -OBJ = ivyloop.o timer.o ivysocket.o ivy.o -GOBJ = ivyloop.o timer.o ivysocket.o givy.o -XTOBJ = ivyxtloop.o ivysocket.o ivy.o -GTKOBJ = ivygtkloop.o ivysocket.o ivy.o -GLUTOBJ = ivyglutloop.o ivysocket.o ivy.o -TCLOBJ = ivytcl.o ivysocket.o givy.o -TARGETS = ivyprobe ivygtkprobe ivyxtprobe -# not yiet need Modified Glut ivyglutprobe - -.c.o: - $(CC) $(CFLAGS) -c $*.c - -all: static-libs commands shared-libs - -static-libs: libivy.a libgivy.a libxtivy.a libgtkivy.a libtclivy.a -# not yiet need Modified Glut libglutivy.a - -shared-libs: libivy.so.$(MAJOR).$(MINOR) libgivy.so.$(MAJOR).$(MINOR) libxtivy.so.$(MAJOR).$(MINOR) libgtkivy.so.$(MAJOR).$(MINOR) libtclivy.so.$(MAJOR).$(MINOR) -# not yiet need Modified Glut libglutivy.so.$(MAJOR).$(MINOR) - -commands: $(TARGETS) - -ivytcl.o: ivytcl.c - $(CC) -DGNU_REGEXP -c $(CFLAGS) $(TCLINC) -o ivytcl.o ivytcl.c - -givy.o: ivy.c - $(CC) -DGNU_REGEXP -c $(CFLAGS) -o givy.o ivy.c - -ivyglutloop.o: ivyglutloop.c ivyglutloop.h - $(CC) -c $(CFLAGS) $(GLUTINC) -o ivyglutloop.o ivyglutloop.c - -ivygtkloop.o: ivygtkloop.c ivygtkloop.h - $(CC) -c $(CFLAGS) $(GTKINC) -o ivygtkloop.o ivygtkloop.c - -ivyprobe: ivyprobe.o libivy.a - $(CC) $(CFLAGS) -o ivyprobe ivyprobe.o -L. -livy -lnsl -lsocket - -ivyxtprobe.o : ivyprobe.c - $(CC) $(CFLAGS) -c ivyprobe.c -o ivyxtprobe.o $(XTINC) -DXTMAINLOOP - -ivyxtprobe: ivyxtprobe.o libxtivy.a - $(CC) -o ivyxtprobe ivyxtprobe.o -L. $(XTLIB) -lxtivy -lXt -lX11 -lSM -lICE -lnsl -lsocket - -ivygtkprobe.o : ivyprobe.c - $(CC) $(CFLAGS) -c ivyprobe.c -o ivygtkprobe.o $(XTINC) -DGTKMAINLOOP - -ivygtkprobe: ivygtkprobe.o libgtkivy.a - $(CC) -o ivygtkprobe ivygtkprobe.o -L. $(GTKLIB) -lgtkivy -lgtk -lgdk -lglib -lX11 -lSM -lICE -lm -lnsl -lsocket - -ivyglutprobe.o : ivyprobe.c - $(CC) $(CFLAGS) -c ivyprobe.c -o ivyglutprobe.o $(GLUTINC) -DGLUTMAINLOOP - -ivyglutprobe: ivyglutprobe.o libglutivy.a - $(CC) -o ivyglutprobe ivyglutprobe.o -L. $(GLUTLIB) -lglutivy -lglut -lGLU -lGL -lX11 -lXmu - -libivy.a: $(OBJ) - rm -f $@ - ar -q $@ $(OBJ) - -libgivy.a: $(GOBJ) - rm -f $@ - ar -q $@ $(GOBJ) - -libxtivy.a: $(XTOBJ) - rm -f $@ - ar -q $@ $(XTOBJ) - -libgtkivy.a: $(GTKOBJ) - rm -f $@ - ar -q $@ $(GTKOBJ) - -libglutivy.a: $(GLUTOBJ) - rm -f $@ - ar -q $@ $(GLUTOBJ) - -libtclivy.a: $(TCLOBJ) - rm -f $@ - ar -q $@ $(TCLOBJ) - -libivy.so.$(MAJOR).$(MINOR): $(OBJ) - $(CC) -G -Wl,-h,libivy.so.$(MAJOR) -o $@ $(OBJ) -lc - -libgivy.so.$(MAJOR).$(MINOR): $(GOBJ) - $(CC) -G -Wl,-h,libgivy.so.$(MAJOR) -o $@ $(GOBJ) -lc - -libxtivy.so.$(MAJOR).$(MINOR): $(XTOBJ) - $(CC) -G -Wl,-h,libxtivy.so.$(MAJOR) -o $@ \ - $(XTOBJ) $(XTLIB) -lXt -lX11 -lc - -libgtkivy.so.$(MAJOR).$(MINOR): $(GTKOBJ) - $(CC) -G -Wl,-h,libgtkivy.so.$(MAJOR) -o $@ \ - $(GTKOBJ) $(GTKLIB) -lX11 -lc - -libglutivy.so.$(MAJOR).$(MINOR): $(GTKOBJ) - $(CC) -G -Wl,-h,libglutivy.so.$(MAJOR) -o $@ \ - $(GLUTOBJ) $(GLUTLIB) -lX11 -lc - -libtclivy.so.$(MAJOR).$(MINOR): $(TCLOBJ) - $(CC) -G -Wl,-h,libtclivy.so.$(MAJOR) -o $@ \ - $(TCLOBJ) $(TCLLIB) -lc - -clean: - -rm -f $(TARGETS) *.o *.a *.so *.so.* *~ - -installlibs: static-libs shared-libs - test -d $(PREFIX)/usr/lib || mkdirhier $(PREFIX)/usr/lib - test -d $(PREFIX)/usr/X11R6/lib || mkdirhier $(PREFIX)/usr/X11R6/lib - test -d $(PREFIX)/usr/include || mkdirhier $(PREFIX)/usr/include - install -m644 libivy.a $(PREFIX)/usr/lib - install -m644 libgivy.a $(PREFIX)/usr/lib - install -m644 libxtivy.a $(PREFIX)/usr/X11R6/lib - install -m644 libtclivy.a $(PREFIX)/usr/lib - install -m644 libgtkivy.a $(PREFIX)/usr/X11R6/lib - - install -m644 libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib - install -m644 libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib - install -m644 libxtivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib - install -m644 libtclivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib - install -m644 libgtkivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib - - install -m644 *.h $(PREFIX)/usr/include - -installliblinks: installlibs - ln -s /usr/lib/libtclivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libtclivy.so - ln -s /usr/lib/libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libivy.so - ln -s /usr/lib/libivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libivy.so.$(MAJOR) - ln -s /usr/lib/libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libgivy.so - ln -s /usr/lib/libgivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/lib/libgivy.so.$(MAJOR) - ln -s /usr/X11R6/lib/libxtivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libxtivy.so - ln -s /usr/X11R6/lib/libxtivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libxtivy.so.$(MAJOR) - ln -s /usr/X11R6/lib/libgtkivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libgtkivy.so - ln -s /usr/X11R6/lib/libgtkivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libgtkivy.so.$(MAJOR) - ln -s /usr/X11R6/lib/libtclivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libtclivy.so - ln -s /usr/X11R6/lib/libtclivy.so.$(MAJOR).$(MINOR) $(PREFIX)/usr/X11R6/lib/libtclivy.so.$(MAJOR) - -installbins: commands - test -d $(PREFIX)/usr/bin || mkdirhier $(PREFIX)/usr/bin - test -d $(PREFIX)/usr/X11R6/bin || mkdirhier $(PREFIX)/usr/X11R6/bin - install -m755 ivyprobe $(PREFIX)/usr/bin - install -m755 ivyxtprobe $(PREFIX)/usr/X11R6/bin - install -m755 ivygtkprobe $(PREFIX)/usr/X11R6/bin -# install -m755 ivyglutprobe $(PREFIX)/usr/X11R6/bin - -installdocs: - test -d $(PREFIX)/usr/doc/ivy-c || mkdirhier $(PREFIX)/usr/doc/ivy-c - for f in `find ../doc/*.html -type f -maxdepth 1`; do \ - install -m 644 $$f $(PREFIX)/usr/doc/ivy-c; \ - done - test -d $(PREFIX)/usr/man/man1 || mkdirhier $(PREFIX)/usr/man/man1 - for f in `find ../doc/*.1 -type f -maxdepth 1`; do \ - install -m 644 $$f $(PREFIX)/usr/man/man1; \ - done - -install: installlibs installbins installliblinks installdocs - -rpm:: - /usr/bin/rpmize - diff --git a/src/Test.tcl b/src/Test.tcl deleted file mode 100755 index 052b3bb..0000000 --- a/src/Test.tcl +++ /dev/null @@ -1,17 +0,0 @@ -load libtclivy.so.3.5 -proc conCB { app str2 } { - puts "TCL:Application:$app $str2" -} -proc discCB { app str2 } { - puts "TCL:Application:$app $str2" -} -proc msgCB {str} { - puts "TCL:Message:$str" -} -Ivy::init TESTTCL "TESTTCL Ready" conCB discCB -Ivy::start "" -Ivy::bind "(.*)" msgCB -Ivy::applist -Ivy::send test -Ivy::applist -vwait tcl_interactive diff --git a/src/ivy.c b/src/ivy.c index 870e6fc..1a019c8 100644 --- a/src/ivy.c +++ b/src/ivy.c @@ -23,7 +23,12 @@ #include #include +#ifndef USE_PCRE_REGEX #include +#else +#define OVECSIZE 60 /* must be multiple of 3, for regexp return */ +#include +#endif #include @@ -76,7 +81,12 @@ struct _msg_snd { /* requete de reception d'un client */ MsgSndPtr next; int id; char *str_regexp; /* la regexp sous forme inhumaine */ +#ifndef USE_PCRE_REGEX regex_t regexp; /* la regexp sous forme machine */ +#else + pcre *regexp; + pcre_extra *inspect; +#endif }; struct _clnt_lst { @@ -168,6 +178,40 @@ static void IvyCleanup() SocketClose( broadcast ); } +#ifdef USE_PCRE_REGEX +static int +MsgCall (const char *message, MsgSndPtr msg, Client client) +{ + int ovector[OVECSIZE]; + int index; + int rc=pcre_exec( + msg->regexp, + msg->inspect, + message, + strlen(message), + 0, /* debut */ + 0, /* no other regexp option */ + ovector, + OVECSIZE); + if (rc<1) return 0; /* no match */ +#ifdef DEBUG + printf( "Sending message id=%d '%s'\n",msg->id,message); +#endif + SocketSend( client, "%d %d" ARG_START ,Msg, msg->id); +#ifdef DEBUG + printf( "Send matching args count %ld\n",msg->regexp.re_nsub); +#endif + index=1; + while ( indexmsg_send, snd ) + if ( snd ) + { + snd->id = id; + snd->str_regexp = strdup( arg ); + snd->regexp = regexp; + snd->inspect = pcre_study(regexp,0,&errbuf); + if (errbuf!=NULL) + { + printf("Error studying %s, message: %s\n",arg,errbuf); + } + } + } + else + { + printf("Error compiling '%s', %s\n", arg, errbuf); + MsgSendTo( client, Error, erroffset, errbuf ); + } +#endif break; case DelRegexp: - #ifdef DEBUG printf("Regexp Delete id=%d\n", id); #endif //DEBUG @@ -351,12 +425,17 @@ static void Receive( Client client, void *data, char *line ) IVY_LIST_ITER( clnt->msg_send, snd, ( id != snd->id )); if ( snd ) { +#ifndef USE_PCRE_REGEX + free( snd->str_regexp ); +#else free( snd->str_regexp ); + if (snd->inspect!=NULL) pcre_free(snd->inspect); + pcre_free(snd->regexp); +#endif IVY_LIST_REMOVE( clnt->msg_send, snd ); } break; case StartRegexp: - #ifdef DEBUG printf("Regexp Start id=%d Application='%s'\n", id, arg); #endif //DEBUG @@ -701,6 +780,7 @@ IvyUnbindMsg (MsgRcvPtr msg) IVY_LIST_EACH (clients, clnt ) { MsgSendTo( clnt->client, DelRegexp,msg->id, ""); } + IVY_LIST_REMOVE( msg_recv, msg ); } /* demande de reception d'un message */ diff --git a/src/ivyprobe.c b/src/ivyprobe.c index a5a477b..45fe00a 100644 --- a/src/ivyprobe.c +++ b/src/ivyprobe.c @@ -1,19 +1,20 @@ /* * Ivy probe * - * Copyright (C) 1997-2000 + * Copyright (C) 1997-2004 * Centre d'Études de la Navigation Aérienne * * Main and only file * * Authors: François-Régis Colin + * Yannick Jestin * - * $Id$ - * * Please refer to file version.h for the * copyright notice regarding this software */ - +#define DEFAULT_IVYPROBE_NAME "IVYPROBE" +#define DEFAULT_READY " Ready" +#include "version.h" #define IVYMAINLOOP @@ -271,7 +272,12 @@ int main(int argc, char *argv[]) int timer_test = 0; char busbuf [1024] = ""; const char* bus = 0; - while ((c = getopt(argc, argv, "d:b:w:t")) != EOF) + char agentnamebuf [1024] = ""; + const char* agentname = DEFAULT_IVYPROBE_NAME; + char agentready [1024] = ""; + const char* helpmsg = + "[options] [regexps]\n\t-b bus\tdefines the Ivy bus to which to connect to, defaults to 127:2010\n\t-t\ttriggers the timer test\n\t-n name\tchanges the name of the agent, defaults to IVYPROBE\n\t-v\tprints the ivy relase number\n\nregexp is a Perl5 compatible regular expression (see ivyprobe(1) and pcrepattern(3) for more info\nuse .help within ivyprobe\n"; + while ((c = getopt(argc, argv, "vn:d:b:w:t")) != EOF) switch (c) { case 'b': strcpy (busbuf, optarg); @@ -280,10 +286,20 @@ int main(int argc, char *argv[]) case 'w': wait_count = atoi(optarg) ; break; + case 'n': + strcpy(agentnamebuf, optarg); + agentname=agentnamebuf; + case 'v': + printf("ivy c library version %d.%d\n",IVYMAJOR_VERSION,IVYMINOR_VERSION); + break; case 't': timer_test = 1; break; + default: + printf("usage: %s %s",argv[0],helpmsg); + exit(1); } + sprintf(agentready,"%s Ready",agentname); /* Mainloop management */ #ifdef XTMAINLOOP @@ -297,7 +313,7 @@ int main(int argc, char *argv[]) glClearColor(0.49, 0.62, 0.75, 0.0); glutDisplayFunc(display); #endif - IvyInit ("IVYPROBE", "IVYPROBE READY", ApplicationCallback,NULL,NULL,NULL); + IvyInit (agentname, agentready, ApplicationCallback,NULL,NULL,NULL); IvyBindDirectMsg( DirectCallback,NULL); for (; optind < argc; optind++) IvyBindMsg (Callback, NULL, argv[optind]); diff --git a/src/ivysocket.c b/src/ivysocket.c index 94fee0f..c6a398e 100644 --- a/src/ivysocket.c +++ b/src/ivysocket.c @@ -30,9 +30,6 @@ #include #include #include -#ifdef __APPLE__ -#define _BSD_SOCKLEN_T_ int -#endif #include #include #include diff --git a/src/ivytcl.c b/src/ivytcl.c index f14a864..c59937f 100755 --- a/src/ivytcl.c +++ b/src/ivytcl.c @@ -16,7 +16,11 @@ #include #include +#ifdef __APPLE__ +#include +#else #include +#endif #include #include #include @@ -28,7 +32,7 @@ #include "ivy.h" #include "timer.h" -//#define TCL_CHANNEL_INTEGRATION +// defined or not in the Makefile only #ifdef TCL_CHANNEL_INTEGRATION // On utilisa la boucle Standard TCL // mais il y a des problemes sur les socket server @@ -262,15 +266,19 @@ IvyMsgCB(IvyClientPtr app, size += strlen(argv[i]) + 3; } size ++; + size += strlen(IvyGetApplicationName(app))+4; script_to_call = ckalloc(size); strcpy(script_to_call, filter->script); - strcat(script_to_call, " {"); + strcat(script_to_call, " \""); + strcat(script_to_call, IvyGetApplicationName(app)); + strcat(script_to_call, "\""); + /* strcat(script_to_call, " {"); */ for (i = 0; i < argc; i++) { - strcat(script_to_call, "\""); + strcat(script_to_call, " \""); strcat(script_to_call, argv[i]); - strcat(script_to_call, "\" "); + strcat(script_to_call, "\""); } - strcat(script_to_call, "}"); + /* strcat(script_to_call, " }"); */ Tcl_Preserve(filter->interp); result = Tcl_GlobalEval(filter->interp, script_to_call); @@ -394,11 +402,11 @@ IvyBindCmd(ClientData clientData, } filter = (filter_struct *) ckalloc(sizeof(filter_struct)); - filter->filter = ckalloc(strlen(argv[1])+1); + filter->filter = ckalloc(strlen(argv[1])+1); // regexp strcpy(filter->filter, argv[1]); - filter->script = ckalloc(strlen(argv[2])+1); + filter->script = ckalloc(strlen(argv[2])+1); // callback proc name strcpy(filter->script, argv[2]); - filter->id = IvyBindMsg(IvyMsgCB, (void *) filter, filter->filter, NULL); + filter->id = IvyBindMsg(IvyMsgCB, (void *) filter, filter->filter, NULL); // MsgPtr id filter->interp = interp; entry = Tcl_CreateHashEntry(&filter_table, (char *) filter_id, &dummy); Tcl_SetHashValue(entry, (ClientData) filter); @@ -419,7 +427,6 @@ IvyUnbindCmd(ClientData clientData, char *end; filter_struct *filter; Tcl_HashEntry *entry; - if (argc != 2) { Tcl_AppendResult(interp, "wrong # of args: \"", argv[0], " filterId\"", (char *) NULL); @@ -439,13 +446,12 @@ IvyUnbindCmd(ClientData clientData, } filter = (filter_struct *) Tcl_GetHashValue(entry); + Tcl_DeleteHashEntry(entry); IvyUnbindMsg(filter->id); ckfree(filter->script); ckfree(filter->filter); ckfree((char *) filter); - - Tcl_DeleteHashEntry(entry); - + return TCL_OK; } diff --git a/src/version.h b/src/version.h index 5aa3b9a..70172f5 100644 --- a/src/version.h +++ b/src/version.h @@ -24,3 +24,5 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ +#define IVYMAJOR_VERSION 3 +#define IVYMINOR_VERSION 6 -- cgit v1.1