# Copyright (c) 2001-2015
# Contributors to the Freedoom project.  All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#  * Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#  * Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#  * Neither the name of the freedoom project nor the names of its
#    contributors may be used to endorse or promote products derived from
#    this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

VERSION=$(shell git describe 2>/dev/null || cat VERSION)
WADS=wads
CPP=scripts/simplecpp
DEUTEX=deutex
DEUTEX_BASIC_ARGS=-v0 -fullsnd -rate accept -rgb 0 255 255
DEUTEX_ARGS=$(DEUTEX_BASIC_ARGS) -doom2 bootstrap/

FREEDOOM1=$(WADS)/freedoom1.wad
FREEDOOM2=$(WADS)/freedoom2.wad
FREEDM=$(WADS)/freedm.wad

OBJS=$(FREEDM) $(FREEDOOM1) $(FREEDOOM2)

all: $(OBJS)

subdirs:
	$(MAKE) -C graphics/text
	$(MAKE) VERSION=$(VERSION) -C graphics/titlepic
	$(MAKE) -C lumps/cph/misc-lumps
	$(MAKE) -C lumps/genmidi
	$(MAKE) -C lumps/dmxgus
	$(MAKE) -C lumps/textures
	$(MAKE) -C bootstrap


# this is a useless dependency to force builds

force:

lumps/freedoom.lmp lumps/freedm.lmp: force
	echo $(VERSION) > $@

# update wadinfo.txt

wadinfo.txt: buildcfg.txt subdirs lumps/freedoom.lmp
	$(CPP) -P -DDOOM2 < $< | scripts/wadinfo-builder.py > $@
wadinfo_phase1.txt: buildcfg.txt subdirs lumps/freedoom.lmp
	$(CPP) -P -DDOOM1 -DULTDOOM < $< | scripts/wadinfo-builder.py -dummy > $@
wadinfo_phase2.txt: buildcfg.txt subdirs lumps/freedoom.lmp
	$(CPP) -P -DDOOM2 < $< | scripts/wadinfo-builder.py -dummy > $@
wadinfo_freedm.txt : buildcfg.txt subdirs lumps/freedoom.lmp lumps/freedm.lmp
	$(CPP) -P -DFREEDM < $< | scripts/wadinfo-builder.py -dummy > $@

# deutex doesnt allow redirects for the filenames in the texture
# entries, so we have to change the texture1 symlink to point
# to whichever wad we are working on

#---------------------------------------------------------
# freedm iwad

$(FREEDM): wadinfo_freedm.txt subdirs
	@mkdir -p $(WADS)
	rm -f $@
	$(DEUTEX) $(DEUTEX_ARGS) -iwad -build wadinfo_freedm.txt $@

#---------------------------------------------------------
# phase 1 (udoom) iwad

$(FREEDOOM1): wadinfo_phase1.txt subdirs
	@mkdir -p $(WADS)
	rm -f $@
	$(DEUTEX) $(DEUTEX_ARGS) -iwad -lumps -patch -flats -sounds -musics -graphics -sprites -levels -build wadinfo_phase1.txt $@

#---------------------------------------------------------
# phase 2 (doom2) iwad

$(FREEDOOM2): wadinfo_phase2.txt subdirs
	@mkdir -p $(WADS)
	rm -f $@
	$(DEUTEX) $(DEUTEX_ARGS) -iwad -lumps -patch -flats -sounds -musics -graphics -sprites -levels -build wadinfo_phase2.txt $@

%.html: %.adoc
	asciidoc $<

doc: $(patsubst %.adoc,%.html,$(wildcard *.adoc))

DISTDOCS=COPYING CREDITS README.html

.PHONY: dist

# Due to convoluted reasons, the WADs must directly proceed the game name.
dist: $(OBJS) README.html
	VERSION=$(VERSION) scripts/makepkgs freedm $(FREEDM) $(DISTDOCS)
	VERSION=$(VERSION) scripts/makepkgs freedoom $(FREEDOOM1) $(FREEDOOM2) $(DISTDOCS)

json: $(OBJS)
ifndef JSON
	@echo "Define JSON as the file to output." >&2
	@exit 1
else
	JSON=$(JSON) VERSION=$(VERSION) scripts/makejson
endif

clean:
	rm -f	*.html deutex.log $(OBJS) \
		./wadinfo.txt ./wadinfo_phase1.txt \
		./wadinfo_phase2.txt ./wadinfo_freedm.txt \
		./lumps/freedoom.lmp \
		./lumps/freedm.lmp
	-rmdir $(WADS)

	$(MAKE) -C dist clean
	$(MAKE) -C graphics/text clean
	$(MAKE) -C graphics/titlepic clean
	$(MAKE) -C lumps/cph/misc-lumps clean
	$(MAKE) -C lumps/genmidi clean
	$(MAKE) -C lumps/dmxgus clean
	$(MAKE) -C lumps/textures clean
	$(MAKE) -C bootstrap clean

prefix?=/usr/local
bindir?=/bin
mandir?=/share/man
waddir?=/share/games/doom
target=$(DESTDIR)$(prefix)

%.6:
	$(MAKE) -C dist man-$*

%.png:
	$(MAKE) -C dist icon-$*

# This is bad because it assumes the IWADs will always be defined like
# this.  I just can't see another way to do it.  Fix later if possible.

install-%: $(WADS)/%.wad %.6 %.png
	install -d "$(target)$(bindir)"
	install -m 755 dist/freedoom "$(target)$(bindir)/$*"
	install -d "$(target)$(mandir)/man6"
	install -m 644 dist/$*.6 "$(target)$(mandir)/man6"
	install -d "$(target)$(waddir)"
	install -m 644 $(WADS)/$*.wad "$(target)$(waddir)"
	install -d "$(target)/share/applications"
	install -m 644 dist/$*.desktop "$(target)/share/applications"
	install -d "$(target)/share/appdata"
	install -m 644 dist/$*.appdata.xml "$(target)/share/appdata"
	install -d "$(target)/share/icons"
	install -m 644 dist/$*.png "$(target)/share/icons/$*.png"

uninstall-%:
	rm "$(target)$(bindir)/$*"
	rm "$(target)$(mandir)/man6/$*.6"
	rm "$(target)$(waddir)/$*.wad"
	rm "$(target)/share/applications/$*.desktop"
	rm "$(target)/share/appdata/$*.appdata.xml"
	rm "$(target)/share/icons/$*.png"
	-rmdir -p "$(target)$(bindir)"
	-rmdir -p "$(target)$(mandir)/man6"
	-rmdir -p "$(target)$(waddir)"
	-rmdir -p "$(target)/share/applications"
	-rmdir -p "$(target)/share/appdata"
	-rmdir -p "$(target)/share/icons"

install: install-freedm install-freedoom1 install-freedoom2

uninstall: uninstall-freedm uninstall-freedoom1 uninstall-freedoom2
