#
# 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.
#
#
# Contains some contributions under the Thrift Software License.
# Please see doc/old-thrift-license.txt in the Thrift distribution for
# details.

# Override Automake rule that forces .hh extension 
am__yacc_c2h = sed -e s/cc$$/h/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
           -e s/c++$$/h++/ -e s/c$$/h/

AM_YFLAGS = -d
LIBS =
BUILT_SOURCES = thrifty.cc

bin_PROGRAMS = thrift

noinst_LIBRARIES = libparse.a

thrift_OBJDIR = obj

thrift_SOURCES = src/main.cc \
                 src/md5.c \
                 src/generate/t_generator.cc \
                 src/generate/t_generator_registry.h \
                 src/globals.h \
                 src/main.h \
                 src/platform.h \
                 src/md5.h \
                 src/parse/t_doc.h \
                 src/parse/t_type.h \
                 src/parse/t_base_type.h \
                 src/parse/t_enum.h \
                 src/parse/t_enum_value.h \
                 src/parse/t_typedef.h \
                 src/parse/t_typedef.cc \
                 src/parse/t_container.h \
                 src/parse/t_list.h \
                 src/parse/t_set.h \
                 src/parse/t_map.h \
                 src/parse/t_struct.h \
                 src/parse/t_field.h \
                 src/parse/t_service.h \
                 src/parse/t_function.h \
                 src/parse/t_program.h \
                 src/parse/t_scope.h \
                 src/parse/t_const.h \
                 src/parse/t_const_value.h \
                 src/parse/parse.cc \
                 src/generate/t_generator.h \
                 src/generate/t_oop_generator.h \
                 src/generate/t_html_generator.h \
                 src/windows/config.h \
                 src/windows/version.h

# Specific client generator source
thrift_SOURCES += src/generate/t_c_glib_generator.cc \
                  src/generate/t_cpp_generator.cc \
                  src/generate/t_java_generator.cc \
                  src/generate/t_as3_generator.cc \
                  src/generate/t_csharp_generator.cc \
                  src/generate/t_py_generator.cc \
                  src/generate/t_rb_generator.cc \
                  src/generate/t_perl_generator.cc \
                  src/generate/t_php_generator.cc \
                  src/generate/t_erl_generator.cc \
                  src/generate/t_cocoa_generator.cc \
                  src/generate/t_st_generator.cc \
                  src/generate/t_ocaml_generator.cc \
                  src/generate/t_hs_generator.cc \
                  src/generate/t_xsd_generator.cc \
                  src/generate/t_html_generator.cc \
                  src/generate/t_js_generator.cc \
                  src/generate/t_javame_generator.cc \
                  src/generate/t_delphi_generator.cc \
                  src/generate/t_go_generator.cc \
                  src/generate/t_gv_generator.cc \
                  src/generate/t_d_generator.cc \
                  src/generate/t_lua_generator.cc

thrift_CPPFLAGS = -I$(srcdir)/src
thrift_CXXFLAGS = -Wall
thrift_LDADD = @LEXLIB@ libparse.a

libparse_a_CPPFLAGS = -I$(srcdir)/src
libparse_a_CXXFLAGS = -Wall -Wno-sign-compare -Wno-unused

libparse_a_SOURCES = src/thrifty.yy \
                     src/thriftl.ll

WINDOWS_DIST = \
             compiler.sln \
             compiler.vcxproj \
             compiler.vcxproj.filters \
             README_Windows.md

EXTRA_DIST = \
             $(WINDOWS_DIST)

clean-local:
	$(RM) thriftl.cc thrifty.cc thrifty.h thrifty.hh version.h windows/version.h

src/main.cc: version.h
