#
# 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_as3
thrift_SOURCES += src/generate/t_as3_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
if THRIFT_GEN_js
thrift_SOURCES += src/generate/t_js_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
