# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.


# where to put generated libraries
set(LIBRARY_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/thrift")

# where to put generated binaries
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/thrift")

set(SRC_FILES
  CatalogObjects_constants.cpp
  CatalogObjects_types.cpp
  CatalogService.cpp
  CatalogService_constants.cpp
  CatalogService_types.cpp
  CatalogInternalService_constants.cpp
  CatalogInternalService_types.cpp
  ImpalaInternalService.cpp
  ImpalaInternalService_constants.cpp
  ImpalaInternalService_types.cpp
  ImpalaService.cpp
  ImpalaService_constants.cpp
  ImpalaService_types.cpp
  ImpalaHiveServer2Service.cpp
  Llama_constants.cpp
  Llama_types.cpp
  LlamaAMService.cpp
  LlamaNotificationService.cpp
  beeswax_constants.cpp
  beeswax_types.cpp
  BeeswaxService.cpp
  TCLIService.cpp
  TCLIService_constants.cpp
  TCLIService_types.cpp
  Data_constants.cpp
  Data_types.cpp
  DataSinks_constants.cpp
  DataSinks_types.cpp
  Descriptors_constants.cpp
  Descriptors_types.cpp
  ErrorCodes_types.cpp
  ErrorCodes_constants.cpp
  ExecStats_constants.cpp
  ExecStats_types.cpp
  Exprs_constants.cpp
  Exprs_types.cpp
  ExternalDataSource_constants.cpp
  ExternalDataSource_types.cpp
  Frontend_types.cpp
  Frontend_constants.cpp
  hive_metastore_constants.cpp
  hive_metastore_types.cpp
  JniCatalog_constants.cpp
  JniCatalog_types.cpp
  Logging_types.cpp
  LineageGraph_types.cpp
  LineageGraph_constants.cpp
  Metrics_constants.cpp
  Metrics_types.cpp
  MetricDefs_constants.cpp
  MetricDefs_types.cpp
  NetworkTest_constants.cpp
  NetworkTest_types.cpp
  NetworkTestService.cpp
  PlanNodes_constants.cpp
  PlanNodes_types.cpp
  ResourceBrokerNotificationService.cpp
  ResourceBrokerService_constants.cpp
  ResourceBrokerService_types.cpp
  ResourceBrokerService.cpp
  Results_constants.cpp
  Results_types.cpp
  Partitions_constants.cpp
  Partitions_types.cpp
  Planner_constants.cpp
  Planner_types.cpp
  parquet_constants.cpp
  parquet_types.cpp
  RuntimeProfile_constants.cpp
  RuntimeProfile_types.cpp
  StatestoreService.cpp
  StatestoreService_constants.cpp
  StatestoreService_types.cpp
  StatestoreSubscriber.cpp
  Status_constants.cpp
  Status_types.cpp
  Types_constants.cpp
  Types_types.cpp
)

# keep everything in one library, the object files reference
# each other
add_library(ImpalaThrift ${SRC_FILES})

# Setting these files as code-generated lets make clean and incremental builds work
# correctly
set_source_files_properties(${SRC_FILES} PROPERTIES GENERATED TRUE)

add_dependencies(ImpalaThrift thrift-deps)
