# Copyright 2017 The Fuchsia Authors
#
# 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.

cobalt_protobuf_generate_go(generate_yamlpb_test_pb_go_files
                            YAMLPB_TEST_PB_GO
                            false
                            src/yamlpb/yamlpb_test)

set(YAMLPB_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/yamlpb/yamlpb.go)
set(YAMLPB_TEST_BIN ${GO_TESTS}/yamlpb_test)
set(YAMLPB_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/yamlpb/yamlpb_test.go")
add_custom_command(OUTPUT ${YAMLPB_TEST_BIN}
    COMMAND ${GO_BIN} test -c -o ${YAMLPB_TEST_BIN} ${YAMLPB_TEST_SRC} ${YAMLPB_SRC}
    DEPENDS ${YAMLPB_SRC}
    DEPENDS ${YAMLPB_TEST_SRC}
    DEPENDS ${YAMLPB_TEST_PB_GO}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)

set(CONFIG_PARSER_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/project_list.go
                      ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/project_config.go
                      ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/git.go
                      ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/config_reader.go
                      ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/id.go
                      ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/filter.go)

set(CONFIG_VALIDATOR_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/validator.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/system_profile_field.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/encodings.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/metrics.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/metric_definitions.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/report_definitions.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/common_validator.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/reports.go)

set(SOURCE_GENERATOR_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/source_generator/source_outputter.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/source_generator/ident.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/source_generator/simple.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/source_generator/cpp.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/source_generator/dart.go
                         ${CMAKE_CURRENT_SOURCE_DIR}/src/source_generator/rust.go)

add_custom_command(OUTPUT ${CONFIG_PARSER_BINARY}
  # Compiles config_parser_main and all its dependencies.
  COMMAND ${GO_BIN} build -o ${CONFIG_PARSER_BINARY} config_parser_main.go
  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser_main.go
  DEPENDS ${CONFIG_PARSER_SRC}
  DEPENDS ${CONFIG_VALIDATOR_SRC}
  DEPENDS ${SOURCE_GENERATOR_SRC}
  DEPENDS ${CONFIG_PB_GO_FILES}
  DEPENDS ${YAMLPB_SRC}
  DEPENDS ../validation/validator
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)


# Build tests
set(CONFIG_PARSER_TEST_BIN ${GO_TESTS}/config_parser_test)
set(CONFIG_PARSER_TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/project_list_test.go
                            ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/config_reader_test.go
                            ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/id_test.go
                            ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/project_config_test.go
                            ${CMAKE_CURRENT_SOURCE_DIR}/src/config_parser/filter_test.go)

add_custom_command(OUTPUT ${CONFIG_PARSER_TEST_BIN}
    COMMAND ${GO_BIN} test -c -o ${CONFIG_PARSER_TEST_BIN} ${CONFIG_PARSER_TEST_SRC} ${CONFIG_PARSER_SRC}
    DEPENDS ${CONFIG_PARSER_SRC}
    DEPENDS ${CONFIG_PARSER_TEST_SRC}
    DEPENDS ${CONFIG_PB_GO_FILES}
    DEPENDS ${YAMLPB_SRC}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)

set(CONFIG_VALIDATOR_TEST_BIN ${GO_TESTS}/config_validator_tests)
set(CONFIG_VALIDATOR_TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/system_profile_field_test.go
                              ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/encodings_test.go
                              ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/reports_test.go
                              ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/metrics_test.go
                              ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/report_definitions_test.go
                              ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/metric_definitions_test.go
                              ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/common_validator_test.go
                              ${CMAKE_CURRENT_SOURCE_DIR}/src/config_validator/testutil.go)
add_custom_command(OUTPUT ${CONFIG_VALIDATOR_TEST_BIN}
  COMMAND ${GO_BIN} test -c -o ${CONFIG_VALIDATOR_TEST_BIN} ${CONFIG_VALIDATOR_TEST_SRC} ${CONFIG_VALIDATOR_SRC}
  DEPENDS ${CONFIG_VALIDATOR_SRC}
  DEPENDS ${CONFIG_VALIDATOR_TEST_SRC}
  DEPENDS ${CONFIG_PB_GO_FILES}
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)

set(SOURCE_GENERATOR_TEST_BIN ${GO_TESTS}/source_generator_test)
set(SOURCE_GENERATOR_TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/source_generator/source_generator_test.go
                              ${CMAKE_CURRENT_SOURCE_DIR}/src/source_generator/ident_test.go)
add_custom_command(OUTPUT ${SOURCE_GENERATOR_TEST_BIN}
  COMMAND ${GO_BIN} test -c -o ${SOURCE_GENERATOR_TEST_BIN} ${SOURCE_GENERATOR_TEST_SRC} ${SOURCE_GENERATOR_SRC}
  DEPENDS ${SOURCE_GENERATOR_SRC}
  DEPENDS ${SOURCE_GENERATOR_TEST_SRC}
  DEPENDS ${CONFIG_PB_GO_FILES}
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)

set(CONFIG_PARSER_STABILITY_TEST_BIN ${DIR_CONFIG_PARSER_TESTS}/test_stable_config_parser.py)
set(CONFIG_PARSER_STABILITY_TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/test_stable_config_parser.py)
add_custom_command(OUTPUT ${CONFIG_PARSER_STABILITY_TEST_BIN}
  COMMAND cmake -E create_symlink ${CONFIG_PARSER_STABILITY_TEST_SRC} ${CONFIG_PARSER_STABILITY_TEST_BIN}
  DEPENDS ${CONFIG_PARSER_STABILITY_TEST_SRC}
)

# Force the build to occur.
add_custom_target(build_config_parser ALL
    DEPENDS ${YAMLPB_TEST_BIN}
    DEPENDS ${CONFIG_PARSER_TEST_BIN}
    DEPENDS ${CONFIG_PARSER_BINARY}
    DEPENDS ${CONFIG_VALIDATOR_TEST_BIN}
    DEPENDS ${SOURCE_GENERATOR_TEST_BIN}
    DEPENDS ${CONFIG_PARSER_STABILITY_TEST_BIN}
)
