#!/usr/bin/make -f
# 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.

include debian/sm_ver.mk

%:
	dh $@ --with=systemd

override_dh_auto_clean:
	dh_auto_clean
	-mv src/mango/src/mango_cursor_text.erl.nocompile src/mango/src/mango_cursor_text.erl
	-mv src/mango/src/mango_cursor_text.nocompile src/mango/src/mango_cursor_text.erl

override_dh_auto_configure:
	./configure -c --spidermonkey-version $(SM_VER)

override_dh_auto_build:
	dh_auto_build -- release
	rm -rf rel/couchdb/var/log
	-rm -rf rel/couchdb/data

# skipping tests until suite is 100% reliable
override_dh_auto_test:

# instead we rely on dh_install and the couchdb.install file
override_dh_auto_install:

get-orig-source:
	uscan --noconf --download-current-version --destdir=. --rename

# this allows us to use a fake/equivs libmozjs185-1.0 in automated testing
override_dh_shlibdeps:
	dh_shlibdeps -- --ignore-missing-info -xlibmozjs185-1.0

# bintray doesn't support xz uploads :(
override_dh_builddeb:
	dh_builddeb -- -Zgzip
