]> git.mdlowis.com Git - archive/parse-utils.git/commitdiff
Updated makefile and AST class. AST class now has a full constructor that allows...
authorMike D. Lowis <mike@mdlowis.com>
Wed, 6 Jun 2012 19:36:18 +0000 (15:36 -0400)
committerMike D. Lowis <mike@mdlowis.com>
Wed, 6 Jun 2012 19:36:18 +0000 (15:36 -0400)
Makefile
source/parser/ast/ast.cpp
source/parser/ast/ast.h

index 04c5de8dd4b4251bc23706f35f610ce4128e9d16..3ee1bf7e1f156f7d7310a59decbb8380a25decae 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -7,6 +7,24 @@
 #
 ###############################################################################
 
+# Utility Function Definitions
+#-----------------------------
+# Function for generating an file list
+flist = $(shell env find $(1) -name *.$(strip $(2)) -print)
+
+# Function for generating an file list
+dlist = $(shell env find $(1) -type d -print)
+
+# Function for generating an include list
+incdirs = $(addprefix -I, $(call dlist, $(1)))
+
+# Function for generating file dependencies
+define make-depend
+  $(CXX) $(CXXFLAGS) -M $1 | \
+  sed -e 's,\($(notdir $2)\) *:,$(dir $2)\1 $(subst .o,.d,$2): ,' \
+  > $(subst .o,.d,$2)
+endef
+
 # Project and Artifact Names
 #---------------------------
 PROJ_NAME   = parseutils
@@ -15,12 +33,20 @@ STATIC_NAME = lib$(PROJ_NAME).a
 
 # File and Directory Settings
 #----------------------------
+# Root Directories
 SRC_ROOT  = source/
-SRC_FTYPE = cpp
-SRC_FILES = $(shell find $(SRC_ROOT) -name *.$(SRC_FTYPE) -print)
-OBJ_FILES = $(SRC_FILES:%.$(SRC_FTYPE)=%.o)
-SRC_DIRS  = $(dir $(SRC_FILES))
-INC_DIRS  = $(addprefix -I,$(SRC_DIRS))
+# File Extensions
+SRC_EXT = cpp
+# Source File Lists
+SRC_FILES  = $(call flist, $(SRC_ROOT), $(SRC_EXT))
+
+# Object File Lists
+SRC_OBJS = $(SRC_FILES:%.$(SRC_EXT)=%.o)
+# Dependecy File Lists
+SRC_DEPS  = $(SRC_OBJS:%.o=%.d)
+# Include Directories
+INC_DIRS = $(call incdirs, $(SRC_ROOT))
+
 
 # Compiler and Linker Options
 #----------------------------
@@ -33,16 +59,25 @@ all: shared static
 shared: $(SHARED_NAME)
 static: $(STATIC_NAME)
 
-$(SHARED_NAME): $(OBJ_FILES)
-       $(CXX) $(CXX_FLAGS) -shared -o $@ $(OBJ_FILES)
+# Binaries
+$(SHARED_NAME): $(SRC_OBJS)
+       @echo Linking $@...
+       @$(CXX) $(CXXFLAGS) -shared -o $@ $(SRC_OBJS)
 
-$(STATIC_NAME): $(OBJ_FILES)
-       $(AR) $(ARFLAGS) $@ $(OBJ_FILES)
+$(STATIC_NAME): $(SRC_OBJS)
+       @echo Linking $@...
+       @$(AR) $(ARFLAGS) -o $@ $(SRC_OBJS)
 
-$(OBJ_FILES): %.o : %.$(SRC_FTYPE)
+# Object Files
+$(SRC_OBJS): %.o : %.$(SRC_EXT)
+       @echo $<
+       @$(call make-depend,$<,$@)
+       @$(CXX) -c $(CXXFLAGS) -o $@ $<
 
+# Cleanup
 clean:
-       $(RM) $(foreach dir,$(SRC_DIRS), $(dir)*.o)
-       $(RM) $(SHARED_NAME)
-       $(RM) $(STATIC_NAME)
+       @$(RM) $(SRC_OBJS)
+       @$(RM) $(SRC_DEPS)
+       @$(RM) $(SHARED_NAME)
+       @$(RM) $(STATIC_NAME)
 
index 9be1c15b1d0af19d6df371b7bc1706be2247ff2d..172b16cf8b3c43d9fb85612a2d7e76e44dbf1a62 100644 (file)
@@ -48,6 +48,21 @@ AST::AST(ASTNodeType type, int child_count, ...)
     va_end(arg_list);
 }
 
+AST::AST(ASTNodeType type, std::string text, int child_count, ...)
+{
+    va_list arg_list;
+    int i = 0;
+    node_type = type;
+    node_text = text;
+    node_children = new list<AST*>();
+    va_start (arg_list, child_count);
+    for (i = 0; i < child_count ; i++)
+    {
+        node_children->push_back( (AST*)va_arg(arg_list, AST*) );
+    }
+    va_end(arg_list);
+}
+
 AST::~AST()
 {
     list<AST*>::iterator it = node_children->begin();
index 5e894428e29c652732cd23d99738e5712377a442..5661ce103ac3374eb1bc46d08d90120ffb4b5e22 100644 (file)
@@ -20,6 +20,7 @@ class AST
         AST(ASTNodeType type, const char* text);
         AST(ASTNodeType type, std::string text);
         AST(ASTNodeType type, int child_count, ...);
+        AST(ASTNodeType type, std::string text, int child_count, ...);
         virtual ~AST();
 
         AST& operator = (AST& rhs);