Makefile.am 14.7 KB
Newer Older
D
Daniel Veillard 已提交
1 2
## Process this file with automake to produce Makefile.in

3 4 5
INCLUDES = \
	   -I$(top_srcdir)/gnulib/lib -I../gnulib/lib \
	   -I../include \
6 7
	   -I@top_srcdir@/include \
	   -I@top_srcdir@/qemud \
8
	   $(LIBXML_CFLAGS) \
9
	   $(XEN_CFLAGS) \
10
	   $(SELINUX_CFLAGS) \
11 12
	   $(DRIVER_MODULE_CFLAGS) \
	   -DLIBDIR=\""$(libdir)"\" \
13 14 15 16
	   -DBINDIR=\""$(libexecdir)"\" \
	   -DSBINDIR=\""$(sbindir)"\" \
	   -DSYSCONF_DIR="\"$(sysconfdir)\"" \
	   -DLOCALEBASEDIR=\""$(datadir)/locale"\" \
D
Daniel P. Berrange 已提交
17
           -DLOCAL_STATE_DIR=\""$(localstatedir)"\" \
18
           -DGETTEXT_PACKAGE=\"$(PACKAGE)\" \
19 20
	   $(WARN_CFLAGS)

21 22 23
confdir = $(sysconfdir)/libvirt/
conf_DATA = qemu.conf

24 25 26 27 28 29 30 31
ICON_FILES = \
	libvirt_win_icon_16x16.ico \
	libvirt_win_icon_32x32.ico \
	libvirt_win_icon_48x48.ico \
	libvirt_win_icon_64x64.ico \
	virsh_win_icon.rc

EXTRA_DIST = libvirt_sym.version $(conf_DATA) $(ICON_FILES)
32

33

34
lib_LTLIBRARIES = libvirt.la
35

36 37 38 39
moddir = $(libdir)/libvirt/drivers
mod_LTLIBRARIES =


40 41
# These files are not related to driver APIs. Simply generic
# helper APIs for various purposes
42
UTIL_SOURCES =							\
43 44 45
		bridge.c bridge.h				\
		buf.c buf.h					\
		conf.c conf.h					\
46
		event.c event.h					\
47
		hash.c hash.h					\
48 49 50 51 52
		iptables.c iptables.h				\
		memory.c memory.h				\
		qparams.c qparams.h				\
		uuid.c uuid.h					\
		util.c util.h					\
53
		virterror.c virterror_internal.h		\
54
		logging.c logging.h				\
55 56
		xml.c xml.h

57 58
# Internal generic driver infrastructure
DRIVER_SOURCES = 						\
59
		driver.c driver.h				\
60 61 62 63 64 65 66
		internal.h					\
		datatypes.c datatypes.h				\
		domain_event.c domain_event.h			\
		stats_linux.c stats_linux.h			\
		libvirt.c libvirt_internal.h


67 68 69 70 71 72 73 74 75 76 77 78
# Domain driver generic impl APIs
DOMAIN_CONF_SOURCES =						\
		capabilities.c capabilities.h			\
		domain_conf.c domain_conf.h			\
		nodeinfo.h nodeinfo.c

# Network driver generic impl APIs
NETWORK_CONF_SOURCES =						\
		network_conf.c network_conf.h

# Storage driver generic impl APIs
STORAGE_CONF_SOURCES =						\
79
		storage_conf.h storage_conf.c
80 81 82 83 84


# The remote RPC driver, covering domains, storage, networks, etc
REMOTE_DRIVER_SOURCES =						\
		gnutls_1_0_compat.h				\
85
		remote_internal.c remote_internal.h		\
86
		../qemud/remote_protocol.c			\
87
		../qemud/remote_protocol.h
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

# Mock driver, covering domains, storage, networks, etc
TEST_DRIVER_SOURCES =						\
		test.c test.h



# Now the Hypervisor specific drivers
XEN_DRIVER_SOURCES =						\
		proxy_internal.c proxy_internal.h		\
		sexpr.c sexpr.h					\
		xen_internal.c xen_internal.h			\
		xen_unified.c xen_unified.h			\
		xend_internal.c xend_internal.h			\
		xm_internal.c xm_internal.h			\
		xs_internal.c xs_internal.h
