#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright (C) 2019 Apple Inc.  All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


# This script generates .xcfilelist files to be used as input and output
# specifications of Run Script build phases.
#
# Currently, this script looks at the Generate Derived Sources and Generate
# Unified Sources build phases. For the former, it invokes the
# DerivedSources.make makefile, passing in options that print out the
# dependency tree and using that information to form the associated input and
# output .xcfilelist files. For the latter, it invokes the same
# generate-unified-bundles.rb script that generates the actual
# UnifiedSources*.cpp/mm files, albeit in a mode that produces .xcfilelist
# files instead.
#
# This script not only generates .xcfilelists, but -- when given a "check"
# command -- it also checks that they are up-to-date. In this mode, the
# .xcfilelist files are created in a temporary location and are then compared
# to the versions checked into the repository. If there are differences, the
# user is notified so that they know that the .xcfilelist files need to be
# regenerated. This facility can be incorporated into a build phase, a check-in
# hook, or into the EWS (perhaps as part of check-webkit-style).
#
# As part of its operation, this script can sub-launch itself under Xcode. It
# does this in order to establish the context in which builds occur. In
# particular, it does this in order to set needed environment variables.

import sys

from webkitpy.generate_xcfilelists_lib.application import Application
from webkitpy.port.config import apple_additions

if __name__ == "__main__":
    application_class = apple_additions().get_generate_xcfilelists_application() if apple_additions() else Application
    sys.exit(application_class(__file__).run())
