# SPDX-License-Identifier: GPL-2.0
if CLIENT
bin_PROGRAMS += client/bluetoothctl

client_bluetoothctl_SOURCES = client/main.c \
					client/display.h client/display.c \
					client/agent.h client/agent.c \
					client/advertising.h \
					client/advertising.c \
					client/adv_monitor.h \
					client/adv_monitor.c \
					client/gatt.h client/gatt.c \
					client/admin.h \
					client/admin.c
client_bluetoothctl_LDADD = gdbus/libgdbus-internal.la src/libshared-glib.la \
				$(GLIB_LIBS) $(DBUS_LIBS) -lreadline
endif

if ZSH_COMPLETIONS
zshcompletiondir=$(ZSH_COMPLETIONDIR)
dist_zshcompletion_DATA = completion/zsh/_bluetoothctl
endif

if MONITOR
bin_PROGRAMS += monitor/btmon

monitor_btmon_SOURCES = monitor/main.c monitor/bt.h \
				monitor/display.h monitor/display.c \
				monitor/hcidump.h monitor/hcidump.c \
				monitor/ellisys.h monitor/ellisys.c \
				monitor/control.h monitor/control.c \
				monitor/packet.h monitor/packet.c \
				monitor/vendor.h monitor/vendor.c \
				monitor/lmp.h monitor/lmp.c \
				monitor/crc.h monitor/crc.c \
				monitor/ll.h monitor/ll.c \
				monitor/l2cap.h monitor/l2cap.c \
				monitor/sdp.h monitor/sdp.c \
				monitor/avctp.h monitor/avctp.c \
				monitor/avdtp.h monitor/avdtp.c \
				monitor/a2dp.h monitor/a2dp.c \
				monitor/rfcomm.h monitor/rfcomm.c \
				monitor/bnep.h monitor/bnep.c \
				monitor/hwdb.h monitor/hwdb.c \
				monitor/keys.h monitor/keys.c \
				monitor/analyze.h monitor/analyze.c \
				monitor/intel.h monitor/intel.c \
				monitor/broadcom.h monitor/broadcom.c \
				monitor/msft.h monitor/msft.c \
				monitor/jlink.h monitor/jlink.c \
				monitor/tty.h
monitor_btmon_LDADD = lib/libbluetooth-internal.la \
				src/libshared-mainloop.la $(UDEV_LIBS) -ldl

if MANPAGES
man_MANS += monitor/btmon.1
endif
endif
manual_pages += monitor/btmon.1

if LOGGER
pkglibexec_PROGRAMS += tools/btmon-logger

tools_btmon_logger_SOURCES = tools/btmon-logger.c
tools_btmon_logger_LDADD = src/libshared-mainloop.la
tools_btmon_logger_DEPENDENCIES = src/libshared-mainloop.la \
					tools/bluetooth-logger.service

if SYSTEMD
systemdsystemunit_DATA += tools/bluetooth-logger.service
endif
endif

CLEANFILES += tools/bluetooth-logger.service
EXTRA_DIST += tools/bluetooth-logger.service.in

if TESTING
noinst_PROGRAMS += emulator/btvirt emulator/b1ee emulator/hfp \
					peripheral/btsensor tools/3dsp \
					tools/mgmt-tester tools/gap-tester \
					tools/l2cap-tester tools/sco-tester \
					tools/smp-tester tools/hci-tester \
					tools/rfcomm-tester tools/bnep-tester \
					tools/userchan-tester

emulator_btvirt_SOURCES = emulator/main.c monitor/bt.h \
				emulator/serial.h emulator/serial.c \
				emulator/server.h emulator/server.c \
				emulator/vhci.h emulator/vhci.c \
				emulator/btdev.h emulator/btdev.c \
				emulator/bthost.h emulator/bthost.c \
				emulator/smp.c \
				emulator/phy.h emulator/phy.c \
				emulator/amp.h emulator/amp.c \
				emulator/le.h emulator/le.c
emulator_btvirt_LDADD = lib/libbluetooth-internal.la src/libshared-mainloop.la