104 105 106
if WITH_XEN_INOTIFY
XEN_DRIVER_SOURCES += xen_inotify.c xen_inotify.h
endif
107 108

LXC_DRIVER_SOURCES =						\
D
Daniel Veillard 已提交
109
		lxc_conf.c lxc_conf.h				\
R
Richard W.M. Jones 已提交
110
		lxc_container.c lxc_container.h			\
111
		lxc_driver.c lxc_driver.h			\
D
Dan Smith 已提交
112 113
		veth.c veth.h					\
		cgroup.c cgroup.h
114

115 116 117 118
LXC_CONTROLLER_SOURCES =					\
		lxc_conf.c lxc_conf.h				\
		lxc_container.c lxc_container.h			\
		lxc_controller.c				\
D
Dan Smith 已提交
119 120
		veth.c veth.h                                   \
		cgroup.c cgroup.h
121

122 123 124
OPENVZ_DRIVER_SOURCES =						\
		openvz_conf.c openvz_conf.h			\
		openvz_driver.c openvz_driver.h
125

126 127 128
QEMU_DRIVER_SOURCES =						\
		qemu_conf.c qemu_conf.h				\
		qemu_driver.c qemu_driver.h
R
Richard W.M. Jones 已提交
129

130 131 132 133
UML_DRIVER_SOURCES =						\
		uml_conf.c uml_conf.h				\
		uml_driver.c uml_driver.h

134 135
NETWORK_DRIVER_SOURCES =					\
		network_driver.h network_driver.c
136 137 138

# And finally storage backend specific impls
STORAGE_DRIVER_SOURCES =					\
139 140
		storage_driver.h storage_driver.c		\
		storage_backend.h storage_backend.c
141

142 143 144 145
# Network driver generic impl APIs
NODE_DEVICE_CONF_SOURCES =					\
		node_device_conf.c node_device_conf.h

146
STORAGE_DRIVER_FS_SOURCES =					\
R
Richard W.M. Jones 已提交
147 148
		storage_backend_fs.h storage_backend_fs.c

149 150 151 152 153 154 155 156 157 158 159 160 161 162
STORAGE_DRIVER_LVM_SOURCES =					\
		storage_backend_logical.h 			\
		storage_backend_logical.c

STORAGE_DRIVER_ISCSI_SOURCES =					\
		storage_backend_iscsi.h storage_backend_iscsi.c

STORAGE_DRIVER_DISK_SOURCES =					\
		storage_backend_disk.h storage_backend_disk.c

STORAGE_HELPER_DISK_SOURCES =					\
		parthelper.c


163 164 165 166 167 168 169 170
NODE_DEVICE_DRIVER_SOURCES =					\
		node_device.c node_device.h

NODE_DEVICE_DRIVER_HAL_SOURCES =				\
		node_device_hal.c
NODE_DEVICE_DRIVER_DEVKIT_SOURCES =				\
		node_device_devkit.c

171 172 173 174 175 176 177

#########################
#
# Build up list of libvirt.la source files based on configure conditions
#
# First deal with sources usable in non-daemon context

178 179 180 181 182 183 184 185 186
noinst_LTLIBRARIES = libvirt_util.la
libvirt_la_LIBADD = libvirt_util.la
libvirt_util_la_SOURCES =					\
		$(UTIL_SOURCES)

noinst_LTLIBRARIES += libvirt_driver.la
libvirt_la_LIBADD += libvirt_driver.la
libvirt_driver_la_SOURCES =					\
		$(DRIVER_SOURCES)				\
187 188
		$(DOMAIN_CONF_SOURCES)				\
		$(NETWORK_CONF_SOURCES)				\
189 190 191
		$(STORAGE_CONF_SOURCES)				\
		$(NODE_DEVICE_CONF_SOURCES)

192 193
libvirt_driver_la_CFLAGS = $(XEN_CFLAGS)
libvirt_driver_la_LDFLAGS = $(XEN_LIBS)
194

195 196
libvirt_driver_la_CFLAGS = $(XEN_CFLAGS)

