# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License

# This Makefile is for building third-party packages from
# tarballs. For autotools-based packages, we configure each of the
# packages to build static PIC binaries which we can safely link into
# a shared libmesos, and build it in-place without installing it (even
# if one runs 'make install' in this directory). Non-autotools based
# packages may be special cases; this Makefile is responsible for
# passing any special make or configure flags that might be required.

BUILT_SOURCES = # Initialized to enable using +=.

SUBDIRS = . stout libprocess

# We need to add '--srcdir=.' needed because 'make distcheck' adds
#  '--srcdir=...' when configuring.
CONFIGURE_ARGS = @CONFIGURE_ARGS@ --enable-shared=no --with-pic --srcdir=.

# The reason we use '/' prefix is to allow ourselves to install these packages
# in build/3rdparty directory as well. To do that, we can simply call
#   `make install DESTDIR=/path/to/builddir/ install`
# Similarly, when doing system-wide installation, we can do:
#   `make install DESTDIR=${MESOS-PREFIX}/lib/mesos/3rdparty install`
CONFIGURE_ARGS += --prefix=/

# Set up building flags for non-bundled libraries.
SSL_INCLUDE_FLAGS = @SSL_CPPFLAGS@
SSL_LINKER_FLAGS = @SSL_LINKERFLAGS@
ZLIB_INCLUDE_FLAGS = @ZLIB_CPPFLAGS@
ZLIB_LINKER_FLAGS = @ZLIB_LINKERFLAGS@

# Directory where bundled 3rdparty module dependencies are installed.
pkg3rdpartydir = $(pkglibdir)/3rdparty

include versions.am

BOOST = boost-$(BOOST_VERSION)
CONCURRENTQUEUE = concurrentqueue-$(CONCURRENTQUEUE_VERSION)
CSI_V0 = csi-$(CSI_V0_VERSION)
CSI_V1 = csi-$(CSI_V1_VERSION)
ELFIO = elfio-$(ELFIO_VERSION)
GLOG = glog-$(GLOG_VERSION)
GMOCK = $(GOOGLETEST)/googlemock
GOOGLETEST = googletest-release-$(GOOGLETEST_VERSION)
GPERFTOOLS = gperftools-$(GPERFTOOLS_VERSION)
GRPC = grpc-$(GRPC_VERSION)
GTEST = $(GOOGLETEST)/googletest
HTTP_PARSER = http-parser-$(HTTP_PARSER_VERSION)
JEMALLOC = jemalloc-$(JEMALLOC_VERSION)
LEVELDB = leveldb-$(LEVELDB_VERSION)
LIBARCHIVE = libarchive-$(LIBARCHIVE_VERSION)
LIBEV = libev-$(LIBEV_VERSION)
LIBEVENT = libevent-$(LIBEVENT_VERSION)
LIBSECCOMP = libseccomp-$(LIBSECCOMP_VERSION)
NVML = nvml-$(NVML_VERSION)
PIP = pip-$(PIP_VERSION)
PICOJSON = picojson-$(PICOJSON_VERSION)
PROTOBUF = protobuf-$(PROTOBUF_VERSION)
RAPIDJSON = rapidjson-$(RAPIDJSON_VERSION)
SETUPTOOLS = setuptools-$(SETUPTOOLS_VERSION)
WHEEL = wheel-$(WHEEL_VERSION)
ZOOKEEPER = zookeeper-$(ZOOKEEPER_VERSION)

EXTRA_DIST =			\
  $(BOOST).tar.gz		\
  $(CONCURRENTQUEUE).tar.gz	\
  $(CSI_V0).tar.gz		\
  $(CSI_V1).tar.gz		\
  $(ELFIO).tar.gz		\
  $(GLOG).tar.gz		\
  $(GOOGLETEST).tar.gz		\
  $(GPERFTOOLS).tar.gz		\
  $(GRPC).tar.gz		\
  $(HTTP_PARSER).tar.gz		\
  $(JEMALLOC).tar.gz		\
  $(LEVELDB).tar.gz		\
  $(LIBARCHIVE).tar.gz		\
  $(LIBEV).tar.gz		\
  $(LIBEVENT).tar.gz		\
  $(LIBSECCOMP).tar.gz		\
  $(NVML).tar.gz		\
  $(PIP).tar.gz			\
  $(PROTOBUF).tar.gz		\
  $(PICOJSON).tar.gz		\
  $(RAPIDJSON).tar.gz		\
  $(SETUPTOOLS).tar.gz		\
  $(WHEEL).tar.gz		\
  $(ZOOKEEPER).tar.gz

