include ./makefile_gcc_common THIS_MAKE = $(TOP_MAKEFILE) EXEDIR = ./$(DIRNAME).$(DIRBIT).gcc/ OBJDIR = $(EXEDIR)obj/ BOOTSTRAPDIR = ./bootstrap/ EXENAME = Far.exe EXEFULLNAME = $(EXEDIR)$(EXENAME) DEPFILE = $(BOOTSTRAPDIR)far.gcc.dep SRCS = \ sqlite.c \ cache.cpp \ cddrv.cpp \ CFileMask.cpp \ chgmmode.cpp \ chgprior.cpp \ clipboard.cpp \ cmdline.cpp \ codepage.cpp \ colormix.cpp \ config.cpp \ configdb.cpp \ console.cpp \ constitle.cpp \ copy.cpp \ ctrlobj.cpp \ cvtname.cpp \ datetime.cpp \ delete.cpp \ dialog.cpp \ dirinfo.cpp \ dirmix.cpp \ dizlist.cpp \ DlgBuilder.cpp \ dlgedit.cpp \ DList.cpp \ drivemix.cpp \ edit.cpp \ editor.cpp \ eject.cpp \ elevation.cpp \ execute.cpp \ farexcpt.cpp \ farqueue.cpp \ farrtl.cpp \ farversion.cpp \ farwinapi.cpp \ fileattr.cpp \ fileedit.cpp \ filefilter.cpp \ filefilterparams.cpp \ filelist.cpp \ FileMasksProcessor.cpp \ FileMasksWithExclude.cpp \ fileowner.cpp \ filepanels.cpp \ filestr.cpp \ filesystemwatcher.cpp \ filetype.cpp \ fileview.cpp \ findfile.cpp \ flink.cpp \ flmodes.cpp \ flplugin.cpp \ flshow.cpp \ flupdate.cpp \ fnparce.cpp \ foldtree.cpp \ format.cpp \ frame.cpp \ global.cpp \ grabber.cpp \ headers.cpp \ help.cpp \ hilight.cpp \ history.cpp \ hmenu.cpp \ hotplug.cpp \ imports.cpp \ infolist.cpp \ interf.cpp \ keybar.cpp \ keyboard.cpp \ language.cpp \ local.cpp \ lockscrn.cpp \ macro.cpp \ macrocompiler.cpp \ main.cpp \ manager.cpp \ menubar.cpp \ message.cpp \ mix.cpp \ mkdir.cpp \ modal.cpp \ namelist.cpp \ network.cpp \ nsUniversalDetectorEx.cpp \ options.cpp \ palette.cpp \ panel.cpp \ panelmix.cpp \ pathmix.cpp \ plist.cpp \ plclass.cpp \ plognmn.cpp \ plugapi.cpp \ PluginA.cpp \ plugins.cpp \ plugsettings.cpp \ poscache.cpp \ print.cpp \ privilege.cpp \ processname.cpp \ qview.cpp \ rdrwdsk.cpp \ RefreshFrameManager.cpp \ RegExp.cpp \ savescr.cpp \ scantree.cpp \ scrbuf.cpp \ scrobj.cpp \ scrsaver.cpp \ setattr.cpp \ setcolor.cpp \ shortcuts.cpp \ sqlitedb.cpp \ stddlg.cpp \ strmix.cpp \ synchro.cpp \ syslog.cpp \ tinyxml.cpp \ TaskBar.cpp \ TPreRedrawFunc.cpp \ treelist.cpp \ tvar.cpp \ udlist.cpp \ UnicodeString.cpp \ usermenu.cpp \ viewer.cpp \ vmenu.cpp \ window.cpp \ xlat.cpp \ ifeq ($(DIRBIT),32) SRCS += hook_wow64.c endif OBJS = $(patsubst %.c,$(OBJDIR)%.o,$(filter %.c,$(SRCS))) $(patsubst %.cpp,$(OBJDIR)%.o,$(filter %.cpp,$(SRCS))) OBJS += $(OBJDIR)initguid.o $(OBJDIR)far.rc.o MAP = $(patsubst %.exe,%.map,$(EXEFULLNAME)) TESTOBJS = $(OBJDIR)api_test_c.testobj $(OBJDIR)api_test_c++.testobj .PHONY: all dirs all: dirs lng depfile @$(MAKE) -f $(THIS_MAKE) $(MK_FLAGS) build .PHONY: lng lng: $(BOOTSTRAPDIR)farlang.templ @echo generating language files @$(LGEN) -nc -i $(BOOTSTRAPDIR)lang.ini -ol "$(EXEDIR)" $(BOOTSTRAPDIR)farlang.templ .PHONY: depfile depfile: @$(GAWK) -f ./scripts/mkdep.awk -v compiler=gcc mkdep.list > $(DEPFILE) dirs: @$(MKDIR) $(EXEDIR) $(OBJDIR) $(FARINCLUDE) $(BOOTSTRAPDIR) .PHONY: build build: $(TESTOBJS) $(EXEFULLNAME) $(EXEDIR)FarEng.hlf $(EXEDIR)FarRus.hlf $(EXEDIR)FarHun.hlf $(EXEDIR)File_id.diz $(EXEDIR)Far.exe.example.ini $(FARINCLUDE)farcolor.hpp $(FARINCLUDE)plugin.hpp $(FARINCLUDE)DlgBuilder.hpp $(FARINCLUDE)PluginW.pas $(FARINCLUDE)FarColorW.pas $(EXEFULLNAME): $(BOOTSTRAPDIR)Far.exe.manifest $(BOOTSTRAPDIR)far.rc $(BOOTSTRAPDIR)copyright.inc $(BOOTSTRAPDIR)farversion.inc $(OBJS) @echo linking $@ @$(CXX) -o $@ $(OBJS) $(LNKFLAGS) $(OBJDIR)%.o: %.c @echo compiling $< @$(CC) $(CFLAGS) -c -o $@ $< $(OBJDIR)initguid.o: initguid.cpp @echo compiling $< @$(CXX) $(CCFLAGS) -c -o $@ $< $(OBJDIR)%.o: %.cpp @echo compiling $< @$(CXX) $(CCFLAGS) -c -include $(OBJDIR)headers -o $@ $< $(OBJDIR)headers.gch: headers.cpp @echo making precompiled headers @$(CXX) -x c++-header -c $(CCFLAGS) -o $@ $< $(OBJS): $(OBJDIR)headers.gch $(OBJDIR)far.rc.o: $(BOOTSTRAPDIR)far.rc res.hpp Far.ico @echo compiling resource file @$(WINDRES) -i $< -o $@ $(OBJDIR)api_test_c.testobj: $(FARINCLUDE)plugin.hpp $(FARINCLUDE)farcolor.hpp api_test.c @echo testing C plugin API @$(CC) $(CFLAGS) -c -x c -o $@ api_test.c $(OBJDIR)api_test_c++.testobj: $(FARINCLUDE)plugin.hpp $(FARINCLUDE)farcolor.hpp $(FARINCLUDE)DlgBuilder.hpp api_test.c @echo testing C++ plugin API @$(CXX) $(CCFLAGS) -c -x c++ -o $@ api_test.c MSG=@echo generating $@ $(BOOTSTRAPDIR)Far.exe.manifest: Far.exe.manifest.m4 farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(M4) Far.exe.manifest.m4 > $@ $(BOOTSTRAPDIR)far.rc: far.rc.m4 farversion.m4 tools.m4 vbuild.m4 res.hpp $(BOOTSTRAPDIR)Far.exe.manifest $(MSG) @$(M4) far.rc.m4 > $@ $(BOOTSTRAPDIR)copyright.inc: copyright.inc.m4 farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(M4) copyright.inc.m4 > $@ $(BOOTSTRAPDIR)farversion.inc: farversion.inc.m4 farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(M4) farversion.inc.m4 > $@ $(BOOTSTRAPDIR)farlang.templ: farlang.templ.m4 farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(M4) farlang.templ.m4 > $@ $(EXEDIR)FarEng.hlf: FarEng.hlf.m4 farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(GAWK) -f ./scripts/mkhlf.awk FarEng.hlf.m4 | $(M4) > $@ $(EXEDIR)FarRus.hlf: FarRus.hlf.m4 farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(GAWK) -f ./scripts/mkhlf.awk FarRus.hlf.m4 | $(M4) > $@ $(EXEDIR)FarHun.hlf: FarHun.hlf.m4 farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(GAWK) -f ./scripts/mkhlf.awk FarHun.hlf.m4 | $(M4) > $@ $(EXEDIR)File_id.diz: File_id.diz.m4 farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(M4) File_id.diz.m4 > $@ $(EXEDIR)Far.exe.example.ini: Far.exe.example.ini $(MSG) @$(CP) Far.exe.example.ini $@ $(FARINCLUDE)farcolor.hpp: colors.hpp farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(M4) -DINPUT=colors.hpp headers.m4 > $@ $(FARINCLUDE)plugin.hpp: plugin.hpp farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(M4) -DINPUT=plugin.hpp headers.m4 > $@ $(FARINCLUDE)DlgBuilder.hpp: DlgBuilder.hpp farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(M4) -DINPUT=DlgBuilder.hpp headers.m4 > $@ $(FARINCLUDE)PluginW.pas: PluginW.pas farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(M4) -DINPUT=PluginW.pas headers.m4 > $@ $(FARINCLUDE)FarColorW.pas: FarColorW.pas farversion.m4 tools.m4 vbuild.m4 $(MSG) @$(M4) -DINPUT=FarColorW.pas headers.m4 > $@ ifeq ($(MAKECMDGOALS),build) include $(DEPFILE) endif .PHONY: clean clean: @echo cleaning @$(RM) $(OBJS) $(TESTOBJS) $(OBJDIR)headers.gch @$(RM) $(EXEFULLNAME) $(MAP) @$(RM) $(BOOTSTRAPDIR)*.* $(FARINCLUDE)*.* @$(RM) $(EXEDIR)*.lng $(EXEDIR)*.hlf $(EXEDIR)File_id.diz $(EXEDIR)Far.exe.example.ini