# Contributor: Ɓukasz Jendrysik <scadu@yandex.com>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
setvar pkgname = 'git'
setvar pkgver = '2.14.2'
setvar pkgrel = '0'
setvar pkgdesc = ""A distributed version control system""
setvar url = ""https://www.git-scm.com/""
setvar arch = ""all""
setvar license = ""GPL2+""
setvar depends = ''
setvar replaces = ""git-perl""

# secfixes:
#   2.14.1:
#   - CVE-2017-1000117

# note that order matters
setvar subpackages = ""$pkgname-doc
	$pkgname-bash-completion:completion:noarch
	perl-$pkgname-svn:_perl_git_svn:noarch
	perl-$pkgname:_perl_git:noarch
	$pkgname-svn
	$pkgname-email
	$pkgname-fast-import:_fast_import
	$pkgname-cvs::noarch
	$pkgname-p4::noarch
	$pkgname-daemon
	$pkgname-gitweb
	$pkgname-subtree::noarch
	$pkgname-subtree-doc:subtree_doc:noarch
	$pkgname-perl:_git_perl:noarch
	$pkgname-gui::noarch
	$pkgname-gitk::noarch
	""
# we need tcl and tk to be built before git due to git-gui and gitk
setvar makedepends = ""zlib-dev libressl-dev curl-dev expat-dev perl-dev python2-dev
	pcre2-dev asciidoc xmlto perl-error tcl tk""
setvar source = ""https://www.kernel.org/pub/software/scm/git/git-$pkgver.tar.xz
	bb-tar.patch
	git-daemon.initd
	git-daemon.confd
	""

setvar _gitcoredir = "/usr/libexec/git-core"
setvar builddir = ""$srcdir"/$pkgname-$pkgver"

proc prepare {
	default_prepare
	cat >> config.mak <<< """
		NO_GETTEXT=YesPlease
		NO_SVN_TESTS=YesPlease
		NO_REGEX=YesPlease
		USE_LIBPCRE2=YesPlease
		NO_NSEC=YesPlease
		NO_SYS_POLL_H=1
		CFLAGS=$CFLAGS
"""
}

proc build {
	cd $builddir
	make -j1 prefix=/usr DESTDIR="$pkgdir" perl/perl.mak
	make prefix=/usr DESTDIR="$pkgdir"
}

proc package {
	cd $builddir
	make -j1 prefix=/usr \
		DESTDIR="$pkgdir" \
		INSTALLDIRS=vendor \
		install
	mkdir -p "$pkgdir"/var/git
	install -Dm755 "$srcdir"/git-daemon.initd \
		"$pkgdir"/etc/init.d/git-daemon
	install -Dm644 "$srcdir"/git-daemon.confd \
		"$pkgdir"/etc/conf.d/git-daemon

	make prefix=/usr DESTDIR="$pkgdir" install-man
}

proc _perl_git_svn {
	setvar pkgdesc = ""Perl interface to Git::SVN""
	setvar depends = ""git=$pkgver-r$pkgrel""
	setvar replaces = ""git-perl""
	eval local $(perl -V:vendorlib)
	mkdir -p "$subpkgdir"/$vendorlib/Git
	mv "$pkgdir"/$vendorlib/Git/SVN* "$subpkgdir"/$vendorlib/Git/
}

proc _perl_git {
	setvar pkgdesc = ""Perl interface to Git""
	setvar depends = ""git=$pkgver-r$pkgrel perl-error""
	setvar replaces = ""git-perl""
	eval local $(perl -V:vendorlib)
	eval local $(perl -V:vendorarch)
	for i in $vendorlib $vendorarch {
		mkdir -p "$subpkgdir"/${i%/*}
		mv "$pkgdir"/$i "$subpkgdir"/$i
	}
}

proc email {
	setvar depends = ""perl perl-git=$pkgver-r$pkgrel perl-net-smtp-ssl
		perl-authen-sasl""
	setvar pkgdesc = ""Git tools for sending email""
	setvar replaces = ""git""
	mkdir -p "$subpkgdir"/$_gitcoredir
	mv "$pkgdir"/$_gitcoredir/*email* "$pkgdir"/$_gitcoredir/*imap* \
		"$subpkgdir"/$_gitcoredir
}

proc svn {
	setvar depends = ""perl perl-git-svn=$pkgver-r$pkgrel perl-subversion
		perl-term-readkey""
	setvar pkgdesc = ""Subversion support for git""
	setvar replaces = """"

	mkdir -p "$subpkgdir"/$_gitcoredir
	mv "$pkgdir"/$_gitcoredir/git-svn \
		"$pkgdir"$_gitcoredir/git-remote-testsvn \
		"$subpkgdir"/$_gitcoredir/
}

proc cvs {
	setvar pkgdesc = ""Git tools for importing CVS repositories""
	setvar depends = ""perl perl-git=$pkgver-r$pkgrel cvs perl-dbd-sqlite""
	setvar replaces = ""git-perl""
	mkdir -p "$subpkgdir"/usr/bin "$subpkgdir"/$_gitcoredir
	mv "$pkgdir"/usr/bin/git-cvs* "$subpkgdir"/usr/bin/
	mv "$pkgdir"/$_gitcoredir/*cvs* "$subpkgdir"/$_gitcoredir \

}

proc _fast_import {
	setvar pkgdesc = ""Git backend for fast Git data importers""
	setvar depends = ""git=$pkgver-r$pkgrel""
	mkdir -p "$subpkgdir"/$_gitcoredir
	mv "$pkgdir"/$_gitcoredir/git-fast-import "$subpkgdir"/$_gitcoredir/
}

proc p4 {
	setvar pkgdesc = ""Git tools for working with Perforce depots""
	setvar depends = ""git=$pkgver-r$pkgrel git-fast-import=$pkgver-r$pkgrel""
	setvar replaces = ""git""
	mkdir -p "$subpkgdir"/$_gitcoredir/mergetools
	mv "$pkgdir"/$_gitcoredir/*p4* "$subpkgdir"/$_gitcoredir/
	mv "$pkgdir"/$_gitcoredir/mergetools/*p4* \
		"$subpkgdir"/$_gitcoredir/mergetools/
}

proc daemon {
	setvar pkgdesc = ""Git protocol daemon""
	setvar depends = ""git=$pkgver-r$pkgrel""
	setvar replaces = ""git""
	mkdir -p "$subpkgdir"/$_gitcoredir
	mv "$pkgdir"/$_gitcoredir/git-daemon \
		"$pkgdir"/$_gitcoredir/git-http-backend \
		"$pkgdir"/$_gitcoredir/git-shell \
		"$subpkgdir"/$_gitcoredir \

	mv "$pkgdir"/etc "$subpkgdir"/
}

proc gitweb {
	setvar pkgdesc = ""Simple web interface to git repositories""
	setvar depends = ""git=$pkgver-r$pkgrel perl""
	setvar replaces = ""git""
	mkdir -p "$subpkgdir"/usr/share "$subpkgdir"$_gitcoredir
	mv "$pkgdir"/usr/share/gitweb "$subpkgdir"/usr/share/
	mv "$pkgdir"/$_gitcoredir/git-instaweb "$subpkgdir"$_gitcoredir
}

proc completion {
	setvar pkgdesc = ""Bash completion for $pkgname""
	setvar depends = """"
	setvar replaces = """"
	setvar install_if = ""$pkgname=$pkgver-r$pkgrel bash-completion""

	install -Dm644 "$builddir"/contrib/completion/git-completion.bash \
		"$subpkgdir"/usr/share/bash-completion/completions/git
}

proc subtree {
	setvar depends = ""git=$pkgver-r$pkgrel""
	setvar pkgdesc = ""Split git repository into subtrees""
	setvar replaces = """"

	cd "$builddir"/contrib/subtree
	make prefix=/usr DESTDIR="$pkgdir"
	make install prefix=/usr DESTDIR="$subpkgdir"
}

proc subtree_doc {
	setvar depends = """"
	setvar pkgdesc = ""Split git repository into subtrees (documentation)""
	setvar replaces = """"

	cd "$builddir"/contrib/subtree
	make install-man prefix=/usr DESTDIR="$subpkgdir"
	gzip -9 "$subpkgdir"/usr/share/man/man1/git-subtree.1
}

proc gui {
	setvar depends = ""git=$pkgver-r$pkgrel tcl tk""
	setvar pkgdesc = ""GUI interface for git""
	setvar replaces = """"

	mkdir -p "$subpkgdir"/usr/share "$subpkgdir"/usr/libexec/git-core
	mv "$pkgdir"/usr/share/git-gui "$subpkgdir"/usr/share/
	mv "$pkgdir"/usr/libexec/git-core/git-citool \
		"$pkgdir"/usr/libexec/git-core/git-gui \
		"$pkgdir"/usr/libexec/git-core/git-gui--askpass \
		"$subpkgdir"/usr/libexec/git-core/
}

proc gitk {
	setvar depends = ""git=$pkgver-r$pkgrel tcl tk""
	setvar pkgdesc = ""Gitk interface for git""
	setvar replaces = """"

	mkdir -p "$subpkgdir"/usr/share "$subpkgdir"/usr/bin
	mv "$pkgdir"/usr/share/gitk "$subpkgdir"/usr/share/
	mv "$pkgdir"/usr/bin/gitk "$subpkgdir"/usr/bin/
}

# catch-the-rest of stuff that needs perl
proc _git_perl {
	setvar depends = ""git=$pkgver-r$pkgrel perl-git=$pkgver-r$pkgrel perl""
	setvar pkgdesc = ""Additional Git commands that requires perl""
	setvar replaces = """"

	mkdir -p "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/perl* "$subpkgdir"/usr/lib/
	cd $pkgdir
	find -type f | xargs file --mime-type | grep perl | cut -d: -f1| while read f {
		mkdir -p "$subpkgdir"/${f%/*}
		mv $f "$subpkgdir"/${f%/*}
	}
	find $subpkgdir -name perllocal.pod -delete
}


setvar sha512sums = ""fe99486e0aef8d73dace3081bbd62bc6d08bc13868b98c905f7833458fdfc464eea504ae2961f4a2f38892cb0e76b533a50a2cacdf07c9ad9f8106e7ac1c353c  git-2.14.2.tar.xz
85767b5e03137008d6a96199e769e3979f75d83603ac8cb13a3481a915005637409a4fd94e0720da2ec6cd1124f35eba7cf20109a94816c4b4898a81fbc46bd2  bb-tar.patch
89528cdd14c51fd568aa61cf6c5eae08ea0844e59f9af9292da5fc6c268261f4166017d002d494400945e248df6b844e2f9f9cd2d9345d516983f5a110e4c42a  git-daemon.initd
fbf1f425206a76e2a8f82342537ed939ff7e623d644c086ca2ced5f69b36734695f9f80ebda1728f75a94d6cd2fcb71bf845b64239368caab418e4d368c141ec  git-daemon.confd""