# We need to patch glog in order to deal with a compilation issue when
# compiling with clang (and C++11); see MESOS-860, MESOS-966.
EXTRA_DIST +=			\
  $(GLOG).patch

# We need to patch gRPC for non-SSL build; see MEOS-9149.
EXTRA_DIST +=			\
  $(GRPC).patch

# We need to patch leveldb to prevent it from linking to snappy and
# tcmalloc; see MESOS-1054, MESOS-1624.
EXTRA_DIST +=			\
  $(LEVELDB).patch

# We need to patch libevent 2.0.22 for added compatibilty towards openssl 1.1.x.
EXTRA_DIST +=			\
  $(LIBEVENT).patch

# We need to patch PicoJSON for limiting the nesting level of JSON objects.
EXTRA_DIST +=			\
  $(PICOJSON).patch

# We need to patch ZooKeeper in order to get 3.4.8 to compile on PPC LE.
EXTRA_DIST +=			\
  $(ZOOKEEPER).patch

# We need to patch RapidJSON to make it write infinite floating point numbers
# as "Infinity" and "-Infinity" (i.e., with double quotes) rather than Infinity
# and -Infinity. This is to ensure the strings converted from JSON objects
# conform to the rule defined by Protobuf:
#   https://developers.google.com/protocol-buffers/docs/proto3#json
EXTRA_DIST +=			\
  $(RAPIDJSON).patch

# We need the following patches for CMake and/or Windows builds.
EXTRA_DIST +=			\
  $(BOOST).patch		\
  $(GOOGLETEST).patch		\
  $(LIBARCHIVE).patch		\
  $(PROTOBUF).patch		\
  bzip2-1.0.6.patch		\
  cyrus-sasl-2.1.27rc3.patch	\
  xz-5.2.3.patch

CLEAN_EXTRACTED =		\
  $(BOOST)			\
  $(CONCURRENTQUEUE)		\
  $(CSI_V0)			\
  $(CSI_V1)			\
  $(ELFIO)			\
  $(GLOG)			\
  $(GOOGLETEST)			\
  $(GPERFTOOLS)			\
  $(GRPC)			\
  $(HTTP_PARSER)		\
  $(JEMALLOC)			\
  $(LEVELDB)			\
  $(LIBARCHIVE)			\
  $(LIBEV)			\
  $(LIBEVENT)			\
  $(LIBSECCOMP)			\
  $(NVML)			\
  $(PIP)			\
  $(PICOJSON)			\
  $(PROTOBUF)			\
  $(RAPIDJSON)			\
  $(SETUPTOOLS)			\
  $(WHEEL)			\
  $(ZOOKEEPER)

# This is where the magic happens: we use stamp files as dependencies
# which cause the packages to get extracted as necessary. We also
# apply any patches as appropriate.
%-stamp: %.tar.gz
	gzip -d -c $^ | tar xf -
	test ! -e $(srcdir)/$*.patch || patch -d $* -p1 <$(srcdir)/$*.patch
	touch $@

# NOTE: The upstream CSI release tarball is packed with top-level directory
# `spec-<X.Y.Z>`. To avoid conflicts and be consistent with where other packages
# are extracted, we extract the tarball in directory `csi-<X.Y.Z>`.
#
# NOTE: Since GNU make 3.81 does not support shortest-stem pattern matching, we
# explicitly specify a static pattern rule here.
CSI_STAMPS = $(CSI_V0)-stamp $(CSI_V1)-stamp
$(CSI_STAMPS): csi-%-stamp: csi-%.tar.gz
	$(MKDIR_P) csi-$*
	gzip -d -c $^ | (cd csi-$* && tar xf -)
	test ! -e $(srcdir)/csi-$*.patch || \
	  patch -d csi-$*/spec-$* -p1 <$(srcdir)/csi-$*.patch
	touch $@

