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

AUTOMAKE_OPTIONS = subdir-objects

MAKE_SAFE = $(MAKE)

couchlibdir = $(localerlanglibdir)/couch-$(version)
couchprivdir = $(couchlibdir)/priv
couchprivlibdir = $(couchlibdir)/priv/lib
man1dir = $(mandir)/man1

man_file = couchjs.1

if BUILD_MAN
man_file_build = $(man_file)
else
man_file_build =
endif

BUILT_SOURCES = $(man_file_build)

EXTRA_DIST = \
	spawnkillable/couchspawnkillable.sh \
	stat_descriptions.cfg.in \
	couch_ejson_compare/erl_nif_compat.h \
	couch_js/sm170.c \
	couch_js/sm180.c \
	couch_js/sm185.c \
	$(man_file_build)

CLEANFILES = $(man_file_build) stat_descriptions.cfg

couchprivlib_LTLIBRARIES = couch_icu_driver.la
if USE_EJSON_COMPARE_NIF
couchprivlib_LTLIBRARIES += couch_ejson_compare.la
couch_ejson_compare_la_SOURCES = couch_ejson_compare/couch_ejson_compare.c
couch_ejson_compare_la_CPPFLAGS = -D_BSD_SOURCE $(ICU_CPPFLAGS) $(ERLANG_FLAGS)
couch_ejson_compare_la_LDFLAGS = -module -avoid-version
couch_ejson_compare_la_LIBADD = $(ICU_LIBS)
if WINDOWS
couch_ejson_compare_la_LDFLAGS += -no-undefined
endif
endif
couch_icu_driver_la_SOURCES = icu_driver/couch_icu_driver.c
couch_icu_driver_la_LDFLAGS = -module -avoid-version
couch_icu_driver_la_CPPFLAGS = $(ICU_CPPFLAGS) $(ERLANG_FLAGS)
couch_icu_driver_la_LIBADD = $(ICU_LIBS)

if WINDOWS
couch_icu_driver_la_LDFLAGS += -no-undefined
endif

COUCHJS_SRCS = \
	couch_js/help.h \
	couch_js/http.c \
	couch_js/http.h \
	couch_js/main.c \
	couch_js/utf8.c \
	couch_js/utf8.h \
	couch_js/util.h \
	couch_js/util.c

locallibbin_PROGRAMS = couchjs
couchjs_SOURCES = $(COUCHJS_SRCS)
couchjs_CFLAGS = -g -Wall -Werror -D_BSD_SOURCE $(CURL_CFLAGS) $(JS_CFLAGS)
couchjs_LDADD = $(CURL_LIBS) $(JS_LIBS)

couchpriv_DATA = stat_descriptions.cfg
couchpriv_PROGRAMS = couchspawnkillable

# Depend on source files so distributed man pages are not rebuilt for end user.

$(man_file): $(COUCHJS_SRCS)
	$(MAKE_SAFE) -f Makefile couchjs; \
	$(top_srcdir)/build-aux/missing --run \
	    help2man \
	        --no-info \
	        --help-option="-h" \
	        --version-option="-V" \
	        --name="$(package_name) JavaScript interpreter" \
	        ./couchjs --output $@

install-data-local:
	if test -s $(man_file); then \
	    if test `cat $(man_file) | wc -l` -gt 1; then \
	        $(INSTALL) -d $(DESTDIR)$(man1dir); \
	        $(INSTALL_DATA) $(man_file) $(DESTDIR)$(man1dir)/$(man_file); \
	    fi \
	fi

%.cfg: %.cfg.in
	cp $< $@

if WINDOWS
couchspawnkillable_SOURCES = spawnkillable/couchspawnkillable_win.c
endif

if !WINDOWS
couchspawnkillable: spawnkillable/couchspawnkillable.sh
	cp $< $@
	chmod +x $@
endif

# libtool and automake have defeated markh.  For each of our executables
# we end up with 2 copies - one directly in the 'target' folder (eg, 'priv')
# and another - the correct one - in .libs.  The former doesn't work but is
# what gets installed for 'couchspawnkillable' - but the correct one for
# couchjs.exe *does* get copied.  *shrug*  So just clobber it with the
# correct one as the last step. See bug COUCHDB-439
install-data-hook:
	if test -f "$(DESTDIR)$(couchprivlibdir)/couch_icu_driver"; then \
	    rm -f "$(DESTDIR)$(couchprivlibdir)/couch_icu_driver.so"; \
	    cd "$(DESTDIR)$(couchprivlibdir)" && \
	        $(LN_S) couch_icu_driver couch_icu_driver.so; \
	fi
	if test -f "$(DESTDIR)$(couchprivlibdir)/couch_ejson_compare_nif"; then \
	    rm -f "$(DESTDIR)$(couchprivlibdir)/couch_ejson_compare_nif.so"; \
	    cd "$(DESTDIR)$(couchprivlibdir)" && \
	        $(LN_S) couch_ejson_compare_nif couch_ejson_compare_nif.so; \
	fi
if WINDOWS
	$(INSTALL) $(ICU_BIN)/icuuc*.dll $(bindir)
	$(INSTALL) $(ICU_BIN)/icudt*.dll $(bindir)
	$(INSTALL) $(ICU_BIN)/icuin*.dll $(bindir)
	$(INSTALL) $(JS_LIB_BINARY) $(bindir)
	$(INSTALL) .libs/couchspawnkillable.exe \
		"$(DESTDIR)$(couchprivdir)/couchspawnkillable.exe"
endif

uninstall-local:
	rm -f $(DESTDIR)$(man1dir)/$(man_file)
	if test -f "$(DESTDIR)$(couchprivlibdir)/couch_erl_driver"; then \
	    rm -f "$(DESTDIR)$(couchprivlibdir)/couch_erl_driver.so"; \
	fi

distcheck-hook:
	if test ! -s $(man_file); then \
	    $(top_srcdir)/build-aux/dist-error $(man_file); \
	else \
	    if test ! `cat $(man_file) | wc -l` -gt 1; then \
	        $(top_srcdir)/build-aux/dist-error $(man_file); \
	    fi \
	fi
