########## Variablendefinitionen ###########

# Revision-Variablen
# fuer Eigen-Entwickler: setze die folgenden Variablen per Hand, falls du nicht das
# 			 allgemeine Subversion-Repository des Projekts verwendest
REVISIONS_NR := $(shell svn -R info| grep ^Revision| cut -f2 -d " " | sort | tail -1)
REVISIONS_DATUM = $(shell svn log -r $(REVISIONS_NR) -q | grep -v "^---" | cut -d "|" -f 3)
REPOSITORY_URL = https://svn.systemausfall.org/svn/cryptocd/trunk
REVISIONS_SUFFIX = _r$(REVISIONS_NR)

# Verzeichnisse
ROOT_DIR := $(shell pwd)

# hierhin sollten lokale Verzeichnisse verlinkt werden
EXT_DIR = $(ROOT_DIR)/extern
EXT_DIR_PROGS = $(EXT_DIR)/programme
EXT_DIR_CHAOSRADIO = $(EXT_DIR)/chaosradio

# Ablage der erstellten zip/iso-Dateien
EXPORT_DIR = $(ROOT_DIR)/export
# so beginnt das export-Verzeichnis
EXPORT_PREFIX := cryptocd
# wird an das export-Verzeichnis angehaengt - nur fuer "release" und "release_all" wichtig
EXPORT_FILE_SUFFIX := undefiniert
EXPORT_FILE = $(EXPORT_DIR)/$(EXPORT_PREFIX)$(REVISIONS_SUFFIX)$(EXPORT_FILE_SUFFIX)

# Zwischenlagerung
TMP_ROOT = $(ROOT_DIR)/tmp
CCD_BUILD_DIR = $(TMP_ROOT)/$(EXPORT_PREFIX)$(REVISIONS_SUFFIX)

# Verzeichnisse, die vorhanden sein muessen
ERROR_DIRS = $(TMP_ROOT) $(EXT_DIR) $(EXPORT_DIR) $(EXT_DIR_PROGS)
# Verzeichnisse, die vorhanden sein sollten
WARNING_DIRS = $(EXT_DIR_CHAOSRADIO)

# Aktionen
ERZEUGE_TAR = tar cjhf $(EXPORT_FILE).tar.bz2 -C $(dir $(CCD_BUILD_DIR)) $(notdir $(CCD_BUILD_DIR))
ERZEUGE_ZIP = cd $(dir $(CCD_BUILD_DIR)); zip -9qr $(EXPORT_FILE).zip $(notdir $(CCD_BUILD_DIR))
ERZEUGE_ISO = mkisofs $(ISO_OPTS) -o $(EXPORT_FILE).iso $(CCD_BUILD_DIR) 2>&1 | $(EINRUECKEN)

# Sonstiges
# Optionen fuer mkisofs
ISO_OPTS = -iso-level 3 -J -joliet-long -relaxed-filenames -f -r -V $(EXPORT_PREFIX)$(REVISIONS_SUFFIX)
# Ausgabe-Filter zum Einruecken
EINRUECKEN = sed 's/^/\t/'
# Voreinstellung - wird nur fuer "make website" ueberschrieben
LINE_STATUS = offline

####### Variablen, die vererbt werden sollen ###########
export CCD_BUILD_DIR

########### Allgemeine targets ###########

.PHONY : clean all documents check help website release release_big source export cd-template setze_releaseinfos verlinke_programme verlinke_chaosradio

# nur ein Alias - damit doku das default-target ist (das erste im Makefile)
all: doku

help:
	@echo "allgemeine Targets:"
	@echo "	help			- diese Uebersicht"
	@echo "	doku			- das Doku-Verzeichnis erneuern"
	@echo "	clean			- unnoetige Dateien loeschen"
	@echo "	check			- Pruefung der Links"
	@echo
	@echo "Export-Targets:"
	@echo "	source			- die lyx-Quellen und Bilder"
	@echo "	release			- alles ausser Chaosradio"
	@echo "	release_big		- mit Chaosradio-Dateien"
	@echo "	website			- fuer die Webseite: mit Programmen, ohne Chaosradio"
	@echo "	export			- erstellt alle Export-Formen"

