# svn basis Funktionen # svn Zugang #SVN_URL = svn+ssh://claus@192.168.50.10/var/svn/repos #SVN_URL = http://minidvblinux.de/svn #SVN_URL = file:///var/svn/repos svn_old_url ?= http://minidvblinux.de/svn ifdef SVN_URL svn_url := $(SVN_URL) else svn_url := $(shell LC_ALL=C svn info | grep "Repository Root" | sed "s/.*: \(.*\)\/[^\/]*/\1/") endif ifdef SVN_BRANCH svn_path := branches/$(SVN_BRANCH) else svn_path := $(shell svn info | grep "^URL:" | sed "s/.*\/MLD\///") endif svn_branches ?= natty oneiric precise raring color_red := \\033[1;31m color_green := \\033[1;32m color_cyan := \\033[1;36m color_light_gray := \\033[0;33m color_reset := \\033[0;39m # svn reposetory erstellen create: if [ -z "$(svn_url)" ]; then \ echo "Sie müssen die SVN URL configurieren (z.B.: SVN_URL = file:///var/svn/repos)"; \ false; \ fi if [ -n "$(filter file://%,$(svn_url))" ]; then \ svnadmin create $(patsubst file://%,%,$(svn_url))/$(name); \ chmod -R g+w $(patsubst file://%,%,$(svn_url))/$(name); \ elif [ -n "$(filter http://%,$(svn_url))" ]; then \ echo "Create $(name) addon on the svn server"; \ echo -n " Enter your svn username: "; read user; \ echo -n " Enter your svn password: "; read -s pass; \ answer="$$(wget -q --http-user=$$user --http-password=$$pass --post-data "create=$(name)" "http://www.minidvblinux.de/svn-3" -O - || echo "wrong username or password!")"; \ echo -e "\n $$answer"; \ test "$$answer" == "Create '$(name)'"; \ else \ echo "Es können bisher nur im localen und im http Reposetory neue Module angelegt werden"; \ false; \ fi if [ "$(name)" != "MLD" ]; then \ svn up modules_list; \ grep -qe "^$(name)\$$" modules_list || echo $(name) >> modules_list; \ svn ci modules_list -m "add modul $(name)"; \ fi # neues Modul zum svn hinzufuegen import: if [ ! -d "$(name)" ]; then \ echo "unbekanntes Verzeichnis: $(name)"; \ false; \ fi if ! svn ls $(svn_url)/$(name) >/dev/null 2>&1; then \ $(MAKE) create name=$(name); \ fi $(MAKE) -C $(name) clean; true mv $(name) $(name).bak mkdir -p $(name)/trunk $(name)/branches $(name)/tags cp -a $(name).bak/* $(name)/trunk svn import $(name) $(svn_url)/$(name) -m "Initial import" rm -r $(name) $(MAKE) checkout name=$(name) #checkout: checkout name=ISO # einen brunch eines Modules erzeugen create_branch: if [ -z "$(name)" ]; then \ echo -e "Parameter '$(color_cyan)name=ADDON_NAME$(color_reset)' nicht angegeben"; \ false; \ fi for path in trunk $(addprefix branches/,$(svn_branches)) $(svn_path); do \ svn ls $(svn_url)/$(name)/$$path >/dev/null 2>&1 && svn_path=$$path; \ done; \ if [ -n "$$svn_path" ]; then \ svn copy $(svn_url)/$(name)/$$svn_path $(svn_url)/$(name)/$(svn_path) -m "Create Branch $(SVN_BRANCH)"; \ mv $(name) $(name).bak; \ svn co $(svn_url)/$(name)/$(svn_path) $(name); \ else \ echo -e "Module '$(color_cyan)$(name)$(color_reset)' nicht im svn gefunden"; \ fi; \ create_tag: if [ -z "$(name)" ]; then \ echo -e "Parameter '$(color_cyan)name=ADDON_NAME$(color_reset)' nicht angegeben"; \ false; \ fi if [ -z "$(tag)" ]; then \ echo -e "Parameter '$(color_cyan)tag=TAG_NAME$(color_reset)' nicht angegeben"; \ false; \ fi for path in trunk $(addprefix branches/,$(svn_branches)) $(svn_path); do \ svn ls $(svn_url)/$(name)/$$path >/dev/null 2>&1 && svn_path=$$path; \ done; \ if [ -n "$$svn_path" ]; then \ svn copy $(svn_url)/$(name)/$$svn_path $(svn_url)/$(name)/tags/$(tag) -m "Create Tag $(tag)"; \ else \ echo -e "Module '$(color_cyan)$(name)$(color_reset)' nicht im svn gefunden"; \ fi; \ # ein bestimmtes Modul auschecken checkout: if [ -e "$(name)" ]; then \ if [ -n "$$(cd $(name); svn info | grep "^URL: .*/$(svn_path)$$")" ] || ! svn ls $(svn_url)/$(name)/$(svn_path) >/dev/null 2>&1; then \ $(MAKE) update name=$(name) force=$(force); \ else \ echo "Swich branch of '$(name)'"; \ mv $(name) $(name).bak; \ svn co $(svn_url)/$(name)/$(svn_path) $(name); \ fi; \ else \ for path in trunk $(addprefix branches/,$(svn_branches)) $(svn_path); do \ svn ls $(svn_url)/$(name)/$$path >/dev/null 2>&1 && svn_path=$$path; \ done; \ if [ -n "$$svn_path" ]; then \ svn co $(svn_url)/$(name)/$$svn_path $(name); \ else \ echo -e "Module '$(color_cyan)$(name)$(color_reset)' nicht im svn gefunden"; \ fi; \ fi # alle Module auschecken checkout_all: svn up while read modul; do \ echo -en "$$modul:\n "; \ $(MAKE) checkout name=$$modul; \ done < modules_list # ein Modul aktualesieren update: export LC_MESSAGES=C; \ $(shell test -n "$(force)" && echo "yes 'tc'" || echo "false") | svn up $(name) | tee /dev/tty | grep -q "Updated to revision" && (echo -e " clean up addon$(color_light_gray)"; $(MAKE) -C $(name) clean clean_depends); echo -en "$(color_reset)" # alle Module auf den neusten Stand bringen update_all: svn up while read modul; do \ if [ -e "$$modul" ]; then \ echo -en "$$modul:\n "; \ $(MAKE) update name=$$modul; \ fi; \ done < modules_list # ein Modul exportieren, also ohne svn ordner auschecken export: test -n "$(name)" for path in trunk $(addprefix branches/,$(svn_branches)) $(svn_path); do \ svn ls $(svn_url)/$(name)/$$path >/dev/null 2>&1 && svn_path=$$path; \ done; \ if [ -n "$$svn_path" ]; then \ mkdir -p !_export; \ rm -rf !_export/$(name); \ svn export $(svn_url)/$(name)/$$svn_path !_export/$(name); \ else \ echo -e "Module '$(color_cyan)$(name)$(color_reset)' nicht im svn gefunden"; \ fi; \ # alle Module exportieren export_all: $(MAKE) export name=MLD while read modul; do \ echo "$$modul:"; \ $(MAKE) export name=$$modul; \ done < modules_list checkout_old: test -n "$(name)" || (echo "Please enter a module name (e.g. name=MODUL_NAME)"; false;) rm -rf $(name) test ! -e "$(name)" || (echo "Module '$(name)' existiert bereits"; false;) svn export $(svn_old_url)/$(name)/trunk $(name) || (echo "Module '$(name)' nicht im svn gefunden"; false;) grep -l -r -I "/rc.d/" $(name) | while read file; do \ sed "s/\/rc.d\//\/init.d\//" -i $$file; \ done path=$(name)/template/etc/init.d; \ file=$$path/$(name); \ if [ -e $$file ]; then \ { \ sed '/*)/,+10d' $$file; \ echo -e "\tinit)"; \ test -e $$path/boot.d/S??$(name) && echo -e "\t\tstart=1"; \ test -e $$path/boot.d/K??$(name) && echo -e "\t\tstop=1"; \ test -e $$path/boot.d/R??$(name) && echo -e "\t\tresume=1"; \ test -e $$path/boot.d/H??$(name) && echo -e "\t\thalt=1"; \ echo -e "\t\t;;"; \ actions="$$(grep "\t\S\+)" $$file | sed "s/\s\(.*\)).*/\1 | /")"; \ echo -e "\t*)\n\t\techo \"Usage \$$0 {$$(echo $${actions% | })}\" >&2\n\t\texit 1\nesac"; \ } >$$file.tmp; \ mv -f $$file.tmp $$file; \ sed '/. \/etc\/init.d\/rc.functions/,+0d' -i $$file; \ sed '/. \/etc\/rc.config/,+0d' -i $$file; \ sed 's/start)/start)\n\t\t. \/etc\/init.d\/rc.functions/' -i $$file; \ sed 's/stop)/stop)\n\t\t. \/etc\/init.d\/rc.functions/' -i $$file; \ awk 1 RS= ORS="\n\n" $$file > $$file.tmp; \ mv -f $$file.tmp $$file; \ chmod +x $$file; \ rm -rf $$path/boot.d; \ fi file=$(name)/INSTALL; \ if [ -e $$path ]; then \ sed '/*)/,+10d' -i $$file; \ echo -e "\t*)\n\t\techo \"Usage \$$0 {install | uninstall | delend}\" >&2\n\t\texit 1\nesac" >>$$file; \ sed '/. \/etc\/rc.config/,+0d' -i $$file; \ awk 1 RS= ORS="\n\n" $$file > $$file.tmp; \ mv -f $$file.tmp $$file; \ chmod +x $$file; \ fi file=$(name)/Makefile; \ if grep -q "include ../vdr/Makefile.plugin" $$file; then \ sed 's/all:\(.*\) $$(name).$$(suffix)/all:\1 $$(modul).$$(suffix)/' -i $$file; \ sed 's/$$(modul):\( template\)\? template\/usr\/lib\/vdr\/libvdr-$$(name).so.$$(VDRAPI)/$$(modul): $$(plugin)/' -i $$file; \ sed '/\t$$(MAKE) addon_copy/,+0d' -i $$file; \ sed 's/clean:\( _clean\)\?/clean: plugin_clean/' -i $$file; \ sed '/\trm -f template\/usr\/lib\/vdr\/libvdr-$$(name).so.*/,+0d' -i $$file; \ sed '/\t$$(MAKE) -C src\/$$(name) clean/,+0d' -i $$file; \ rm -f $(name)/template/usr/share/doc/$(name)/handling; \ rmdir --ignore-fail-on-non-empty -p $(name)/template/usr/lib/vdr 2>/dev/null; \ else \ sed 's/all:\(.*\) $$(name).$$(suffix)/all:\1 $$(modul).$$(suffix)/' -i $$file; \ sed 's/$$(modul):\( template\)\?\(.*\)\?/$$(modul):\2 $$(addon)/' -i $$file; \ sed '/\t$$(MAKE) addon_copy/,+0d' -i $$file; \ sed 's/clean:$$/clean: _clean/' -i $$file; \ sed '/bootstep := .*/,+0d' -i $$file; \ sed 's/versionoff/version_of/' -i $$file; \ fi; \ sed '/\trm -r\?f $$(name)/,+0d' -i $$file; \ sed '/\trm -r\?f $$(name).$$(suffix)/,+0d' -i $$file; \ rm -f $(name)/template/usr/share/doc/$(name)/history