# Dependencies for all-local.
ALL_LOCAL = # Initialize ALL_LOCAL so we can add to it.

if HAS_PYTHON
if WITH_BUNDLED_PIP
  ALL_LOCAL += $(PIP)-stamp
endif

if WITH_BUNDLED_SETUPTOOLS
  ALL_LOCAL += $(SETUPTOOLS)-stamp
endif

if WITH_BUNDLED_WHEEL
  ALL_LOCAL += $(WHEEL)-stamp
endif
endif

if WITH_BUNDLED_BOOST
  ALL_LOCAL += $(BOOST)-stamp
endif

if WITH_BUNDLED_CONCURRENTQUEUE
# Libprocess depends on <concurrentqueue.h>. Install concurrentqeueue.h
# into $PREFIX/include but don't add it to the source tarball.
nodist_include_HEADERS = $(CONCURRENTQUEUE)/concurrentqueue.h
$(CONCURRENTQUEUE)/concurrentqueue.h: $(CONCURRENTQUEUE)-stamp
ALL_LOCAL += $(CONCURRENTQUEUE)-stamp
endif

if WITH_BUNDLED_ELFIO
# Stout depends on ELFIO. Install ELFIO into $PREFIX/include
# but don't add it to the source tarball.
elfiodir = $(includedir)/elfio

nodist_elfio_HEADERS =			\
  $(ELFIO)/elfio/elf_types.hpp		\
  $(ELFIO)/elfio/elfio.hpp		\
  $(ELFIO)/elfio/elfio_dump.hpp		\
  $(ELFIO)/elfio/elfio_dynamic.hpp	\
  $(ELFIO)/elfio/elfio_header.hpp	\
  $(ELFIO)/elfio/elfio_note.hpp		\
  $(ELFIO)/elfio/elfio_relocation.hpp	\
  $(ELFIO)/elfio/elfio_section.hpp	\
  $(ELFIO)/elfio/elfio_segment.hpp	\
  $(ELFIO)/elfio/elfio_strings.hpp	\
  $(ELFIO)/elfio/elfio_symbols.hpp	\
  $(ELFIO)/elfio/elfio_utils.hpp

$(ELFIO)/elfio/elf_types.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio_dump.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio_dynamic.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio_header.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio_note.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio_relocation.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio_section.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio_segment.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio_strings.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio_symbols.hpp: $(ELFIO)-stamp
$(ELFIO)/elfio/elfio_utils.hpp: $(ELFIO)-stamp

ALL_LOCAL += $(ELFIO)-stamp
endif

if WITH_BUNDLED_GLOG
LIB_GLOG = $(GLOG)/libglog.la
GLOG_LDFLAGS = # Initialize to empty
if OS_FREEBSD
  GLOG_LDFLAGS += "LDFLAGS='-L/usr/local/lib -lexecinfo'"
endif

$(LIB_GLOG): $(GLOG)-build-stamp

# NOTE: We explicitly set GTEST_CONFIG=no so that we don't attempt to
# build glog against a system installed gtest (there's no reason to
# "test" glog and it's highly likely it will cause a compilation bug
# when building with clang).
# We explicitly build only libglog.la as it is the artifact we depend
# on. This e.g., avoids building glog-internal tests.
#
# NOTE:
# On some platforms patch fails to remove test-driver (it is a broken symlink),
# that's why we need to remove it here.
# Also, autogen.sh might be CREATED by the patch and might need its mode fixed.
$(GLOG)-build-stamp: $(GLOG)-stamp
	cd $(GLOG) &&\
	  ./autogen.sh && \
	  ./configure GTEST_CONFIG=no $(CONFIGURE_ARGS) && \
          $(MAKE) $(AM_MAKEFLAGS) $(GLOG_LDFLAGS) libglog.la
	touch $@

ALL_LOCAL += $(LIB_GLOG)
endif

if HAS_GPERFTOOLS
LIB_GPERFTOOLS = $(GPERFTOOLS)/libprofiler.la