197
if WITH_TEST
198 199 200
if WITH_DRIVER_MODULES
mod_LTLIBRARIES += libvirt_driver_test.la
else
201 202
noinst_LTLIBRARIES += libvirt_driver_test.la
libvirt_la_LIBADD += libvirt_driver_test.la
203 204 205 206
endif
if WITH_DRIVER_MODULES
libvirt_driver_test_la_LDFLAGS = -module -avoid-version
endif
207
libvirt_driver_test_la_SOURCES = $(TEST_DRIVER_SOURCES)
208 209 210
endif

if WITH_REMOTE
211 212 213
if WITH_DRIVER_MODULES
mod_LTLIBRARIES += libvirt_driver_remote.la
else
214 215
noinst_LTLIBRARIES += libvirt_driver_remote.la
libvirt_la_LIBADD += libvirt_driver_remote.la
216
endif
217 218 219 220 221 222
libvirt_driver_remote_la_CFLAGS =				\
		$(GNUTLS_CFLAGS)				\
		$(SASL_CFLAGS)
libvirt_driver_remote_la_LDFLAGS =				\
		$(GNUTLS_LIBS)					\
		$(SASL_LIBS)
223 224 225
if WITH_DRIVER_MODULES
libvirt_driver_remote_la_LDFLAGS += -module -avoid-version
endif
226
libvirt_driver_remote_la_SOURCES = $(REMOTE_DRIVER_SOURCES)
227 228 229
endif

if WITH_XEN
230 231 232
if WITH_DRIVER_MODULES
mod_LTLIBRARIES += libvirt_driver_xen.la
else
233 234
noinst_LTLIBRARIES += libvirt_driver_xen.la
libvirt_la_LIBADD += libvirt_driver_xen.la
235
endif
236 237
libvirt_driver_xen_la_CFLAGS = $(XEN_CFLAGS)
libvirt_driver_xen_la_LDFLAGS = $(XEN_LIBS)
238 239 240
if WITH_DRIVER_MODULES
libvirt_driver_xen_la_LDFLAGS += -module -avoid-version
endif
241
libvirt_driver_xen_la_SOURCES = $(XEN_DRIVER_SOURCES)
242 243
endif

244
if WITH_OPENVZ
245 246 247
if WITH_DRIVER_MODULES
mod_LTLIBRARIES += libvirt_driver_openvz.la
else
248 249
noinst_LTLIBRARIES += libvirt_driver_openvz.la
libvirt_la_LIBADD += libvirt_driver_openvz.la
250 251 252 253
endif
if WITH_DRIVER_MODULES
libvirt_driver_openvz_la_LDFLAGS = -module -avoid-version
endif
254
libvirt_driver_openvz_la_SOURCES = $(OPENVZ_DRIVER_SOURCES)
255 256
endif

257
if WITH_QEMU
258 259 260
if WITH_DRIVER_MODULES
mod_LTLIBRARIES += libvirt_driver_qemu.la
else
261
noinst_LTLIBRARIES += libvirt_driver_qemu.la
262 263
# Stateful, so linked to daemon instead
#libvirt_la_LIBADD += libvirt_driver_qemu.la
264
endif
265 266
libvirt_driver_qemu_la_CFLAGS = $(NUMACTL_CFLAGS)
libvirt_driver_qemu_la_LDFLAGS = $(NUMACTL_LIBS)
267 268 269
if WITH_DRIVER_MODULES
libvirt_driver_qemu_la_LDFLAGS += -module -avoid-version
endif
270
libvirt_driver_qemu_la_SOURCES = $(QEMU_DRIVER_SOURCES)
271 272 273
endif

if WITH_LXC
274 275 276
if WITH_DRIVER_MODULES
mod_LTLIBRARIES += libvirt_driver_lxc.la
else
277
noinst_LTLIBRARIES += libvirt_driver_lxc.la
278 279
# Stateful, so linked to daemon instead
#libvirt_la_LIBADD += libvirt_driver_lxc.la
280 281 282 283
endif
if WITH_DRIVER_MODULES
libvirt_driver_lxc_la_LDFLAGS = -module -avoid-version
endif
284
libvirt_driver_lxc_la_SOURCES = $(LXC_DRIVER_SOURCES)
285 286
endif