emulator_b1ee_SOURCES = emulator/b1ee.c
emulator_b1ee_LDADD = src/libshared-mainloop.la

emulator_hfp_SOURCES = emulator/hfp.c
emulator_hfp_LDADD = src/libshared-mainloop.la

peripheral_btsensor_SOURCES = peripheral/main.c \
				peripheral/efivars.h peripheral/efivars.c \
				peripheral/attach.h peripheral/attach.c \
				peripheral/log.h peripheral/log.c \
				peripheral/gap.h peripheral/gap.c \
				peripheral/gatt.h peripheral/gatt.c
peripheral_btsensor_LDADD = src/libshared-mainloop.la \
				lib/libbluetooth-internal.la

tools_3dsp_SOURCES = tools/3dsp.c monitor/bt.h
tools_3dsp_LDADD = src/libshared-mainloop.la

tools_mgmt_tester_SOURCES = tools/mgmt-tester.c monitor/bt.h \
				emulator/hciemu.h emulator/hciemu.c \
				emulator/btdev.h emulator/btdev.c \
				emulator/bthost.h emulator/bthost.c \
				emulator/smp.c
tools_mgmt_tester_LDADD = lib/libbluetooth-internal.la \
				src/libshared-glib.la $(GLIB_LIBS)

tools_l2cap_tester_SOURCES = tools/l2cap-tester.c monitor/bt.h \
				emulator/hciemu.h emulator/hciemu.c \
				emulator/btdev.h emulator/btdev.c \
				emulator/bthost.h emulator/bthost.c \
				emulator/smp.c
tools_l2cap_tester_LDADD = lib/libbluetooth-internal.la \
				src/libshared-glib.la $(GLIB_LIBS)

tools_rfcomm_tester_SOURCES = tools/rfcomm-tester.c monitor/bt.h \
				emulator/hciemu.h emulator/hciemu.c \
				emulator/btdev.h emulator/btdev.c \
				emulator/bthost.h emulator/bthost.c \
				emulator/smp.c
tools_rfcomm_tester_LDADD = lib/libbluetooth-internal.la \
				src/libshared-glib.la $(GLIB_LIBS)

tools_bnep_tester_SOURCES = tools/bnep-tester.c monitor/bt.h \
				emulator/hciemu.h emulator/hciemu.c \
				emulator/btdev.h emulator/btdev.c \
				emulator/bthost.h emulator/bthost.c \
				emulator/smp.c
tools_bnep_tester_LDADD = lib/libbluetooth-internal.la \
				src/libshared-glib.la $(GLIB_LIBS)

tools_smp_tester_SOURCES = tools/smp-tester.c monitor/bt.h \
				emulator/hciemu.h emulator/hciemu.c \
				emulator/btdev.h emulator/btdev.c \
				emulator/bthost.h emulator/bthost.c \
				emulator/smp.c
tools_smp_tester_LDADD = lib/libbluetooth-internal.la \
				src/libshared-glib.la $(GLIB_LIBS)

tools_gap_tester_SOURCES = tools/gap-tester.c monitor/bt.h \
				emulator/hciemu.h emulator/hciemu.c \
				emulator/btdev.h emulator/btdev.c \
				emulator/bthost.h emulator/bthost.c \
				emulator/smp.c
tools_gap_tester_LDADD =  lib/libbluetooth-internal.la \
				gdbus/libgdbus-internal.la \
				src/libshared-glib.la \
				$(GLIB_LIBS) $(DBUS_LIBS)

tools_sco_tester_SOURCES = tools/sco-tester.c monitor/bt.h \
				emulator/hciemu.h emulator/hciemu.c \
				emulator/btdev.h emulator/btdev.c \
				emulator/bthost.h emulator/bthost.c \
				emulator/smp.c
tools_sco_tester_LDADD = lib/libbluetooth-internal.la \
				src/libshared-glib.la $(GLIB_LIBS)

tools_hci_tester_SOURCES = tools/hci-tester.c monitor/bt.h
tools_hci_tester_LDADD = src/libshared-glib.la $(GLIB_LIBS)

