#!/bin/bash
#
# Copyright 2016-present the Material Components for iOS authors. All Rights Reserved.
#
# 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.

readonly SCRIPTS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Clean out CocoaPods.
"$SCRIPTS_DIR"/manage_pods.py clean

# Clean out Xcode build products.
# Note that Xcode seems to want to hold on to old Swift module maps, requiring a
# "force" clean instead of just asking xcodebuild to clean normally.
readonly WORKSPACE_SCHEMES=$("$SCRIPTS_DIR"/xcode/list_all_xcode_schemes)

for workspace_scheme in $WORKSPACE_SCHEMES; do  
  workspace=$(echo $workspace_scheme | cut -d: -f1)
  scheme=$(echo $workspace_scheme | cut -d: -f2)
  options="-workspace $workspace -scheme $scheme -showBuildSettings"
  build_dir=$(xcodebuild $options | grep -m1 "^    BUILD_DIR =" | cut -d= -f2)
  if [[ ! -z $build_dir ]]; then
    derived_data_dir=$(dirname $(dirname "$build_dir"))
    echo "Force-cleaning $derived_data_dir..."
    rm -rf "$derived_data_dir"
  fi
done
