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
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)
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)
$(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
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';
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";
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 = <MAKEFILE_IN>;
+ close MAKEFILE_IN;
+ print STDOUT "Writing Makefile...\n" if $verbose;
+ open MAKEFILE_OUT, ">", "./Makefile";
+ print MAKEFILE_OUT @makefile;
+ close MAKEFILE_OUT;
+}