DEPTH = .

include $(DEPTH)/Makefile.version
include $(DEPTH)/Makefile.os

include $(DEPTH)/Makefile.install.directories

ifeq ($(OPERATING_SYSTEM), Linux)
	PROGNAME ?= FreeDoko
endif
ifeq ($(OPERATING_SYSTEM), Windows)
	PROGNAME ?= FreeDoko.exe
endif

export PROGNAME


# Edited for Debian GNU/Linux.
DESTDIR = 


.PHONY: all
all:
	$(MAKE) Version
	$(MAKE) -C src/ echo_flags
	$(MAKE) -C src/ FreeDoko
	$(MAKE) -C doc/ all
	@echo "---"
	@echo "* Program 'FreeDoko' created"
	@echo "* documentation created"
	@echo "finished"

Version : ChangeLog
ifeq ($(SHELLTYPE), sh)
	@echo -e "Version: "${VERSION}" (alpha)" >Version
	@echo "Date: "`date +%Y-%m-%d` >>Version
endif

.PHONY: delete
delete : clean

ifeq ($(SHELLTYPE), sh)
.PHONY: clean
clean :
	rm -f *~
	rm -rf release_*
	@for d in *; \
	do	if test -d $$d; \
		then	if test -e $$d/Makefile; \
			then	$(MAKE) -C $$d clean; \
			fi \
		fi \
	done
	find . -name "*~" -exec rm \{\} \;
	find . -name "*.bak" -exec rm \{\} \;
	find . -name "core" -exec rm \{\} \;
	find . -name ".#*" -exec rm \{\} \;
	find . -name "#*#" -exec rm \{\} \;
	find . -name "a2psout.ps" -exec rm \{\} \;
	-find . -name ".thumbnails" -exec rm -rf \{\} \;
endif

