# Copyright 2001-2009 The Apache Software Foundation or its licensors, as
# applicable.
#
# Licensed 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.
#
# ====================================================================
#
# NMAKEmakefile   Master DB4 makefile.
# Usage:
#                 DLL=1     Build DLL version
#                 DEBUG=1   Build DEBUG version of DB4
#
# Originally contributed by Mladen Turk <mturk redhat.com>
#
# ====================================================================
#

!IF !DEFINED(DB_DECLARE_STATIC) || "$(DB_DECLARE_STATIC)" == ""
TARGET=DLL
CFLAGS = /EHsc -DDB_CREATE_DLL -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE $(CFLAGS)
PROJECT = libdb43
!ELSE
TARGET=LIB
CFLAGS = /EHsc -DDB_CREATE_LIB -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE $(CFLAGS)
PROJECT = db43
!ENDIF

!IF !DEFINED(SRCDIR) || "$(SRCDIR)" == ""
SRCDIR = .
!ENDIF

!include <..\..\common\NMAKEcommon.inc>

!IF "$(CPU)" == "X86"
WINBUILD=build_win32
!ELSE
WINBUILD=build_win64
!ENDIF

!IF "$(TARGET)" != "LIB"
LFLAGS = $(LFLAGS) /version:4.3
!ENDIF
INCLUDES = -I$(SRCDIR) -I$(SRCDIR)\$(WINBUILD)
PDBFLAGS = -Fo$(WORKDIR)\ -Fd$(WORKDIR)\$(PROJECT)-src
OBJECTS = \
	$(WORKDIR)\aes_method.obj \
	$(WORKDIR)\bt_compare.obj \
	$(WORKDIR)\bt_conv.obj \
	$(WORKDIR)\bt_curadj.obj \
	$(WORKDIR)\bt_cursor.obj \
	$(WORKDIR)\bt_delete.obj \
	$(WORKDIR)\bt_method.obj \
	$(WORKDIR)\bt_open.obj \
	$(WORKDIR)\bt_put.obj \
	$(WORKDIR)\bt_reclaim.obj \
	$(WORKDIR)\bt_recno.obj \
	$(WORKDIR)\bt_rec.obj \
	$(WORKDIR)\btree_auto.obj \
	$(WORKDIR)\bt_rsearch.obj \
	$(WORKDIR)\bt_search.obj \
	$(WORKDIR)\bt_split.obj \
	$(WORKDIR)\bt_stat.obj \
	$(WORKDIR)\bt_upgrade.obj \
	$(WORKDIR)\bt_verify.obj \
	$(WORKDIR)\crdel_auto.obj \
	$(WORKDIR)\crdel_rec.obj \
	$(WORKDIR)\crypto.obj \
	$(WORKDIR)\cxx_dbc.obj \
	$(WORKDIR)\cxx_db.obj \
	$(WORKDIR)\cxx_dbt.obj \
	$(WORKDIR)\cxx_env.obj \
	$(WORKDIR)\cxx_except.obj \
	$(WORKDIR)\cxx_lock.obj \
	$(WORKDIR)\cxx_logc.obj \
	$(WORKDIR)\cxx_mpool.obj \
	$(WORKDIR)\cxx_multi.obj \
	$(WORKDIR)\cxx_seq.obj \
	$(WORKDIR)\cxx_txn.obj \
	$(WORKDIR)\db_am.obj \
	$(WORKDIR)\db_auto.obj \
	$(WORKDIR)\db_byteorder.obj \
	$(WORKDIR)\db_cam.obj \
	$(WORKDIR)\db_conv.obj \
	$(WORKDIR)\db_dispatch.obj \
	$(WORKDIR)\db_dup.obj \
	$(WORKDIR)\db_err.obj \
	$(WORKDIR)\db_getlong.obj \
	$(WORKDIR)\db_idspace.obj \
	$(WORKDIR)\db_iface.obj \
	$(WORKDIR)\db_join.obj \
	$(WORKDIR)\db_log2.obj \
	$(WORKDIR)\db_meta.obj \
	$(WORKDIR)\db_method.obj \
	$(WORKDIR)\dbm.obj \
	$(WORKDIR)\db.obj \
	$(WORKDIR)\db_open.obj \
	$(WORKDIR)\db_overflow.obj \
	$(WORKDIR)\db_ovfl_vrfy.obj \
	$(WORKDIR)\db_pr.obj \
	$(WORKDIR)\db_reclaim.obj \
	$(WORKDIR)\db_rec.obj \
	$(WORKDIR)\dbreg_auto.obj \
	$(WORKDIR)\dbreg.obj \
	$(WORKDIR)\dbreg_rec.obj \
	$(WORKDIR)\dbreg_stat.obj \
	$(WORKDIR)\dbreg_util.obj \
	$(WORKDIR)\db_remove.obj \
	$(WORKDIR)\db_rename.obj \
	$(WORKDIR)\db_ret.obj \
	$(WORKDIR)\db_salloc.obj \
	$(WORKDIR)\db_setid.obj \
	$(WORKDIR)\db_setlsn.obj \
	$(WORKDIR)\db_shash.obj \
	$(WORKDIR)\db_stati.obj \
	$(WORKDIR)\db_truncate.obj \
	$(WORKDIR)\db_upg.obj \
	$(WORKDIR)\db_upg_opd.obj \
	$(WORKDIR)\db_vrfy.obj \
	$(WORKDIR)\db_vrfyutil.obj \
	$(WORKDIR)\env_file.obj \
	$(WORKDIR)\env_method.obj \
	$(WORKDIR)\env_open.obj \
	$(WORKDIR)\env_recover.obj \
	$(WORKDIR)\env_region.obj \
	$(WORKDIR)\env_stat.obj \
	$(WORKDIR)\fileops_auto.obj \
	$(WORKDIR)\fop_basic.obj \
	$(WORKDIR)\fop_rec.obj \
	$(WORKDIR)\fop_util.obj \
	$(WORKDIR)\hash_auto.obj \
	$(WORKDIR)\hash_conv.obj \
	$(WORKDIR)\hash_dup.obj \
	$(WORKDIR)\hash_func.obj \
	$(WORKDIR)\hash_meta.obj \
	$(WORKDIR)\hash_method.obj \
	$(WORKDIR)\hash.obj \
	$(WORKDIR)\hash_open.obj \
	$(WORKDIR)\hash_page.obj \
	$(WORKDIR)\hash_reclaim.obj \
	$(WORKDIR)\hash_rec.obj \
	$(WORKDIR)\hash_stat.obj \
	$(WORKDIR)\hash_upgrade.obj \
	$(WORKDIR)\hash_verify.obj \
	$(WORKDIR)\hmac.obj \
	$(WORKDIR)\hsearch.obj \
	$(WORKDIR)\lock_deadlock.obj \
	$(WORKDIR)\lock_id.obj \
	$(WORKDIR)\lock_list.obj \
	$(WORKDIR)\lock_method.obj \
	$(WORKDIR)\lock.obj \
	$(WORKDIR)\lock_region.obj \
	$(WORKDIR)\lock_stat.obj \
	$(WORKDIR)\lock_timer.obj \
	$(WORKDIR)\lock_util.obj \
	$(WORKDIR)\log_archive.obj \
	$(WORKDIR)\log_compare.obj \
	$(WORKDIR)\log_get.obj \
	$(WORKDIR)\log_method.obj \
	$(WORKDIR)\log.obj \
	$(WORKDIR)\log_put.obj \
	$(WORKDIR)\log_stat.obj \
	$(WORKDIR)\mp_alloc.obj \
	$(WORKDIR)\mp_bh.obj \
	$(WORKDIR)\mp_fget.obj \
	$(WORKDIR)\mp_fmethod.obj \
	$(WORKDIR)\mp_fopen.obj \
	$(WORKDIR)\mp_fput.obj \
	$(WORKDIR)\mp_fset.obj \
	$(WORKDIR)\mp_method.obj \
	$(WORKDIR)\mp_region.obj \
	$(WORKDIR)\mp_register.obj \
	$(WORKDIR)\mp_stat.obj \
	$(WORKDIR)\mp_sync.obj \
	$(WORKDIR)\mp_trickle.obj \
	$(WORKDIR)\mt19937db.obj \
	$(WORKDIR)\mutex.obj \
	$(WORKDIR)\mut_win32.obj \
	$(WORKDIR)\os_abs.obj \
	$(WORKDIR)\os_alloc.obj \
	$(WORKDIR)\os_clock.obj \
	$(WORKDIR)\os_config.obj \
	$(WORKDIR)\os_dir.obj \
	$(WORKDIR)\os_errno.obj \
	$(WORKDIR)\os_fid.obj \
	$(WORKDIR)\os_fsync.obj \
	$(WORKDIR)\os_handle.obj \
	$(WORKDIR)\os_id.obj \
	$(WORKDIR)\os_map.obj \
	$(WORKDIR)\os_method.obj \
	$(WORKDIR)\os_oflags.obj \
	$(WORKDIR)\os_open.obj \
	$(WORKDIR)\os_region.obj \
	$(WORKDIR)\os_rename.obj \
	$(WORKDIR)\os_root.obj \
	$(WORKDIR)\os_rpath.obj \
	$(WORKDIR)\os_rw.obj \
	$(WORKDIR)\os_seek.obj \
	$(WORKDIR)\os_sleep.obj \
	$(WORKDIR)\os_spin.obj \
	$(WORKDIR)\os_stat.obj \
	$(WORKDIR)\os_tmpdir.obj \
	$(WORKDIR)\os_truncate.obj \
	$(WORKDIR)\os_unlink.obj \
	$(WORKDIR)\qam_auto.obj \
	$(WORKDIR)\qam_conv.obj \
	$(WORKDIR)\qam_files.obj \
	$(WORKDIR)\qam_method.obj \
	$(WORKDIR)\qam.obj \
	$(WORKDIR)\qam_open.obj \
	$(WORKDIR)\qam_rec.obj \
	$(WORKDIR)\qam_stat.obj \
	$(WORKDIR)\qam_upgrade.obj \
	$(WORKDIR)\qam_verify.obj \
	$(WORKDIR)\rep_auto.obj \
	$(WORKDIR)\rep_backup.obj \
	$(WORKDIR)\rep_method.obj \
	$(WORKDIR)\rep_record.obj \
	$(WORKDIR)\rep_region.obj \
	$(WORKDIR)\rep_stat.obj \
	$(WORKDIR)\rep_util.obj \
	$(WORKDIR)\rijndael-alg-fst.obj \
	$(WORKDIR)\rijndael-api-fst.obj \
	$(WORKDIR)\seq_stat.obj \
	$(WORKDIR)\sequence.obj \
	$(WORKDIR)\sha1.obj \
	$(WORKDIR)\strcasecmp.obj \
	$(WORKDIR)\txn_auto.obj \
	$(WORKDIR)\txn_method.obj \
	$(WORKDIR)\txn.obj \
	$(WORKDIR)\txn_rec.obj \
	$(WORKDIR)\txn_recover.obj \
	$(WORKDIR)\txn_region.obj \
	$(WORKDIR)\txn_stat.obj \
	$(WORKDIR)\txn_util.obj \
	$(WORKDIR)\util_cache.obj \
	$(WORKDIR)\util_log.obj \
	$(WORKDIR)\util_sig.obj \
	$(WORKDIR)\xa_db.obj \
	$(WORKDIR)\xa_map.obj \
	$(WORKDIR)\xa.obj

