#**************************************************************
#  
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you 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.
#  
#**************************************************************



$(eval $(call gb_Library_Library,tk))

$(eval $(call gb_Library_set_componentfile,tk,toolkit/util/tk))

$(eval $(call gb_Library_add_package_headers,tk,toolkit_inc))

#$(eval $(call gb_Library_add_precompiled_header,tk,$(SRCDIR)/toolkit/inc/pch/precompiled_toolkit))

$(eval $(call gb_Library_set_include,tk,\
	$$(INCLUDE) \
	-I$(SRCDIR)/toolkit/inc \
	-I$(SRCDIR)/toolkit/inc/pch \
	-I$(SRCDIR)/toolkit/source \
))

$(eval $(call gb_Library_add_defs,tk,\
	-DTOOLKIT_DLLIMPLEMENTATION \
))

$(eval $(call gb_Library_add_api,tk,\
	udkapi \
	offapi \
))

$(eval $(call gb_Library_add_linked_libs,tk,\
	comphelper \
	cppu \
	cppuhelper \
	sal \
	stl \
	tl \
	utl \
	vcl \
	$(gb_STDLIBS) \
))

$(eval $(call gb_Library_add_exception_objects,tk,\
	toolkit/source/awt/asynccallback \
	toolkit/source/awt/stylesettings \
	toolkit/source/awt/vclxaccessiblecomponent \
	toolkit/source/awt/vclxbitmap \
	toolkit/source/awt/vclxbutton \
	toolkit/source/awt/vclxcontainer \
	toolkit/source/awt/vclxdevice \
	toolkit/source/awt/vclxdialog \
	toolkit/source/awt/vclxfixedline \
	toolkit/source/awt/vclxfont \
	toolkit/source/awt/vclxgraphics \
	toolkit/source/awt/vclxmenu \
	toolkit/source/awt/vclxplugin \
	toolkit/source/awt/vclxpointer \
	toolkit/source/awt/vclxprinter \
	toolkit/source/awt/vclxregion \
	toolkit/source/awt/vclxscroller \
	toolkit/source/awt/vclxspinbutton \
	toolkit/source/awt/vclxsplitter \
	toolkit/source/awt/vclxsystemdependentwindow \
	toolkit/source/awt/vclxtabcontrol \
	toolkit/source/awt/vclxtabpage \
	toolkit/source/awt/vclxtabpagecontainer \
	toolkit/source/awt/animatedimagespeer \
	toolkit/source/awt/vclxtoolkit \
	toolkit/source/awt/vclxtopwindow \
	toolkit/source/awt/vclxwindow \
	toolkit/source/awt/vclxwindow1 \
	toolkit/source/awt/vclxwindows \
	toolkit/source/awt/xsimpleanimation \
	toolkit/source/awt/xthrobber \
	toolkit/source/controls/accessiblecontrolcontext \
	toolkit/source/controls/controlmodelcontainerbase \
	toolkit/source/controls/dialogcontrol \
	toolkit/source/controls/eventcontainer \
	toolkit/source/controls/formattedcontrol \
	toolkit/source/controls/geometrycontrolmodel \
	toolkit/source/controls/grid/defaultgridcolumnmodel \
	toolkit/source/controls/grid/defaultgriddatamodel \
	toolkit/source/controls/grid/gridcolumn \
	toolkit/source/controls/grid/grideventforwarder \
	toolkit/source/controls/grid/sortablegriddatamodel \
	toolkit/source/controls/grid/gridcontrol \
	toolkit/source/controls/roadmapcontrol \
	toolkit/source/controls/roadmapentry \
	toolkit/source/controls/tabpagecontainer \
    toolkit/source/controls/tabpagemodel \
	toolkit/source/controls/stdtabcontroller \
	toolkit/source/controls/stdtabcontrollermodel \
	toolkit/source/controls/tkscrollbar \
	toolkit/source/controls/tksimpleanimation \
	toolkit/source/controls/tkspinbutton \
	toolkit/source/controls/tkthrobber \
	toolkit/source/controls/animatedimages \
	toolkit/source/controls/spinningprogress \
	toolkit/source/controls/tree/treecontrol \
	toolkit/source/controls/tree/treedatamodel \
	toolkit/source/controls/unocontrol \
	toolkit/source/controls/unocontrolbase \
	toolkit/source/controls/unocontrolcontainer \
	toolkit/source/controls/unocontrolcontainermodel \
	toolkit/source/controls/unocontrolmodel \
	toolkit/source/controls/unocontrols \
	toolkit/source/helper/accessibilityclient \
	toolkit/source/helper/externallock \
	toolkit/source/helper/fixedhyperbase \
	toolkit/source/helper/formpdfexport \
	toolkit/source/helper/imagealign \
	toolkit/source/helper/listenermultiplexer \
	toolkit/source/helper/property \
	toolkit/source/helper/registerservices \
	toolkit/source/helper/servicenames \
	toolkit/source/helper/tkresmgr \
	toolkit/source/helper/unomemorystream \
	toolkit/source/helper/unopropertyarrayhelper \
	toolkit/source/helper/unowrapper \
	toolkit/source/helper/vclunohelper \
	toolkit/source/layout/core/bin \
	toolkit/source/layout/core/box \
	toolkit/source/layout/core/box-base \
	toolkit/source/layout/core/byteseq \
	toolkit/source/layout/core/container \
	toolkit/source/layout/core/dialogbuttonhbox \
	toolkit/source/layout/core/factory \
	toolkit/source/layout/core/flow \
	toolkit/source/layout/core/helper \
	toolkit/source/layout/core/import \
	toolkit/source/layout/core/localized-string \
	toolkit/source/layout/core/proplist \
	toolkit/source/layout/core/root \
	toolkit/source/layout/core/table \
	toolkit/source/layout/core/timer \
	toolkit/source/layout/core/translate \
	toolkit/source/layout/core/vcl \
	toolkit/source/layout/vcl/wbutton \
	toolkit/source/layout/vcl/wcontainer \
	toolkit/source/layout/vcl/wfield \
	toolkit/source/layout/vcl/wrapper \
))

ifeq ($(GUIBASE),aqua)
$(eval $(call gb_Library_add_cxxflags,tk,\
	$(gb_OBJCXXFLAGS) \
))
endif

ifeq ($(OS),LINUX)
$(eval $(call gb_Library_add_linked_libs,tk,\
	X11 \
))
endif

# vim: set noet sw=4 ts=4:
