# Contributor: John Coyle <dx9err@gmail.com>
# Maintainer: John Coyle <dx9err@gmail.com>

: ${WITH_TESTS:=OFF}

setvar pkgname = 'ceph'
setvar pkgver = '11.0.1'
setvar pkgrel = '5'
setvar pkgdesc = ""User space components of the Ceph file system""
setvar pkgusers = ""ceph""
setvar pkggroups = ""ceph""
setvar url = ""http://ceph.com""
setvar arch = ""x86_64""
setvar license = ""LGPL-2.1 and CC-BY-SA-1.0 and GPL-2.0 and BSL-1.0 and GPL-2.0-with-autoconf-exception and BSD-3-Clause and MIT""
setvar depends = ""ceph-osd ceph-mds ceph-mon""

setvar makedepends = ""
	acl-dev
	argp-standalone
	boost-dev
	btrfs-progs
	bzip2-dev
	cmake
	coreutils
	cryptsetup
	curl-dev
	cython
	cython-dev
	diffutils
	eudev-dev
	expat-dev
	fcgi-dev
	findutils
	flex
	fuse-dev
	git
	jq
	keyutils-dev
	leveldb-dev
	libaio-dev
	libatomic_ops-dev
	libedit-dev
	libtirpc-dev
	libtool
	libxml2-dev
	linux-headers
	lvm2-dev
	nss-dev
	openldap-dev
	libressl-dev
	parted
	procps
	python-dev
	py2-pip
	py-nose
	py-sphinx
	py-virtualenv
	readline-dev
	rpcgen
	snappy-dev
	userspace-rcu-dev
	xfsprogs-dev
	xmlstarlet
	yasm
""

#source="$pkgname-$pkgver.tar.gz::https://github.com/ceph/ceph/archive/v$pkgver.tar.gz"
setvar source = ""https://github.com/dx9/ceph/releases/download/11.0.1/ceph-$pkgver-beta1.tar.bz2""

setvar subpackages = ""
	$pkgname-base
	$pkgname-common
	$pkgname-mds
	$pkgname-mon
	$pkgname-fuse:ceph_fuse
	$pkgname-radosgw
	$pkgname-osd
	$pkgname-doc
	$pkgname-bash-completion:bash_completion
	rbd-fuse:rbd_fuse
	rbd-mirror:rbd_mirror
	rbd-nbd:rbd_nbd
	librbd
	librbd-dev:librbd_dev
	libcephfs
	libcephfs-dev:libcephfs_dev
	librados
	librados-dev:librados_dev
	librgw
	librgw-dev:librgw_dev
	py-rados:py_rados
	libradosstriper
	libradosstriper-dev:libradosstriper_dev
	py-rbd:py_rbd
	py-cephfs:py_cephfs
""

if test $WITH_TESTS = ON {
	setvar subpackages = ""$subpackages $pkgname-test:ceph_test""
}

setvar _prefix = "/usr"
setvar _bindir = "$_prefix/bin"
setvar _datadir = "$_prefix/share"
setvar _docdir = "$_datadir/doc"
setvar _includedir = "$_prefix/include"
setvar _libdir = "$_prefix/lib"
setvar _libexecdir = "$_prefix/libexec"
setvar _localstatedir = "/var"
setvar _mandir = "$_datadir/man"
setvar _sbindir = "/usr/sbin"
setvar _sysconfdir = "/etc"

setvar _udevrulesdir = "/etc/udev/rules.d"
setvar _python_sitelib = "/usr/lib/python2.7/site-packages"


setvar _builddir = ""$srcdir"/$pkgname-$pkgver"

proc build {
   cd $_builddir
   mkdir build
   cd build
   cmake .. \
	   -DCMAKE_INSTALL_PREFIX=$_prefix \
	   -DCMAKE_INSTALL_LIBDIR=$_libdir \
	   -DCMAKE_INSTALL_LIBEXECDIR=$_libexecdir \
	   -DCMAKE_INSTALL_LOCALSTATEDIR=$_localstatedir \
	   -DCMAKE_INSTALL_SYSCONFDIR=$_sysconfdir \
	   -DCMAKE_INSTALL_DOCDIR=$_docdir/ceph \
	   -DCMAKE_INSTALL_MANDIR=$_mandir \
	   -DWITH_REENTRANT_STRSIGNAL=ON \
	   -DWITH_THREAD_SAFE_RES_QUERY=ON \
	   -DWITH_MANPAGE=OFF \
	   -DWITH_PYTHON3=OFF \
	   -DWITH_TESTS=$WITH_TESTS \
	   || return 1
   make
}