BUILDINC = $(PREFIX)\include
BUILDLIB = $(PREFIX)\lib
BUILDBIN = $(PREFIX)\bin
!IF "$(TARGET)" == "DLL"
BUILDOUT = $(WORKDIR)\$(PROJECT).dll
BUILDPDB = $(WORKDIR)\$(PROJECT).pdb
BUILDRES = $(WORKDIR)\$(PROJECT).res
BUILDMAN = $(BUILDOUT).manifest
!ELSE
BUILDOUT = $(WORKDIR)\$(PROJECT).lib
!ENDIF

all : $(WORKDIR) $(BUILDOUT)

$(BUILDINC) :
	@if not exist "$(BUILDINC)\$(NULL)" mkdir "$(BUILDINC)"

$(BUILDLIB) :
	@if not exist "$(BUILDLIB)\$(NULL)" mkdir "$(BUILDLIB)"

$(BUILDBIN) :
	@if not exist "$(BUILDBIN)\$(NULL)" mkdir "$(BUILDBIN)"

$(WORKDIR) :
	@$(MAKEWORKDIR)

{$(SRCDIR)\btree}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\clib}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\common}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\crypto}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\crypto\mersenne}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\crypto\rijndael}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\cxx}.cpp{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\db}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\dbm}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\dbreg}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\env}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\fileops}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\hash}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\hmac}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\hsearch}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\lock}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\log}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\mp}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\mutex}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\os}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\os_win32}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\qam}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\rep}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\sequence}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\txn}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

