Update materials for building rsync with mgear.
[mgear/mgear.git] / experiments / rsync-mgear.diff
diff --git a/experiments/rsync-mgear.diff b/experiments/rsync-mgear.diff
new file mode 100644 (file)
index 0000000..cf603ff
--- /dev/null
@@ -0,0 +1,173 @@
+To build rsync with mgear:
+1. Apply this patch to the rsync source tree.
+2. Copy or symlink mgear.mk into the rsync source tree.
+3. "make" as usual.
+
+diff --git a/.cvsignore b/.cvsignore
+index aa946de..dd2de12 100644
+--- a/.cvsignore
++++ b/.cvsignore
+@@ -1,3 +1,4 @@
++*.g
+ ID
+ Makefile
+ autom4te*.cache
+diff --git a/Makefile.in b/Makefile.in
+index 499de47..8a75160 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -1,3 +1,11 @@
++# This is Makefile.in from rsync modified by Matt for use with mgear.
++# (Of course, config.status copies the above message to Makefile.)
++#
++# It works for compiling the C files, and I demonstrated that warnings no longer
++# disappear from Eclipse, which is pretty cool.  However, not everything is
++# converted to use mgear yet.
++include mgear.mk
++
+ # Makefile for rsync. This is processed by configure to produce the final
+ # Makefile
+@@ -23,8 +31,8 @@ SHELL=/bin/sh
+ VERSION=@VERSION@
+-.SUFFIXES:
+-.SUFFIXES: .c .o
++#.SUFFIXES:
++#.SUFFIXES: .c .o
+ HEADERS=byteorder.h config.h errcode.h proto.h rsync.h ifuncs.h lib/pool_alloc.h
+ LIBOBJ=lib/wildmatch.o lib/compat.o lib/snprintf.o lib/mdfour.o lib/md5.o \
+@@ -53,10 +61,14 @@ CHECK_SYMLINKS = testsuite/chown-fake.test testsuite/devices-fake.test
+ CHECK_OBJS=getgroups.o getfsdev.o t_stub.o t_unsafe.o trimslash.o wildtest.o
+ # note that the -I. is needed to handle config.h when using VPATH
+-.c.o:
+-@OBJ_SAVE@
+-      $(CC) -I. -I$(srcdir) $(CFLAGS) $(CPPFLAGS) -c $< @CC_SHOBJ_FLAG@
+-@OBJ_RESTORE@
++## Matt removed @OBJ_SAVE@ and @OBJ_RESTORE@ because they got in the way.
++cmd-cc=$(CC) -I. -I$(srcdir) $(CFLAGS) $(CPPFLAGS) -c $< @CC_SHOBJ_FLAG@
++$(call mg-define-rule,%.o,%.c,cmd-cc)
++
++## Turn off the built-in implicit rule because it sometimes beats the mgear rule
++## because the mgear rule depends on a genfile that might not exist yet.
++## TODO: Find a better way to handle this.
++%.o: %.c
+ all: rsync$(EXEEXT)
+@@ -71,37 +83,35 @@ install: all
+ install-strip:
+       $(MAKE) INSTALL_STRIP='-s' install
+-rsync$(EXEEXT): $(OBJS)
+-      $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
++cmd-exe=$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
++
++$(call mg-define-rule,rsync$(EXEEXT),$(OBJS),cmd-exe)
+ $(OBJS): $(HEADERS)
+ flist.o: rounding.h
+-rounding.h: mkrounding$(EXEEXT)
+-      ./mkrounding$(EXEEXT) >rounding.h
++cmd-rounding.h=./mkrounding$(EXEEXT) >$@
++$(call mg-define-rule,rounding.h,mkrounding$(EXEEXT),cmd-rounding.h)
+-mkrounding$(EXEEXT): mkrounding.c rsync.h
+-      @sed '1,/^struct file_struct/d; /^}/,$$d' <$(srcdir)/rsync.h >mkrounding.h
+-      $(CC) $(CFLAGS) $(LDFLAGS) -o $@ -I. $(srcdir)/mkrounding.c
+-      @rm mkrounding.h
++define cmd-mkrounding-exe
++sed '1,/^struct file_struct/d; /^}/,$$d' <$(srcdir)/rsync.h >mkrounding.h &&\
++$(CC) $(CFLAGS) $(LDFLAGS) -o $@ -I. $(srcdir)/mkrounding.c &&\
++rm mkrounding.h
++endef
++$(call mg-define-rule,mkrounding$(EXEEXT),mkrounding.c rsync.h,cmd-mkrounding-exe)
+-tls$(EXEEXT): $(TLS_OBJ)
+-      $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(TLS_OBJ) $(LIBS)
++$(call mg-define-rule,tls$(EXEEXT),$(TLS_OBJ),cmd-exe)
+-getgroups$(EXEEXT): getgroups.o
+-      $(CC) $(CFLAGS) $(LDFLAGS) -o $@ getgroups.o $(LIBS)
++$(call mg-define-rule,getgroups$(EXEEXT),getgroups.o,cmd-exe)
+-getfsdev$(EXEEXT): getfsdev.o
+-      $(CC) $(CFLAGS) $(LDFLAGS) -o $@ getfsdev.o $(LIBS)
++$(call mg-define-rule,getfsdev$(EXEEXT),getfsdev.o,cmd-exe)
+ TRIMSLASH_OBJ = trimslash.o syscall.o lib/compat.o lib/snprintf.o
+-trimslash$(EXEEXT): $(TRIMSLASH_OBJ)
+-      $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(TRIMSLASH_OBJ) $(LIBS)
++$(call mg-define-rule,trimslash$(EXEEXT),$(TRIMSLASH_OBJ),cmd-exe)
+ T_UNSAFE_OBJ = t_unsafe.o syscall.o util.o t_stub.o lib/compat.o lib/snprintf.o
+-t_unsafe$(EXEEXT): $(T_UNSAFE_OBJ)
+-      $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(T_UNSAFE_OBJ) $(LIBS)
++$(call mg-define-rule,t_unsafe$(EXEEXT),$(T_UNSAFE_OBJ),cmd-exe)
+ gen:
+       cd $(srcdir) && $(MAKE) -f prepare-source.mak gen
+@@ -112,9 +122,11 @@ man:
+ proto:
+       cd $(srcdir) && $(MAKE) -f prepare-source.mak proto.h
++## Let mgear do the cleaning.
+ clean: cleantests
+-      rm -f *~ $(OBJS) $(TLS_OBJ) $(CHECK_PROGS) $(CHECK_OBJS) $(CHECK_SYMLINKS) \
+-              mkrounding mkrounding.h rounding.h
++#     rm -f *~ $(OBJS) $(TLS_OBJ) $(CHECK_PROGS) $(CHECK_OBJS) $(CHECK_SYMLINKS) \
++#             mkrounding mkrounding.h rounding.h
++      $(call mg-clean-cmd,.)
+ cleantests:
+       rm -rf ./testtmp*
+@@ -160,9 +172,11 @@ check: all $(CHECK_PROGS) $(CHECK_SYMLINKS)
+ check29: all $(CHECK_PROGS) $(CHECK_SYMLINKS)
+       rsync_bin=`pwd`/rsync$(EXEEXT) $(srcdir)/runtests.sh --protocol=29
++
+ wildtest.o: wildtest.c lib/wildmatch.c rsync.h
+-wildtest$(EXEEXT): wildtest.o lib/compat.o lib/snprintf.o @BUILD_POPT@
+-      $(CC) $(CFLAGS) $(LDFLAGS) -o $@ wildtest.o lib/compat.o lib/snprintf.o @BUILD_POPT@ $(LIBS)
++$(call mg-define-rule,wildtest$(EXEEXT),wildtest.o lib/compat.o lib/snprintf.o @BUILD_POPT@,cmd-exe)
++
++### Matt stopped here.
+ testsuite/chown-fake.test:
+       ln -s chown.test $(srcdir)/testsuite/chown-fake.test
+diff --git a/doc/.cvsignore b/doc/.cvsignore
+index 82b2f29..40fcb95 100644
+--- a/doc/.cvsignore
++++ b/doc/.cvsignore
+@@ -1,2 +1,3 @@
++*.g
+ rsync.pdf
+ rsync.ps
+diff --git a/lib/.cvsignore b/lib/.cvsignore
+index 421376d..5f68c87 100644
+--- a/lib/.cvsignore
++++ b/lib/.cvsignore
+@@ -1 +1,2 @@
++*.g
+ dummy
+diff --git a/popt/.cvsignore b/popt/.cvsignore
+index 337b0d0..391f286 100644
+--- a/popt/.cvsignore
++++ b/popt/.cvsignore
+@@ -1,3 +1,4 @@
++*.g
+ ID
+ Makefile
+ config.cache
+diff --git a/zlib/.cvsignore b/zlib/.cvsignore
+index 421376d..5f68c87 100644
+--- a/zlib/.cvsignore
++++ b/zlib/.cvsignore
+@@ -1 +1,2 @@
++*.g
+ dummy