287
if WITH_UML
288 289 290
if WITH_DRIVER_MODULES
mod_LTLIBRARIES += libvirt_driver_uml.la
else
291 292 293
noinst_LTLIBRARIES += libvirt_driver_uml.la
# Stateful, so linked to daemon instead
#libvirt_la_LIBADD += libvirt_driver_uml.la
294 295 296 297 298 299
endif
libvirt_driver_uml_la_CFLAGS = $(NUMACTL_CFLAGS)
libvirt_driver_uml_la_LDFLAGS = $(NUMACTL_LIBS)
if WITH_DRIVER_MODULES
libvirt_driver_uml_la_LDFLAGS += -module -avoid-version
endif
300 301
libvirt_driver_uml_la_SOURCES = $(UML_DRIVER_SOURCES)
endif
302 303

if WITH_NETWORK
304 305 306
if WITH_DRIVER_MODULES
mod_LTLIBRARIES += libvirt_driver_network.la
else
307
noinst_LTLIBRARIES += libvirt_driver_network.la
308 309
# Stateful, so linked to daemon instead
#libvirt_la_LIBADD += libvirt_driver_network.la
310 311 312 313
endif
if WITH_DRIVER_MODULES
libvirt_driver_network_la_LDFLAGS = -module -avoid-version
endif
314
libvirt_driver_network_la_SOURCES = $(NETWORK_DRIVER_SOURCES)
315 316
endif

317 318
# Needed to keep automake quiet about conditionals
libvirt_driver_storage_la_SOURCES =
319
if WITH_STORAGE_DIR
320 321 322
if WITH_DRIVER_MODULES
mod_LTLIBRARIES += libvirt_driver_storage.la
else
323
noinst_LTLIBRARIES += libvirt_driver_storage.la
324 325
# Stateful, so linked to daemon instead
#libvirt_la_LIBADD += libvirt_driver_storage.la
326 327 328 329
endif
if WITH_DRIVER_MODULES
libvirt_driver_storage_la_LDFLAGS = -module -avoid-version
endif
330 331
libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_SOURCES)
libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_FS_SOURCES)
332 333
endif

334
if WITH_STORAGE_LVM
335
libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_LVM_SOURCES)
336 337
endif

338
if WITH_STORAGE_ISCSI
339
libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_ISCSI_SOURCES)
340 341
endif

342
if WITH_STORAGE_DISK
343
libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_DISK_SOURCES)
344
endif
345

346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375
if WITH_NODE_DEVICES
# Needed to keep automake quiet about conditionals
if WITH_DRIVER_MODULES
mod_LTLIBRARIES += libvirt_driver_nodedev.la
else
noinst_LTLIBRARIES += libvirt_driver_nodedev.la
# Stateful, so linked to daemon instead
#libvirt_la_LIBADD += libvirt_driver_nodedev.la
endif
libvirt_driver_nodedev_la_SOURCES = $(NODE_DEVICE_DRIVER_SOURCES)

libvirt_driver_nodedev_la_CFLAGS =
libvirt_driver_nodedev_la_LDFLAGS =
if HAVE_HAL
libvirt_driver_nodedev_la_SOURCES += $(NODE_DEVICE_DRIVER_HAL_SOURCES)
libvirt_driver_nodedev_la_CFLAGS += $(HAL_CFLAGS)
libvirt_driver_nodedev_la_LDFLAGS += $(HAL_LIBS)
endif
if HAVE_DEVKIT
libvirt_driver_nodedev_la_SOURCES += $(NODE_DEVICE_DRIVER_DEVKIT_SOURCES)
libvirt_driver_nodedev_la_CFLAGS += $(DEVKIT_CFLAGS)
libvirt_driver_nodedev_la_LDFLAGS += $(DEVKIT_LIBS)
endif

if WITH_DRIVER_MODULES
libvirt_driver_nodedev_la_LDFLAGS += -module -avoid-version
endif
endif