$(LIB_GPERFTOOLS): $(GPERFTOOLS)-build-stamp

$(GPERFTOOLS)-build-stamp: $(GPERFTOOLS)-stamp
	cd $(GPERFTOOLS) && ./configure  $(CONFIGURE_ARGS) && \
	  $(MAKE) $(AM_MAKEFLAGS)
	touch $@

ALL_LOCAL += $(LIB_GPERFTOOLS)
endif


if WITH_BUNDLED_HTTP_PARSER
# Convenience library for nodejs/http-parser.
noinst_LTLIBRARIES = libry_http_parser.la
nodist_libry_http_parser_la_SOURCES = $(HTTP_PARSER)/http_parser.c
libry_http_parser_la_CPPFLAGS = -I$(HTTP_PARSER) -DHTTP_PARSER_STRICT=0

BUILT_SOURCES += $(nodist_libry_http_parser_la_SOURCES)

$(HTTP_PARSER)/http_parser.c: $(HTTP_PARSER)-stamp
$(HTTP_PARSER)-build-stamp: libry_http_parser.la
	touch $@
endif


if WITH_BUNDLED_JEMALLOC
JEMALLOC_CONFIGURE_ARGS = \
    --enable-stats --enable-prof --with-malloc-conf="prof:true,prof_active:false"

LIB_JEMALLOC = $(JEMALLOC)/libjemalloc.la

$(LIB_JEMALLOC): $(JEMALLOC)-build-stamp

$(JEMALLOC)-build-stamp: $(JEMALLOC)-stamp
	cd $(JEMALLOC) && ./configure $(JEMALLOC_CONFIGURE_ARGS) $(CONFIGURE_ARGS)
	cd $(JEMALLOC) && $(MAKE) $(AM_MAKEFLAGS)
	touch $@

ALL_LOCAL += $(LIB_JEMALLOC)
endif

if WITH_BUNDLED_LIBARCHIVE
LIB_LIBARCHIVE = $(LIBARCHIVE)/.libs/libarchive.la

$(LIB_LIBARCHIVE): $(LIBARCHIVE)-build-stamp

$(LIBARCHIVE)-build-stamp: $(LIBARCHIVE)-stamp
	cd $(LIBARCHIVE) &&			\
	  ./configure $(CONFIGURE_ARGS)		\
	      --without-bz2lib			\
	      --without-cng			\
	      --without-expat			\
	      --without-iconv			\
	      --without-libiconv-prefix		\
	      --without-lz4			\
	      --without-lzma			\
	      --without-nettle			\
	      --without-openssl			\
	      --without-xml2
	cd $(LIBARCHIVE) && $(MAKE) $(AM_MAKEFLAGS)
	touch $@

ALL_LOCAL += $(LIB_LIBARCHIVE)
endif

if WITH_BUNDLED_LIBEV
$(LIBEV)/libev.la: $(LIBEV)-build-stamp
$(LIBEV)-build-stamp: $(LIBEV)-stamp
	cd $(LIBEV) && ./configure $(CONFIGURE_ARGS) && \
           $(MAKE) $(AM_MAKEFLAGS)
	touch $@
ALL_LOCAL += $(LIBEV)-build-stamp
endif

if WITH_BUNDLED_LIBEVENT
$(LIBEVENT)/libevent.la: $(LIBEVENT)-build-stamp
$(LIBEVENT)-build-stamp: $(LIBEVENT)-stamp
	cd $(LIBEVENT) &&			\
	CPPFLAGS=$(SSL_INCLUDE_FLAGS)		\
	LDFLAGS=$(SSL_LINKER_FLAGS)		\
	./configure $(CONFIGURE_ARGS)		\
		--disable-dependency-tracking	\
		--disable-debug-mode		\
		--disable-samples &&		\
	$(MAKE) $(AM_MAKEFLAGS)
	touch $@
ALL_LOCAL += $(LIBEVENT)-build-stamp
endif

if WITH_BUNDLED_LIBSECCOMP
LIBSECCOMP_CONFIGURE_ARGS = --disable-shared