tools_userchan_tester_SOURCES = tools/userchan-tester.c monitor/bt.h \
				emulator/hciemu.h emulator/hciemu.c \
				emulator/btdev.h emulator/btdev.c \
				emulator/bthost.h emulator/bthost.c \
				emulator/smp.c
tools_userchan_tester_LDADD = lib/libbluetooth-internal.la \
				src/libshared-glib.la $(GLIB_LIBS)
endif

if TOOLS
bin_PROGRAMS += tools/rctest tools/l2test tools/l2ping tools/bluemoon \
		tools/hex2hcd tools/mpris-proxy tools/btattach

noinst_PROGRAMS += tools/bdaddr tools/avinfo tools/avtest \
			tools/scotest tools/amptest tools/hwdb \
			tools/hcieventmask tools/hcisecfilter \
			tools/btinfo tools/btconfig \
			tools/btsnoop tools/btproxy \
			tools/btiotest tools/bneptest tools/mcaptest \
			tools/cltest tools/oobtest tools/advtest \
			tools/seq2bseq tools/nokfw tools/rtlfw \
			tools/bcmfw tools/create-image \
			tools/eddystone tools/ibeacon \
			tools/btgatt-client tools/btgatt-server \
			tools/test-runner tools/check-selftest \
			tools/gatt-service profiles/iap/iapd

tools_bdaddr_SOURCES = tools/bdaddr.c src/oui.h src/oui.c
tools_bdaddr_LDADD = lib/libbluetooth-internal.la $(UDEV_LIBS)

tools_avinfo_LDADD = lib/libbluetooth-internal.la

tools_avtest_LDADD = lib/libbluetooth-internal.la

tools_scotest_LDADD = lib/libbluetooth-internal.la

tools_amptest_LDADD = lib/libbluetooth-internal.la

tools_hwdb_LDADD = lib/libbluetooth-internal.la

tools_hcieventmask_LDADD = lib/libbluetooth-internal.la

tools_btinfo_SOURCES = tools/btinfo.c monitor/bt.h
tools_btinfo_LDADD = src/libshared-mainloop.la

tools_btattach_SOURCES = tools/btattach.c monitor/bt.h
tools_btattach_LDADD = src/libshared-mainloop.la

tools_btconfig_SOURCES = tools/btconfig.c
tools_btconfig_LDADD = src/libshared-mainloop.la

tools_btsnoop_SOURCES = tools/btsnoop.c
tools_btsnoop_LDADD = src/libshared-mainloop.la

tools_btproxy_SOURCES = tools/btproxy.c monitor/bt.h
tools_btproxy_LDADD = src/libshared-mainloop.la

tools_btiotest_SOURCES = tools/btiotest.c btio/btio.h btio/btio.c
tools_btiotest_LDADD = lib/libbluetooth-internal.la $(GLIB_LIBS)

tools_mcaptest_SOURCES = tools/mcaptest.c \
				btio/btio.h btio/btio.c \
				src/log.c src/log.h \
				profiles/health/mcap.h profiles/health/mcap.c
tools_mcaptest_LDADD = lib/libbluetooth-internal.la $(GLIB_LIBS) \
				src/libshared-mainloop.la -lrt

tools_bneptest_SOURCES = tools/bneptest.c \
				btio/btio.h btio/btio.c \
				src/log.h src/log.c \
				profiles/network/bnep.h profiles/network/bnep.c
tools_bneptest_LDADD = lib/libbluetooth-internal.la $(GLIB_LIBS) \
				src/libshared-mainloop.la

tools_cltest_SOURCES = tools/cltest.c
tools_cltest_LDADD = lib/libbluetooth-internal.la src/libshared-mainloop.la

tools_oobtest_SOURCES = tools/oobtest.c
tools_oobtest_LDADD = lib/libbluetooth-internal.la src/libshared-mainloop.la

tools_advtest_SOURCES = tools/advtest.c
tools_advtest_LDADD = lib/libbluetooth-internal.la src/libshared-mainloop.la

