#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system.
DH_VERBOSE = 1
DEBFLAVOR=$(shell lsb_release -si)
DEBRELEAS=$(shell lsb_release -sr | cut -d . -f 1)

BUILDDIR=obj-$(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
# system wide golang directory always present
GOROOT := /usr/lib/go
# GOPKG is the upstream path which you would normally “go get”.
GOPKG := github.com/gogits/gogs
# GOPATH is Go structure working directory to which the source tree it compiled and install to filesystem
GOPATH := $(CURDIR)/$(BUILDDIR)/
# start directory when working dir changes
ORIGROOT := $(CURDIR)

export GOPATH=$(CURDIR)/$(BUILDDIR)/

%:
	dh $@ 

override_dh_auto_clean:
	dh_auto_clean -- 
	rm -rf $(CURDIR)/$(BUILDDIR)/
	rm -rf  debian/gogs.service

override_dh_auto_configure:
# emulated all home wide structure, so we can go-install packages not yet in debian without trash them system
	mkdir -p $(GOPATH)/go
# environment go emulated, debian uses directly in /usr/lib and only symlink in src some things
	cd $(GOPATH)/go && for VAR in $(GOROOT)/*; do ln -s $$VAR;done;ls
	cd $(GOPATH)/go && rm -f pkg && mkdir pkg
	cd $(GOPATH)/go/pkg && for VAR in $(GOROOT)/pkg/*; do ln -s $$VAR;done;ls
	export GOROOT=$(GOPATH)/go
# go package environment to emulate and build, dh-golang does the same
	mkdir -p $(GOPATH)/src/$(GOPKG)
# copy environment sources (dh_golang makes same) use rsync its more easyle rather thant copy with filtering
	cd $(ORIGROOT) && rsync -av --exclude='$(BUILDDIR)' --exclude='debian' ./ $(GOPATH)/src/$(GOPKG)
	cp -ar $(ORIGROOT)/scripts/init/debian $(GOPATH)/src/$(GOPKG)/scripts/init/
	rm -f debian/*.debhelper.log
# now patchig provided init to adapt to debian systemwide structure
	sed -i -r 's#WORKINGDIR=.*#WORKINGDIR=/usr/lib/gogs#g' $(GOPATH)/src/$(GOPKG)/scripts/init/debian/gogs
	sed -i -r 's#USER=.*#USER=gogs#g' $(GOPATH)/src/$(GOPKG)/scripts/init/debian/gogs
	sed -i -r 's#DAEMON_ARGS=.*#DAEMON_ARGS=" web --config /etc/gogs/app.ini"#g' $(GOPATH)/src/$(GOPKG)/scripts/init/debian/gogs
	sed -i -r 's#WorkingDirectory=.*#WorkingDirectory=/usr/lib/gogs#g' $(GOPATH)/src/$(GOPKG)/scripts/systemd/gogs.service
	sed -i -r 's#User=.*#User=gogs#g' $(GOPATH)/src/$(GOPKG)/scripts/systemd/gogs.service
	sed -i -r 's#Group=.*#Gropu=gogs#g' $(GOPATH)/src/$(GOPKG)/scripts/systemd/gogs.service
	sed -i -r 's#USER=git HOME=.*#USER=gogs HOME=/var/lib/gogs#g' $(GOPATH)/src/$(GOPKG)/scripts/systemd/gogs.service
	sed -i -r 's#ExecStart=.*#ExecStart=/usr/lib/gogs/gogs web --config /etc/gogs/app.ini#g' $(GOPATH)/src/$(GOPKG)/scripts/systemd/gogs.service
# now patchig provided app.ini to adapt to debian systemwide structure
	sed -i -r 's#APP_NAME = .*#APP_NAME = Gogs VenenuX#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#RUN_USER = .*#RUN_USER = gogs#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#RUN_MODE = .*#RUN_MODE = prod#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#UNIX_SOCKET_PERMISSION =.*#UNIX_SOCKET_PERMISSION = 640#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#OFFLINE_MODE =.*#OFFLINE_MODE = true#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#CERT_FILE =.*/https/.*#CERT_FILE = /var/lib/gogs/certs/certssh.pem#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#KEY_FILE =.*/https/.*#KEY_FILE = /var/lib/gogs/certs/keyssh.pem#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#APP_DATA_PATH =.*#APP_DATA_PATH = /var/lib/gogs/data#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#\bROOT =.*#ROOT = /var/lib/git/gogsrepos#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#SCRIPT_TYPE =.*#SCRIPT_TYPE = dash#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#MIRROR_QUEUE_LENGTH =.*#MIRROR_QUEUE_LENGTH = 2000#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#PULL_REQUEST_QUEUE_LENGTH =.*#PULL_REQUEST_QUEUE_LENGTH = 2000#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#PREFERRED_LICENSES =.*#PREFERRED_LICENSES = GNU General Public License v3.0#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#PREVIEWABLE_FILE_MODES =.*#PREVIEWABLE_FILE_MODES = markdown#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#TEMP_PATH =.*#TEMP_PATH = /var/lib/gogs/data/tmp/uploads#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#FILE_MAX_SIZE =.*#FILE_MAX_SIZE = 24#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#MAX_FILES = 3#MAX_FILES = 1#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#PATH = .*data/attachments#PATH = /var/lib/gogs/data/attachments#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#PATH = .*data/gogs.db#PATH = /var/lib/gogs/data/gogs.db#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#MAX_FILES = 10#MAX_FILES = 2#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#MAX_SIZE =.*#MAX_SIZE = 24#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#DB_TYPE =.*#DB_TYPE = sqlite3#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#HOST = 127.*#;HOST = gogsdbhostip:dbport#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#NAME = gogs#;NAME = gogsdbname#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#USER = root#;USER = gogsdbuser#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
#	sed -i -r 's#SECRET_KEY =.*#SECRET_KEY = #g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#LOGIN_REMEMBER_DAYS =.*#LOGIN_REMEMBER_DAYS = 1#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#REGISTER_EMAIL_CONFIRM = .*#REGISTER_EMAIL_CONFIRM = true#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#ENABLE_NOTIFY_MAIL =.*#ENABLE_NOTIFY_MAIL = true#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#ENABLE_CAPTCHA =.*#ENABLE_CAPTCHA = true#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
# this enables smarty pants.. sorry
	sed -i -r 's#ENABLED =.*#ENABLED = true#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r -e '0,/\bHOST =\b/ s/\bHOST =/HOST = 127.0.0.1:25/' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#DISABLE_HELO =.*#DISABLE_HELO = true#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#SKIP_VERIFY =.*#SKIP_VERIFY = true#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#CERT_FILE =.*/mailer/.*#CERT_FILE = /var/lib/gogs/certs/certmail.pem#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#KEY_FILE =.*/mailer/.*#KEY_FILE = /var/lib/gogs/certs/keymail.pem#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#PROVIDER =.*#PROVIDER = file#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#PROVIDER_CONFIG =.*#PROVIDER_CONFIG = /var/lib/gogs/data/sessions#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#PATH = .*data/avatars#PATH = /var/lib/gogs/data/avatars#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#MAX_SIZE = 4.*#MAX_SIZE = 12#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#\bROOT_PATH =.*#ROOT_PATH = /var/log/gogs#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#\bMODE =.*#MODE = file#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r -e '0,/LEVEL =.*/ s/LEVEL =.*/LEVEL = Trace/'  $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#MAX_SIZE = 100#MAX_SIZE = 48#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#SHOW_FOOTER_BRANDING =.*#SHOW_FOOTER_BRANDING = true#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
# security issues not allowed by default
	sed -i -r 's#ENABLE_LOCAL_PATH_MIGRATION = .*#ENABLE_LOCAL_PATH_MIGRATION = false#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
	sed -i -r 's#ENABLE_RAW_FILE_RENDER_MODE = .*#ENABLE_RAW_FILE_RENDER_MODE = false#g' $(GOPATH)/src/$(GOPKG)/conf/app.ini
# patchind default location for custom files
	cd $(GOPATH)/src/$(GOPKG)/cmd && for VAR in $(GOPATH)/src/$(GOPKG)/cmd/*.go; do sed -i -r 's#custom/conf/app.ini#/var/lib/gogs/custom/conf/app.ini#g' $$VAR;done
	cd $(GOPATH)/src/$(GOPKG)/vendor/github.com/go-macaron/i18n && for VAR in $(GOPATH)/src/$(GOPKG)/vendor/github.com/go-macaron/i18n/*.go; do sed -i -r 's#custom/#/var/lib/gogs/custom/#g' $$VAR;done

override_dh_auto_build:
# TODO usar archivo externo que haga este trabajo no incluir todo esto aqui
	cd $(GOPATH)/src/$(GOPKG) && go fix
	cd $(GOPATH)/src/$(GOPKG) && go build -x -ldflags="-s -w" -tags='sqlite pam cert'

override_dh_auto_test:
	

override_dh_auto_install:
ifneq ($(DEBFLAVOR),Devuan)
	if [ ${DEBRELEAS} -gt 7 ] ; then \
	install $(GOPATH)/src/$(GOPKG)/scripts/systemd/gogs.service  debian/gogs.service; \
	fi
endif

override_dh_install:
# binary files in lib
	dh_install $(BUILDDIR)/src/$(GOPKG)/gogs  usr/lib/gogs/
# indep files in share
	dh_install $(BUILDDIR)/src/$(GOPKG)/conf  usr/share/gogs/
	dh_install $(BUILDDIR)/src/$(GOPKG)/public  usr/share/gogs/
	dh_install $(BUILDDIR)/src/$(GOPKG)/templates  usr/share/gogs/
# default custom files template in /var/lib, sources where patched for search here if /etc/gogs/app.ini does not
	dh_install $(BUILDDIR)/src/$(GOPKG)/conf/app.ini  var/lib/gogs/custom/conf/
	rm -f debian/gogs/usr/share/gogs/public/img/favicon.png
	dh_install debian/media/favicon.png usr/share/gogs/public/img/
# a script that permits gogs acts outside working dir installation>/gogs
	mkdir -p debian/gogs/usr/bin
	echo "#!/bin/bash" > debian/gogs/usr/bin/gogs
	echo "exec /usr/lib/gogs/gogs \$$@" >> debian/gogs/usr/bin/gogs

override_dh_installman:
	dh_installman debian/gogs.1

override_dh_link:
	dh_link usr/share/gogs/conf usr/lib/gogs/conf
	dh_link usr/share/gogs/public usr/lib/gogs/public
	dh_link usr/share/gogs/templates usr/lib/gogs/templates
	dh_link var/lib/gogs/custom usr/lib/gogs/custom

