set -e

function rel_path() # $1 - path to a target dir/file, $2 - base dir
{
  python3 -c "import os.path; print(os.path.relpath('$1', os.path.dirname('$2')))"
}

function abs_path()
{
  python3 -c "import os.path; print(os.path.abspath('$1'))"
}

function fix_boost_libs_in_binary() # $1 - path to boost libs, $2 - binary to fix
{
  if [ -z "$1" ] || [ -z "$2" ]
  then
    echo "fix_boost_libs_in_binary is called with no or invalid parameters"
    return 1
  fi
  install_name_tool -change @rpath/libboost_system.dylib          $1/libboost_system.dylib          $2
  install_name_tool -change @rpath/libboost_filesystem.dylib      $1/libboost_filesystem.dylib      $2
  install_name_tool -change @rpath/libboost_thread.dylib          $1/libboost_thread.dylib          $2
  install_name_tool -change @rpath/libboost_date_time.dylib       $1/libboost_date_time.dylib       $2
  install_name_tool -change @rpath/libboost_chrono.dylib          $1/libboost_chrono.dylib          $2
  install_name_tool -change @rpath/libboost_regex.dylib           $1/libboost_regex.dylib           $2
  install_name_tool -change @rpath/libboost_serialization.dylib   $1/libboost_serialization.dylib   $2
  install_name_tool -change @rpath/libboost_atomic.dylib          $1/libboost_atomic.dylib          $2
  install_name_tool -change @rpath/libboost_program_options.dylib $1/libboost_program_options.dylib $2
  install_name_tool -change @rpath/libboost_locale.dylib          $1/libboost_locale.dylib          $2
  install_name_tool -change @rpath/libboost_timer.dylib           $1/libboost_timer.dylib           $2
  install_name_tool -change @rpath/libboost_chrono.dylib          $1/libboost_chrono.dylib          $2
  return 0
}

function fix_boost_libs_in_libs() # $1 - path to boost libs, $2 - path to libs folder
{
  return 0 # temporary disabled -- 2023-11-20, sowle
  install_name_tool -change libboost_system.dylib          $1/libboost_system.dylib          $2/libboost_filesystem.dylib
  install_name_tool -change libboost_system.dylib          $1/libboost_system.dylib          $2/libboost_thread.dylib
  install_name_tool -change libboost_system.dylib          $1/libboost_system.dylib          $2/libboost_chrono.dylib
  install_name_tool -change libboost_system.dylib          $1/libboost_system.dylib          $2/libboost_timer.dylib
  install_name_tool -change libboost_chrono.dylib          $1/libboost_chrono.dylib          $2/libboost_timer.dylib
  install_name_tool -change libboost_system.dylib          $1/libboost_system.dylib          $2/libboost_locale.dylib
}

# return immediately if this script was sourced from another script
[ "$(basename $0)" != "$(basename $BASH_SOURCE)" ] && return


if [[ $# -ne 2 ]]; then
  echo "error: wrong args"
  echo "usage: $0 <path_to_boost_lib_dir> <path_to_binary>"
  echo "       -- fixes lib paths in binary and libs to relative-to-binary paths, using given lib dir as final lib folder"
  exit 1
fi

path_to_lib=$1
path_to_binary=$2
rel_bin_to_lib=$(rel_path $path_to_lib $path_to_binary)
fix_boost_libs_in_binary @executable_path/$rel_bin_to_lib $path_to_binary
fix_boost_libs_in_libs @executable_path/$rel_bin_to_lib $path_to_lib

exit 0
