magic/scripts
Darryl L. Miles b522f31d87 build: VPATH-enable shared make machinery (out-of-tree)
With the autoconf layer relocatable, teach the shared make
files to read sources from the source tree and write objects into the
build tree.  The ~26 "standard" and "near-standard" module Makefiles now
build out-of-tree with no per-module edits.

scripts/defs.mak.in:
* Add MAGICSRC = @abs_top_srcdir@ (absolute source top) and derive each
  module's srcdir/VPATH from CURDIR relative to the build top:
      BUILD_TOP      := $(abspath $(MAGICDIR))
      MODULE_SUBPATH := $(subst $(BUILD_TOP),,$(CURDIR))
      srcdir         := $(MAGICSRC)$(MODULE_SUBPATH)
      VPATH          := $(srcdir)
  (MAGICDIR keeps meaning the *build* top; in-tree the trees coincide.)
* CPPFLAGS: add -I${MAGICSRC} (source top, for "<module>/<hdr>.h") and
  -I${srcdir} (same-dir headers), keeping -I${MAGICDIR} for the generated
  database/database.h in the build top.
* MAGIC_VERSION/REVISION read ${MAGICSRC}/VERSION; MAGIC_COMMIT uses
  `git -C ${MAGICSRC}` so it works from a build dir outside the work-tree.

rules.mak:
* Compile rule: `-c $*.c` -> `-c $< -o $@` so the source is found via
  VPATH in srcdir and the object is written to the build cwd.
* Depend and tags rules: prefix sources with $(srcdir)/ (they are passed
  to the compiler/ctags directly, which do not honor VPATH).

scripts/configure.in: AC_CONFIG_FILES([rules.mak:rules.mak]) copies the
VPATH-aware rules.mak into the build top, so a single ${MAGICDIR}
resolves both `include`s in every subdir Makefile.  Regenerated configure.

Known limitation (v1): the Depend post-processing sed strips
absolute-path headers, so with an absolute srcdir most header deps are
dropped; out-of-tree incremental header-change rebuilds are weaker.
Depend is already "optimistic/optional"; relativizing is a follow-up.

Verified out-of-tree: `tiles` and `drc` (the latter #includes the
generated database/database.h) build to completion; all objects land in
the build tree; the source tree stays clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-26 14:54:11 -04:00
..
.gitignore Allow Python 3 to not be in PATH, Fix `clean` re-building dependencies 2023-08-29 22:43:11 +03:00
config.guess Update config.guess/config.log 2020-12-24 21:59:14 -05:00
config.sub Update config.guess/config.log 2020-12-24 21:59:14 -05:00
configure build: VPATH-enable shared make machinery (out-of-tree) 2026-07-26 14:54:11 -04:00
configure.in build: VPATH-enable shared make machinery (out-of-tree) 2026-07-26 14:54:11 -04:00
configure_mac GHA: MacOS maintenance update 2025-01-04 11:23:39 -05:00
defs.mak.in build: VPATH-enable shared make machinery (out-of-tree) 2026-07-26 14:54:11 -04:00
install-sh Initial commit at Tue Apr 25 08:41:48 EDT 2017 by tim on stravinsky 2017-04-25 08:41:48 -04:00
magic.spec.in Initial commit at Tue Apr 25 08:41:48 EDT 2017 by tim on stravinsky 2017-04-25 08:41:48 -04:00
makedbh.in makedbh.in _DATABASE_H => _MAGIC__DATABASE__DATABASE_H 2025-07-29 10:50:32 -04:00
missing Initial commit at Tue Apr 25 08:41:48 EDT 2017 by tim on stravinsky 2017-04-25 08:41:48 -04:00
mkdirs Initial commit at Tue Apr 25 08:41:48 EDT 2017 by tim on stravinsky 2017-04-25 08:41:48 -04:00
mkinstalldirs Convert $Id$ placeholders to $Header$ placeholders. 2020-05-23 17:00:38 -04:00
preproc.py Use raw strings in preproc.py 2024-01-23 09:38:23 -06:00
printmans Build Updates 2023-08-25 12:24:14 -04:00