tools_seq2bseq_SOURCES = tools/seq2bseq.c

tools_nokfw_SOURCES = tools/nokfw.c

tools_rtlfw_SOURCES = tools/rtlfw.c

tools_create_image_SOURCES = tools/create-image.c

tools_eddystone_SOURCES = tools/eddystone.c monitor/bt.h
tools_eddystone_LDADD = src/libshared-mainloop.la

tools_ibeacon_SOURCES = tools/ibeacon.c monitor/bt.h
tools_ibeacon_LDADD = src/libshared-mainloop.la

tools_btgatt_client_SOURCES = tools/btgatt-client.c src/uuid-helper.c
tools_btgatt_client_LDADD = src/libshared-mainloop.la \
						lib/libbluetooth-internal.la

tools_btgatt_server_SOURCES = tools/btgatt-server.c src/uuid-helper.c
tools_btgatt_server_LDADD = src/libshared-mainloop.la \
						lib/libbluetooth-internal.la

tools_rctest_LDADD = lib/libbluetooth-internal.la

tools_l2test_LDADD = lib/libbluetooth-internal.la

tools_l2ping_LDADD = lib/libbluetooth-internal.la

tools_bluemoon_SOURCES = tools/bluemoon.c monitor/bt.h
tools_bluemoon_LDADD = src/libshared-mainloop.la

tools_hex2hcd_SOURCES = tools/hex2hcd.c

tools_mpris_proxy_SOURCES = tools/mpris-proxy.c
tools_mpris_proxy_LDADD = gdbus/libgdbus-internal.la $(GLIB_LIBS) $(DBUS_LIBS)

tools_gatt_service_SOURCES = tools/gatt-service.c
tools_gatt_service_LDADD = $(GLIB_LIBS) $(DBUS_LIBS) gdbus/libgdbus-internal.la

profiles_iap_iapd_SOURCES = profiles/iap/main.c
profiles_iap_iapd_LDADD = gdbus/libgdbus-internal.la $(GLIB_LIBS) $(DBUS_LIBS)

if MANPAGES
man_MANS += tools/rctest.1 tools/l2ping.1 tools/btattach.1
endif

if MESH
bin_PROGRAMS += tools/meshctl

tools_meshctl_SOURCES = tools/meshctl.c \
				tools/mesh/agent.h tools/mesh/agent.c \
				tools/mesh/config-model.h\
				tools/mesh-gatt/mesh-net.h \
				tools/mesh-gatt/node.h tools/mesh-gatt/node.c \
				tools/mesh-gatt/gatt.h tools/mesh-gatt/gatt.c \
				tools/mesh-gatt/crypto.h\
				tools/mesh-gatt/crypto.c \
				tools/mesh-gatt/keys.h \
				tools/mesh-gatt/net.h tools/mesh-gatt/net.c \
				tools/mesh-gatt/prov.h tools/mesh-gatt/prov.c \
				tools/mesh-gatt/util.h tools/mesh-gatt/util.c \
				tools/mesh-gatt/prov-db.h \
				tools/mesh-gatt/prov-db.c \
				tools/mesh-gatt/config-client.c \
				tools/mesh-gatt/config-server.c \
				tools/mesh-gatt/onoff-model.h \
				tools/mesh-gatt/onoff-model.c
tools_meshctl_LDADD = gdbus/libgdbus-internal.la src/libshared-glib.la \
				lib/libbluetooth-internal.la \
				$(GLIB_LIBS) $(DBUS_LIBS) -ljson-c -lreadline

bin_PROGRAMS +=  tools/mesh-cfgclient

tools_mesh_cfgclient_SOURCES = tools/mesh-cfgclient.c \
				tools/mesh/model.h tools/mesh/config-model.h \
				tools/mesh/cfgcli.h tools/mesh/cfgcli.c \
				tools/mesh/keys.h tools/mesh/keys.c \
				tools/mesh/util.h tools/mesh/util.c \
				tools/mesh/remote.h tools/mesh/remote.c \
				tools/mesh/agent.h tools/mesh/agent.c \
				tools/mesh/mesh-db.h tools/mesh/mesh-db.c \
				mesh/util.h mesh/util.c \
				mesh/crypto.h mesh/crypto.c

