#
# 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.

AM_YFLAGS = -d
BUILT_SOURCES =

bin_PROGRAMS = thrift

thrift_OBJDIR = obj

thrift_SOURCES = src/thrifty.yy \
                 src/thriftl.ll \
                 src/main.cc \
                 src/md5.c \
                 src/generate/t_generator.cc \
                 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_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/generate/t_generator.h \
                 src/generate/t_oop_generator.h

if THRIFT_GEN_cpp
thrift_SOURCES += src/generate/t_cpp_generator.cc
endif
if THRIFT_GEN_java
thrift_SOURCES += src/generate/t_java_generator.cc
endif
if THRIFT_GEN_csharp
thrift_SOURCES += src/generate/t_csharp_generator.cc
endif
if THRIFT_GEN_py
thrift_SOURCES += src/generate/t_py_generator.cc
endif
if THRIFT_GEN_rb
thrift_SOURCES += src/generate/t_rb_generator.cc
endif
if THRIFT_GEN_perl
thrift_SOURCES += src/generate/t_perl_generator.cc
endif
if THRIFT_GEN_php
thrift_SOURCES += src/generate/t_php_generator.cc
endif
if THRIFT_GEN_erl
thrift_SOURCES += src/generate/t_erl_generator.cc
endif
if THRIFT_GEN_cocoa
thrift_SOURCES += src/generate/t_cocoa_generator.cc
endif
if THRIFT_GEN_st
thrift_SOURCES += src/generate/t_st_generator.cc
endif
if THRIFT_GEN_ocaml
thrift_SOURCES += src/generate/t_ocaml_generator.cc
endif
if THRIFT_GEN_hs
thrift_SOURCES += src/generate/t_hs_generator.cc
endif
if THRIFT_GEN_xsd
thrift_SOURCES += src/generate/t_xsd_generator.cc
endif
if THRIFT_GEN_html
thrift_SOURCES += src/generate/t_html_generator.cc
endif

thrift_CXXFLAGS = -Wall -I$(srcdir)/src $(BOOST_CPPFLAGS)
thrift_LDFLAGS = -Wall $(BOOST_LDFLAGS)

thrift_LDADD = @LEXLIB@

EXTRA_DIST = README

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

src/main.cc: version.h

# Adding this to BUILT_SOURCES will cause version.h to be
# regenerated on every "make all" or "make check", which is
# necessary because it changes whenever we "svn up" or similar.
# Ideally, we would like this to be regenerated whenever the
# compiler is rebuilt, but every way we could think of to do
# that caused unnecessary rebuilds of the compiler.
BUILT_SOURCES += regen_version_h

THRIFT_VERSION=$(shell /bin/sh $(top_srcdir)/print_version.sh -v)
THRIFT_REVISION=$(shell /bin/sh $(top_srcdir)/print_version.sh -r)

regen_version_h:
	@printf "Regenerating version.h... "
	@TMPFILE=`mktemp ./version_h.tmp_XXXXXX` ; \
		echo "// AUTOGENERATED, DO NOT EDIT" > $$TMPFILE ; \
		echo '#define THRIFT_VERSION "$(THRIFT_VERSION)"' >> $$TMPFILE ; \
		echo '#define THRIFT_REVISION "$(THRIFT_REVISION)"' >> $$TMPFILE ; \
		if cmp $$TMPFILE version.h >/dev/null ; \
		then \
			rm -f $$TMPFILE ; \
			echo "No changes." ; \
		else \
			mv $$TMPFILE version.h ; \
			echo "Updated." ; \
		fi
