# # Makefile for win32 bacula executables # Using MinGW cross-compiler on GNU/Linux # # Written for Bacula by Howard Thomson, April 2006 # # Configuration TOPDIR = @TOP_DIR@ CROSSTOOLS = $(TOPDIR)/cross-tools MINGW = $(CROSSTOOLS)/mingw32 DEPKGS = $(TOPDIR)/depkgs-mingw32 INCLUDE_BACULA = -I .. -I ./compat -I$(DEPKGS)/include INCLUDE_PTHREADS = -I$(DEPKGS)/include/pthreads INCLUDE_VSS = -I$(DEPKGS)/vss INCLUDE_ICONS = -I ../filed/win32 LIB_PTHREADS = -lpthreadGCE LIB_ZLIB = -lz LIB_SSL = -lssl LIB_CRYPTO = -lcrypto LIBWX = $(DEPKGS)/lib/wx_dll LIB_WX = $(LIBWX)/libwx_base-2.6.a \ $(LIBWX)/libwx_base_net-2.6.a \ $(LIBWX)/libwx_base_xml-2.6.a \ $(LIBWX)/libwx_msw_core-2.6.a \ $(LIBWX)/libwx_msw_adv-2.6.a \ $(LIBWX)/libwx_msw_html-2.6.a \ $(LIBWX)/libwx_msw_media-2.6.a \ $(LIBWX)/libwx_msw_qa-2.6.a \ $(LIBWX)/libwx_msw_xrc-2.6.a BIN_DIR = $(MINGW)/bin INCLUDES = \ $(INCLUDE_GCC) \ $(INCLUDE_MINGW) \ $(INCLUDE_PTHREADS) \ $(INCLUDE_BACULA) \ $(INCLUDE_ZLIB) \ $(INCLUDE_VSS) \ $(INCLUDE_ICONS) # $(INCLUDE_OPENSSL) HAVES = \ -DHAVE_MINGW \ -DHAVE_ZLIB_H \ -DHAVE_LIBZ \ -DWIN32_VSS \ -DHAVE_WIN32 # -DHAVE_OPENSSL \ # -DHAVE_TLS \ DEFINES = \ -DWIN32 \ $(HAVES) \ -DCOMPILING_BACULA CC = $(BIN_DIR)/mingw32-g++ $(DEFINES) $(INCLUDES) CXX = $(BIN_DIR)/mingw32-g++ $(DEFINES) $(INCLUDES) 2>&1 WINDRES = $(BIN_DIR)/mingw32-windres AR = $(BIN_DIR)/mingw32-ar RANLIB = $(BIN_DIR)/mingw32-ranlib first: all LIBDIR = ./lib OBJDIR = . ########################################################################## # Files in src/win32/filed/ OBJS_FILED = \ $(OBJDIR)/authenticate.o \ $(OBJDIR)/backup.o \ $(OBJDIR)/estimate.o \ $(OBJDIR)/filed.o \ $(OBJDIR)/filed_conf.o \ $(OBJDIR)/heartbeat.o \ $(OBJDIR)/job.o \ $(OBJDIR)/restore.o \ $(OBJDIR)/status.o \ $(OBJDIR)/verify.o \ $(OBJDIR)/verify_vol.o $(OBJDIR)/authenticate.o: ../filed/authenticate.c $(CXX) -c $< -o $@ $(OBJDIR)/backup.o: ../filed/backup.c $(CXX) -c $< -o $@ $(OBJDIR)/estimate.o: ../filed/estimate.c $(CXX) -c $< -o $@ $(OBJDIR)/filed.o: ../filed/filed.c $(CXX) -c $< -o $@ $(OBJDIR)/filed_conf.o: ../filed/filed_conf.c $(CXX) -c $< -o $@ $(OBJDIR)/heartbeat.o: ../filed/heartbeat.c $(CXX) -c $< -o $@ $(OBJDIR)/job.o: ../filed/job.c $(CXX) -c $< -o $@ $(OBJDIR)/restore.o: ../filed/restore.c $(CXX) -c $< -o $@ $(OBJDIR)/status.o: ../filed/status.c $(CXX) -c $< -o $@ $(OBJDIR)/verify.o: ../filed/verify.c $(CXX) -c $< -o $@ $(OBJDIR)/verify_vol.o: ../filed/verify_vol.c $(CXX) -c $< -o $@ ###################################################################### # Files in src/win32/compat OBJS_COMPAT = \ $(OBJDIR)/print.o \ $(OBJDIR)/compat.o \ $(OBJDIR)/getopt.o \ $(OBJDIR)/vss.o \ $(OBJDIR)/vss_xp.o \ $(OBJDIR)/vss_w2k3.o $(OBJDIR)/compat.o: ./compat/compat.cpp $(CXX) -c $< -o $@ $(OBJDIR)/getopt.o: ./compat/getopt.c $(CXX) -c $< -o $@ $(OBJDIR)/print.o: ./compat/print.cpp $(CXX) -c $< -o $@ $(OBJDIR)/vss.o: ./compat/vss.cpp $(CXX) -c $< -o $@ $(OBJDIR)/vss_xp.o: ./compat/vss_XP.cpp ./compat/vss_generic.cpp $(CXX) -c $< -o $@ $(OBJDIR)/vss_w2k3.o: ./compat/vss_W2K3.cpp ./compat/vss_generic.cpp $(CXX) -c $< -o $@ ###################################################################### # Files in src/filed/win32 OBJS_WIN = \ $(OBJDIR)/winabout.o \ $(OBJDIR)/winevents.o \ $(OBJDIR)/winservice.o \ $(OBJDIR)/winstat.o \ $(OBJDIR)/wintray.o \ $(OBJDIR)/winmain.o \ $(OBJDIR)/winres.res $(OBJDIR)/winabout.o: ../filed/win32/winabout.cpp $(CXX) -c $< -o $@ $(OBJDIR)/winevents.o: ../filed/win32/winevents.cpp $(CXX) -c $< -o $@ $(OBJDIR)/winmain.o: ../filed/win32/winmain.cpp $(CXX) -c $< -o $@ $(OBJDIR)/winservice.o: ../filed/win32/winservice.cpp $(CXX) -c $< -o $@ $(OBJDIR)/winstat.o: ../filed/win32/winstat.cpp $(CXX) -c $< -o $@ $(OBJDIR)/wintray.o: ../filed/win32/wintray.cpp $(CXX) -c $< -o $@ $(OBJDIR)/winres.res: ../filed/win32/winres.rc $(WINDRES) $(INCLUDE_ICONS) -O coff $< -o $@ ###################################################################### # Files in src/findlib OBJS_FINDLIB = \ $(OBJDIR)/attribs.o \ $(OBJDIR)/bfile.o \ $(OBJDIR)/create_file.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 $(OBJDIR)/attribs.o: ../findlib/attribs.c $(CXX) -c $< -o $@ $(OBJDIR)/bfile.o: ../findlib/bfile.c $(CXX) -c $< -o $@ $(OBJDIR)/create_file.o: ../findlib/create_file.c $(CXX) -c $< -o $@ $(OBJDIR)/enable_priv.o: ../findlib/enable_priv.c $(CXX) -c $< -o $@ $(OBJDIR)/find.o: ../findlib/find.c $(CXX) -c $< -o $@ $(OBJDIR)/find_one.o: ../findlib/find_one.c $(CXX) -c $< -o $@ $(OBJDIR)/fstype.o: ../findlib/fstype.c $(CXX) -c $< -o $@ $(OBJDIR)/makepath.o: ../findlib/makepath.c $(CXX) -c $< -o $@ $(OBJDIR)/match.o: ../findlib/match.c $(CXX) -c $< -o $@ $(OBJDIR)/save-cwd.o: ../findlib/save-cwd.c $(CXX) -c $< -o $@ ###################################################################### # Files files in src/lib LIB_OBJS = \ $(LIBDIR)/address_conf.o \ $(LIBDIR)/alist.o \ $(LIBDIR)/alloc.o \ $(LIBDIR)/attr.o \ $(LIBDIR)/base64.o \ $(LIBDIR)/berrno.o \ $(LIBDIR)/bget_msg.o \ $(LIBDIR)/bnet.o \ $(LIBDIR)/bnet_server.o \ $(LIBDIR)/bpipe.o \ $(LIBDIR)/bregex.o \ $(LIBDIR)/bsnprintf.o \ $(LIBDIR)/bsys.o \ $(LIBDIR)/btime.o \ $(LIBDIR)/btimers.o \ $(LIBDIR)/cram-md5.o \ $(LIBDIR)/crc32.o \ $(LIBDIR)/crypto.o \ $(LIBDIR)/daemon.o \ $(LIBDIR)/dlist.o \ $(LIBDIR)/edit.o \ $(LIBDIR)/fnmatch.o \ $(LIBDIR)/hmac.o \ $(LIBDIR)/htable.o \ $(LIBDIR)/idcache.o \ $(LIBDIR)/jcr.o \ $(LIBDIR)/lex.o \ $(LIBDIR)/md5.o \ $(LIBDIR)/mem_pool.o \ $(LIBDIR)/message.o \ $(LIBDIR)/parse_conf.o \ $(LIBDIR)/pythonlib.o \ $(LIBDIR)/queue.o \ $(LIBDIR)/res.o \ $(LIBDIR)/runscript.o \ $(LIBDIR)/rwlock.o \ $(LIBDIR)/semlock.o \ $(LIBDIR)/serial.o \ $(LIBDIR)/sha1.o \ $(LIBDIR)/signal.o \ $(LIBDIR)/smartall.o \ $(LIBDIR)/tls.o \ $(LIBDIR)/var.o \ $(LIBDIR)/watchdog.o \ $(LIBDIR)/winapi.o \ $(LIBDIR)/workq.o \ $(LIBDIR)/scan.o \ $(LIBDIR)/tree.o \ $(LIBDIR)/util.o # # Rules for generating from ../lib # $(LIBDIR)/address_conf.o: ../lib/address_conf.c $(CXX) -c $< -o $@ $(LIBDIR)/alist.o: ../lib/alist.c $(CXX) -c $< -o $@ $(LIBDIR)/alloc.o: ../lib/alloc.c $(CXX) -c $< -o $@ $(LIBDIR)/attr.o: ../lib/attr.c $(CXX) -c $< -o $@ $(LIBDIR)/base64.o: ../lib/base64.c $(CXX) -c $< -o $@ $(LIBDIR)/berrno.o: ../lib/berrno.c $(CXX) -c $< -o $@ $(LIBDIR)/bget_msg.o: ../lib/bget_msg.c $(CXX) -c $< -o $@ $(LIBDIR)/bnet.o: ../lib/bnet.c $(CXX) -c $< -o $@ $(LIBDIR)/bnet_server.o: ../lib/bnet_server.c $(CXX) -c $< -o $@ $(LIBDIR)/bpipe.o: ../lib/bpipe.c $(CXX) -c $< -o $@ $(LIBDIR)/bregex.o: ../lib/bregex.c $(CXX) -c $< -o $@ $(LIBDIR)/bsnprintf.o: ../lib/bsnprintf.c $(CXX) -c $< -o $@ $(LIBDIR)/bsys.o: ../lib/bsys.c $(CXX) -c $< -o $@ $(LIBDIR)/btime.o: ../lib/btime.c $(CXX) -c $< -o $@ $(LIBDIR)/btimers.o: ../lib/btimers.c $(CXX) -c $< -o $@ $(LIBDIR)/cram-md5.oc: ../lib/cram-md5.c $(CXX) -c $< -o $@ $(LIBDIR)/crc32.o: ../lib/crc32.c $(CXX) -c $< -o $@ $(LIBDIR)/crypto.o: ../lib/crypto.c $(CXX) -c $< -o $@ $(LIBDIR)/daemon.o: ../lib/daemon.c $(CXX) -c $< -o $@ $(LIBDIR)/dlist.o: ../lib/dlist.c $(CXX) -c $< -o $@ $(LIBDIR)/edit.o: ../lib/edit.c $(CXX) -c $< -o $@ $(LIBDIR)/fnmatch.o: ../lib/fnmatch.c $(CXX) -c $< -o $@ $(LIBDIR)/hmac.o: ../lib/hmac.c $(CXX) -c $< -o $@ $(LIBDIR)/htable.o: ../lib/htable.c $(CXX) -c $< -o $@ $(LIBDIR)/idcache.o: ../lib/idcache.c $(CXX) -c $< -o $@ $(LIBDIR)/jcr.o: ../lib/jcr.c $(CXX) -c $< -o $@ $(LIBDIR)/lex.o: ../lib/lex.c $(CXX) -c $< -o $@ $(LIBDIR)/md5.o: ../lib/md5.c $(CXX) -c $< -o $@ $(LIBDIR)/mem_pool.o: ../lib/mem_pool.c $(CXX) -c $< -o $@ $(LIBDIR)/message.o: ../lib/message.c $(CXX) -c $< -o $@ $(LIBDIR)/parse_conf.o: ../lib/parse_conf.c $(CXX) -c $< -o $@ $(LIBDIR)/pythonlib.o: ../lib/pythonlib.c $(CXX) -c $< -o $@ $(LIBDIR)/queue.o: ../lib/queue.c $(CXX) -c $< -o $@ $(LIBDIR)/res.o: ../lib/res.c $(CXX) -c $< -o $@ $(LIBDIR)/runscript.o: ../lib/runscript.c $(CXX) -c $< -o $@ $(LIBDIR)/rwlock.o: ../lib/rwlock.c $(CXX) -c $< -o $@ $(LIBDIR)/scan.o: ../lib/scan.c $(CXX) -c $< -o $@ $(LIBDIR)/semlock.o: ../lib/semlock.c $(CXX) -c $< -o $@ $(LIBDIR)/serial.o: ../lib/serial.c $(CXX) -c $< -o $@ $(LIBDIR)/sha1.o: ../lib/sha1.c $(CXX) -c $< -o $@ $(LIBDIR)/signal.o: ../lib/signal.c $(CXX) -c $< -o $@ $(LIBDIR)/smartall.o: ../lib/smartall.c $(CXX) -c $< -o $@ $(LIBDIR)/tls.o: ../lib/tls.c $(CXX) -c $< -o $@ $(LIBDIR)/tree.o: ../lib/tree.c $(CXX) -c $< -o $@ $(LIBDIR)/util.o: ../lib/util.c $(CXX) -c $< -o $@ $(LIBDIR)/var.o: ../lib/var.c $(CXX) -c $< -o $@ $(LIBDIR)/watchdog.o: ../lib/watchdog.c $(CXX) -c $< -o $@ $(LIBDIR)/winapi.o: ../lib/winapi.c $(CXX) -c $< -o $@ $(LIBDIR)/workq.o: ../lib/workq.c $(CXX) -c $< -o $@ ###################################################################### # Files in src/console OBJS_CONSOLE = \ $(OBJDIR)/cons_authenticate.o \ $(OBJDIR)/console.o \ $(OBJDIR)/console_conf.o CONS_INC = -I ../console $(OBJDIR)/cons_authenticate.o: ../console/authenticate.c $(CXX) $(CONS_INC) -c $< -o $@ $(OBJDIR)/console.o: ../console/console.c $(CXX) $(CONS_INC) -c $< -o $@ $(OBJDIR)/console_conf.o: ../console/console_conf.c $(CXX) $(CONS_INC) -c $< -o $@ ###################################################################### # Files in src/wx-console OBJS_WXCONSOLE = \ $(OBJDIR)/wx_authenticate.o \ $(OBJDIR)/main.o \ $(OBJDIR)/console_thread.o \ $(OBJDIR)/console_conf.o \ $(OBJDIR)/wxbrestorepanel.o \ $(OBJDIR)/wxbmainframe.o \ $(OBJDIR)/wxbtableparser.o \ $(OBJDIR)/wxbtreectrl.o \ $(OBJDIR)/wxbutils.o \ $(OBJDIR)/wxbconfigpanel.o \ $(OBJDIR)/wxbconfigfileeditor.o \ $(OBJDIR)/wxbhistorytextctrl.o \ $(OBJDIR)/wx-console.res WX_INC = -DHAVE_WXCONSOLE -D__CYGWIN__ -D__WINDOWS__ -I ../wx-console $(INCLUDE_WX) $(OBJDIR)/wx_authenticate.o: ../wx-console/authenticate.c $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/main.o: ../wx-console/main.cpp $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/console_thread.o: ../wx-console/console_thread.cpp $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/wx_console_conf.o: ../wx-console/console_conf.c $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/wxbrestorepanel.o: ../wx-console/wxbrestorepanel.cpp $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/wxbmainframe.o: ../wx-console/wxbmainframe.cpp $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/wxbtableparser.o: ../wx-console/wxbtableparser.cpp $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/wxbtreectrl.o: ../wx-console/wxbtreectrl.cpp $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/wxbutils.o: ../wx-console/wxbutils.cpp $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/wxbconfigpanel.o: ../wx-console/wxbconfigpanel.cpp $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/wxbconfigfileeditor.o: ../wx-console/wxbconfigfileeditor.cpp $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/wxbhistorytextctrl.o: ../wx-console/wxbhistorytextctrl.cpp $(CXX) $(WX_INC) -c $< -o $@ $(OBJDIR)/wx-console.res: ../wx-console/wx-console_private.rc $(WINDRES) $(WX_INC) -O coff $< -o $@ ###################################################################### FD_OBJS = $(LIB_OBJS) $(OBJS_COMPAT) $(OBJS_WIN) $(OBJS_FINDLIB) $(OBJS_FILED) FD_LIBS = \ -L$(DEPKGS)/lib \ $(LIB_PTHREADS) \ $(LIB_SSL) \ $(LIB_CRYPTO) \ $(LIB_ZLIB) \ -lgdi32 \ -lole32 \ -loleaut32 \ -lwsock32 \ -luuid CONS_OBJS = $(LIB_OBJS) $(OBJS_COMPAT) $(OBJS_CONSOLE) CONS_LIBS = \ -L$(DEPKGS)/lib \ $(LIB_PTHREADS) \ $(LIB_SSL) \ $(LIB_CRYPTO) \ -lole32 \ -loleaut32 \ -lwsock32 \ -luuid WXCONS_OBJS = $(LIB_OBJS) $(OBJS_COMPAT) $(OBJS_WXCONSOLE) WXCONS_LIBS = \ -L$(LIB_MINGW) \ $(LIB_PTHREADS) \ $(LIB_SSL) \ $(LIB_CRYPTO) \ # Targets all: bacula-fd.exe bconsole.exe #$(LIBDIR)/libbac.a: $(LIB_OBJS) # $(AR) ars $@ $(LIB_OBJS) # Link the File daemon executable ... bacula-fd.exe: $(FD_OBJS) $(CXX) $(FD_OBJS) $(FD_LIBS) -o $(OBJDIR)/bacula-fd.exe cp -f $(DEPKGS)/bin/pthreadGCE.dll . cp -f $(MINGW)/mingw32/bin/mingwm10.dll . # Link the File daemon executable ... bconsole.exe: $(CONS_OBJS) $(CXX) $(CONS_OBJS) $(CONS_LIBS) -o $(OBJDIR)/bconsole.exe cp -f $(DEPKGS)/bin/pthreadGCE.dll . cp -f $(MINGW)/mingw32/bin/mingwm10.dll . # Link the File daemon executable ... # Not yet complete wx-console.exe: $(WXCONS_OBJS) $(CXX) $(WX_INC) $(WXCONS_OBJS) $(WXCONS_LIBS) -o $(OBJDIR)/wx-console.exe cp -f $(DEPKGS)/bin/pthreadGCE.dll . cp -f $(MINGW)/mingw32/bin/mingwm10.dll . clean: rm -f $(OBJDIR)/*.o $(OBJDIR)/bacula-fd.exe $(OBJDIR)/winres.res rm -f $(LIBDIR)/*.o *.a rm -f pthreadGCE.dll $(OBJDIR)/bconsole.exe # TODO ... # Fix vss files: check for consistent levels of pointer indirection # bpipe.c: WTERMSIG undefined