
# -----------------------------------------------------------------------------
# Define the main source
# -----------------------------------------------------------------------------

set(main_SRC
	main.cpp
)

set(sp_SRC
	attribute-rel-css.cpp
	attribute-rel-svg.cpp
	attribute-rel-util.cpp
	sp-anchor.cpp
	sp-clippath.cpp
	sp-conn-end-pair.cpp
	sp-conn-end.cpp
	sp-cursor.cpp
	sp-defs.cpp
	sp-desc.cpp
	sp-ellipse.cpp
	sp-filter-primitive.cpp
	sp-filter-reference.cpp
	sp-filter.cpp
	sp-flowdiv.cpp
	sp-flowregion.cpp
	sp-flowtext.cpp
	sp-font-face.cpp
	sp-font.cpp
	sp-glyph-kerning.cpp
	sp-glyph.cpp
	sp-gradient-reference.cpp
	sp-gradient.cpp
	sp-guide.cpp
	sp-image.cpp
	sp-item-group.cpp
	sp-item-notify-moveto.cpp
	sp-item-rm-unsatisfied-cns.cpp
	sp-item-transform.cpp
	sp-item-update-cns.cpp
	sp-item.cpp
	sp-line.cpp
	sp-lpe-item.cpp
	sp-mask.cpp
	sp-mesh-array.cpp
	sp-mesh-patch.cpp
	sp-mesh-row.cpp
	sp-metadata.cpp
	sp-metrics.cpp
	sp-missing-glyph.cpp
	sp-namedview.cpp
	sp-object-group.cpp
	sp-object-repr.cpp
	sp-object.cpp
	sp-offset.cpp
	sp-paint-server.cpp
	sp-path.cpp
	sp-pattern.cpp
	sp-polygon.cpp
	sp-polyline.cpp
	sp-rect.cpp
	sp-root.cpp
	sp-script.cpp
	sp-shape.cpp
	# sp-skeleton.cpp
	sp-spiral.cpp
	sp-star.cpp
	sp-stop.cpp
	sp-string.cpp
	sp-style-elem.cpp
	sp-switch.cpp
	sp-symbol.cpp
	sp-text.cpp
	sp-title.cpp
	sp-tref-reference.cpp
	sp-tref.cpp
	sp-tspan.cpp
	sp-use-reference.cpp
	sp-use.cpp
	spiral-context.cpp
	splivarot.cpp


	# -------
	# Headers
	attribute-rel-css.h
	attribute-rel-svg.h
	attribute-rel-util.h
	sp-anchor.h
	sp-clippath.h
	sp-conn-end-pair.h
	sp-conn-end.h
	sp-cursor.h
	sp-defs.h
	sp-desc.h
	sp-ellipse.h
	sp-filter-primitive.h
	sp-filter-reference.h
	sp-filter-units.h
	sp-filter.h
	sp-flowdiv.h
	sp-flowregion.h
	sp-flowtext.h
	sp-font-face.h
	sp-font.h
	sp-glyph-kerning.h
	sp-glyph.h
	sp-gradient-fns.h
	sp-gradient-reference.h
	sp-gradient-spread.h
	sp-gradient-test.h
	sp-gradient-units.h
	sp-gradient-vector.h
	sp-gradient.h
	sp-guide-attachment.h
	sp-guide-constraint.h
	sp-guide.h
	sp-image.h
	sp-item-group.h
	sp-item-notify-moveto.h
	sp-item-rm-unsatisfied-cns.h
	sp-item-transform.h
	sp-item-update-cns.h
	sp-item.h
	sp-line.h
	sp-linear-gradient-fns.h
	sp-linear-gradient.h
	sp-lpe-item.h
	sp-marker-loc.h
	sp-mask.h
	sp-mesh-array.h
	sp-mesh-gradient-fns.h
	sp-mesh-gradient.h
	sp-mesh-patch-fns.h
	sp-mesh-patch.h
	sp-mesh-row-fns.h
	sp-mesh-row.h
	sp-metadata.h
	sp-metric.h
	sp-metrics.h
	sp-missing-glyph.h
	sp-namedview.h
	sp-object-group.h
	sp-object-repr.h
	sp-object.h
	sp-offset.h
	sp-paint-server-reference.h
	sp-paint-server.h
	sp-path.h
	sp-pattern.h
	sp-polygon.h
	sp-polyline.h
	sp-radial-gradient-fns.h
	sp-radial-gradient.h
	sp-rect.h
	sp-root.h
	sp-script.h
	sp-shape.h
	# sp-skeleton.h
	sp-spiral.h
	sp-star.h
	sp-stop.h
	sp-string.h
	sp-style-elem-test.h
	sp-style-elem.h
	sp-switch.h
	sp-symbol.h
	sp-text.h
	sp-textpath.h
	sp-title.h
	sp-tref-reference.h
	sp-tref.h
	sp-tspan.h
	sp-use-reference.h
	sp-use.h
)

