[cc'ed back to xemacs-beta to show signs of life :-(]
> Ville> Seems that pdepends.mk still isn't
> created by running a
> Ville> "make autoloads" in a package dir,
> Ville> ie. packages/xemacs-packages/<package>.
Is that necessary?
At the moment the pdepends.mk express the interdepencies between
the different packages, so they only make sense from the directory
one level above (i.e. from the Makefile in xemacs-packages).
For instance, say haskell-mode/pdepends.mk says
./haskell-mode/autoloads.target: ./dired/autoloads.target mail-lib/autoloads.target
xemacs-base/autoloads.target edit-utils/autoloads.target
./haskell-mode/compile.target: ./dired/compile.target mail-lib/compile.target
xemacs-base/compile.target edit-utils/compile.target
which says that dired, mail-lib, xemacs-base and edit-utils must be compiled
before haskell-mode.
This kind of information only makes sense from a directory that sees
all this packages. Ideally you want to this from the toplevel so you
can have dependencies between mule packages and normal packages
So you could argue that
instead of
cd xemacs-packages/haskell-mode
make compile
you should do
cd xemacs-packages
make haskell-mode/compile.target
as the latter rebuilds the dependencies if needed.
> He's probably not reading xemacs-patches
Not very closely, and not very often.
I am afraid so :-(
> I suspect you should get rid of the pdepends.mk
> rules in the other
> Makefiles (== levels?). This should catch them all,
> no? [But I don't
> understand the pdepends.mk mechanism yet.] Steve,
> what do you think?
Jan is the better one to ask. I think what's needed
is to ensure that all required pdepends.mk files are
always built (and used) regardless of where make is
invoked from.
It is important they get rebuild from the Makefiles that use them,
which is AFAICS the case. See this rule in iterate.rules
$(DEPENDS_FILES): %$(DEPENDS_FILE_NAME): %Makefile ../XEmacs.rules
$(MAKE) $(MFLAGS) -C $(*D) TARGET_BASE=$(dir $(*D)) \
$(DEPENDS_FILE_NAME)
The pdepend.mk stuff is there so that there is only one place that
contains the dependency information, which is the REQUIRES line in
the package Makefile.
This used to be hardcoded in multiple places, or the information would
be simply ignored.
Ideally in a package build you should NEVER see ".el file newer than
.elc" file warnings.
I agree this all very hacky, but it took quite a bit of effort to get
right. This way Make can figure out all the proper dependencies with
out relying on the fact that you called the toplevel make autoload before
make bytecompile etc...
For instance, this rule
$(BYTECOMPILE_TARGETS): %bytecompile.target: %autoloads.target
tells Make that autoloads must be made before bytecompiles, therefore
haskell-mode/byte-compile.target depends haskell-mode/autoload.target
depends on dired/autoload.target and on dired/bytecompile.target
ensuring that whatever happends, autoloads for the dependencies are
always generated first, and that dependencies are alwyas compiled
before the package.
I see that this line has recently been commented out.. Why? Was there
some problem.
This stuff is important to allow a clean bootstrap to work
i.e.
cvs checkout xemacs
cvs checkout packages
build xemacs (don't install any packages)
build packages with the xemacs just compiled above.
Similarly I always build with
VANILLA = -vanilla -no-autoloads
so that any existing autoloads from already installed packages don't
get used by accident. I think -no-autoloads should be the default.
Hopefully thus clears this up?
Merry christmas to you all,
I hope you will see more of me next year,
Jan