LIB_LIBSECCOMP = $(LIBSECCOMP)/src/libseccomp.la

$(LIB_LIBSECCOMP): $(LIBSECCOMP)-build-stamp

$(LIBSECCOMP)-build-stamp: $(LIBSECCOMP)-stamp
	cd $(LIBSECCOMP) &&						\
	  ./configure $(LIBSECCOMP_CONFIGURE_ARGS) $(CONFIGURE_ARGS) &&	\
	  $(MAKE) $(AM_MAKEFLAGS)
	touch $@

ALL_LOCAL += $(LIB_LIBSECCOMP)
endif

if ENABLE_NVML
if WITH_BUNDLED_NVML
$(NVML)/nvidia/gdk/nvml.h: $(NVML)-stamp
ALL_LOCAL += $(NVML)-stamp
endif
endif

if WITH_BUNDLED_PICOJSON
# Stout depends on <picojson.h>. Install picojson.h into $PREFIX/include
# but don't add it to the source tarball.
nodist_include_HEADERS = $(PICOJSON)/picojson.h
$(PICOJSON)/picojson.h: $(PICOJSON)-stamp
ALL_LOCAL += $(PICOJSON)-stamp
endif

if WITH_BUNDLED_RAPIDJSON
# Stout depends on rapidjson. Install rapidjson into $PREFIX/include
# but don't add it to the source tarball.
#
# We need to use a variable per sub-directory in order to preserve
# the subdirectory structure:
#   https://www.gnu.org/software/automake/manual/html_node/Alternative.html
rapidjsondir = $(includedir)/rapidjson
rapidjsonerrordir = $(includedir)/rapidjson/error
rapidjsoninternaldir = $(includedir)/rapidjson/internal
rapidjsonmsinttypesdir = $(includedir)/rapidjson/msinttypes

nodist_rapidjson_HEADERS =				\
  $(RAPIDJSON)/include/rapidjson/allocators.h		\
  $(RAPIDJSON)/include/rapidjson/document.h		\
  $(RAPIDJSON)/include/rapidjson/encodedstream.h	\
  $(RAPIDJSON)/include/rapidjson/encodings.h		\
  $(RAPIDJSON)/include/rapidjson/filereadstream.h	\
  $(RAPIDJSON)/include/rapidjson/filewritestream.h	\
  $(RAPIDJSON)/include/rapidjson/fwd.h			\
  $(RAPIDJSON)/include/rapidjson/istreamwrapper.h	\
  $(RAPIDJSON)/include/rapidjson/memorybuffer.h		\
  $(RAPIDJSON)/include/rapidjson/memorystream.h		\
  $(RAPIDJSON)/include/rapidjson/ostreamwrapper.h	\
  $(RAPIDJSON)/include/rapidjson/pointer.h		\
  $(RAPIDJSON)/include/rapidjson/prettywriter.h		\
  $(RAPIDJSON)/include/rapidjson/rapidjson.h		\
  $(RAPIDJSON)/include/rapidjson/reader.h		\
  $(RAPIDJSON)/include/rapidjson/schema.h		\
  $(RAPIDJSON)/include/rapidjson/stream.h		\
  $(RAPIDJSON)/include/rapidjson/stringbuffer.h		\
  $(RAPIDJSON)/include/rapidjson/writer.h

nodist_rapidjsonerror_HEADERS =				\
  $(RAPIDJSON)/include/rapidjson/error/en.h		\
  $(RAPIDJSON)/include/rapidjson/error/error.h

nodist_rapidjsoninternal_HEADERS =			\
  $(RAPIDJSON)/include/rapidjson/internal/biginteger.h	\
  $(RAPIDJSON)/include/rapidjson/internal/diyfp.h	\
  $(RAPIDJSON)/include/rapidjson/internal/dtoa.h	\
  $(RAPIDJSON)/include/rapidjson/internal/ieee754.h	\
  $(RAPIDJSON)/include/rapidjson/internal/itoa.h	\
  $(RAPIDJSON)/include/rapidjson/internal/meta.h	\
  $(RAPIDJSON)/include/rapidjson/internal/pow10.h	\
  $(RAPIDJSON)/include/rapidjson/internal/regex.h	\
  $(RAPIDJSON)/include/rapidjson/internal/stack.h	\
  $(RAPIDJSON)/include/rapidjson/internal/strfunc.h	\
  $(RAPIDJSON)/include/rapidjson/internal/strtod.h	\
  $(RAPIDJSON)/include/rapidjson/internal/swap.h