set(inkscape_SRC
	arc-context.cpp
	attributes.cpp
	axis-manip.cpp
	box3d-context.cpp
	box3d-side.cpp
	box3d.cpp
	color-profile.cpp
	color.cpp
	common-context.cpp
	composite-undo-stack-observer.cpp
	conditions.cpp
	conn-avoid-ref.cpp
	connector-context.cpp
	console-output-undo-observer.cpp
	context-fns.cpp
	desktop-events.cpp
	desktop-handles.cpp
	desktop-style.cpp
	desktop.cpp
	device-manager.cpp
	dir-util.cpp
	document-subset.cpp
	document-undo.cpp
	document.cpp
	doxygen-main.cpp
	draw-anchor.cpp
	draw-context.cpp
	dropper-context.cpp
	dyna-draw-context.cpp
	ege-adjustment-action.cpp
	ege-color-prof-tracker.cpp
	ege-output-action.cpp
	ege-select-one-action.cpp
	eraser-context.cpp
	event-context.cpp
	event-log.cpp
	extract-uri.cpp
	file.cpp
	filter-chemistry.cpp
	filter-enums.cpp
	fixes.cpp
	flood-context.cpp
	gc-anchored.cpp
	gc-finalized.cpp
	gc.cpp
	gradient-chemistry.cpp
	gradient-context.cpp
	gradient-drag.cpp
	graphlayout.cpp
	guide-snapper.cpp
	help.cpp
	id-clash.cpp
	# ige-mac-menu.c
	ink-action.cpp
	ink-comboboxentry-action.cpp
	inkscape.cpp
	inkscape.rc
	interface.cpp
	knot-holder-entity.cpp
	knot.cpp
	knotholder.cpp
	layer-fns.cpp
	layer-manager.cpp
	line-geometry.cpp
	line-snapper.cpp
	lpe-tool-context.cpp
	main-cmdlineact.cpp
	marker.cpp
	measure-context.cpp
	media.cpp
	mesh-context.cpp
	message-context.cpp
	message-stack.cpp
	mod360.cpp
	object-edit.cpp
	object-hierarchy.cpp
	object-snapper.cpp
	path-chemistry.cpp
	pen-context.cpp
	pencil-context.cpp
	persp3d-reference.cpp
	persp3d.cpp
	perspective-line.cpp
	preferences.cpp
	prefix.cpp
	print.cpp
	profile-manager.cpp
	proj_pt.cpp
	rdf.cpp
	rect-context.cpp
	removeoverlap.cpp
	resource-manager.cpp
	rubberband.cpp
	satisfied-guide-cns.cpp
	selcue.cpp
	select-context.cpp
	selection-chemistry.cpp
	selection-describer.cpp
	selection.cpp
	seltrans-handles.cpp
	seltrans.cpp
	shape-editor.cpp
	shortcuts.cpp
	snap-preferences.cpp
	snap.cpp
	snapped-curve.cpp
	snapped-line.cpp
	snapped-point.cpp
	snapper.cpp
	spray-context.cpp
	star-context.cpp
	style.cpp
	svg-view-widget.cpp
	svg-view.cpp
	text-chemistry.cpp
	text-context.cpp
	text-editing.cpp
	tools-switch.cpp
	transf_mat_3x4.cpp
	tweak-context.cpp
	unclump.cpp
	unicoderange.cpp
	uri-references.cpp
	uri.cpp
	vanishing-point.cpp
	verbs.cpp
	version.cpp
	zoom-context.cpp


	# -------
	# Headers
	MultiPrinter.h
	PylogFormatter.h
	TRPIFormatter.h
	approx-equal.h
	arc-context.h
	attributes-test.h
	attributes.h
	axis-manip.h
	bad-uri-exception.h
	box3d-context.h
	box3d-side.h
	box3d.h
	cms-color-types.h
	cms-system.h
	color-profile-cms-fns.h
	color-profile-test.h
	color-profile.h
	color-rgba.h
	color.h
	common-context.h
	composite-undo-stack-observer.h
	conditions.h
	conn-avoid-ref.h
	connection-pool.h
	connector-context.h
	console-output-undo-observer.h
	context-fns.h
	decimal-round.h
	desktop-events.h
	desktop-handles.h
	desktop-style.h
	desktop.h
	device-manager.h
	dir-util-test.h
	dir-util.h
	document-private.h
	document-subset.h
	document-undo.h
	document.h
	draw-anchor.h
	draw-context.h
	dropper-context.h
	dyna-draw-context.h
	ege-adjustment-action.h
	ege-color-prof-tracker.h
	ege-output-action.h
	ege-select-one-action.h
	enums.h
	eraser-context.h
	event-context.h
	event-log.h
	event.h
	extract-uri-test.h
	extract-uri.h
	file.h
	fill-or-stroke.h
	filter-chemistry.h
	filter-enums.h
	flood-context.h
	gc-alloc.h
	gc-allocator.h
	gc-anchored.h
	gc-core.h
	gc-finalized.h
	gc-managed.h
	gc-soft-ptr.h
	gradient-chemistry.h
	gradient-context.h
	gradient-drag.h
	graphlayout.h
	guide-snapper.h
	help.h
	helper-fns.h
	icon-size.h
	id-clash.h
	# ige-mac-menu.h
	ink-action.h
	ink-comboboxentry-action.h
	inkscape-private.h
	inkscape-version.h
	inkscape.h
	interface.h
	isinf.h
	isnormal.h
	knot-enums.h
	knot-holder-entity.h
	knot.h
	knotholder.h
	layer-fns.h
	layer-manager.h
	line-geometry.h
	line-snapper.h
	lpe-tool-context.h
	macros.h
	main-cmdlineact.h
	marker-test.h
	marker.h
	measure-context.h
	media.h
	memeq.h
	menus-skeleton.h
	mesh-context.h
	message-context.h
	message-stack.h
	message.h
	mod360-test.h
	mod360.h
	modifier-fns.h
	number-opt-number.h
	object-edit.h
	object-hierarchy.h
	object-snapper.h
	path-chemistry.h
	path-prefix.h
	pen-context.h
	pencil-context.h
	persp3d-reference.h
	persp3d.h
	perspective-line.h
	preferences-skeleton.h
	preferences-test.h
	preferences.h
	prefix.h
	print.h
	profile-manager.h
	proj_pt.h
	rdf.h
	rect-context.h
	registrytool.h
	remove-last.h
	removeoverlap.h
	require-config.h
	resource-manager.h
	round-test.h
	round.h
	rubberband.h
	satisfied-guide-cns.h
	selcue.h
	select-context.h
	selection-chemistry.h
	selection-describer.h
	selection.h
	seltrans-handles.h
	seltrans.h
	shape-editor.h
	shortcuts.h
	snap-candidate.h
	snap-enums.h
	snap-preferences.h
	snap.h
	snapped-curve.h
	snapped-line.h
	snapped-point.h
	snapper.h
	spiral-context.h
	splivarot.h
	spray-context.h
	star-context.h
	streq.h
	strneq.h
	style-test.h
	style.h
	svg-profile.h
	svg-view-widget.h
	svg-view.h
	syseq.h
	test-helpers.h
	text-chemistry.h
	text-context.h
	text-editing.h
	text-tag-attributes.h
	tools-switch.h
	transf_mat_3x4.h
	tweak-context.h
	unclump.h
	undo-stack-observer.h
	unicoderange.h
	unit-constants.h
	uri-references.h
	uri.h
	vanishing-point.h
	verbs-test.h
	verbs.h
	version.h
	zoom-context.h
)

