#!/bin/bash

# Copyright (c) 2015 Cisco and/or its affiliates.
# 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.

# includes
paths=`find $1/*/include -type f -print | grep -v '/dpdk/include/'`
rm -f $2

for path in $paths
do
    relpath=`echo $path | sed -e 's:.*/include/::'`
    dir=`dirname $relpath`
    if [ $dir = "." ] ; then
        echo ../$path /usr/include >> $2
    else
        echo ../$path /usr/include/$dir >> $2
    fi
done        

# sample plugin
paths=`(cd ..; find src/examples/sample-plugin -type f -print | grep -v autom4te)`

for path in $paths
do
    relpath=`echo $path | sed -e 's:.*src/examples/::'`
    dir=`dirname $relpath`
    if [ $dir = "sample-plugin" ] ; then
        echo ../../$path /usr/share/doc/vpp/examples/sample-plugin/ >> $2
    else
        echo ../../$path \
        /usr/share/doc/vpp/examples/$dir >> $2
    fi
done        
