# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2016-2021, Intel Corporation

#
# Dockerfile - a 'recipe' for Docker to build an image of fedora-based
#              environment prepared for running libpmemobj-cpp tests.
#

# Pull base image
FROM registry.hub.docker.com/library/centos:8
MAINTAINER igor.chorazewicz@intel.com

# Set required environment variables
ENV OS centos
ENV OS_VER 8
ENV PACKAGE_MANAGER rpm
ENV NOTTY 1

# Additional parameters to build docker without building components
ARG SKIP_VALGRIND_BUILD
ARG SKIP_PMDK_BUILD

# Base development packages
ARG BASE_DEPS="\
	cmake \
	gcc \
	gcc-c++ \
	git \
	make"

# Dependencies for compiling libpmemobj-cpp project
ARG LIBPMEMOBJ_CPP_DEPS="\
	libatomic \
	tbb-devel"

# PMDK's dependencies (optional; libpmemobj-devel package may be used instead)
ARG PMDK_DEPS="\
	autoconf \
	automake \
	daxctl-devel \
	gdb \
	man \
	ndctl-devel \
	pandoc \
	python3 \
	rpm-build \
	rpm-build-libs \
	rpmdevtools \
	which"

# pmem's Valgrind dependencies (optional; valgrind-devel package may be used instead)
ARG VALGRIND_DEPS="\
	autoconf \
	automake"

# Examples (optional)
ARG EXAMPLES_DEPS="\
	ncurses-devel"

# Documentation (optional)
ARG DOC_DEPS="\
	doxygen"

# Tests (optional)
# NOTE: glibc is installed as a separate command; see below
ARG TESTS_DEPS="\
	gdb \
	libunwind-devel"

# Misc for our builds/CI (optional)
ARG MISC_DEPS="\
	clang \
	passwd \
	perl-Text-Diff \
	pkgconf \
	sudo"

# Update package repository, extend dnf's package base and install basic tools
RUN dnf update -y \
 && dnf install -y epel-release \
 && dnf install -y 'dnf-command(config-manager)' \
 && dnf config-manager --set-enabled powertools \
 && dnf update -y \
 && dnf install -y --nobest \
	${BASE_DEPS} \
	${LIBPMEMOBJ_CPP_DEPS} \
	${PMDK_DEPS} \
	${VALGRIND_DEPS} \
	${EXAMPLES_DEPS} \
	${DOC_DEPS} \
	${TESTS_DEPS} \
	${MISC_DEPS} \
 && dnf debuginfo-install -y glibc \
 && dnf clean all

# Install valgrind
COPY install-valgrind.sh install-valgrind.sh
RUN ./install-valgrind.sh

# Install pmdk
COPY install-pmdk.sh install-pmdk.sh
RUN ./install-pmdk.sh rpm

# Add user
ENV USER user
ENV USERPASS pass
RUN useradd -m $USER \
 && echo $USERPASS | passwd $USER --stdin \
 && gpasswd wheel -a $USER
USER $USER
