#
# Makefile for building NQ and sample application
#

.PHONY: all cleanall clean

# Detect Target OS
UNAME := $(shell uname)
TARGET_OS := linux
export TARGET_OS

THIS_FILE := $(MAKEFILE_LIST)

# Build Root Directory
BUILD_ROOT := $(shell dirname `readlink -f $(THIS_FILE)`)

# Paths file
include $(BUILD_ROOT)/pathdef.mk

# OS Definitions
include $(OSDEFMK)

export BUILD_ROOT

# NQ Targets:
#----------------------------------------------------------

# netbios daemon
nqnd:
	$(eval export BUILD_LIBS := $(NTWKLIB) $(CMNLIB) $(NBTLIB) $(AUTHAMLIB) \
		 				$(OSSYLIB) $(OSUDLIB) $(WSDLIB) $(OSLIB))
	$(eval export BUILD_DIRS := $(NBTDIR) $(CMNDIR) $(NTWKDIR) $(WSDDIR) $(AUTHAMDIR) $(OSSYDIR) $(OSUDDIR) $(OSDIR))
	$(eval export BUILD_BINARY := $(NETBIOS))
	$(eval export TARGET_SRC := $(NDSRC))
	$(eval export LIBRARY_FILE := $(LIBDIR)/$@_$(TARGET_OS).a)
	@$(MAKE) -f $(THIS_FILE) binary

# netbios daemon and server with passthrough in one process
nqndcs:
	$(eval export DEFS := -DCFG_CORPORATE_SERVER)
	$(eval export BUILD_LIBS := $(RPCCORELIB) $(RPCDOMAINLIB) $(RPCBROWSINGLIB) \
						 $(NTWKLIB) $(CMNLIB) $(NBTLIB) $(AUTHAMLIB) $(WSDLIB) \
			 			 $(OSSYLIB) $(OSUDLIB) $(CCLIB) $(SRVLIB) $(OSLIB))
	$(eval export BUILD_DIRS := $(CCDIR) $(RPCCOREDIR) $(RPCDOMAINDIR) $(RPCBROWSINGDIR) $(NBTDIR) $(CMNDIR) $(NTWKDIR) \
							  $(WSDDIR) $(AUTHAMDIR) $(OSSYDIR) $(OSUDDIR) $(SRVDIR) $(OSDIR))
	$(eval export BUILD_BINARY := $(NDSERVERCLIENT))
	$(eval export TARGET_SRC := $(NDCSSRC))
	$(eval export LIBRARY_FILE := $(LIBDIR)/$@_$(TARGET_OS).a)
	@$(MAKE) -f $(THIS_FILE) binary

# server with passthrough
nqcs:
	$(eval export DEFS := -DCFG_CORPORATE_SERVER)
	$(eval export BUILD_LIBS := $(RPCCORELIB) $(RPCDOMAINLIB) $(RPCBROWSINGLIB) \
						 $(CCLIB) $(NTWKLIB) $(CMNLIB) $(AUTHAMLIB) $(WSDLIB) \
			 			 $(OSSYLIB) $(OSUDLIB) $(SRVLIB) $(OSLIB))
	$(eval export BUILD_DIRS := $(CCDIR) $(RPCCOREDIR) $(RPCDOMAINDIR) $(RPCBROWSINGDIR) \
								$(CMNDIR) $(NTWKDIR) \
								$(WSDDIR) $(AUTHAMDIR) $(OSSYDIR) $(OSUDDIR) $(SRVDIR) $(OSDIR))
	$(eval export BUILD_BINARY := $(SERVERCLIENT))
	$(eval export TARGET_SRC := $(CSSRC))
	$(eval export LIBRARY_FILE := $(LIBDIR)/$@_$(TARGET_OS).a)
	@$(MAKE) -f $(THIS_FILE) binary

# server control application
nqctrl:
	$(eval export DEFS := -DCFG_STANDALONE_SERVER)
	$(eval export BUILD_LIBS := $(NTWKLIB) $(CMNLIB) $(AUTHAMLIB) $(WSDLIB) \
			 			 $(OSSYLIB) $(OSUDLIB) $(SRVLIB) $(CSCTRLLIB))
	$(eval export BUILD_DIRS := $(NTWKDIR) $(CMNDIR) $(WSDDIR) $(AUTHAMDIR) $(OSSYDIR) $(OSUDDIR) $(SRVDIR) $(CSCTRLDIR))
	$(eval export BUILD_BINARY := $(CSCTRL))
	$(eval export LIBRARY_FILE := $(LIBDIR)/$@_$(TARGET_OS).a)
	@$(MAKE) -f $(THIS_FILE) binary


# Compiles the source files in $(BUILD_DIRS) and create lib files in the lib dir
all:
	$(eval DEFS += $(UD) $(CFG))
	@for dir in $(BUILD_DIRS); \
	do \
		$(MAKE) DEFS="$(DEFS)" DEBUGDEF=$(DEBUGDEF) TRACEDEF=$(TRACEDEF) TRACELVLDEF=$(TRACELVLDEF) -C $$dir; \
	done

# Creates a binary from the single library file prepared in the 'library' target
binary: library
	@echo Linking $(BUILD_BINARY)
	$(eval LINKED_LIBS := -Xlinker -\( $(LIBRARY_FILE) $(SYSLIBS) -Xlinker -\))
	@$(LINKER) -o $(BUILD_BINARY) $(LINKED_LIBS)

# Deletes the obj, lib, and dep folders and all binaries
cleanall:
	$(RMDIR) $(DEPDIR) $(OBJDIR) $(LIBDIR)
	$(RM) $(NETBIOS)
	$(RM) $(SERVERCLIENT)
	$(RM) $(NDSERVERCLIENT)

#----------------------------------------------------------

# Creates a single library of all the lib files in the lib dir
library: all
	@echo Creating library $(LIBRARY_FILE)...
	@cd $(LIBDIR); \
	$(MKDIR) tempdir; \
	cd tempdir; \
	$(foreach LIBFILE, $(BUILD_LIBS), $(ARX) $(LIBFILE);) \
	$(AR) $(LIBRARY_FILE) *.o; \
	$(LIB) $(LIBRARY_FILE); \
	cd ..; \
	$(RMDIR) tempdir
	@$(MAKE) -f $(THIS_FILE) clean

# Deletes the obj and dep folders, cleans temporary .a files from lib
clean:
	$(RMDIR) $(OBJDIR)
	$(RMDIR) $(DEPDIR)
ifdef BUILD_LIBS
	$(foreach LIBFILE, $(BUILD_LIBS), @$(RM) $(LIBFILE))
else
	$(RM) $(LIBDIR)/*.a
endif

# Debug-related defines
ifdef NQDEBUG
DEBUGDEF 	= "-DNQDEBUG -Wall -Wno-deprecated-declarations"
endif

ifdef NQCAPTURE
CAPTURE 	= -DUD_NQ_INCLUDESMBCAPTURE
endif

ifdef NQTRACE
TRACE 		= -DUD_NQ_INCLUDETRACE -DMEMORY_SHUTDOWN_PRINTOUT
endif

ifneq ($(or $(CAPTURE),$(TRACE)),)
TRACEDEF 	= "$(TRACE) $(CAPTURE)"
endif

ifdef NQTRACELVL
TRACELVLDEF = "-DUD_CM_LOG_THRESHOLD=$(NQTRACELVL)"
endif
