From a12e88388c2aff7353a61f6383394fcfe9c85635 Mon Sep 17 00:00:00 2001 From: Martin Read Date: Fri, 14 Feb 2014 19:37:33 +0000 Subject: [PATCH] Out of tree builds now work Out of tree builds now work. Anyone who feels like stress-testing them to look for bizarre edge cases is strongly encouraged to file a bug report. --- Makefile | 47 +++++++++++++++++++++++++---------------------- configure | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index 1f4dda1..151f64b 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ include dirs.mk include features.mk +vpath %.o . GENERATED_OBJS:=permobj.o permons.o GENERATED_SOURCE:=permobj.cc pobj_id.hh permons.cc pmon_id.hh GENERATED_MAKES:=dirs.mk features.mk @@ -14,8 +15,8 @@ GAME:=victrix-abyssi MAJVERS:=0 MINVERS:=9 PATCHVERS:=1 -COMMON_CFLAGS:=-Wall -Wwrite-strings -Wunreachable-code -Wformat -Werror=format-security -fstack-protector --param=ssp-buffer-size=4 -DMAJVERS=$(MAJVERS) -DMINVERS=$(MINVERS) -DPATCHVERS=$(PATCHVERS)-std=gnu11 -D_FORTIFY_SOURCE=2 -COMMON_CXXFLAGS:=-Wall -Wwrite-strings -Wno-unused-but-set-variable -Wredundant-decls -Wunreachable-code -Wformat -Werror=format-security -fstack-protector --param=ssp-buffer-size=4 -DMAJVERS=$(MAJVERS) -DMINVERS=$(MINVERS) -DPATCHVERS=$(PATCHVERS) -std=gnu++11 -D_FORTIFY_SOURCE=2 +COMMON_CFLAGS:=-Wall -Wwrite-strings -Wunreachable-code -Wformat -Werror=format-security -fstack-protector --param=ssp-buffer-size=4 -DMAJVERS=$(MAJVERS) -DMINVERS=$(MINVERS) -DPATCHVERS=$(PATCHVERS)-std=gnu11 -D_FORTIFY_SOURCE=2 -I$(srcdir) +COMMON_CXXFLAGS:=-Wall -Wwrite-strings -Wno-unused-but-set-variable -Wredundant-decls -Wunreachable-code -Wformat -Werror=format-security -fstack-protector --param=ssp-buffer-size=4 -DMAJVERS=$(MAJVERS) -DMINVERS=$(MINVERS) -DPATCHVERS=$(PATCHVERS) -std=gnu++11 -D_FORTIFY_SOURCE=2 -I$(srcdir) PRODUCTION_CFLAGS:=$(COMMON_CFLAGS) DEVELOPMENT_CFLAGS:=$(COMMON_CFLAGS) -g -Werror PRODUCTION_CXXFLAGS:=$(COMMON_CXXFLAGS) @@ -32,7 +33,7 @@ DEVELOPMENT_LDFLAGS:=$(COMMON_LDFLAGS) -g all: $(GAME) -archive: clean permobj.cc pobj_id.hh +archive: clean ./permobj.cc ./pobj_id.hh mkdir $(ARCHIVEDIR) cp `cat MANIFEST` $(ARCHIVEDIR) tar czf $(ARCHIVENAME).tar.gz $(ARCHIVEDIR) @@ -79,50 +80,52 @@ spotless: clean code-docs-clean my-debclean generated-clean $(GAME): $(OBJS) $(CXX) $(DEVELOPMENT_LDFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o $(GAME) -.cc.o: +%.o: $(srcdir)/%.cc $(CXX) -c $(DEVELOPMENT_CXXFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< -o $@ -.c.o: +%.o: $(srcdir)/%.c $(CC) -c $(DEVELOPMENT_CFLAGS) $(CPPFLAGS) $(CFLAGS) $< -o $@ ## Dependencies for autogeneration -permobj.cc pobj_id.hh: default.permobjs $(srcdir)/pobj_comp +permobj.cc pobj_id.hh: $(srcdir)/default.permobjs $(srcdir)/pobj_comp $(srcdir)/pobj_comp $< -permons.cc pmon_id.hh: default.permons $(srcdir)/pmon_comp +permons.cc pmon_id.hh: $(srcdir)/default.permons $(srcdir)/pmon_comp $(srcdir)/pmon_comp $< ## Dependencies for the build -combat.o: combat.cc combat.hh victrix-abyssi.hh monsters.hh objects.hh notify.hh pobj_id.hh pmon_id.hh player.hh +combat.o: $(srcdir)/combat.cc $(srcdir)/combat.hh $(srcdir)/victrix-abyssi.hh $(srcdir)/monsters.hh $(srcdir)/objects.hh $(srcdir)/notify.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh -display-nc.o: display-nc.cc victrix-abyssi.hh display.hh pobj_id.hh pmon_id.hh player.hh +display-nc.o: $(srcdir)/display-nc.cc $(srcdir)/victrix-abyssi.hh $(srcdir)/display.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh -main.o: main.cc combat.hh victrix-abyssi.hh monsters.hh notify.hh pobj_id.hh pmon_id.hh player.hh +log.o: $(srcdir)/log.cc $(srcdir)/objects.hh $(srcdir)/monsters.hh $(srcdir)/player.hh $(srcdir)/map.hh $(srcdir)/util.h -map.o: map.cc victrix-abyssi.hh notify.hh objects.hh pobj_id.hh pmon_id.hh player.hh +main.o: $(srcdir)/main.cc $(srcdir)/combat.hh $(srcdir)/victrix-abyssi.hh $(srcdir)/monsters.hh $(srcdir)/notify.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh -monsters.o: monsters.cc victrix-abyssi.hh monsters.hh notify.hh objects.hh pobj_id.hh pmon_id.hh player.hh +map.o: $(srcdir)/map.cc $(srcdir)/victrix-abyssi.hh $(srcdir)/notify.hh $(srcdir)/objects.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh -mon2.o: mon2.cc victrix-abyssi.hh sorcery.hh monsters.hh notify.hh objects.hh pobj_id.hh pmon_id.hh player.hh +monsters.o: $(srcdir)/monsters.cc $(srcdir)/victrix-abyssi.hh $(srcdir)/monsters.hh $(srcdir)/notify.hh $(srcdir)/objects.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh -notify-local-tty.o: notify-local-tty.cc victrix-abyssi.hh combat.hh monsters.hh notify.hh objects.hh sorcery.hh pobj_id.hh pmon_id.hh player.hh +mon2.o: $(srcdir)/mon2.cc $(srcdir)/victrix-abyssi.hh $(srcdir)/sorcery.hh $(srcdir)/monsters.hh $(srcdir)/notify.hh $(srcdir)/objects.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh -# NOTICE: permobj.cc does not depend on pobj_id.hh because they are both +notify-local-tty.o: $(srcdir)/notify-local-tty.cc $(srcdir)/victrix-abyssi.hh $(srcdir)/combat.hh $(srcdir)/monsters.hh $(srcdir)/notify.hh $(srcdir)/objects.hh $(srcdir)/sorcery.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh + +# NOTICE: $(srcdir)/permobj.cc does not depend on ./pobj_id.hh because they are both # generated from the same input file and should not be hand-edited. If you # file a bug report over this, I will close it NOTABUG; if you submit a # patch to add such a dependency, I will reject it out of hand. -permobj.o: permobj.cc core.hh permobj.hh pobj_id.hh +permobj.o: $(srcdir)/permobj.cc $(srcdir)/core.hh $(srcdir)/permobj.hh ./pobj_id.hh -permons.o: permons.cc core.hh permon.hh pmon_id.hh +permons.o: $(srcdir)/permons.cc $(srcdir)/core.hh $(srcdir)/permon.hh ./pmon_id.hh -pmon2.o: pmon2.cc victrix-abyssi.hh notify.hh monsters.hh pobj_id.hh pmon_id.hh player.hh +pmon2.o: $(srcdir)/pmon2.cc $(srcdir)/victrix-abyssi.hh $(srcdir)/notify.hh $(srcdir)/monsters.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh -objects.o: objects.cc victrix-abyssi.hh notify.hh objects.hh monsters.hh pobj_id.hh pmon_id.hh player.hh +objects.o: $(srcdir)/objects.cc $(srcdir)/victrix-abyssi.hh $(srcdir)/notify.hh $(srcdir)/objects.hh $(srcdir)/monsters.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh -sorcery.o: sorcery.cc victrix-abyssi.hh notify.hh sorcery.hh objects.hh monsters.hh pobj_id.hh pmon_id.hh player.hh +sorcery.o: $(srcdir)/sorcery.cc $(srcdir)/victrix-abyssi.hh $(srcdir)/notify.hh $(srcdir)/sorcery.hh $(srcdir)/objects.hh $(srcdir)/monsters.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh -u.o: u.cc combat.hh victrix-abyssi.hh notify.hh monsters.hh objects.hh pobj_id.hh pmon_id.hh player.hh +u.o: $(srcdir)/u.cc $(srcdir)/combat.hh $(srcdir)/victrix-abyssi.hh $(srcdir)/notify.hh $(srcdir)/monsters.hh $(srcdir)/objects.hh ./pobj_id.hh ./pmon_id.hh $(srcdir)/player.hh -util.o: util.c util.h +util.o: $(srcdir)/util.c $(srcdir)/util.h # vim:ts=8:sts=8:sw=8:noexpandtab diff --git a/configure b/configure index 9e911b4..13be088 100755 --- a/configure +++ b/configure @@ -13,7 +13,7 @@ my $sbindir='$(exec_prefix)/sbin'; my $libdir='$(exec_prefix)/lib'; my $libexecdir='$(exec_prefix)/libexec'; my $gamesdir='$(prefix)/games'; -my $srcdir='.'; +my $srcdir=undef; my $datarootdir='$(prefix)/share'; my $datadir='$(datarootdir)/victrix-abyssi'; @@ -76,7 +76,24 @@ GetOptions( print STDOUT "Configuring Victrix Abyssi build/install process...\n" if $verbose; my $cmdresults; - +my $probably_in_main_dir = 0; + +if (!defined($srcdir)) +{ + # Heuristic check when srcdir undefined: If the main header file is here, + # srcdir should be "."; if the main header file is not here but is in the + # parent dir, srcdir should be "..". + if (-f "./victrix-abyssi.hh") + { + # We're probably in srcdir. + $srcdir = "." + } + elsif (-f "../victrix-abyssi.hh") + { + # We're probably in an immediate child of srcdir. + $srcdir = ".." + } +} print STDOUT "Testing 'mkdir -p' ...\n" if $verbose; rmdir "billy/bob"; rmdir "billy"; @@ -132,3 +149,14 @@ print STDOUT "Writing features.mk...\n" if $verbose; open(FEATURES_MK, '>', "features.mk") or die $!; print FEATURES_MK "DISABLE_STATICS=${disable_statics}"; close(FEATURES_MK); + +if (($srcdir ne ".") && ($srcdir ne "")) +{ + open MAKEFILE_IN, "<", "${srcdir}/Makefile"; + my @makefile = ; + close MAKEFILE_IN; + print STDOUT "Writing Makefile...\n" if $verbose; + open MAKEFILE_OUT, ">", "./Makefile"; + print MAKEFILE_OUT @makefile; + close MAKEFILE_OUT; +} -- 2.11.0