blob: 99815da1561671a0d8c793edb7a34c2cdf5c5d9c [file] [log] [blame]
# 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 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 \
glog-da816ea70.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.
$(GLOG)-build-stamp: $(GLOG)-stamp
cd $(GLOG) && ./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 WITH_BUNDLED_NVML
$(NVML)/nvidia/gdk/nvml.h: $(NVML)-stamp
ALL_LOCAL += $(NVML)-stamp
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