nodist_rapidjsonmsinttypes_HEADERS =			\
  $(RAPIDJSON)/include/rapidjson/msinttypes/inttypes.h	\
  $(RAPIDJSON)/include/rapidjson/msinttypes/stdint.h

$(nodist_rapidjson_HEADERS): $(RAPIDJSON)-stamp
$(nodist_rapidjsonerror_HEADERS): $(RAPIDJSON)-stamp
$(nodist_rapidjsoninternal_HEADERS): $(RAPIDJSON)-stamp
$(nodist_rapidjsonmsinttypes_HEADERS): $(RAPIDJSON)-stamp

ALL_LOCAL += $(RAPIDJSON)-stamp
endif

if WITH_BUNDLED_PROTOBUF
$(PROTOBUF)/src/protoc $(PROTOBUF)/src/libprotobuf.la: $(PROTOBUF)-build-stamp

# NOTE: The `--with-zlib` flag works differently between Mesos and
# Protobuf. Protobuf uses `--with-zlib` as an on/off switch for data
# compression instead of a path specifier for ZLib, so we need to set up
# the `CPPFLAGS` and `LDFLAGS` if `--with-zlib=DIR` is given.
$(PROTOBUF)-build-stamp: $(PROTOBUF)-stamp
	cd $(PROTOBUF) &&				\
	  ./configure $(CONFIGURE_ARGS)			\
	              CPPFLAGS="$(ZLIB_INCLUDE_FLAGS)"	\
	              LDFLAGS="$(ZLIB_LINKER_FLAGS)" &&	\
	  $(MAKE) $(AM_MAKEFLAGS)
	touch $@
ALL_LOCAL += $(PROTOBUF)/src/libprotobuf.la
ALL_LOCAL += $(PROTOBUF)/src/protoc

PROTOBUF_INCLUDE_FLAGS = -I$(abs_builddir)/$(PROTOBUF)/src
PROTOBUF_LINKER_FLAGS = -L$(abs_builddir)/$(PROTOBUF)/src/.libs
PROTOC = $(abs_builddir)/$(PROTOBUF)/src/protoc
else
$(PROTOBUF)-build-stamp:
	touch $@

PROTOBUF_INCLUDE_FLAGS = @PROTOBUF_CPPFLAGS@
PROTOBUF_LINKER_FLAGS = @PROTOBUF_LINKERFLAGS@
PROTOC = @PROTOCOMPILER@
endif

if !ENABLE_SSL
GRPC_VARIANT = _unsecure
endif

if WITH_BUNDLED_GRPC
LIB_GRPC = $(GRPC)/libs/opt/libgrpc++$(GRPC_VARIANT).a	\
           $(GRPC)/libs/opt/libgrpc$(GRPC_VARIANT).a	\
           $(GRPC)/libs/opt/libgpr.a

$(LIB_GRPC): $(GRPC)-build-stamp