tools_mesh_cfgclient_LDADD = lib/libbluetooth-internal.la src/libshared-ell.la \
						$(ell_ldadd) -ljson-c -lreadline

bin_PROGRAMS +=  tools/mesh-cfgtest

tools_mesh_cfgtest_SOURCES = tools/mesh-cfgtest.c
tools_mesh_cfgtest_LDADD = lib/libbluetooth-internal.la src/libshared-ell.la \
						$(ell_ldadd)
endif

EXTRA_DIST += tools/mesh-gatt/local_node.json tools/mesh-gatt/prov_db.json

if DEPRECATED
bin_PROGRAMS += tools/hciattach tools/hciconfig tools/hcitool tools/hcidump \
			tools/rfcomm tools/sdptool tools/ciptool

tools_hciattach_SOURCES = tools/hciattach.c tools/hciattach.h \
						tools/hciattach_st.c \
						tools/hciattach_ti.c \
						tools/hciattach_tialt.c \
						tools/hciattach_ath3k.c \
						tools/hciattach_qualcomm.c \
						tools/hciattach_intel.c \
						tools/hciattach_bcm43xx.c
tools_hciattach_LDADD = lib/libbluetooth-internal.la

tools_hciconfig_SOURCES = tools/hciconfig.c
tools_hciconfig_LDADD = lib/libbluetooth-internal.la

tools_hcitool_SOURCES = tools/hcitool.c src/oui.h src/oui.c
tools_hcitool_LDADD = lib/libbluetooth-internal.la $(UDEV_LIBS)

tools_hcidump_SOURCES = tools/hcidump.c \
				tools/parser/parser.h tools/parser/parser.c \
				tools/parser/lmp.c \
				tools/parser/hci.c \
				tools/parser/l2cap.h tools/parser/l2cap.c \
				tools/parser/amp.c \
				tools/parser/smp.c \
				tools/parser/att.c \
				tools/parser/sdp.h tools/parser/sdp.c \
				tools/parser/rfcomm.h tools/parser/rfcomm.c \
				tools/parser/bnep.c \
				tools/parser/cmtp.c \
				tools/parser/hidp.c \
				tools/parser/hcrp.c \
				tools/parser/avdtp.c \
				tools/parser/avctp.c \
				tools/parser/avrcp.c \
				tools/parser/sap.c \
				tools/parser/obex.c \
				tools/parser/capi.c \
				tools/parser/ppp.c \
				tools/parser/tcpip.c \
				tools/parser/ericsson.c \
				tools/parser/csr.c \
				tools/parser/bpa.c

tools_sdptool_SOURCES = tools/sdptool.c src/sdp-xml.h src/sdp-xml.c
tools_sdptool_LDADD = lib/libbluetooth-internal.la $(GLIB_LIBS)

tools_ciptool_LDADD = lib/libbluetooth-internal.la
tools_hcidump_LDADD = lib/libbluetooth-internal.la

tools_rfcomm_LDADD = lib/libbluetooth-internal.la

if MANPAGES
man_MANS += tools/hciattach.1 tools/hciconfig.1 \
			tools/hcitool.1 tools/hcidump.1 \
			tools/rfcomm.1 tools/sdptool.1 tools/ciptool.1
endif
endif
endif
manual_pages += tools/hciattach.1 tools/hciconfig.1 \
			tools/hcitool.1 tools/hcidump.1 \
			tools/rfcomm.1 tools/sdptool.1 tools/ciptool.1 \
			tools/rctest.1 tools/l2ping.1 tools/btattach.1 \
			tools/bdaddr.1

if HID2HCI
udevdir = $(UDEV_DIR)

udev_PROGRAMS = tools/hid2hci

tools_hid2hci_LDADD = $(UDEV_LIBS)

if MANPAGES
man_MANS += tools/hid2hci.1
endif
endif
manual_pages += tools/hid2hci.1