ifeq ($(SHELLTYPE), sh)
.PHONY: chmod
chmod :
	find -type d -exec chmod +x \{\} \;
	chmod -R go-w .
	chmod -R a+rX .
	find . ! -type d ! -type l -exec chmod -x \{\} \;
	find -name "c" -exec chmod +x \{\} \;
	find -name "FreeDoko" -exec chmod +x \{\} \;
	find -name "*.bat" -exec chmod +x \{\} \;
	find -name "*.exe" -exec chmod +x \{\} \;
	chmod a+x data/setup/debian/*/rules
	for f in data/bin/*; do \
	  (head -n 1 $$f | grep -q '^#!') && chmod +x $$f; \
	done
	@#find . -name "*.cpp" -exec chmod -x \{\} \;
	@#find . -name "*.h" -exec chmod -x \{\} \;
endif

ifeq ($(OPERATING_SYSTEM), Linux)
.PHONY: release
release : clean
	rm -rf ../FreeDoko_$(VERSION).release/
	mkdir -p ../FreeDoko_$(VERSION).release/
#	source
	$(MAKE) release_source
	cd release/; \
	  zip -q9r \
	    ../../FreeDoko_$(VERSION).release/FreeDoko_$(VERSION).src.zip \
	    FreeDoko_$(VERSION)
#	manual
	$(MAKE) release_manual
	cd release/; \
	  zip -q9r \
	    ../../FreeDoko_$(VERSION).release/FreeDoko_$(VERSION).manual.zip \
	    FreeDoko_$(VERSION)/doc/manual
#	simple packages
	$(MAKE) release_directory
	$(MAKE) release_data
#	- Linux
	$(MAKE) release_linux_binary
	tar czf ../FreeDoko_$(VERSION).release/FreeDoko_$(VERSION).Linux.tgz -C release FreeDoko_$(VERSION)
	rm release/FreeDoko_$(VERSION)/FreeDoko
#	- Windows
	$(MAKE) release_windows_binary
	@cd release \
	  && zip -q9r ../../FreeDoko_$(VERSION).release/FreeDoko_$(VERSION).Windows.zip FreeDoko_$(VERSION)
	@cp -a data/gtkmm_2.4_dll release/FreeDoko_$(VERSION)/
	@cp -a data/gnet.dll release/FreeDoko_$(VERSION)/
	$(RM) -r `find release/FreeDoko_$(VERSION)/ -name ".svn"`
	@$(MAKE) -C data/setup/Windows setup
	@mv data/setup/Windows/FreeDoko_$(VERSION)*.Setup.exe ../FreeDoko_$(VERSION).release/
	@rm -rf release/FreeDoko_$(VERSION)/gtkmm_2.4_dll
	@rm -rf release/FreeDoko_$(VERSION)/gnet.dll
	@rm release/FreeDoko_$(VERSION)/FreeDoko.exe
#	packages
	$(MAKE) packages
	cd ../FreeDoko_$(VERSION).release/ \
	  && cp -a /home/install/mirrors/FreeDoko/ debian \
	  && find debian/ -name "*.deb" ! -name "*$(VERSION)*.deb" -exec rm \{\} \;
	cd ../FreeDoko_$(VERSION).release/ \
	  && cp debian/pool/non-free/FreeDoko/freedoko-altenburg_$(VERSION)*.deb . \
	  && fakeroot alien --to-rpm freedoko-altenburg_$(VERSION)*.deb
	rm -rf ../FreeDoko_$(VERSION)
	mv release/FreeDoko_$(VERSION) ../
#	copy to usb
	-mount /media/usbstick
	-tar cf /media/usbstick/FreeDoko_$(VERSION).tar -C ../ FreeDoko_$(VERSION).release/

.PHONY: release_directory
release_directory :
	rm -rf release/
	mkdir -p release/FreeDoko_$(VERSION)

.PHONY: release_data
release_data :
	$(MAKE) Version
	cp AUTHORS COPYING ChangeLog README LIESMICH Version release/FreeDoko_$(VERSION)/
	$(MAKE) -C data release
	$(MAKE) -C doc release
	$(RM) -r `find release/FreeDoko_$(VERSION)/ -name ".svn"`

.PHONY: release_linux_binary
release_linux_binary :
	cp src/constants.h src/constants.h.backup
	if [ ! -f src/Makefile.local.backup ]; then \
	  mv src/Makefile.local src/Makefile.local.backup; \
	fi
	echo "override CPPFLAGS += -DVERSION_DESCRIPTION='\"linux binary\"'" \
	  > src/Makefile.local
	cat src/constants.h.backup \
	  | sed "s/^\/\/#define RELEASE/#define RELEASE/" \
	  > src/constants.h
	$(MAKE) -C src $(PROGNAME)
	strip src/FreeDoko
	mv src/constants.h.backup src/constants.h
	mv src/Makefile.local.backup src/Makefile.local
	touch src/constants.h
	cp src/$(PROGNAME) release/FreeDoko_$(VERSION)/
	strip release/FreeDoko_$(VERSION)/$(PROGNAME)

.PHONY: release_windows_binary
release_windows_binary :
	cp /mnt/Daten/FreeDoko/src/FreeDoko.ico release/FreeDoko_$(VERSION)/ && \
	chmod -x release/FreeDoko_$(VERSION)/FreeDoko.ico && \
	cp /mnt/Daten/FreeDoko/src/FreeDoko.exe release/FreeDoko_$(VERSION)/ && \
	cp data/bin/FreeDoko.bat release/FreeDoko_$(VERSION)/

.PHONY: release_manual
release_manual :
	$(MAKE) release_directory
	mkdir release/FreeDoko_$(VERSION)/doc/
	cp -a doc/manual release/FreeDoko_$(VERSION)/doc/
	$(RM) -r `find release/FreeDoko_$(VERSION)/ -name ".svn"`

.PHONY: release_source
release_source :
	$(MAKE) release_directory
	$(MAKE) release_data
	$(MAKE) -C src clean
	#for d in AUTHORS COPYING ChangeLog Makefile* README LIESMICH Version debian src; do
	for d in Makefile* debian src; do\
		cp -a $$d release/FreeDoko_$(VERSION)/;\
	done
#	source
	cp release/FreeDoko_$(VERSION)/src/Makefile.local.template \
	   release/FreeDoko_$(VERSION)/src/Makefile.local
#	documentation
	cp doc/Makefile release/FreeDoko_$(VERSION)/doc/
	cp doc/Makefile.latex release/FreeDoko_$(VERSION)/doc/
	for d in de en; do \
		$(MAKE) -C doc/$$d clean; \
		rm -rf release/FreeDoko_$(VERSION)/doc/$$d; \
		cp -a doc/$$d release/FreeDoko_$(VERSION)/doc/; \
	done
#	data
	mkdir -p release/FreeDoko_$(VERSION)/data
	for d in translations rules ai cardsets backgrounds; do \
		mv release/FreeDoko_$(VERSION)/$$d release/FreeDoko_$(VERSION)/data/; \
	done
	cd data/;\
	  for f in Makefile bin setup; do\
		cp -a $$f ../release/FreeDoko_$(VERSION)/data/;\
	  done; \
	for d in translations rules ai cardsets backgrounds; do \
		if test -f $$d/Makefile; then \
			cp -a $$d/Makefile ../release/FreeDoko_$(VERSION)/data/$$d/;\
		fi; \
	done;
	#chmod u+w release/FreeDoko_$(VERSION) -R
	$(RM) -r `find release/FreeDoko_$(VERSION)/ -name ".svn"`
endif

ifeq ($(OPERATING_SYSTEM), Linux)
.PHONY: install
install :
	$(MAKE) release_directory
	$(MAKE) release_data
	mv src/Makefile.local src/Makefile.local.bak
	egrep -v "(PUBLIC_DATA|MANUAL)_DIRECTORY_VALUE" src/Makefile.local.bak \
	  > src/Makefile.local
	echo "override CPPFLAGS += -DPUBLIC_DATA_DIRECTORY_VALUE='\"$(DATA_DIRECTORY)\"'" \
	  >> src/Makefile.local
	echo "override CPPFLAGS += -DMANUAL_DIRECTORY_VALUE='\"$(HELP_DIRECTORY)/manual\"'" \
	  >> src/Makefile.local
	$(MAKE) -C src FreeDoko
	strip src/FreeDoko
	mv src/Makefile.local.bak src/Makefile.local
#	Copying the program
	echo "Copying the program"
	mkdir -p $(DESTDIR)$(BIN_DIRECTORY)
	cp src/FreeDoko $(DESTDIR)$(BIN_DIRECTORY)
	chgrp games $(DESTDIR)$(BIN_DIRECTORY)/FreeDoko
	chmod 750 $(DESTDIR)$(BIN_DIRECTORY)/FreeDoko
	cd $(DESTDIR)$(BIN_DIRECTORY) && ln -s FreeDoko freedoko
#	Copying the program files
	echo "Copying the program files"
	mkdir -p $(DESTDIR)$(DATA_DIRECTORY)
	for d in translations rules ai cardsets backgrounds; do \
	  cp -a release/FreeDoko_$(VERSION)/$$d $(DESTDIR)$(DATA_DIRECTORY)/; \
	done
	chgrp -R games $(DESTDIR)$(DATA_DIRECTORY)
	chmod -R o-rwx $(DESTDIR)$(DATA_DIRECTORY)
	chmod -R g+rX  $(DESTDIR)$(DATA_DIRECTORY)
#	Copying the documentation
#	SuSE does want the documentation in the directory
#	'/usr/share/doc/packages/freedoko' so adjust it here
	echo "Copying the documentation"
	mkdir -p $(DESTDIR)$(HELP_DIRECTORY)
	if test `basename $(HELP_DIRECTORY)` = "freedoko"; then \
	  cd $(DESTDIR)$(HELP_DIRECTORY)/.. && ln -s freedoko FreeDoko; \
	fi
	cp -a release/FreeDoko_$(VERSION)/doc/* release/FreeDoko_$(VERSION)/AUTHORS release/FreeDoko_$(VERSION)/COPYING release/FreeDoko_$(VERSION)/ChangeLog $(DESTDIR)$(HELP_DIRECTORY)/
	chgrp -R games $(DESTDIR)$(HELP_DIRECTORY)
	chmod -R o-rwx $(DESTDIR)$(HELP_DIRECTORY)
	chmod -R g+rX  $(DESTDIR)$(HELP_DIRECTORY)
	cd $(DESTDIR)$(DATA_DIRECTORY) && ln -s $(DESTDIR)$(HELP_DIRECTORY)/ doc
#	update the manual page
	echo "update the manual page"
	cd debian; \
	  docbook-to-man freedoko.sgml > freedoko.6 \
	  || docbook2man freedoko.sgml > freedoko.6
	mkdir -p $(DESTDIR)$(MAN_DIRECTORY)
	cp debian/freedoko.6 $(DESTDIR)$(MAN_DIRECTORY)/
	cd $(DESTDIR)$(MAN_DIRECTORY)/ && ln -s freedoko.6 FreeDoko.6
#	copy the icon
	echo "copy the icon"
	mkdir -p $(DESTDIR)$(ICON_DIRECTORY)
	cp src/FreeDoko.png $(DESTDIR)$(ICON_DIRECTORY)/
endif

ifeq ($(OPERATING_SYSTEM), Linux)
.PHONY: packages
packages :
	$(MAKE) -C data/setup/debian packages
endif

ifeq ($(OPERATING_SYSTEM), Linux)
.PHONY: CD
CD :
	./data/bin/create_cd
endif

ifeq ($(OPERATING_SYSTEM), Linux)
.PHONY: zip_copy
zip_copy : tgz
	-mount /media/zip
	-$(RM) /media/zip/FreeDoko_*.dk.tgz
	@echo cp /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.tgz /media/zip/
	@cp /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.tgz /media/zip/
	@chmod a+wrX /media/zip/FreeDoko_$(VERSION)_*.dk.tgz

.PHONY: src.zip_copy
src.zip_copy : src.tgz
	-mount /media/zip
	-$(RM) /media/zip/FreeDoko_*.dk.src.tgz /media/zip/FreeDoko-Bugreports_*.dk.tgz
	@echo cp /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tgz /media/zip/
	@cp /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tgz /media/zip/
	@chmod a+wrX /media/zip/FreeDoko_$(VERSION)_*.dk.src.tgz
	tar czf /media/zip/FreeDoko-Bugreports_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.tgz Bugreports

.PHONY: usb_copy
usb_copy :
	$(MAKE) clean
	-mount /media/usbstick
	tar czf /media/usbstick/FreeDoko.tgz -C ../ FreeDoko

.PHONY: src.usb_copy
src.usb_copy : src.tbz
	-mount /media/usbstick
	-$(RM) /media/usbstick/FreeDoko_*.dk.src.tbz /media/usbstick/FreeDoko-Bugreports_*.dk.tbz
	@echo cp /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tbz /media/usbstick/
	@cp /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tbz /media/usbstick/
	@chmod a+wrX /media/usbstick/FreeDoko_$(VERSION)_*.dk.src.tbz
	tar cjf /media/usbstick/FreeDoko-Bugreports_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.tbz Bugreports

.PHONY: src.floppy_copy
src.floppy_copy : src.tgz
	-mount /media/floppy
	-$(RM) /media/floppy/FreeDoko_*.dk.src.tgz /media/floppy/FreeDoko-Bugreports_*.dk.tgz
	@echo cp /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tgz /media/floppy/
	@cp /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tgz /media/floppy/
	@chmod a+wrX /media/floppy/FreeDoko_$(VERSION)_*.dk.src.tgz
	tar czf /media/floppy/FreeDoko-Bugreports_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.tgz Bugreports

.PHONY: Windows_copy
Windows_copy : clean
	-$(RM) -r /mnt/Daten/FreeDoko.bak
	-mv /mnt/Daten/FreeDoko /mnt/Daten/FreeDoko.bak
	-tar chC .. \
	     --exclude .svn \
	     --exclude FreeDoko/homepage/download \
	     FreeDoko \
	   | tar xC /mnt/Daten/

.PHONY: Windows_update
Windows_update :
	@for f in $$(find src/  -name "*.cpp" -o -name "*.h"); do \
	  if ! diff -bB $$f /mnt/Daten/FreeDoko/$$f >/dev/null; then \
	    echo "copying $$f"; \
	    cp $$f /mnt/Daten/FreeDoko/$$f; \
	  fi; \
	done

.PHONY: backup
backup : tgz

.PHONY: tgz
tgz : clean chmod
	@echo tar czf  /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.tgz FreeDoko
	@cd -P ..;\
	mkdir -p /Sicherung/FreeDoko/$(VERSION);\
	tar czf /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.tgz \
		--exclude "FreeDoko/src/Makefile.local" \
		FreeDoko
	@chmod a+r-w /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.tgz

.PHONY: src.tgz
src.tgz : clean chmod
	@echo tar czf /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tgz src ChangeLog Makefile*
	@cd -P ..;\
	mkdir -p /Sicherung/FreeDoko/$(VERSION); \
	tar czf /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tgz \
	     --exclude 'FreeDoko/src/Makefile.local' \
	     --exclude '.svn' \
	     FreeDoko/Makefile* \
	     FreeDoko/src/ \
	     FreeDoko/ChangeLog
	@chmod a+r-w /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tgz

.PHONY: src.tbz
src.tbz : clean chmod
	@echo tar cjf /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tbz src ChangeLog Makefile*
	@cd -P ..;\
	mkdir -p /Sicherung/FreeDoko/$(VERSION); \
	tar cjf /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tbz \
	     --exclude 'FreeDoko/src/Makefile.local' \
	     --exclude '.svn' \
		FreeDoko/Makefile* \
		FreeDoko/src/ \
		FreeDoko/ChangeLog
	@chmod a+r-w /Sicherung/FreeDoko/$(VERSION)/FreeDoko_$(VERSION)_`date +%Y-%m-%d_%0k`.dk.src.tbz

.PHONY: flip
flip :
	flip -mb AUTHORS COPYING ChangeLog README* Version \
	 || unix2dos AUTHORS COPYING ChangeLog README* Version
	$(MAKE) -C src/ flip
endif
