#
# Makefile for win32 bacula executables
# Using MinGW cross-compiler on GNU/Linux
#
#  Written by Robert Nelson, June 2006
#

include ../Makefile.inc

INCLUDES = \
	$(INCLUDE_PTHREADS) \
	$(INCLUDE_BACULA) \
	$(INCLUDE_ZLIB) \
	$(INCLUDE_OPENSSL)

DEFINES = \
	$(HAVES)

vpath %.c ../compat ../../findlib ../../lib
vpath %.cpp ../compat ../../findlib ../../lib

######################################################################

# Files files in src/lib

COMPAT_OBJS = \
	$(OBJDIR)/compat.o \
	$(OBJDIR)/print.o \
	$(OBJDIR)/winapi.o

#	$(OBJDIR)/getopt.o \

FIND_OBJS = \
	$(OBJDIR)/attribs.o \
	$(OBJDIR)/bfile.o \
	$(OBJDIR)/create_file.o \
	$(OBJDIR)/drivetype.o \
	$(OBJDIR)/enable_priv.o \
	$(OBJDIR)/find.o \
	$(OBJDIR)/find_one.o \
	$(OBJDIR)/fstype.o \
	$(OBJDIR)/makepath.o \
	$(OBJDIR)/match.o \
	$(OBJDIR)/save-cwd.o

LIB_OBJS = \
	$(OBJDIR)/address_conf.o \
	$(OBJDIR)/alist.o \
	$(OBJDIR)/attr.o \
	$(OBJDIR)/base64.o \
	$(OBJDIR)/berrno.o \
	$(OBJDIR)/bget_msg.o \
	$(OBJDIR)/bnet.o \
	$(OBJDIR)/bnet_server.o \
	$(OBJDIR)/bpipe.o \
	$(OBJDIR)/breg.o \
	$(OBJDIR)/bregex.o \
	$(OBJDIR)/bsock.o \
	$(OBJDIR)/bsnprintf.o \
	$(OBJDIR)/bsys.o \
	$(OBJDIR)/btime.o \
	$(OBJDIR)/btimers.o \
	$(OBJDIR)/cram-md5.o \
	$(OBJDIR)/crc32.o \
	$(OBJDIR)/crypto.o \
	$(OBJDIR)/daemon.o \
	$(OBJDIR)/dlist.o \
	$(OBJDIR)/edit.o \
	$(OBJDIR)/enh_fnmatch.o \
	$(OBJDIR)/fnmatch.o \
	$(OBJDIR)/guid_to_name.o \
	$(OBJDIR)/hmac.o \
	$(OBJDIR)/htable.o \
	$(OBJDIR)/jcr.o \
	$(OBJDIR)/lex.o \
	$(OBJDIR)/md5.o \
	$(OBJDIR)/mem_pool.o \
	$(OBJDIR)/message.o \
	$(OBJDIR)/openssl.o \
	$(OBJDIR)/pythonlib.o \
	$(OBJDIR)/queue.o \
	$(OBJDIR)/rblist.o \
	$(OBJDIR)/runscript.o \
	$(OBJDIR)/rwlock.o \
	$(OBJDIR)/scan.o \
	$(OBJDIR)/serial.o \
	$(OBJDIR)/sha1.o \
	$(OBJDIR)/signal.o \
	$(OBJDIR)/smartall.o \
	$(OBJDIR)/tls.o \
	$(OBJDIR)/tree.o \
	$(OBJDIR)/util.o \
	$(OBJDIR)/var.o \
	$(OBJDIR)/watchdog.o \
	$(OBJDIR)/workq.o

DLL_OBJS = \
	$(COMPAT_OBJS) $(FIND_OBJS) $(LIB_OBJS)

STATIC_OBJS = \
	$(OBJDIR)/parse_conf.o \
	$(OBJDIR)/res.o

ALL_OBJS = \
	$(DLL_OBJS) $(STATIC_OBJS)

LIBS_DLL = \
	$(LIBS_SSL) \
	$(LIBS_CRYPTO) \
	$(LIBS_PTHREADS) \
	$(LIBS_ZLIB) \
	-lwsock32 \
	-lole32 \
	-loleaut32 \
	-luuid

######################################################################

# Targets

.PHONY: all clean

all: $(BINDIR)/bacula.dll $(LIBDIR)/libbacula.a

clean:
	@echo "Cleaning `pwd`"
	$(call clean_obj,$(ALL_OBJS))
	$(call clean_exe,$(BINDIR)/bacula.dll)
	$(ECHO_CMD)rm -f $(OBJDIR)/bacula.a $(LIBDIR)/libbacula.a

#
# Rules for generating from ../lib
#

$(LIBDIR)/libbacula.a: DLL_DEFINE=USING_DLL

$(LIBDIR)/libbacula.a: $(BINDIR)/bacula.dll $(STATIC_OBJS)
	@echo "Updating archive $@"
	$(call checkdir,$@)
	$(ECHO_CMD)cp $(OBJDIR)/bacula.a $@
	$(ECHO_CMD)$(AR) rsv $@ $(filter %.o,$^)

$(BINDIR)/bacula.dll: DLL_DEFINE=BUILDING_DLL

$(BINDIR)/bacula.dll: $(DLL_OBJS) bacula.def
	@echo "Linking $@"
	$(call checkdir,$@)
	$(ECHO_CMD)$(CXX) $(LDFLAGS) -mdll -mwindows -Wl,--out-implib,$(OBJDIR)/bacula.a $^ $(LIBS_DLL) -o $@

include ../Makefile.rules

$(OBJDIR)/%.o: %.c
	@echo "Compiling $<"
	$(call checkdir,$@)
	$(ECHO_CMD)$(CXX) -D$(DLL_DEFINE) $(CFLAGS) -c $< -o $@

$(OBJDIR)/%.o: %.cpp
	@echo "Compiling $<"
	$(call checkdir,$@)
	$(ECHO_CMD)$(CXX) -D$(DLL_DEFINE) $(CFLAGS) -c $< -o $@


syntax highlighted by Code2HTML, v. 0.9.1