118 lines
6.0 KiB
Bash
Executable File
118 lines
6.0 KiB
Bash
Executable File
#!/bin/bash
|
|
################################################################################
|
|
# Copyright 2016 Google LLC.
|
|
#
|
|
# This software is licensed under the terms defined in the Widevine Master
|
|
# License Agreement. For a copy of this agreement, please contact
|
|
# widevine-licensing@google.com.
|
|
################################################################################
|
|
#
|
|
# This script generates a directory that stores the intermediate artifacts
|
|
# needed for testing.
|
|
#
|
|
# Prerequirements (if running the script directly):
|
|
# - Python 2.7 or later
|
|
# - pip: https://pip.pypa.io/en/latest/installing/
|
|
# - Python cryptography package: https://cryptography.io/en/latest/installation/
|
|
# - Protocol compiler: https://github.com/google/protobuf#protocol-compiler-installation
|
|
# On Ubuntu: sudo apt-get install protobuf-compiler
|
|
# - Protobuf Python runtime (version 3.0 or later): sudo pip install protobuf
|
|
# - CLIF: https://github.com/google/clif
|
|
# Environment Variables:
|
|
# - TOOLS_PATH: colon-delimited paths to additional tools such as protoc.
|
|
# - CLIF_PREFIX: prefix path to CLIF installation.
|
|
|
|
set -ex
|
|
cd "$(dirname "$0")"
|
|
|
|
if [[ -v TOOLS_PATH ]]; then
|
|
export PATH=$PATH:$TOOLS_PATH
|
|
fi
|
|
|
|
if ! which protoc 2>/dev/null; then
|
|
echo >&2 "Protobuf is required but not found (did you set TOOLS_PATH?). Aborting."
|
|
exit 1
|
|
fi
|
|
|
|
if ! [[ -v CLIF_PREFIX ]]; then
|
|
echo >&2 "CLIF_PREFIX not set. Defaulting to '$HOME/opt'."
|
|
export CLIF_PREFIX=$HOME/opt
|
|
fi
|
|
|
|
PYCLIF="$CLIF_PREFIX/clif/bin/pyclif"
|
|
PYCLIF_PROTO="$CLIF_PREFIX/clif/bin/pyclif_proto"
|
|
CLIF_INC="-I$CLIF_PREFIX"
|
|
if ! [[ -x $PYCLIF ]]; then
|
|
echo >&2 "CLIF is required but not found."
|
|
exit 1
|
|
fi
|
|
|
|
# Get the path of the native python C++ header files.
|
|
PYTHON_INC="-I$(printf "from distutils.sysconfig import get_python_inc\nprint(get_python_inc())\n" | python)"
|
|
|
|
SRC_DIR="$(pwd)"
|
|
GEN_DIR="$(pwd)/test_genfiles"
|
|
PROTO_GEN_DIR="$GEN_DIR/protos/public"
|
|
COMMON_GEN_DIR="$GEN_DIR/common/python"
|
|
SDK_PYTHON_GEN_DIR="$GEN_DIR/provisioning_sdk/public/python"
|
|
export PYEXT_BUILD_DIR="$(pwd)/python_ext_build"
|
|
PYEXT_INSTALL_DIR="$(pwd)/python_env"
|
|
|
|
rm -rf "$GEN_DIR"
|
|
rm -rf "$PYEXT_BUILD_DIR"
|
|
rm -rf "$PYEXT_INSTALL_DIR"
|
|
mkdir -p "$PROTO_GEN_DIR"
|
|
mkdir -p "$COMMON_GEN_DIR"
|
|
mkdir -p "$SDK_PYTHON_GEN_DIR"
|
|
mkdir -p "$PYEXT_BUILD_DIR"
|
|
|
|
# Generate C++ outputs.
|
|
# The protos are needed to compile the public header provisioning_engine.h.
|
|
protoc -I="$SRC_DIR" --cpp_out="$GEN_DIR" "$SRC_DIR/protos/public/client_identification.proto"
|
|
protoc -I="$SRC_DIR" --cpp_out="$GEN_DIR" "$SRC_DIR/protos/public/remote_attestation.proto"
|
|
protoc -I="$SRC_DIR" --cpp_out="$GEN_DIR" "$SRC_DIR/protos/public/certificate_provisioning.proto"
|
|
|
|
# Generate py outputs.
|
|
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/client_identification.proto"
|
|
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/remote_attestation.proto"
|
|
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/provisioned_device_info.proto"
|
|
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/certificate_provisioning.proto"
|
|
protoc -I="$SRC_DIR" --python_out="$GEN_DIR" "$SRC_DIR/protos/public/signed_drm_certificate.proto"
|
|
|
|
# Generate CLIF Python wrappers.
|
|
"$PYCLIF_PROTO" --source_dir="$SRC_DIR/protos/public" --ccdeps_out="$PROTO_GEN_DIR/certificate_provisioning_pyclif.cc" --header_out="$PROTO_GEN_DIR/certificate_provisioning_pyclif.h" certificate_provisioning.proto
|
|
|
|
"$PYCLIF" --modname certificate_type --ccdeps_out="$COMMON_GEN_DIR/certificate_type.cc" --ccinit_out="$COMMON_GEN_DIR/initcertificate_type.cc" --header_out="$COMMON_GEN_DIR/certificate_type.h" --cc_flags="-std=c++11 -I$SRC_DIR $PYTHON_INC $CLIF_INC" "$SRC_DIR/common/python/certificate_type.clif"
|
|
|
|
"$PYCLIF" --modname provisioning_status --ccdeps_out="$SDK_PYTHON_GEN_DIR/provisioning_status.cc" --ccinit_out="$SDK_PYTHON_GEN_DIR/initprovisioning_status.cc" --header_out="$SDK_PYTHON_GEN_DIR/provisioning_status.h" --cc_flags="-std=c++11 -I$SRC_DIR $PYTHON_INC $CLIF_INC" "$SRC_DIR/provisioning_sdk/public/python/provisioning_status.clif"
|
|
|
|
"$PYCLIF" --modname provisioning_session --ccdeps_out="$SDK_PYTHON_GEN_DIR/provisioning_session.cc" --ccinit_out="$SDK_PYTHON_GEN_DIR/initprovisioning_session.cc" --header_out="$SDK_PYTHON_GEN_DIR/provisioning_session.h" --cc_flags="-std=c++11 -I$SRC_DIR -I$GEN_DIR $PYTHON_INC $CLIF_INC" --include_paths="$GEN_DIR" "$SRC_DIR/provisioning_sdk/public/python/provisioning_session.clif"
|
|
|
|
"$PYCLIF" --modname provisioning_engine --ccdeps_out="$SDK_PYTHON_GEN_DIR/provisioning_engine.cc" --ccinit_out="$SDK_PYTHON_GEN_DIR/initprovisioning_engine.cc" --header_out="$SDK_PYTHON_GEN_DIR/provisioning_engine.h" --cc_flags="-std=c++11 -I$SRC_DIR -I$GEN_DIR $PYTHON_INC $CLIF_INC" --include_paths="$GEN_DIR" "$SRC_DIR/provisioning_sdk/public/python/provisioning_engine.clif"
|
|
|
|
# Create virtual Python environment, build extensions, and install onto virtual
|
|
# environment.
|
|
cp -a provisioning_sdk/public/python/* test_genfiles/
|
|
cd test_genfiles
|
|
rm -rf "$PYEXT_INSTALL_DIR"
|
|
virtualenv "$PYEXT_INSTALL_DIR"
|
|
"$PYEXT_INSTALL_DIR/bin/python" "$PYEXT_INSTALL_DIR/bin/pip" install enum34
|
|
"$PYEXT_INSTALL_DIR/bin/python" "$PYEXT_INSTALL_DIR/bin/pip" install protobuf
|
|
"$PYEXT_INSTALL_DIR/bin/python" "$PYEXT_INSTALL_DIR/bin/pip" install cryptography
|
|
|
|
"$PYEXT_INSTALL_DIR/bin/python" certificate_type_setup.py build --build-base="$PYEXT_BUILD_DIR" install
|
|
"$PYEXT_INSTALL_DIR/bin/python" provisioning_status_setup.py build --build-base="$PYEXT_BUILD_DIR" install
|
|
"$PYEXT_INSTALL_DIR/bin/python" provisioning_session_setup.py build --build-base="$PYEXT_BUILD_DIR" install
|
|
"$PYEXT_INSTALL_DIR/bin/python" provisioning_engine_setup.py build --build-base="$PYEXT_BUILD_DIR" install
|
|
|
|
shopt -s globstar
|
|
for d in "protos"/**/; do
|
|
touch -- "$d/__init__.py";
|
|
done
|
|
|
|
"$PYEXT_INSTALL_DIR/bin/python" init_engine_test.py
|
|
"$PYEXT_INSTALL_DIR/bin/python" set_certificate_status_list_test.py
|
|
"$PYEXT_INSTALL_DIR/bin/python" drm_intermediate_certificate_test.py
|
|
"$PYEXT_INSTALL_DIR/bin/python" engine_generate_certificate_test.py
|
|
"$PYEXT_INSTALL_DIR/bin/python" new_session_test.py
|