I have a suggestion for XEmacs.rules.  In order not to get errors during
re-installation in the case when some files are read-only, I would
suggest that all file permissions are changed with `chmod u+w'.
I use the following file:
# Modifications for simple local builds by JV
# Insert $(CHMOD) by CW
# Configuration constants for building XEmacs packages
# Copyright (C) 1997 Free Software Foundation Inc.
# This file is part of XEmacs.
# XEmacs 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 2, or (at your option) any
# later version.
# XEmacs 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 XEmacs; see the file COPYING.  If not, write to
# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
# Requires XEmacs 21.0-beta19 or greater
# Developer configurable portion
# path to XEmacs-21.0
XEMACS = xemacs-21.0
# Build Mule?  Comment for no Mule
BUILD_MULE=t
# path to BSD install
INSTALL = install -c
# path to GNU tar
TAR = /usr/local/bin/tar
# Stuff tar should never archive
EXCLUDES = --exclude 'CVS' --exclude '*~' --exclude '*.orig'
--exclude '*.rej'
VANILLA = -vanilla
# path to makeinfo
MAKEINFO = makeinfo
# path to directory to install packages in
# This doesn't work and may never work.  For now use
# make STAGING=/where/your/runtime/packages/are install
PKGDIR = /home/clstaff/wedler/xemacs/xemacs-packages
# path to directory for builing kits for distribution
STAGING = /tmp/staging
# path to GNU cp, use the latter if no GNU cp is available.
# RCOPY = cp -a
RCOPY = cp -pR
# RCOPY = ginstall
CHMOD = chmod u+w
# Only in rare cases will you need to override this
ifeq '$(AUTOLOAD_PATH)' ''
AUTOLOAD_PATH = .
endif
# Override or add to this in the package Makefile if necessary
GENERATED = $(AUTOLOAD_PATH)/auto-autoloads.elc
# SOURCE_FILES_TO_COPY = *.el*
SOURCE_FILES_TO_COPY = $(ELCS) $(ELCS:.elc=.el) \
	$(MULE_ELCS) $(MULE_ELCS:.elc=.el) \
	$(GENERATED) $(GENERATED:.elc=.el) $(AUTOLOAD_PATH)/_pkg.el
# Non configurable portion follows
MANIFEST = pkginfo/MANIFEST.$(PACKAGE)
.SUFFIXES:
.SUFFIXES: .info .texi .dvi .elc .el
%.info: %.texi
#	$(MAKEINFO) $(MAKEINFO_FLAGS) $<
	$(MAKEINFO) $(MAKEINFO_FLAGS) -o $@ $<
%.elc: %.el
	$(XEMACS) -vanilla -batch $(PRELOADS) -l bytecomp -f batch-byte-compile $<
#	$(XEMACS) -vanilla -batch $(PRELOADS) -l bytecomp -l auto-autoloads -f
batch-byte-compile $<
all:: $(AUTOLOAD_PATH)/_pkg.el
dist:: srckit binkit package-info
clean::
	rm -f $(ELCS) $(PACKAGE).info* $(AUTOLOAD_PATH)/auto-autoloads.elc \
		$(AUTOLOAD_PATH)/custom-load.elc
mostlyclean: clean
extraclean: clean
distclean: extraclean
	rm -f core *~ $(AUTOLOAD_PATH)/auto-autoloads.el \
		$(AUTOLOAD_PATH)/custom-load.el package-info \
		$(AUTOLOAD_PATH)/_pkg.el
$(AUTOLOAD_PATH)/auto-autoloads.el : $(ELCS:.elc=.el) $(AUTOLOAD_PATH)/_pkg.el
	$(XEMACS) $(VANILLA) -batch \
		-eval "(setq autoload-package-name \"$(PACKAGE)\")" \
		-l autoload -f batch-update-directory $(AUTOLOAD_PATH)
	@rm -f $(AUTOLOAD_PATH)/auto-autoloads.el~
$(AUTOLOAD_PATH)/custom-load.el : $(ELCS:.elc=.el)
	$(XEMACS) $(VANILLA) -batch -l cus-dep \
		-f Custom-make-dependencies $(AUTOLOAD_PATH)
package-info : package-info.in Makefile $(AUTOLOAD_PATH)/_pkg.el \
			$(STAGING)/$(PACKAGE)-$(VERSION)-pkg.tar.gz
	$(XEMACS) $(VANILLA) -batch \
		-l package-info.el -f batch-update-package-info \
		'$(VERSION)' $(STAGING)/$(PACKAGE)-$(VERSION)-pkg.tar.gz \
		'$(REQUIRES)' \
		'$(AUTHOR_VERSION)' '$(MAINTAINER)' '$(CATEGORY)'
	$(XEMACS) $(VANILLA) -batch \
		-l ../../hack-package-index.el -f batch-hack-package-index \
			$(PACKAGE) package-info $(STAGING)/package-index
$(STAGING)/$(PACKAGE)-$(VERSION)-pkg.tar.gz: $(STAGING)/$(MANIFEST)
	@(cd $(STAGING); \
	rm -f $(PACKAGE)-$(VERSION)-pkg.tar*)
	(cd $(STAGING); \
	$(TAR) $(EXCLUDES) -cf $(PACKAGE)-$(VERSION)-pkg.tar \
		`cat $(MANIFEST)`; \
	gzip -v9 $(PACKAGE)-$(VERSION)-pkg.tar)
$(AUTOLOAD_PATH)/_pkg.el: Makefile
	@echo Creating $(AUTOLOAD_PATH)/_pkg.el
	@echo ";;;###autoload" > $(AUTOLOAD_PATH)/_pkg.el
	@echo "(package-provide '$(PACKAGE)" >> $(AUTOLOAD_PATH)/_pkg.el
	@echo "		 :version $(VERSION)" >> $(AUTOLOAD_PATH)/_pkg.el
	@echo "		 :type '$(PKG_TYPE))" >> $(AUTOLOAD_PATH)/_pkg.el
.PHONY: srckit-std
.PHONY: binkit-sourceonly binkit-sourceinfo binkit-sourcedata binkit-sourcedatainfo
.PHONY: bindist install autoloads binball
$(STAGING)/$(MANIFEST): binkit-common
binball: binkit $(STAGING)/$(PACKAGE)-$(VERSION)-pkg.tar.gz
bindist: binkit package-info
install: binkit 
	
autoloads: $(AUTOLOAD_PATH)/auto-autoloads.el
srckit-std: distclean
	if [ ! -d $(STAGING) ]; then mkdir -p $(STAGING); fi
	(cd ..; \
	rm -f $(STAGING)/$(PACKAGE)-$(VERSION)-src.tar*; \
	$(TAR) $(EXCLUDES) -cf $(STAGING)/$(PACKAGE)-$(VERSION)-src.tar $(PACKAGE))
	gzip -v9 $(STAGING)/$(PACKAGE)-$(VERSION)-src.tar
binkit-common: all
	(if test -d $(STAGING); then \
		cd $(STAGING); \
		if test -f $(MANIFEST); then \
			rm -rf `cat $(MANIFEST)`; \
		fi; \
	fi;)
ifneq '$(ELCS)' ''
	@-mkdir -p $(STAGING)/lisp/$(PACKAGE)
endif
ifneq '$(ELCS_1)' ''
	@-mkdir -p $(STAGING)/lisp/$(ELCS_1_DEST)
endif
ifneq '$(INFO_FILES)' ''
	@-mkdir -p $(STAGING)/info
	@-mkdir -p $(STAGING)/man/$(PACKAGE)
endif
ifneq '$(DATA_FILES)' ''
	@-mkdir -p $(STAGING)/etc/$(DATA_DEST)
endif
ifneq '$(DATA_1_FILES)' ''
	@-mkdir -p $(STAGING)/etc/$(DATA_1_DEST)
endif
ifneq '$(DATA_2_FILES)' ''
	@-mkdir -p $(STAGING)/etc/$(DATA_2_DEST)
endif
ifneq '$(DATA_3_FILES)' ''
	@-mkdir -p $(STAGING)/etc/$(DATA_3_DEST)
endif
ifneq '$(DATA_4_FILES)' ''
	@-mkdir -p $(STAGING)/etc/$(DATA_4_DEST)
endif
ifneq '$(DATA_5_FILES)' ''
	@-mkdir -p $(STAGING)/etc/$(DATA_5_DEST)
endif
ifneq '$(LIBSRC_FILES)' ''
	@-mkdir -p $(STAGING)/lib-src
endif
	@-mkdir -p $(STAGING)/pkginfo
ifneq '$(ELCS)' ''
	$(RCOPY) ChangeLog $(SOURCE_FILES_TO_COPY) $(EXTRA_SOURCES) $(STAGING)/lisp/$(PACKAGE)
	$(CHMOD) $(STAGING)/lisp/$(PACKAGE)/*
endif
ifneq '$(ELCS_1)' ''
	$(RCOPY) $(ELCS_1_FILES) $(STAGING)/lisp/$(ELCS_1_DEST)
	$(CHMOD) $(STAGING)/lisp/$(ELCS_1_DEST)/*
endif
ifneq '$(INFO_FILES)' ''
	$(RCOPY) $(INFO_FILES) $(STAGING)/info
	$(CHMOD) $(STAGING)/info/*
	$(RCOPY) $(TEXI_FILES) $(STAGING)/man/$(PACKAGE)
	$(CHMOD) $(STAGING)/man/$(PACKAGE)/*
endif
ifneq '$(DATA_FILES)' ''
	$(RCOPY) $(DATA_FILES) $(STAGING)/etc/$(DATA_DEST)
	$(CHMOD) $(STAGING)/etc/$(DATA_DEST)/*
endif
ifneq '$(DATA_1_FILES)' ''
	$(RCOPY) $(DATA_1_FILES) $(STAGING)/etc/$(DATA_1_DEST)
	$(CHMOD) $(STAGING)/etc/$(DATA_1_DEST)/*
endif
ifneq '$(DATA_2_FILES)' ''
	$(RCOPY) $(DATA_2_FILES) $(STAGING)/etc/$(DATA_2_DEST)
	$(CHMOD) $(STAGING)/etc/$(DATA_2_DEST)/*
endif
ifneq '$(DATA_3_FILES)' ''
	$(RCOPY) $(DATA_3_FILES) $(STAGING)/etc/$(DATA_3_DEST)
	$(CHMOD) $(STAGING)/etc/$(DATA_3_DEST)/*
endif
ifneq '$(DATA_4_FILES)' ''
	$(RCOPY) $(DATA_4_FILES) $(STAGING)/etc/$(DATA_4_DEST)
	$(CHMOD) $(STAGING)/etc/$(DATA_4_DEST)/*
endif
ifneq '$(DATA_5_FILES)' ''
	$(RCOPY) $(DATA_5_FILES) $(STAGING)/etc/$(DATA_5_DEST)
	$(CHMOD) $(STAGING)/etc/$(DATA_5_DEST)/*
endif
ifneq '$(LIBSRC_FILES)' ''
	$(RCOPY) $(LIBSRC_FILES) $(STAGING)/lib-src
	$(CHMOD) $(STAGING)/lib-src/*
endif
	(cd $(STAGING); \
	ls -1 $(MANIFEST) > $(MANIFEST))
ifneq '$(ELCS)' ''
	@(cd $(STAGING); \
	ls -1 lisp/$(PACKAGE)/ChangeLog \
		$(patsubst %, lisp/$(PACKAGE)/%, $(notdir $(SOURCE_FILES_TO_COPY))) \
		$(patsubst %, lisp/$(PACKAGE)/%, $(notdir $(EXTRA_SOURCES))) \
> $(MANIFEST)) 
endif
ifneq '$(ELCS_1)' ''
	@(cd $(STAGING); \
	ls -1 $(patsubst %, lisp/$(ELCS_1_DEST)/%, $(notdir $(ELCS_1_FILES))) \
> $(MANIFEST)) 
endif
ifneq '$(INFO_FILES)' ''
	@(cd $(STAGING); \
	ls -1 man/$(PACKAGE)/* \
		$(patsubst %,info/%, $(notdir $(INFO_FILES))) >> $(MANIFEST))
endif
ifneq '$(DATA_FILES)' ''
	@(cd $(STAGING); \
	ls -1 $(patsubst %, etc/$(DATA_DEST)/%, $(notdir $(DATA_FILES))) \
> $(MANIFEST)) 
endif
ifneq '$(DATA_1_FILES)' ''
	@(cd $(STAGING); \
	ls -1 $(patsubst %, etc/$(DATA_1_DEST)/%, $(notdir $(DATA_1_FILES))) \
> $(MANIFEST)) 
endif
ifneq '$(DATA_2_FILES)' ''
	@(cd $(STAGING); \
	ls -1 $(patsubst %, etc/$(DATA_2_DEST)/%, $(notdir $(DATA_2_FILES))) \
> $(MANIFEST)) 
endif
ifneq '$(DATA_3_FILES)' ''
	@(cd $(STAGING); \
	ls -1 $(patsubst %, etc/$(DATA_3_DEST)/%, $(notdir $(DATA_3_FILES))) \
> $(MANIFEST)) 
endif
ifneq '$(DATA_4_FILES)' ''
	@(cd $(STAGING); \
	ls -1 $(patsubst %, etc/$(DATA_4_DEST)/%, $(notdir $(DATA_4_FILES))) \
> $(MANIFEST)) 
endif
ifneq '$(DATA_5_FILES)' ''
	@(cd $(STAGING); \
	ls -1 $(patsubst %, etc/$(DATA_5_DEST)/%, $(notdir $(DATA_5_FILES))) \
> $(MANIFEST)) 
endif
ifneq '$(LIBSRC_FILES)' ''
	@(cd $(STAGING); \
	ls -1 $(patsubst %,lib-src/%, $(notdir $(LIBSRC_FILES))) >> $(MANIFEST))
endif
binkit-sourceonly: binkit-common
#binkit-sourceonly: all
#	-rm -rf $(STAGING)/lisp/$(PACKAGE)
#	-mkdir -p $(STAGING)/lisp/$(PACKAGE)
#	-rm -f $(STAGING)/$(MANIFEST)
#	-mkdir -p $(STAGING)/pkginfo
#	-touch $(STAGING)/$(MANIFEST)
#	$(RCOPY) ChangeLog $(SOURCE_FILES_TO_COPY) $(EXTRA_SOURCES) $(STAGING)/lisp/$(PACKAGE)
#	(cd $(STAGING); \
#	rm -f $(PACKAGE)-$(VERSION)-pkg.tar*; \
#	ls -1 $(MANIFEST) lisp/$(PACKAGE)/* > $(MANIFEST); \
#	$(TAR) $(EXCLUDES) -cf $(PACKAGE)-$(VERSION)-pkg.tar \
#		$(MANIFEST) lisp/$(PACKAGE); \
#	gzip -v9 $(PACKAGE)-$(VERSION)-pkg.tar)
binkit-sourceinfo: binkit-common
#binkit-sourceinfo: all
#	-rm -rf $(STAGING)/lisp/$(PACKAGE)
#	-mkdir -p $(STAGING)/lisp/$(PACKAGE)
#	-mkdir -p $(STAGING)/info
#	-(cd $(STAGING)/info; rm -rf $(notdir $(INFO_FILES)))
#	-(cd $(STAGING)/man; rm -rf $(PACKAGE))
#	-mkdir -p $(STAGING)/man/$(PACKAGE)
#	-rm -f $(STAGING)/$(MANIFEST)
#	-mkdir -p $(STAGING)/pkginfo
#	-touch $(STAGING)/$(MANIFEST)
#	$(RCOPY) ChangeLog $(SOURCE_FILES_TO_COPY) $(EXTRA_SOURCES) $(STAGING)/lisp/$(PACKAGE)
#	$(RCOPY) $(INFO_FILES) $(STAGING)/info
#	$(RCOPY) $(TEXI_FILES) $(STAGING)/man/$(PACKAGE)
#	(cd $(STAGING); \
#	rm -f $(PACKAGE)-$(VERSION)-pkg.tar*; \
#	ls -1 $(MANIFEST) lisp/$(PACKAGE)/* man/$(PACKAGE)/* \
#		$(patsubst %,info/%, $(notdir $(INFO_FILES))) > $(MANIFEST); \
#	$(TAR) $(EXCLUDES) -cf $(PACKAGE)-$(VERSION)-pkg.tar lisp/$(PACKAGE) \
#		$(patsubst %,info/%, $(notdir $(INFO_FILES))) \
#		man/$(PACKAGE) $(MANIFEST); \
#	gzip -v9 $(PACKAGE)-$(VERSION)-pkg.tar)
binkit-sourcedata: binkit-common
#binkit-sourcedata: all
#	-rm -rf $(STAGING)/lisp/$(PACKAGE)
#	-mkdir -p $(STAGING)/lisp/$(PACKAGE)
#	-rm -rf $(patsubst %, $(STAGING)/etc/$(DATA_DEST)/%, $(notdir $(DATA_FILES)))
#	-mkdir -p $(STAGING)/etc/$(DATA_DEST)
#	-rm -f $(STAGING)/$(MANIFEST)
#	-mkdir -p $(STAGING)/pkginfo
#	-touch $(STAGING)/$(MANIFEST)
#	$(RCOPY) ChangeLog $(SOURCE_FILES_TO_COPY) $(EXTRA_SOURCES) $(STAGING)/lisp/$(PACKAGE)
#	$(RCOPY) $(DATA_FILES) $(STAGING)/etc/$(DATA_DEST)
#	(cd $(STAGING); \
#	rm -f $(PACKAGE)-$(VERSION)-pkg.tar*; \
#	ls -1 lisp/$(PACKAGE)/* \
#		$(patsubst %, etc/$(DATA_DEST)/%, $(notdir $(DATA_FILES))) \
#		$(MANIFEST) > $(MANIFEST); \
#	$(TAR) $(EXCLUDES) -cf $(PACKAGE)-$(VERSION)-pkg.tar lisp/$(PACKAGE) \
#		$(patsubst %, etc/$(DATA_DEST)/%, $(notdir $(DATA_FILES))) \
#		$(MANIFEST); \
#	gzip -v9 $(PACKAGE)-$(VERSION)-pkg.tar)
binkit-sourcedatainfo: binkit-common
#binkit-sourcedatainfo: all
#	-rm -rf $(STAGING)/lisp/$(PACKAGE)
#	-mkdir -p $(STAGING)/lisp/$(PACKAGE)
#	-mkdir -p $(STAGING)/info
#	-(cd $(STAGING)/info; rm -rf $(notdir $(INFO_FILES)))
#	-(cd $(STAGING)/man; rm -rf $(PACKAGE))
#	-mkdir -p $(STAGING)/man/$(PACKAGE)
#	-rm -rf $(patsubst %, $(STAGING)/etc/$(DATA_DEST)/%, $(notdir $(DATA_FILES)))
#	-mkdir -p $(STAGING)/etc/$(DATA_DEST)
#	-rm -f $(STAGING)/$(MANIFEST)
#	-mkdir -p $(STAGING)/pkginfo
#	-touch $(STAGING)/$(MANIFEST)
#	$(RCOPY) ChangeLog $(SOURCE_FILES_TO_COPY) $(EXTRA_SOURCES) $(STAGING)/lisp/$(PACKAGE)
#	$(RCOPY) $(INFO_FILES) $(STAGING)/info
#	$(RCOPY) $(TEXI_FILES) $(STAGING)/man/$(PACKAGE)
#	$(RCOPY) $(DATA_FILES) $(STAGING)/etc/$(DATA_DEST)
#	(cd $(STAGING); \
#	rm -f $(PACKAGE)-$(VERSION)-pkg.tar*; \
#	ls -1 lisp/$(PACKAGE)/* man/$(PACKAGE)/* \
#		$(patsubst %,info/%, $(notdir $(INFO_FILES))) \
#		$(patsubst %, etc/$(DATA_DEST)/%, $(notdir $(DATA_FILES))) \
#		$(MANIFEST) > $(MANIFEST); \
#	$(TAR) $(EXCLUDES) -cf $(PACKAGE)-$(VERSION)-pkg.tar lisp/$(PACKAGE) \
#		$(patsubst %,info/%, $(notdir $(INFO_FILES))) \
#		man/$(PACKAGE) \
#		$(patsubst %, etc/$(DATA_DEST)/%, $(notdir $(DATA_FILES))) \
#		$(MANIFEST); \
#	gzip -v9 $(PACKAGE)-$(VERSION)-pkg.tar)