#!/usr/bin/env sh
# The copyright in this software is being made available under the BSD License,
# included below. This software may be subject to other third party and
# contributor rights, including patent rights, and no such rights are granted
# under this license.
#
# Copyright (c) Intel Corporation
#
# All rights reserved.
#
# BSD License
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# Redistributions of source code must retain the above copyright notice, this list
# of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above copyright notice, this
# list of conditions and the following disclaimer in the documentation and/or
# other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ""AS IS""
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

AUTORECONF=${AUTORECONF:-autoreconf}

# generate list of source files for use in Makefile.am
# if you add new source files, you must run ./bootstrap again
src_listvar () {
    basedir=$1
    suffix=$2
    var=$3

    find "${basedir}" -name "${suffix}" | LC_ALL=C sort | tr '\n' ' ' | (printf "${var} = " && cat)
    echo ""
}

echo "Generating file lists: src.mk"
(
    src_listvar "Platform" "*.c" "PLATFORM_C"
    src_listvar "Platform" "*.h" "PLATFORM_H"
    src_listvar "Simulator" "*.c" "SIMULATOR_C"
    src_listvar "Simulator" "*.h" "SIMULATOR_H"
    src_listvar "tpm" "*.c" "TPM_C"
    src_listvar "tpm" "*.h" "TPM_H"
) > src.mk

echo "Setting up build"
${AUTORECONF} --install --sym

# A freshly checked out source tree will not build. VendorString.h must have
# these symbols defined to build.
echo "Setting default vendor strings"
sed -i 's&^\/\/\(#define[[:space:]]\+FIRMWARE_V1.*\)&\1&;
        s&^\/\/\(#define[[:space:]]\+MANUFACTURER.*\)&\1&;
        s&^\/\/\(#define[[:space:]]\+VENDOR_STRING_1.*\)&\1&' \
       tpm/include/VendorString.h
