#**************************************************************
#  
#  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,dbtools))

$(eval $(call gb_Library_add_package_headers,dbtools,connectivity_inc))

$(eval $(call gb_Library_add_precompiled_header,dbtools,$(SRCDIR)/connectivity/inc/pch/precompiled_dbtools))

$(eval $(call gb_Library_set_componentfile,dbtools,connectivity/source/dbtools/dbtools))

$(eval $(call gb_Library_set_include,dbtools,\
        $$(INCLUDE) \
	-I$(SRCDIR)/connectivity/inc \
	-I$(SRCDIR)/connectivity/inc/pch \
	-I$(SRCDIR)/connectivity/source/inc \
	-I$(WORKDIR)/CustomTarget/connectivity/source/parse \
))

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

$(eval $(call gb_Library_add_defs,dbtools,\
	-DOOO_DLLIMPLEMENTATION_DBTOOLS \
	-DBOOST_SPIRIT_USE_OLD_NAMESPACE \
	-DCONN_SHARED_RESOURCE_FILE=cnr \
))

$(eval $(call gb_Library_add_linked_libs,dbtools,\
	comphelper \
	cppuhelper \
	cppu \
	i18nisolang1 \
	jvmaccess \
	sal \
	stl \
	tl \
	utl \
	vos3 \
	$(gb_STDLIBS) \
))

# NETBSD: somewhere we have to instantiate the static data members.
# NETBSD-1.2.1 doesn't know about weak symbols so the default mechanism for GCC won't work.
# SCO and MACOSX: the linker does know about weak symbols, but we can't ignore multiple defined symbols
ifeq ($(OS),NETBSD)
$(eval $(call gb_Library_add_linked_libs,dbtools,ucbhelper))
endif
ifeq ($(OS),SCO)
$(eval $(call gb_Library_add_linked_libs,dbtools,ucbhelper))
endif
ifeq ($(OS)$(COM),OS2GCC)
$(eval $(call gb_Library_add_linked_libs,dbtools,ucbhelper))
endif
ifeq ($(OS),MACOSX)
$(eval $(call gb_Library_add_linked_libs,dbtools,ucbhelper))
endif


$(eval $(call gb_Library_add_exception_objects,dbtools,\
	connectivity/source/sdbcx/VDescriptor \
	connectivity/source/sdbcx/VCollection \
	connectivity/source/sdbcx/VColumn \
	connectivity/source/sdbcx/VIndexColumn \
	connectivity/source/sdbcx/VKeyColumn \
	connectivity/source/sdbcx/VUser \
	connectivity/source/sdbcx/VGroup \
	connectivity/source/sdbcx/VTable \
	connectivity/source/sdbcx/VKey \
	connectivity/source/sdbcx/VIndex \
	connectivity/source/sdbcx/VCatalog \
	connectivity/source/sdbcx/VView \
	connectivity/source/commontools/predicateinput \
	connectivity/source/commontools/ConnectionWrapper \
	connectivity/source/commontools/TConnection \
	connectivity/source/commontools/conncleanup \
	connectivity/source/commontools/dbtools \
	connectivity/source/commontools/dbtools2 \
	connectivity/source/commontools/dbexception \
	connectivity/source/commontools/CommonTools \
	connectivity/source/commontools/TColumnsHelper \
	connectivity/source/commontools/TTableHelper \
	connectivity/source/commontools/TKeys \
	connectivity/source/commontools/TKey \
	connectivity/source/commontools/TKeyColumns \
	connectivity/source/commontools/TIndexes \
	connectivity/source/commontools/TIndex \
	connectivity/source/commontools/TIndexColumns \
	connectivity/source/commontools/DateConversion \
	connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData \
	connectivity/source/commontools/FDatabaseMetaDataResultSet \
	connectivity/source/commontools/TDatabaseMetaDataBase \
	connectivity/source/commontools/TPrivilegesResultSet \
	connectivity/source/commontools/TSkipDeletedSet \
	connectivity/source/commontools/dbmetadata \
	connectivity/source/commontools/TSortIndex \
	connectivity/source/commontools/dbcharset \
	connectivity/source/commontools/propertyids \
	connectivity/source/commontools/FValue \
	connectivity/source/commontools/paramwrapper \
	connectivity/source/commontools/statementcomposer \
	connectivity/source/commontools/RowFunctionParser \
	connectivity/source/commontools/sqlerror \
	connectivity/source/commontools/filtermanager \
	connectivity/source/commontools/parameters \
	connectivity/source/commontools/ParamterSubstitution \
	connectivity/source/commontools/DriversConfig \
	connectivity/source/commontools/formattedcolumnvalue \
	connectivity/source/commontools/BlobHelper \
	connectivity/source/commontools/warningscontainer \
	connectivity/source/parse/PColumn \
	connectivity/source/parse/sqliterator \
	connectivity/source/parse/sqlnode \
	connectivity/source/parse/wrap_sqlbison \
	connectivity/source/parse/internalnode \
	connectivity/source/simpledbt/charset_s \
	connectivity/source/simpledbt/staticdbtools_s \
	connectivity/source/simpledbt/parsenode_s \
	connectivity/source/simpledbt/parser_s \
	connectivity/source/resource/sharedresources \
))

$(eval $(call gb_Library_add_noexception_objects,dbtools,\
	connectivity/source/commontools/AutoRetrievingBase \
	connectivity/source/commontools/dbconversion \
	connectivity/source/parse/wrap_sqlflex \
	connectivity/source/simpledbt/refbase \
	connectivity/source/simpledbt/dbtfactory \
))

############
# BISON rule
############

# FIXME: no proper dependencies of other files on Yacc's outputs - needs "make clean" on any changes!

$(WORKDIR)/CustomTarget/connectivity/source/parse/sqlbison.cxx : TRTEMPFILE := $(shell $(gb_MKTEMP))
$(WORKDIR)/CustomTarget/connectivity/source/parse/sqlbison.cxx : $(SRCDIR)/connectivity/source/parse/sqlbison.y
	tr -d "\015" < $< > $(TRTEMPFILE)
	mkdir -p $(dir $@)
	bison -v -d -l -pSQLyy -bsql -o $@ $(TRTEMPFILE)
	rm $(TRTEMPFILE)

$(WORKDIR)/CustomTarget/connectivity/source/parse/sqlbison.hxx : $(WORKDIR)/CustomTarget/connectivity/source/parse/sqlbison.cxx

# Add depenedencies. This is so ugly and doesn't cover the fact evoab2 also uses it:

$(SRCDIR)/connectivity/inc/connectivity/sqlparse.hxx : $(WORKDIR)/CustomTarget/connectivity/source/parse/sqlbison.hxx

$(SRCDIR)/connectivity/source/parse/wrap_sqlbison.cxx : $(WORKDIR)/CustomTarget/connectivity/source/parse/sqlbison.cxx

###########
# FLEX rule
###########

$(WORKDIR)/CustomTarget/connectivity/source/parse/sqlflex.cxx : $(SRCDIR)/connectivity/source/parse/sqlflex.l
	mkdir -p $(dir $@)
	flex -i -8 -PSQLyy -L -o$@ $<

$(SRCDIR)/connectivity/source/parse/wrap_sqlflex.cxx : $(WORKDIR)/CustomTarget/connectivity/source/parse/sqlflex.cxx $(WORKDIR)/CustomTarget/connectivity/source/parse/sqlbison.hxx

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