#!/bin/bash -e SCRIPT_DIR=$(realpath $(dirname ${BASH_SOURCE[0]})) cd $(dirname ${SCRIPT_DIR}) echo -e "Working directory: $(pwd)" error-message() { echo -e "\nError! ${@}\n" exit -1 } verbose-run() { echo -e "\n##### Executing \"${@}\"... #####\n" eval $@ } if [ -d "$(realpath /tmp)" ]; then : ${TMPDIR:=/tmp} export TMPDIR fi : ${EXAMPLE_DIR:=examples} : ${EXAMPLE_NAME:=user-api} : ${SOURCE_DIR:=$(mktemp -t -d omnitrace-test-source-XXXX)} : ${BINARY_DIR:=$(mktemp -t -d omnitrace-test-build-XXXX)} : ${INSTALL_DIR:=$(mktemp -t -d omnitrace-install-XXXX)} : ${INSTALL_SCRIPT:=""} usage() { print_option() { printf " --%-10s %-24s %s (default: %s)\n" "${1}" "${2}" "${3}" "${4}"; } echo "Options:" print_option example-name "" "Name of the example project" "${EXAMPLE_NAME}" print_option example-dir "" "Directory containing example" "${EXAMPLE_DIR}" print_option source-dir "" "Location to copy example to" "${SOURCE_DIR}" print_option binary-dir "" "Location to build" "${BINARY_DIR}" print_option install-dir "" "Location of omnitrace installation" "${INSTALL_DIR}" print_option install-script "" "Absolute path to the installer script" "" } while [[ $# -gt 0 ]] do ARG=${1} shift VAL="" while [[ $# -gt 0 ]] do VAL=${1} shift break done if [ -z "${VAL}" ]; then echo "Error! Missing value for argument \"${ARG}\"" usage exit -1 fi case "${ARG}" in --example-name) EXAMPLE_NAME=${VAL} continue ;; --example-dir) EXAMPLE_DIR=${VAL} continue ;; --source-dir) SOURCE_DIR=${VAL} continue ;; --binary-dir) BINARY_DIR=${VAL} continue ;; --install-dir) INSTALL_DIR=${VAL} continue ;; --install-script) INSTALL_SCRIPT=${VAL} continue ;; *) echo -e "Error! Unknown option : ${ARG}" usage exit -1 ;; esac done if [ ! -f "${INSTALL_DIR}/include/omnitrace/user.h" ]; then if [ -z "${INSTALL_SCRIPT}" ]; then error-message "Unable to find \"omnitrace/user.h\" in \"${INSTALL_DIR}/include\" and installation script not provided" elif [ ! -f "${INSTALL_SCRIPT}" ]; then error-message "Unable to locate \"${INSTALL_SCRIPT}\" in directory \"${PWD}\"" else verbose-run mkdir -p ${INSTALL_DIR} verbose-run $(realpath ${INSTALL_SCRIPT}) --prefix=${INSTALL_DIR} --skip-license --exclude-subdir fi fi if [ ! -d ${SOURCE_DIR} ]; then verbose-run mkdir -p ${SOURCE_DIR} fi verbose-run cp -v -r ${EXAMPLE_DIR}/${EXAMPLE_NAME}/* ${SOURCE_DIR}/ verbose-run pushd ${SOURCE_DIR} cat << EOF > CMakeLists.txt cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR) project(test LANGUAGES C CXX) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(omnitrace REQUIRED COMPONENTS user) find_package(Threads REQUIRED) get_target_property(LIBS omnitrace::omnitrace INTERFACE_LINK_LIBRARIES) foreach(_LIB \${LIBS}) foreach(_VAR LINK_LIBRARIES INCLUDE_DIRECTORIES) get_target_property(_VAL \${_LIB} INTERFACE_\${_VAR}) if(_VAL) message(STATUS "\${_LIB} :: \${_VAR} :: \${_VAL}") endif() endforeach() endforeach() file(GLOB sources \${CMAKE_CURRENT_LIST_DIR}/*.cpp \${CMAKE_CURRENT_LIST_DIR}/*.c) add_executable(app \${sources}) target_link_libraries(app PRIVATE Threads::Threads omnitrace::omnitrace) EOF export CMAKE_PREFIX_PATH=${INSTALL_DIR}:${CMAKE_PREFIX_PATH} verbose-run find . verbose-run cmake -B ${BINARY_DIR} ${SOURCE_DIR} verbose-run cmake --build ${BINARY_DIR} --target all --parallel 2 -- VERBOSE=1 set +e verbose-run pushd ${BINARY_DIR} verbose-run ./app verbose-run popd verbose-run popd