376 377 378 379 380 381 382
# Add all conditional sources just in case...
EXTRA_DIST +=							\
		$(TEST_DRIVER_SOURCES)				\
		$(REMOTE_DRIVER_SOURCES)			\
		$(XEN_DRIVER_SOURCES)				\
		$(QEMU_DRIVER_SOURCES)				\
		$(LXC_DRIVER_SOURCES)				\
383
		$(UML_DRIVER_SOURCES)				\
384
		$(OPENVZ_DRIVER_SOURCES)			\
385
		$(NETWORK_DRIVER_SOURCES)			\
386 387 388 389
		$(STORAGE_DRIVER_SOURCES)			\
		$(STORAGE_DRIVER_FS_SOURCES)			\
		$(STORAGE_DRIVER_LVM_SOURCES)			\
		$(STORAGE_DRIVER_ISCSI_SOURCES)			\
390 391 392 393
		$(STORAGE_DRIVER_DISK_SOURCES)			\
		$(NODE_DEVICE_DRIVER_SOURCES)			\
		$(NODE_DEVICE_DRIVER_HAL_SOURCES)		\
		$(NODE_DEVICE_DRIVER_DEVKIT_SOURCES)
394

395

396 397
# Empty source list - it merely links a bunch of convenience libs together
libvirt_la_SOURCES =
398
libvirt_la_LIBADD += \
399
		    @CYGWIN_EXTRA_LIBADD@ ../gnulib/lib/libgnu.la
400
libvirt_la_LDFLAGS = -Wl,--version-script=$(builddir)/libvirt_sym.version \
401 402
                     -version-info @LIBVIRT_VERSION_INFO@ \
                    $(COVERAGE_CFLAGS:-f%=-Wc,-f%) \
403
                    $(LIBXML_LIBS) $(SELINUX_LIBS) \
404
		    $(XEN_LIBS) $(DRIVER_MODULE_LIBS) \
405
		    @CYGWIN_EXTRA_LDFLAGS@ @MINGW_EXTRA_LDFLAGS@
406
libvirt_la_CFLAGS = $(COVERAGE_CFLAGS) -DIN_LIBVIRT
407
libvirt_la_DEPENDENCIES = $(libvirt_la_LIBADD) $(builddir)/libvirt_sym.version
408

409 410 411
# Create an automake "convenience library" version of libvirt_la,
# just for testing, since the test harness requires access to internal
# bits and pieces that we don't want to make publicly accessible.
412
noinst_LTLIBRARIES += libvirt_test.la
413 414 415 416 417 418 419 420 421 422 423 424 425 426 427

# Convert libvirt_sym.version
#      to libvirt_test_sym.version, and
# remove -version-info X.Y.Z (not needed since this is a convenience library.
test_LDFLAGS =						\
  $$(echo '$(libvirt_la_LDFLAGS)'			\
     |sed 's!-Wl,--v.*_sym\.version!!'			\
     |sed 's!-version-info @LIBVIRT_VERSION_INFO@!!')

# Just like the above, but with a slightly different set of public symbols.
libvirt_test_la_SOURCES = $(libvirt_la_SOURCES)
libvirt_test_la_LIBADD = $(libvirt_la_LIBADD)
libvirt_test_la_LDFLAGS = $(test_LDFLAGS)
libvirt_test_la_CFLAGS = $(COVERAGE_CFLAGS)

K
Karel Zak 已提交
428
bin_PROGRAMS = virsh
429

430 431 432 433
virsh_SOURCES =							\
		console.c console.h				\
		virsh.c

434
virsh_LDFLAGS = $(WARN_CFLAGS) $(COVERAGE_LDFLAGS)
435 436 437 438 439 440
virsh_LDADD = 							\
		$(STATIC_BINARIES) 				\
		$(WARN_CFLAGS)					\
		libvirt.la					\
		../gnulib/lib/libgnu.la				\
		$(VIRSH_LIBS)
441
virsh_CFLAGS = $(COVERAGE_CFLAGS) $(READLINE_CFLAGS)
442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473
BUILT_SOURCES = virsh-net-edit.c virsh-pool-edit.c