if(WIN32)
    list(APPEND inkscape_SRC
		registrytool.cpp
		#deptool.cpp
		winmain.cpp
	)
endif()


# -----------------------------------------------------------------------------
# Generate version file
# -----------------------------------------------------------------------------

# a custom target that is always built
add_custom_target(
		inkscape_version ALL
		DEPENDS ${CMAKE_BINARY_DIR}/src/inkscape-version.cpp)

# creates inkscape-version.cpp using cmake script
add_custom_command(
		OUTPUT ${CMAKE_BINARY_DIR}/src/inkscape-version.cpp
		COMMAND ${CMAKE_COMMAND}
		-DINKSCAPE_SOURCE_DIR=${CMAKE_SOURCE_DIR}
		-DINKSCAPE_BINARY_DIR=${CMAKE_BINARY_DIR}
		-P ${CMAKE_SOURCE_DIR}/CMakeScripts/inkscape-version.cmake)

# buildinfo.h is a generated file
set_source_files_properties(
		${CMAKE_BINARY_DIR}/src/inkscape-version.cpp
		PROPERTIES GENERATED TRUE)

list(APPEND inkscape_SRC
	${CMAKE_BINARY_DIR}/src/inkscape-version.cpp
)


# -----------------------------------------------------------------------------
# Load in subdirectories
# -----------------------------------------------------------------------------