{$(SRCDIR)\xa}.c{$(WORKDIR)}.obj:
	$(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<

$(OBJECTS): $(SRCDIR)\build_win32\*.h $(SRCDIR)\build_win64\*.h

!IF "$(TARGET)" == "DLL"
$(BUILDRES): $(SRCDIR)\build_win32\libdb.rc
	$(RC) $(RCFLAGS) /i "$(SRCDIR)\$(WINBUILD)" /fo $(BUILDRES) $(SRCDIR)\build_win32\libdb.rc
$(BUILDOUT): $(WORKDIR) $(OBJECTS) $(BUILDRES)
	$(LINK) $(LFLAGS) $(OBJECTS) $(BUILDRES) $(LIBS) /def:$(SRCDIR)\build_win32\libdb.def /pdb:$(BUILDPDB) /out:$(BUILDOUT)
	IF EXIST $(BUILDMAN) \
		mt -nologo -manifest $(BUILDMAN) -outputresource:$(BUILDOUT);2
!ELSE
$(BUILDOUT): $(WORKDIR) $(OBJECTS)
	$(LINK) $(LFLAGS) $(OBJECTS) /out:$(BUILDOUT)
!ENDIF

clean:
	@$(CLEANTARGET)

install: $(BUILDINC) $(BUILDLIB) $(BUILDBIN) $(WORKDIR) $(BUILDOUT)
	@xcopy "$(SRCDIR)\$(WINBUILD)\*.h" "$(BUILDINC)" /Y /Q
	@xcopy "$(WORKDIR)\*.lib" "$(BUILDLIB)" /Y /Q
	@xcopy "$(WORKDIR)\*.dll" "$(BUILDBIN)" /Y /Q 2>NUL
