# Makefile.common # # This file is included by the main MagicStats make file "Makefile" as # well as all of the plugins' makefiles. This file defines common rules # to do things like compile a .cpp file or generate the dependancies. # These are platform dependant, so this is the file used to specify these # system dependant operations. # # The following functionality may be set by setting incoming variables: # # 1. LEVEL - The level of the current subdirectory from the top of the # MagicStats view. This level should be expressed as a path, for # example, ../.. for two levels deep. # # 2. DIRS - A list of subdirectories to be built. Fake targets are set up # so that each of the targets "all", "install", and "clean" each build. # the subdirectories before the local target. # # 3. Source - If specified, this sets the source code filenames. If this # is not set, it defaults to be all of the .cpp, .c, .y, and .l files # in the current directory. # # Default Rule: all :: # Default for install is to at least build everything... install :: #-------------------------------------------------------------------- # Installation configuration options... #-------------------------------------------------------------------- BinInstDir=/usr/local/bin LibInstDir=/var/lib/MagicStats DocInstDir=/usr/doc/MagicStats #--------------------------------------------------------- # Compilation options... #--------------------------------------------------------- # Enable this for profiling support with 'gprof' #Prof = -pg # Compile a file, don't link... # Someday, add in these warnings: -Weffc++ Compile = $(CXX) $(Prof) -Wall -c -I$(LEVEL)/include $(CPPFLAGS) $(CXXFLAGS) -fno-rtti -W CompileG = $(Compile) -g -D_DEBUG -Wnon-virtual-dtor # Add This for DebugMalloc: -fno-defer-pop CompileO = $(Compile) -O3 -DNDEBUG -finline-functions -felide-constructors -fnonnull-objects -freg-struct-return -fshort-enums -fstrict-aliasing # Link final executable Link = $(CXX) $(Prof) -Wl,-export-dynamic LinkG = $(Link) -g LinkO = $(Link) -O3 # Create a .so file from a .cpp file... MakeSO = $(CXX) -shared $(Prof) MakeSOG = $(MakeSO) -g MakeSOO = $(MakeSO) -O3 # Create dependancy file from CPP file, send to stdout. Depend = $(CXX) -MM -I$(LEVEL)/include $(CPPFLAGS) # Archive a bunch of .o files into a .a file... AR = ar cq #---------------------------------------------------------- # Source includes all of the cpp files, and objects are derived from the # source files... ifndef Source Source = $(wildcard *.cpp *.c *.y *.l) endif Objs = $(sort $(addsuffix .o,$(basename $(Source)))) ObjectsO = $(addprefix Release/,$(Objs)) ObjectsG = $(addprefix Debug/,$(Objs)) #--------------------------------------------------------- # Handle the DIRS option #--------------------------------------------------------- ifdef DIRS # Only do this if we're using DIRS! all :: $(addsuffix /.makeall , $(DIRS)) install :: $(addsuffix /.makeinstall, $(DIRS)) clean :: $(addsuffix /.makeclean , $(DIRS)) %/.makeall %/.makeclean %/.makeinstall: cd $(@D); $(MAKE) $(subst $(@D)/.make,,$@) endif #--------------------------------------------------------- # Create dependacies for the cpp files... Depend/%.d: %.cpp Depend/.dir $(Depend) $< | sed 's|$*\.o *|Release/& Debug/& Depend/$(@F)|g' > $@ # Create .o files in the ObjectFiles directory from the .cpp files... Release/%.o: %.cpp Release/.dir Depend/.dir $(CompileO) $< -o $@ Debug/%.o: %.cpp Debug/.dir Depend/.dir $(CompileG) $< -o $@ # Create a .cpp source file from a flex input file... %.cpp: %.l flex -t $< | sed '/^find_rule/d' > $@ # Rule for building the bison parsers... %.cpp %.h : %.y bison -d -p $(<:%Parser.y=%) $(basename $@).y mv -f $(basename $@).tab.c $(basename $@).cpp mv -f $(basename $@).tab.h $(basename $@).h # Rules to create documentation... #%.txt: $(basename $(notdir %)).sdf #%.txt: %.sdf #$(LEVEL)/Install/Docs/%.txt: %.sdf # @-echo Creating .TXT output of $(basename $(@F)) # @-echo `pwd` -- $@ -- $< # sdf -2txt $(basename $(@F)) # -cp -f $(basename $(@F)).txt $@ #$(LEVEL)/Install/Docs/%.html: %.sdf # @-echo Creating .HTML output of $(basename $(@F)) # sdf -2html $(basename $(@F)) # RemoveHTMLComments < $(basename $(@F)).html > $@ #$(LEVEL)/Install/Docs/%.ps: %.sdf # @-echo Creating .PS output of $(basename $(@F)) # sdf +sdf2ps_sgml $(basename $(@F)) > /dev/null # mv $(basename $(@F)).out.ps $@ # To create the directories... %/.dir: mkdir -p $(@D) @date > $@ # Clean does not remove the output files... just the temporaries clean:: rm -rf Debug Release Depend rm -f core *.o *.d *.so # If dependancies were generated for the file that included this file, # include the dependancies now... # SourceDepend = $(addsuffix .d,$(addprefix Depend/,$(basename $(Source)))) ifneq ($(SourceDepend),) include $(SourceDepend) endif