# All folders for internal inkscape
# these call add_inkscape_source
add_subdirectory(bind)
add_subdirectory(debug)
add_subdirectory(dialogs)
add_subdirectory(display)
add_subdirectory(dom)
add_subdirectory(extension)
add_subdirectory(filters)
add_subdirectory(helper)
add_subdirectory(io)
add_subdirectory(live_effects)
add_subdirectory(svg)
add_subdirectory(trace)
add_subdirectory(ui)
add_subdirectory(util)
add_subdirectory(widgets)
add_subdirectory(xml)
add_subdirectory(2geom)


# Directories containing lists files that describe building internal libraries
add_subdirectory(libavoid)
add_subdirectory(libcola)
add_subdirectory(libcroco)
add_subdirectory(libgdl)
add_subdirectory(libvpsc)
add_subdirectory(livarot)
add_subdirectory(libnrtype)


get_property(inkscape_global_SRC GLOBAL PROPERTY inkscape_global_SRC)

set(inkscape_SRC
	${inkscape_global_SRC}
	${inkscape_SRC}
)

# -----------------------------------------------------------------------------
# Setup the executable
# -----------------------------------------------------------------------------
add_inkscape_lib(sp_LIB "${sp_SRC}")
add_inkscape_lib(inkscape_LIB "${inkscape_SRC}")

# make executable for INKSCAPE
add_executable(inkscape ${main_SRC})

add_dependencies(inkscape inkscape_version)

target_link_libraries(inkscape
	# order from automake 
	sp_LIB
	nrtype_LIB

	inkscape_LIB
	sp_LIB # annoying, we need both!
	nrtype_LIB # annoying, we need both!

	dom_LIB
	croco_LIB
	avoid_LIB
	gdl_LIB
	cola_LIB
	vpsc_LIB
	livarot_LIB
	2geom_LIB

	${INKSCAPE_LIBS}
)

# TODO
# make executable for INKVIEW
#add_executable(inkview inkview.cpp)
# ...

