###############################################################################
# libbrlapi - A library providing access to braille terminals for applications.
#
# Copyright (C) 2005-2023 by
#   Alexis Robert <alexissoft@free.fr>
#   Samuel Thibault <Samuel.Thibault@ens-lyon.org>
#
# libbrlapi comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

include $(SRC_TOP)bindings.mk

PYTHON_OK = @PYTHON_OK@
PYTHON = @PYTHON@
PYTHON_VERSION = @PYTHON_VERSION@
PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
PYTHON_LIBS = @PYTHON_LIBS@
PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@
PYTHON_SITE_PKG = @PYTHON_SITE_PKG@

CYTHON = @CYTHON@
CYTHON_CFLAGS = @CYTHON_CFLAGS@

PYTHON_DESTDIR = $(INSTALL_ROOT)
PYTHON_PREFIX =

PYTHON_MODULE = $(API_NAME)
PYTHON_API = $(PYTHON_MODULE).$(LIB_EXT)

V_setup_  = $(V_setup_0)
V_setup_0 = --quiet
V_setup_1 = --verbose
V_setup   = $(V_setup_$(V))

INSTALLED_FILES = installed-files

all: $(PYTHON_API)

$(PYTHON_API): brlapi.auto.c $(API_HDRS) | $(INSTALLED_FILES) brlapi
	set -- $(V_setup) build --build-temp .; \
	[ "@host_os@" != "mingw32" ] || set -- "$${@}" --compiler mingw32; \
	"$(PYTHON)" ./setup.py "$${@}"
	[ "@host_os@" != "mingw32" ] || "$(PYTHON)" ./setup.py $(V_setup) bdist_wininst --skip-build

$(INSTALLED_FILES):
	touch $(INSTALLED_FILES)

brlapi.auto.c: $(SRC_DIR)/brlapi.pyx $(SRC_DIR)/c_brlapi.pxd constants.auto.pyx
	"$(CYTHON)" -$(PYTHON_VERSION) -I. -X embedsignature=True -o $@ $(SRC_DIR)/brlapi.pyx

constants.auto.pyx: $(CONSTANTS_DEPENDENCIES)
	$(AWK) $(CONSTANTS_ARGUMENTS) >$@

doc: $(PYTHON_API)
	LD_PRELOAD=$(API_LIB) "$(PYTHON)" $(SRC_DIR)/mkdoc.py $(PYTHON_MODULE)

install: all
	set -- $(V_setup) install --skip-build --record "$(INSTALLED_FILES)"; \
	[ -z "$(PYTHON_DESTDIR)" ] || set -- "$${@}" --root "$(PYTHON_DESTDIR)"; \
	[ -z "$(PYTHON_PREFIX)" ] || set -- "$${@}" --prefix "$(PYTHON_PREFIX)"; \
	"$(PYTHON)" ./setup.py "$${@}"
	-rm -f -r -- Brlapi.egg-info

uninstall:
	[ ! -f "$(INSTALLED_FILES)" ] || rm -f -- `$(AWK) '{printf "%s%s ", "$(PYTHON_DESTDIR)", $$0}' "$(INSTALLED_FILES)"`

clean::
	-rm -f -- $(PYTHON_API) *.auto.* *.html "$(INSTALLED_FILES)"
	-rm -f -r -- build
	-rm -f -r -- dist
	-rm -f -r -- Release

distclean::
	-rm -f -- setup.py
