#!/bin/bash

[ $# -ge 1 ] || { echo "Usage: $0 /path/to/bundle_dir"; exit 1; }
BUNDLE_DIR=$1
mkdir -p $BUNDLE_DIR/bin
mkdir -p $BUNDLE_DIR/libs
mkdir -p $BUNDLE_DIR/lib
mkdir -p $BUNDLE_DIR/share

FIRE_SCRIPT=${0//bundle/fire}
RR_PATH=$( (python -c "print(__import__('trraces').get_rr_path())" 2>&1 || which rr) | tail -n1 )
RR_LIBS=$(ldd $RR_PATH | grep "=>" | awk '{print $3}' | sort -u)
RR_LD=$(ldd $RR_PATH | grep ld-linux | awk '{print $1}')
RR_BIN_PATH=$(dirname $RR_PATH)
RR_LIB_PATH=$(realpath "$(dirname $RR_PATH)/../lib/rr")
RR_SHARE_PATH=$(realpath $RR_BIN_PATH/../share/rr)
cp -L $RR_LIBS $BUNDLE_DIR/libs/
cp -L $RR_LD $BUNDLE_DIR
cp -L $RR_BIN_PATH/rr* $BUNDLE_DIR/bin/
cp -L -r $RR_LIB_PATH $BUNDLE_DIR/lib
cp -L -r $RR_SHARE_PATH $BUNDLE_DIR/share
cp -L $FIRE_SCRIPT $BUNDLE_DIR/fire


GDB_PATH=$(which gdb)
GDB_LIBS=$(ldd $GDB_PATH | grep "=>" | awk '{print $3}' | sort -u)
GDB_LD=$(ldd $GDB_PATH | grep ld-linux | awk '{print $1}')
GDB_SHARE_PATH=$(realpath "$(dirname $GDB_PATH)/../share/gdb")
PYTHON_VERSION=$(ldd $GDB_PATH | grep -oh "python.\.." | head -1)
PYTHON_VERSION_MAJOR=$(ldd $GDB_PATH | grep -oh "python." | head -1)
PYTHON_LIB_PATH=$(realpath "$(dirname $GDB_PATH)/../lib/$PYTHON_VERSION")
PYTHON_SHARE_PATH=$(realpath "$(dirname $GDB_PATH)/../share/$PYTHON_VERSION_MAJOR")
cp -L $GDB_LIBS $BUNDLE_DIR/libs
cp -L $GDB_LD $BUNDLE_DIR/bin
cp -L $GDB_PATH $BUNDLE_DIR/bin/
cp -L -r $GDB_SHARE_PATH $BUNDLE_DIR/share
cp -L -r $PYTHON_LIB_PATH $BUNDLE_DIR/lib
cp -L -r $PYTHON_SHARE_PATH $BUNDLE_DIR/share
# This is a dirty hack, but the interpreter must be set to a valid path
patchelf --set-interpreter "/tmp/rr/bin/$(basename $GDB_LD)" $BUNDLE_DIR/bin/gdb