# NOTE: We pass compiler flags through environment variables rather than the
# command line because gRPC uses target-specific assignments to append compiler
# flags, which will be overwritten by the command line. See:
# https://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html
#
# NOTE: We use EXTRA_CPPFLAGS to pass `-Wno-error`, because that one needs to be
# appended and not prepended to the constructed flags.
#
# NOTE: We compile gRPC with its embedded c-ares library to avoid a link error
# because Mesos is not aware of the library; see MESOS-9505. If bundle c-ares
# to resolve MESOS-9338 in the future, we should remove `HAS_SYSTEM_CARES` below
# and set up proper include and linker flags instead.
$(GRPC)-build-stamp: $(GRPC)-stamp			\
                     $(PROTOBUF)-build-stamp
	cd $(GRPC) &&					\
	  CPPFLAGS="$(PROTOBUF_INCLUDE_FLAGS)		\
	            $(SSL_INCLUDE_FLAGS)		\
	            $(ZLIB_INCLUDE_FLAGS)		\
	            $(CPPFLAGS)"			\
	  CFLAGS="$(CFLAGS)"				\
	  CXXFLAGS="$(CXXFLAGS)"			\
	  $(MAKE) $(AM_MAKEFLAGS)			\
	    $(LIB_GRPC:%=$(realpath $(abs_builddir))/%)	\
	    CC="$(CC)"					\
	    CXX="$(CXX)"				\
	    EXTRA_CPPFLAGS=-Wno-error			\
	    LD="$(CC)"					\
	    LDXX="$(CXX)"				\
	    LDFLAGS="$(PROTOBUF_LINKER_FLAGS)		\
	             $(SSL_LINKER_FLAGS)		\
	             $(ZLIB_LINKER_FLAGS)		\
	             $(LDFLAGS)"			\
	    LDLIBS="$(LDLIBS)"				\
	    HAS_PKG_CONFIG=false			\
	    HAS_SYSTEM_CARES=false			\
	    HAS_PROTOC=true				\
	    HAS_VALID_PROTOC=true			\
	    PROTOC="$(PROTOC)"
	touch $@

ALL_LOCAL += $(LIB_GRPC)
else
$(GRPC)-build-stamp:
	touch $@
endif

# NOTE: To support multiple CSI versions, we move the CSI proto files to
# version-qualified paths so `protoc` can find them.
$(CSI_V0)-build-stamp: $(CSI_V0)-stamp
	$(MKDIR_P) $(CSI_V0)/csi/v0
	mv $(CSI_V0)/spec-$(CSI_V0_VERSION)/csi.proto $(CSI_V0)/csi/v0
	touch $@

$(CSI_V1)-build-stamp: $(CSI_V1)-stamp
	$(MKDIR_P) $(CSI_V1)/csi/v1
	mv $(CSI_V1)/spec-$(CSI_V1_VERSION)/csi.proto $(CSI_V1)/csi/v1
	touch $@

# Mesos depends on CSI. Install the CSI proto file into $PREFIX/include but
# don't add it to the source tarball.
csi_v0dir = $(includedir)/csi/v0
nodist_csi_v0_HEADERS = $(CSI_V0)/csi/v0/csi.proto
$(nodist_csi_v0_HEADERS): $(CSI_V0)-build-stamp

csi_v1dir = $(includedir)/csi/v1
nodist_csi_v1_HEADERS = $(CSI_V1)/csi/v1/csi.proto
$(nodist_csi_v1_HEADERS): $(CSI_V1)-build-stamp

ALL_LOCAL += $(CSI_V0)-build-stamp
ALL_LOCAL += $(CSI_V1)-build-stamp

# Convenience library for gmock/gtest.
check_LTLIBRARIES = libgmock.la
nodist_libgmock_la_SOURCES = gmock_sources.cc

if WITH_BUNDLED_GMOCK
libgmock_la_CPPFLAGS =			\
  -I$(GTEST)/include -I$(GTEST) -I$(GTEST)/src	\
  -I$(GMOCK)/include -I$(GMOCK) -I$(GMOCK)/src

  gmock_sources.cc: $(GOOGLETEST)-stamp

$(GMOCK)-build-stamp: libgmock.la
	touch $@
ALL_LOCAL += $(GMOCK)-build-stamp
endif

if LINKGTEST
libgmock_la_LIBADD = -lgtest
endif


# We list the sources in BUILT_SOURCES to make sure that the package
# gets unarchived first.
BUILT_SOURCES += $(nodist_libgmock_la_SOURCES)

if WITH_BUNDLED_LEVELDB
# TODO(charles): Figure out PIC options in our configure.ac or create
# a configure.ac for leveldb.
$(LEVELDB)/out-static/libleveldb.a: $(LEVELDB)-stamp
	cd $(LEVELDB) && \
	  $(MAKE) $(AM_MAKEFLAGS) CC="$(CC)" CXX="$(CXX)" OPT="$(CXXFLAGS) -fPIC"

ALL_LOCAL += $(LEVELDB)/out-static/libleveldb.a
endif

