# Copyright 2019 Google Inc.
#
# Licensed 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.
#
################################################################################

FROM gcr.io/oss-fuzz-base/base-builder
MAINTAINER toppi.ale@gmail.com
RUN apt-get update && apt-get install -y \
	autoconf autoconf-archive \
	automake \
	gengetopt \
	gtk-doc-tools \
	libconfig-dev \
	libglib2.0-dev \
	libgnutls-dev \
	libini-config-dev \
	libjansson-dev \
	libnice-dev \
	libssl-dev \
	libtool \
	openssl \
	pkg-config

# install libsrtp dep from source
RUN git clone --single-branch --branch 2_2_x_throttle https://github.com/cisco/libsrtp.git libsrtp
RUN cd libsrtp && ./configure --enable-openssl && make -j$(nproc) shared_library && make install

# fetch Janus code
RUN git clone --single-branch --branch master https://github.com/meetecho/janus-gateway.git janus-gateway

WORKDIR $SRC
COPY build.sh $SRC/