clean:
	@echo $(ICH)
	-make -C documents clean
	-rm -r $(TMP_ROOT)/* 2>/dev/null

check: 
	make -C doku
	linkchecker -r 3 --intern='!^mailto:' --extern-strict-all start.html

# pruefe, ob alle notwendigen/empfohlenen Verzeichnisse existieren
verzeichnisstruktur: $(ERROR_DIRS) $(WARNING_DIRS) 

$(ERROR_DIRS):
	@if [ ! -e "$@" ] ; \
		then	echo -e "directory ($@) does not exist - it is required\n\tyou could symlink it or create this directory\n" ; \
			false ; \
	  fi

$(WARNING_DIRS):
	@[ ! -e "$@" ] && echo -e "directory ($@) does not exist - it is recommended\n\tyou could create a symlink or make this directory\n"


######## die Werkzeuge #########

cd-template:	verzeichnisstruktur
	@rm -rf $(CCD_BUILD_DIR)
	@cp --remove-destination -r cd-template $(CCD_BUILD_DIR)
	@rm -rf `find $(CCD_BUILD_DIR) -type d -name ".svn"`


doku:	cd-template
	@echo "Aktualisiere das Doku-Verzeichnis ..."
#	aufgrund einer Seltsamkeit im doku-Makefile, muss es zweimal aufgerufen werden,
#	wenn der online- zum offline-Status geaendert wird (und umgekehrt)
#	die Dateien werden erst beim zweiten Durchlauf gebaut
	@make -C documents $(LINE_STATUS)
	@make -C documents $(LINE_STATUS)
#	Kopieren der Dateien ins das Abbild-Verzeichnis
	@make -C documents install


setze_releaseinfos:	cd-template
#	ein nutzloses Relikt, oder nur der falsche Dateiname?
#	@echo "Passe version.txt an ..."
#	sed -i 's/REVISIONS_PLATZHALTER/$(AKTUELLE_REVISION)/g; s/DATUMS_PLATZHALTER/$(REVISIONS_DATUM)/g' $(CCD_BUILD_DIR)/version.txt
	

verlinke_programme:	cd-template
	@echo "Erzeuge Links zu den Programmen ..."
	@ln -s "$(EXT_DIR_PROGS)" "$(CCD_BUILD_DIR)/programme"
	

verlinke_chaosradio:	cd-template
	@echo "Erzeuge Links zu den ChaosRadio-Dateien ..."
	@if [ -e "$(EXT_DIR_CHAOSRADIO)" ]; \
		then	ln -s "$(EXT_DIR_CHAOSRADIO)" "$(CCD_BUILD_DIR)/ausLese/chaosradio" ; \
		else	echo "keine ChaosRadio-Dateien gefunden ($(EXT_DIR_CHAOSRADIO))" >&2 ; \
			false ;\
	  fi

####### die Ausgabe-Formate ###########

website: LINE_STATUS=online
website: EXPORT_FILE_SUFFIX := _website
website: cd-template verlinke_programme
	@echo "Gruppen-Schreibrecht setzen (fuer eduforge) ..."
	@chmod -R g+rw $(TMP_ROOT)

	@echo "Erzeuge Archiv der online-Dateien ..."
	@$(ERZEUGE_TAR)
	

source: EXPORT_FILE_SUFFIX := _src
source: CCD_BUILD_DIR := $(CCD_BUILD_DIR)$(EXPORT_FILE_SUFFIX)
source:	
	@if [ ! -e "$(CCD_BUILD_DIR)" ] ;\
		then	echo "Exportiere die gewaehlte svn-Revision ($(REVISIONS_NR)) ..." ;\
			svn export -r $(REVISIONS_NR) "$(REPOSITORY_URL)" "$(CCD_BUILD_DIR)" | $(EINRUECKEN) ;\
		else	echo "Verwende existierende lokale svn-Kopie" ;\
	  fi
	@echo "Erzeuge source-Archiv ..."
	@$(ERZEUGE_TAR)


release: EXPORT_FILE_SUFFIX := _small

release_big: EXPORT_FILE_SUFFIX := _all
release_big: verlinke_chaosradio

release release_big: doku verlinke_programme setze_releaseinfos
	@echo "Erzeuge zip-Archiv ..."
	@$(ERZEUGE_ZIP)
	@echo "Erzeuge iso-Image ..."
	@$(ERZEUGE_ISO)


export-all:
	@echo "Erstelle die Web-Seite ..."
	@make website

	@echo "Erstelle kleine Release-Pakete ..."
	@make release

	@echo "Erstelle grosse Release-Pakete ..."
	@make release_all

	@echo "Erstelle das Quell-Paket ... "
	@make source