proc package {
	cd $_builddir
	cd build
	make DESTDIR="$pkgdir" install
	cd ..

	rm -f "$pkgdir"$_sysconfdir/init.d/ceph

	install -D src/etc-rbdmap "$pkgdir"$_sysconfdir/ceph/rbdmap

	install -m 0644 -D src/logrotate.conf "$pkgdir"$_sysconfdir/logrotate.d/ceph

	chmod 0644 "$pkgdir"$_docdir/ceph/sample.ceph.conf
	chmod 0644 "$pkgdir"$_docdir/ceph/sample.fetch_config

	# udev rules
	install -m 0644 -D udev/50-rbd.rules "$pkgdir"$_udevrulesdir/50-rbd.rules
	install -m 0644 -D udev/60-ceph-by-parttypeuuid.rules  \
		"$pkgdir"$_udevrulesdir/60-ceph-by-parttypeuuid.rules
	install -m 0644 -D udev/95-ceph-osd.rules \
		"$pkgdir"$_udevrulesdir/95-ceph-osd.rules
}

proc base {
	setvar pkgdesc = ""Base is the package that includes all the files shared amongst ceph servers""
	setvar depends = ""
		ceph-common
		cryptsetup
		findutils
		librbd
		librados
		libcephfs
		librgw
		logrotate
		py-requests
		py-setuptools
		util-linux
		xfsprogs
	""

	mkdir -p "$subpkgdir"$_docdir/ceph
	mv "$pkgdir"$_docdir/ceph/sample.ceph.conf \
		"$subpkgdir"$_docdir/ceph/sample.ceph.conf
	mv "$pkgdir"$_docdir/ceph/sample.fetch_config \
		"$subpkgdir"$_docdir/ceph/sample.fetch_config

	mkdir -p "$subpkgdir"$_bindir
	for file in crushtool monmaptool osdmaptool ceph-run ceph-detect-init {
		mv "$pkgdir"$_bindir/$file "$subpkgdir"$_bindir
	}

	mkdir -p "$subpkgdir"$_sbindir
	mv "$pkgdir"$_sbindir/ceph-create-keys "$subpkgdir"$_sbindir/ceph-create-keys
	mv "$pkgdir"$_sbindir/mount.ceph "$subpkgdir"$_sbindir/mount.ceph

	mkdir -p "$subpkgdir"$_libexecdir/ceph
	mv "$pkgdir"$_libexecdir/ceph/ceph_common.sh "$subpkgdir"$_libexecdir/ceph

	mkdir -p "$subpkgdir"$_libdir/rados-classes
	mv "$pkgdir"$_libdir/rados-classes/* "$subpkgdir"$_libdir/rados-classes
	mkdir -p "$subpkgdir"$_libdir/ceph/erasure-code
	mv "$pkgdir"$_libdir/ceph/erasure-code/libec_*.so* \
		"$subpkgdir"$_libdir/ceph/erasure-code
	mkdir -p "$subpkgdir"$_libdir/ceph/compressor
	mv "$pkgdir"$_libdir/ceph/compressor/libceph_*.so* \
		"$subpkgdir"$_libdir/ceph/compressor

	mkdir -p "$subpkgdir"$_sysconfdir/logrotate.d
	mv "$pkgdir"$_sysconfdir/logrotate.d/ceph \
		"$subpkgdir"$_sysconfdir/logrotate.d/ceph

	mkdir -p "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/ceph_detect_init* "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/ceph_disk* "$subpkgdir"$_python_sitelib

	for dir in tmp bootstrap-osd bootstrap-mds bootstrap-rgw {
		install -m 750 -o ceph -g ceph -d \
			"$subpkgdir"$_localstatedir/lib/ceph/$dir
	}
}

proc common {
	setvar pkgdesc = ""Common utilities to mount and interact with a ceph storage cluster.""
	setvar depends = ""py-rados py-rbd py-cephfs""
	setvar install = ""$pkgname-common.pre-install""

	mkdir -p "$subpkgdir"$_bindir
	for file in \
		ceph \
		ceph-authtool \
		ceph-conf \
		ceph-dencoder \
		ceph-rbdnamer \
		ceph-syn \
		ceph-crush-location \
		cephfs-data-scan \
		cephfs-journal-tool \
		cephfs-table-tool \
		rados \
		rbd \
		rbd-replay \
		rbd-replay-many \
		rbdmap \
		ceph-post-file \
		ceph-brag \
		 { \
		mv "$pkgdir"$_bindir/$file "$subpkgdir"$_bindir
	}

	mkdir -p "$subpkgdir"$_datadir/ceph
	mv "$pkgdir"$_datadir/ceph/known_hosts_drop.ceph.com "$subpkgdir"$_datadir/ceph
	mv "$pkgdir"$_datadir/ceph/id_rsa_drop.ceph.com "$subpkgdir"$_datadir/ceph
	mv "$pkgdir"$_datadir/ceph/id_rsa_drop.ceph.com.pub "$subpkgdir"$_datadir/ceph

	mkdir -p "$subpkgdir"$_sysconfdir/ceph
	mv "$pkgdir"$_sysconfdir/ceph/rbdmap "$subpkgdir"$_sysconfdir/ceph

	mkdir -p "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/ceph_argparse.py* "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/ceph_daemon.py* "$subpkgdir"$_python_sitelib

	mkdir -p "$subpkgdir"$_udevrulesdir
	mv "$pkgdir"$_udevrulesdir/50-rbd.rules "$subpkgdir"$_udevrulesdir

	install -m 3770 -o ceph -g ceph -d "$subpkgdir"$_localstatedir/log/ceph
	install -m 750 -o ceph -g ceph -d "$subpkgdir"$_localstatedir/lib/ceph
}

proc mds {
	setvar pkgdesc = ""Metadata server daemon for the Ceph distributed file system.""
	setvar depends = ""ceph-base""

	mkdir -p "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/ceph-mds "$subpkgdir"$_bindir

	install -m 750 -o ceph -g ceph -d "$subpkgdir"$_localstatedir/lib/ceph/mds
}

proc mon {
	setvar pkgdesc = ""Cluster monitor daemon for the Ceph distributed file system.""
	setvar depends = ""ceph-base""

	mkdir -p "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/ceph-mon "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/ceph-rest-api "$subpkgdir"$_bindir

	mkdir -p "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/ceph_rest_api.py* "$subpkgdir"$_python_sitelib

	install -m 750 -o ceph -g ceph -d "$subpkgdir"$_localstatedir/lib/ceph/mon
}

proc ceph_fuse {
	setvar pkgdesc = ""FUSE based client for Ceph distributed network file system.""

	mkdir -p "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/ceph-fuse "$subpkgdir"$_bindirn
	mkdir -p "$subpkgdir"$_sbindir
	mv "$pkgdir"$_sbindir/mount.fuse.ceph "$subpkgdir"$_sbindir
}

proc rbd_fuse {
	setvar pkgdesc = ""FUSE based client to map Ceph rbd images to files.""
	setvar depends = ""librados librbd""
	mkdir -p "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/rbd-fuse "$subpkgdir"$_bindir
}

proc rbd_mirror {
	setvar pkgdesc = ""Daemon for mirroring RBD images between Ceph clusters.""
	setvar depends = ""ceph-common librados""
	mkdir -p "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/rbd-mirror "$subpkgdir"$_bindir
}

proc rbd_nbd {
	setvar pkgdesc = ""NBD based client to map Ceph rbd images to local device.""
	setvar depends = ""librbd librados""
	mkdir -p "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/rbd-nbd "$subpkgdir"$_bindir
}

proc radosgw {
	setvar pkgdesc = ""Rados REST gateway which implements Amazon's S3 and OpenStack's Swift APIs.""
	setvar depends = ""ceph-common""
	mkdir -p "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/radosgw "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/radosgw-admin "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/radosgw-token "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/radosgw-object-expirer "$subpkgdir"$_bindir
	mkdir -p "$subpkgdir"$_localstatedir/lib/ceph/radosgw
}

proc osd {
	setvar pkgdesc = ""Object storage daemon for the Ceph distributed file system.""
	setvar depends = ""ceph-base parted gptfdisk hdparm""

	mkdir -p "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/ceph-clsinfo "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/ceph-bluefs-tool "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/ceph-objectstore-tool "$subpkgdir"$_bindir
	mv "$pkgdir"$_bindir/ceph-osd "$subpkgdir"$_bindir

	mkdir -p "$subpkgdir"$_sbindir
	mv "$pkgdir"$_sbindir/ceph-disk "$subpkgdir"$_sbindir
	mv "$pkgdir"$_sbindir/ceph-disk-udev "$subpkgdir"$_sbindir

	mkdir -p "$subpkgdir"$_libexecdir/ceph
	mv "$pkgdir"$_libexecdir/ceph/ceph-osd-prestart.sh "$subpkgdir"$_libexecdir/ceph

	mkdir -p "$subpkgdir"$_udevrulesdir
	mv "$pkgdir"$_udevrulesdir/60-ceph-by-parttypeuuid.rules "$subpkgdir"$_udevrulesdir
	mv "$pkgdir"$_udevrulesdir/95-ceph-osd.rules "$subpkgdir"$_udevrulesdir

	install -m 750 -o ceph -g ceph -d "$subpkgdir"$_localstatedir/lib/ceph/osd
}

proc librados {
	setvar pkgdesc = ""RADOS distributed object store client library""
	mkdir -p "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/librados.so.* "$subpkgdir"/usr/lib
}

proc librados_dev {
	setvar pkgdesc = ""RADOS distributed object store client library headers""
	setvar depends = ""librados""
	mkdir -p "$subpkgdir"$_includedir/rados
	mv "$pkgdir"$_includedir/rados/librados.h "$subpkgdir"$_includedir
	mv "$pkgdir"$_includedir/rados/librados.hpp "$subpkgdir"$_includedir
	mv "$pkgdir"$_includedir/rados/buffer.h "$subpkgdir"$_includedir
	mv "$pkgdir"$_includedir/rados/buffer_fwd.h "$subpkgdir"$_includedir
	mv "$pkgdir"$_includedir/rados/page.h "$subpkgdir"$_includedir
	mv "$pkgdir"$_includedir/rados/crc32c.h "$subpkgdir"$_includedir
	mv "$pkgdir"$_includedir/rados/rados_types.h "$subpkgdir"$_includedir
	mv "$pkgdir"$_includedir/rados/rados_types.hpp "$subpkgdir"$_includedir
	mv "$pkgdir"$_includedir/rados/memory.h "$subpkgdir"$_includedir
	mv "$pkgdir"$_libdir/librados.so "$subpkgdir"$_libdir
	mv "$pkgdir"$_bindir/librados-config "$subpkgdir"$_bindir
}

proc librgw {
	setvar pkgdesc = ""RADOS gateway client library""
	setvar depends = ""librados""
	mkdir -p "$subpkgdir"$_libdir
	mv "$pkgdir"$_libdir/librgw.so.* "$subpkgdir"$_libdir
}

proc librgw_dev {
	setvar pkgdesc = ""RADOS gateway client library headers""
	setvar depends = ""librados""

	mkdir -p "$subpkgdir"$_includedir/rados
	mv "$pkgdir"$_includedir/rados/librgw.h "$subpkgdir"$_includedir/rados
	mv "$pkgdir"$_includedir/rados/rgw_file.h "$subpkgdir"$_includedir/rados
	mv "$pkgdir"$_libdir/librgw.so "$subpkgdir"$_libdir
}

proc py_rados {
	setvar pkgdesc = ""Python libraries for the RADOS object store""
	setvar depends = ""librados""
	mkdir -p "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/rados.so "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/rados-*.egg-info "$subpkgdir"$_python_sitelib
}

proc libradosstriper {
	setvar pkgdesc = ""RADOS striping library""
	setvar depends = ""librados""
	mkdir -p "$subpkgdir"$_libdir
	mv "$pkgdir"$_libdir/libradosstriper.so.* "$subpkgdir"$_libdir
}

proc libradosstriper_dev {
	setvar pkgdesc = ""RADOS striping library headers""
	setvar depends = ""libradosstriper librados-dev""
	mkdir -p "$subpkgdir"$_includedir/radosstriper
	mv "$pkgdir"$_includedir/radosstriper "$subpkgdir"$_includedir/radosstriper
	mv "$pkgdir"$_libdir/libradosstriper.so "$subpkgdir"$_libdir
}

proc librbd {
	setvar pkgdesc = ""RADOS block device client library""
	setvar depends = ""librados""
	mkdir -p "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/librbd.so.* "$subpkgdir"/usr/lib

	# TODO: look into this
	#mkdir -p /usr/lib64/qemu/
	#ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
}

proc librbd_dev {
	setvar pkgdesc = ""RADOS block device client library headers""
	setvar depends = ""librbd librados-dev""
	mkdir -p "$subpkgdir"/usr/include/rbd
	mv "$pkgdir"/usr/include/rbd "$subpkgdir"/usr/include
	mv "$pkgdir"/usr/lib/librbd.so "$subpkgdir"/usr/lib
}

proc py_rbd {
	setvar pkgdesc = ""Python libraries for the RADOS block device""
	setvar depends = ""librbd py-rados""
	mkdir -p "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/rbd.so "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/rbd-*.egg-info "$subpkgdir"$_python_sitelib
}

proc libcephfs {
	setvar pkgdesc = ""Ceph distributed file system client library""
	mkdir -p "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libcephfs.so.* "$subpkgdir"/usr/lib
}

proc libcephfs_dev {
	setvar pkgdesc = ""Ceph distributed file system client library headers""
	setvar depends = ""libcephfs librados-devel""
	mkdir -p "$subpkgdir"/usr/include/cephfs
	mv "$pkgdir"/usr/include/cephfs "$subpkgdir"/usr/include
	mv "$pkgdir"/usr/lib/libcephfs.so "$subpkgdir"/usr/lib
}

proc py_cephfs {
	setvar pkgdesc = ""Python libraries for Ceph distributed file system""
	setvar depends = ""libcephfs py-rados""
	mkdir -p "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/cephfs.so "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/cephfs-*.egg-info "$subpkgdir"$_python_sitelib
	mv "$pkgdir"$_python_sitelib/ceph_volume_client.py* "$subpkgdir"$_python_sitelib
}

proc ceph_test {
	setvar depends = ""ceph-common""
	mkdir -p "$subpkgdir"$_bindir
	for file in \
		ceph_bench_log \
		ceph_kvstorebench \
		ceph_multi_stress_watch \
		ceph_erasure_code \
		ceph_erasure_code_benchmark \
		ceph_omapbench \
		ceph_objectstore_bench \
		ceph_perf_objectstore \
		ceph_perf_local \
		ceph_perf_msgr_client \
		ceph_perf_msgr_server \
		ceph_psim \
		ceph_radosacl \
		ceph_rgw_jsonparser \
		ceph_rgw_multiparser \
		ceph_scratchtool \
		ceph_scratchtoolpp \
		ceph_smalliobench \
		ceph_smalliobenchdumb \
		ceph_smalliobenchfs \
		ceph_smalliobenchrbd \
		ceph_test_* \
		ceph_tpbench \
		ceph_xattr_bench \
		ceph-coverage \
		ceph-monstore-tool \
		ceph-osdomap-tool \
		ceph-kvstore-tool \
		ceph-debugpack \
		ceph-client-debug \
		 { \
		mv "$pkgdir"$_bindir/$file "$subpkgdir"$_bindir
	}

	mkdir -p "$subpkgdir"$_libdir
	mv "$pkgdir"$_libdir/ceph/ceph-monstore-update-crush.sh "$subpkgdir"$_libdir
}

proc bash_completion {
	setvar depends = ""bash-completion""
	setvar pkgdesc = ""Bash completions for Ceph""
	mkdir -p "$subpkgdir"$_sysconfdir/bash_completion.d
	mv "$pkgdir"$_sysconfdir/bash_completion.d/* "$subpkgdir"$_sysconfdir/bash_completion.d
}
setvar md5sums = ""edae3d83b4dd0f1316bdc0799ea61769  ceph-11.0.1-beta1.tar.bz2""
setvar sha256sums = ""fedaff78cd590021087edf168c0649505880cfbd73cde4029933b823f5ac617f  ceph-11.0.1-beta1.tar.bz2""
setvar sha512sums = ""d8bc28a25b9444134527f22856a6f0ea97b21a6100b0576a092d8988da0f191aca1e59bd14129361aee53f3032295169117ff02207e2ff361bb526461b9c5462  ceph-11.0.1-beta1.tar.bz2""