virsh-net-edit.c: virsh.c Makefile.am
	rm -f $@-tmp
	echo '/* Automatically generated from: $^ */' > $@-tmp
	echo 'static int' >> $@-tmp
	awk '/^cmdEdit/, /^}/' $< \
	  | sed -e 's/domain/network/g' \
	      -e 's/Domain/Network/g' \
	      -e 's/cmdEdit/cmdNetworkEdit/g' \
	      -e 's/dom/network/g' \
	>> $@-tmp
	chmod a-w $@-tmp
	rm -f $@
	mv $@-tmp $@

virsh-pool-edit.c: virsh.c Makefile.am
	rm -f $@-tmp
	echo '/* Automatically generated from: $^ */' > $@-tmp
	echo 'static int' >> $@-tmp
	awk '/^cmdEdit/, /^}/' $< \
	  | sed -e 's/domain/pool/g' \
	      -e 's/vshCommandOptDomain/vshCommandOptPool/g' \
	      -e 's/Domain %s/Pool %s/g' \
	      -e 's/Domain/StoragePool/g' \
	      -e 's/cmdEdit/cmdPoolEdit/g' \
	      -e 's/\(virStoragePoolDefineXML.*\));/\1, 0);/' \
	      -e 's/dom/pool/g' \
	>> $@-tmp
	chmod a-w $@-tmp
	rm -f $@
	mv $@-tmp $@
474

475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500
if WITH_WIN_ICON
virsh_LDADD += virsh_win_icon.$(OBJEXT)

# Before you edit virsh_win_icon.rc, please note the following
# limitations of the resource file format:
#
# (1) '..' is not permitted in the icon filename field.
# (2) '-' is not permitted in the icon filename field.
# (3) Comments are not permitted in the file.
#
# Windows appears to choose the first <= 32x32 icon it finds
# in the resource file.  Therefore you should list the available
# icons from largest to smallest, and make sure that the 32x32
# icon is the most legible.
#
# Windows .ICO is a special MS-only format.  GIMP and other
# tools can write it.  However there are several variations,
# and Windows seems to do its own colour quantization.  More
# information is needed in this area.

virsh_win_icon.$(OBJEXT): virsh_win_icon.rc
	$(WINDRES) \
	  --input-format rc --input $< \
	  --output-format coff --output $@
endif

501 502
libexec_PROGRAMS =

503
if WITH_STORAGE_DISK
R
Richard W.M. Jones 已提交
504
if WITH_LIBVIRTD
505
libexec_PROGRAMS += libvirt_parthelper
506

507
libvirt_parthelper_SOURCES = $(STORAGE_HELPER_DISK_SOURCES)
508 509 510
libvirt_parthelper_LDFLAGS = $(WARN_CFLAGS) $(COVERAGE_LDCFLAGS)
libvirt_parthelper_LDADD = $(LIBPARTED_LIBS)
libvirt_parthelper_CFLAGS =  $(LIBPARTED_CFLAGS)
R
Richard W.M. Jones 已提交
511
endif
512
endif
513 514
EXTRA_DIST += $(STORAGE_HELPER_DISK_SOURCES)

515

516 517 518 519 520 521
if WITH_LXC
if WITH_LIBVIRTD
libexec_PROGRAMS += libvirt_lxc

libvirt_lxc_SOURCES =						\
		$(LXC_CONTROLLER_SOURCES)			\
522
		$(UTIL_SOURCES) 				\
523 524 525 526 527 528 529 530
		$(DOMAIN_CONF_SOURCES)
libvirt_lxc_LDFLAGS = $(WARN_CFLAGS) $(COVERAGE_LDCFLAGS)
libvirt_lxc_LDADD = $(LIBXML_LIBS) ../gnulib/lib/libgnu.la
libvirt_lxc_CFLAGS =  $(LIBPARTED_CFLAGS)
endif
endif
EXTRA_DIST += $(LXC_CONTROLLER_SOURCES)

R
Richard W.M. Jones 已提交
531 532
# Create the /var/cache/libvirt directory when installing.
install-exec-local:
D
Daniel P. Berrange 已提交
533
	$(MKDIR_P) $(DESTDIR)$(localstatedir)/cache/libvirt
R
Richard W.M. Jones 已提交
534

535
CLEANFILES = *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda
536
DISTCLEANFILES = $(BUILT_SOURCES)