if READLINE
noinst_PROGRAMS += tools/btmgmt tools/obex-client-tool tools/obex-server-tool \
			tools/bluetooth-player tools/obexctl

tools_obex_client_tool_SOURCES = $(gobex_sources) $(btio_sources) \
						tools/obex-client-tool.c
tools_obex_client_tool_LDADD = lib/libbluetooth-internal.la \
						$(GLIB_LIBS) -lreadline

tools_obex_server_tool_SOURCES = $(gobex_sources) $(btio_sources) \
						tools/obex-server-tool.c
tools_obex_server_tool_LDADD = lib/libbluetooth-internal.la $(GLIB_LIBS)

tools_bluetooth_player_SOURCES = tools/bluetooth-player.c
tools_bluetooth_player_LDADD = gdbus/libgdbus-internal.la \
				src/libshared-glib.la \
				$(GLIB_LIBS) $(DBUS_LIBS) -lreadline

tools_obexctl_SOURCES = tools/obexctl.c
tools_obexctl_LDADD = gdbus/libgdbus-internal.la src/libshared-glib.la \
				$(GLIB_LIBS) $(DBUS_LIBS) -lreadline

tools_btmgmt_SOURCES = tools/btmgmt.c src/uuid-helper.c client/display.c
tools_btmgmt_LDADD = lib/libbluetooth-internal.la src/libshared-mainloop.la \
				-lreadline
if DEPRECATED
noinst_PROGRAMS += attrib/gatttool

attrib_gatttool_SOURCES = attrib/gatttool.c attrib/att.c attrib/gatt.c \
				attrib/gattrib.c btio/btio.c \
				attrib/gatttool.h attrib/interactive.c \
				attrib/utils.c src/log.c client/display.c \
				client/display.h
attrib_gatttool_LDADD = lib/libbluetooth-internal.la \
			src/libshared-glib.la $(GLIB_LIBS) -lreadline

endif
endif

if CUPS
cupsdir = $(libdir)/cups/backend

cups_PROGRAMS = profiles/cups/bluetooth

profiles_cups_bluetooth_SOURCES = profiles/cups/main.c \
					profiles/cups/cups.h \
					profiles/cups/sdp.c \
					profiles/cups/spp.c \
					profiles/cups/hcrp.c

profiles_cups_bluetooth_LDADD = $(GLIB_LIBS) $(DBUS_LIBS) \
				lib/libbluetooth-internal.la \
				gdbus/libgdbus-internal.la
endif

test_scripts += test/sap_client.py test/bluezutils.py \
		test/dbusdef.py test/monitor-bluetooth test/list-devices \
		test/test-discovery test/test-manager test/test-adapter \
		test/test-device test/simple-agent \
		test/simple-endpoint test/test-sap-server \
		test/test-network test/test-profile test/test-health \
		test/test-health-sink test/service-record.dtd \
		test/service-did.xml test/service-spp.xml test/service-opp.xml \
		test/service-ftp.xml test/simple-player test/test-nap \
		test/test-hfp test/opp-client test/ftp-client \
		test/pbap-client test/map-client test/example-advertisement \
		test/example-gatt-server test/example-gatt-client \
		test/test-gatt-profile test/test-mesh test/agent.py

if BTPCLIENT
noinst_PROGRAMS += tools/btpclient tools/btpclientctl

tools_btpclient_SOURCES = tools/btpclient.c src/shared/btp.c src/shared/btp.h
tools_btpclient_LDADD = lib/libbluetooth-internal.la \
				src/libshared-ell.la $(ell_ldadd)
tools_btpclient_DEPENDENCIES = lib/libbluetooth-internal.la $(ell_dependencies)
tools/btpclient.$(OBJEXT): src/libshared-ell.la ell/internal

tools_btpclientctl_SOURCES = tools/btpclientctl.c client/display.c
tools_btpclientctl_LDADD = src/libshared-mainloop.la src/libshared-glib.la \
				lib/libbluetooth-internal.la -lreadline
endif