if WITH_BUNDLED_ZOOKEEPER
$(ZOOKEEPER)/src/c/libzookeeper_mt.la: $(ZOOKEEPER)-stamp
	cd $(ZOOKEEPER)/src/c && ./configure $(CONFIGURE_ARGS) && \
	  $(MAKE) $(AM_MAKEFLAGS)

ALL_LOCAL += $(ZOOKEEPER)/src/c/libzookeeper_mt.la
else
# No matter what, we need to extract ZooKeeper so that we can run
# 'make check' (some of our tests need the ZooKeeper JAR).
ALL_LOCAL += $(ZOOKEEPER)-stamp
endif

all-local: $(ALL_LOCAL)
if INSTALL_MODULE_DEPENDENCIES
	$(MAKE) $(AM_MAKEFLAGS) \
	  INSTALLDIR=$(abs_top_builddir)/3rdparty install-module-dependencies
endif

clean-local:
	rm -r -f $(CLEAN_EXTRACTED)
	rm -f *-stamp
if INSTALL_MODULE_DEPENDENCIES
	rm -rf bin include lib64 lib share
endif

tests: all $(check_LTLIBRARIES)
	@cd stout && $(MAKE) $(AM_MAKEFLAGS) tests
	@cd libprocess && $(MAKE) $(AM_MAKEFLAGS) tests

# Install 3rdparty module dependencies.
if INSTALL_MODULE_DEPENDENCIES
install-exec-local:
	$(MAKE) $(AM_MAKEFLAGS) \
	  INSTALLDIR=$(DESTDIR)$(pkg3rdpartydir) install-module-dependencies
endif

install-module-dependencies:
	$(install_sh) -d $(INSTALLDIR)/include
if WITH_BUNDLED_BOOST
	@test -d $(INSTALLDIR)/include/boost || \
	  rm -rf $(INSTALLDIR)/include/boost
	cp -fpR $(BOOST)/boost $(INSTALLDIR)/include/
endif
if WITH_BUNDLED_CONCURRENTQUEUE
	@test -d $(INSTALLDIR)/include/concurrentqueue || \
	  rm -rf $(INSTALLDIR)/include/concurrentqueue
	cp -fpR $(CONCURRENTQUEUE)/concurrentqueue.h $(INSTALLDIR)/include/
endif
if WITH_BUNDLED_ELFIO
	@test -d $(INSTALLDIR)/include/elfio || \
	  rm -rf $(INSTALLDIR)/include/elfio
	cp -fpR $(ELFIO)/elfio $(INSTALLDIR)/include/
endif
if WITH_BUNDLED_GLOG
	cd $(GLOG) && \
	  $(MAKE) $(AM_MAKEFLAGS) DESTDIR=$(INSTALLDIR) install
endif
if WITH_BUNDLED_NVML
	@test -d $(INSTALLDIR)/include/nvidia || \
	  rm -rf $(INSTALLDIR)/include/nvidia
	cp -fpR $(NVML)/nvidia $(INSTALLDIR)/include/
endif
if WITH_BUNDLED_PICOJSON
	cd $(PICOJSON) && \
	  $(MAKE) $(AM_MAKEFLAGS) \
	    DESTDIR= includedir=$(INSTALLDIR)/include install
endif
if WITH_BUNDLED_PROTOBUF
	cd $(PROTOBUF) && \
	  $(MAKE) $(AM_MAKEFLAGS) DESTDIR=$(INSTALLDIR) install
endif
if WITH_BUNDLED_RAPIDJSON
# TODO(bmahler): Rapidjson has a cmake build, can we just cmake install
# instead of copying?
	@test -d $(INSTALLDIR)/include/rapidjson || \
	  rm -rf $(INSTALLDIR)/include/rapidjson
	cp -fpR $(RAPIDJSON)/include/rapidjson $(INSTALLDIR)/include/
endif
if WITH_BUNDLED_ZOOKEEPER
	cd $(ZOOKEEPER)/src/c && \
	  $(MAKE) $(AM_MAKEFLAGS) DESTDIR=$(INSTALLDIR) install
endif
