# Copyright 2021 Google LLC
#
# 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.

load("@rules_foreign_cc//tools/build_defs:configure.bzl", "configure_make")

package(default_visibility = ["//visibility:public"])

filegroup(
    name = "all_srcs",
    srcs = glob(["**"]),
)

configure_make(
    name = "dosfstools_pkg",
    lib_source = ":all_srcs",
    configure_options = ["--disable-dependency-tracking"],
    make_commands = [
        # dosfstools requires the path to 'make' be present in the MAKE
        # variable. Since the configure_make() rule doesn't do this for us, some
        # magic is needed.
        # 1. Set MAKE to the output of a 'shell' function that reads the path of
        # the parent process. The parent process of the 'shell' function is the
        # make process, run by configure_make() using the correct make program.
        # 2. Write "$$PID" as "$$$PID$$". We do this because the
        # configure_make() rule has a substitution that does "$$PID$$" ->
        # "$PID".
        "make MAKE='$(shell realpath /proc/$$$PPID$$/exe)'",
        "make MAKE='$(shell realpath /proc/$$$PPID$$/exe)' install",
    ],
    out_bin_dir = "sbin",
    binaries = ["mkfs.fat"],
)

filegroup(
    name = "mkfs.fat",
    srcs = [":dosfstools_pkg"],
    output_group = "mkfs.fat",
)
