###############################################################################
#
-# C headers directories
+# include the local Makefile
#
-CFLAGS := -I../../include -I../../extras $(CFLAGS)
+include Makefile
+
+#
+# Analyze the target we are asked to build
+#
+module_name := $(shell echo $(MAKECMDGOALS) | sed 's@.*/\(.*\)\..*@\1@')
+MODULE_NAME := $(shell echo $(module_name) | tr '[a-z]' '[A-Z]')
+
+suff := $(shell echo $(MAKECMDGOALS) | sed 's@.*\.@@' | tr so/a lo/o)
+
+#
+# Compiler flags
+#
+SRC_C := $(filter %.c,$($(module_name)_SOURCES))
+SRC_CPP := $(filter %.cpp,$($(module_name)_SOURCES))
+
+ifeq (lo,$(suff))
+CFLAGS_EXTRA := -I../../include -I../../extras $(CFLAGS_$(MODULE_NAME)) \
+ -DMODULE_NAME=$(module_name) -DMODULE_NAME_IS_$(module_name) \
+ -DPLUGIN $(CFLAGS_$(MODULE_NAME)_PLUGIN) $(PCFLAGS)
+OBJ_ALL := $(SRC_C:%.c=%.lo.$(module_name)) $(SRC_CPP:%.cpp=%.lo.$(module_name))
+else
+CFLAGS_EXTRA := -I../../include -I../../extras $(CFLAGS_$(MODULE_NAME)) \
+ -DMODULE_NAME=$(module_name) -DMODULE_NAME_IS_$(module_name) \
+ -DBUILTIN $(CFLAGS_$(MODULE_NAME)_BUILTIN)
+OBJ_ALL := $(SRC_C:%.c=%.o.$(module_name)) $(SRC_CPP:%.cpp=%.o.$(module_name))
+endif
#
# Standard dependencies
#
-C_DEP := $(ALL_OBJ:%.o=.dep/%.d)
-
-CPP_DEP := $(ALL_OBJ:%.o=.dep/%.dpp)
+C_DEP := $(SRC_C:%.c=.dep/%.d)
+CPP_DEP := $(SRC_CPP:%.cpp=.dep/%.dpp)
export
all:
clean:
- rm -f $(ALL_OBJ)
- rm -f *.o *.moc *.bak *.builtin
+# rm -f $(PLUGIN_ALL) $(BUILTIN_ALL)
+ rm -f *.o *.o.* *.lo *.lo.* *.moc *.moc.* *.bak
rm -rf .dep
FORCE:
-$(ALL_OBJ): %.o: ../../Makefile.modules ../../Makefile.dep Makefile
+$(OBJ_ALL): ../../Makefile.modules ../../Makefile.dep ../../Makefile Makefile
+$(OBJ_ALL): $(H_DEP:%=../../include/%)
$(C_DEP): %.d: FORCE
- @$(MAKE) -s --no-print-directory -f ../../Makefile.dep $@
+ @$(MAKE) -s --no-print-directory -f ../../Makefile.dep $@ CFLAGS="$(CFLAGS) $(CFLAGS_EXTRA)"
$(CPP_DEP): %.dpp: FORCE
- @$(MAKE) -s --no-print-directory -f ../../Makefile.dep $@
+ @$(MAKE) -s --no-print-directory -f ../../Makefile.dep $@ CFLAGS="$(CFLAGS) $(CFLAGS_EXTRA)"
-$(PLUGIN_C): %.o: .dep/%.d
-$(PLUGIN_C): %.o: %.c
- $(CC) $(CFLAGS) -DPLUGIN $(PCFLAGS) -c -o $@ $<
+$(SRC_C:%.c=%.$(suff).$(module_name)): %.$(suff).$(module_name): .dep/%.d
+$(SRC_C:%.c=%.$(suff).$(module_name)): %.$(suff).$(module_name): %.c
+ $(CC) $(CFLAGS) $(CFLAGS_EXTRA) -c $< -o $@
-$(BUILTIN_C): BUILTIN_%.o: .dep/%.d
-$(BUILTIN_C): BUILTIN_%.o: %.c
- $(CC) $(CFLAGS) -DBUILTIN -c -o $@ $<
+$(SRC_CPP:%.cpp=%.$(suff).$(module_name)): %.$(suff).$(module_name): .dep/%.dpp
+$(SRC_CPP:%.cpp=%.$(suff).$(module_name)): %.$(suff).$(module_name): %.cpp
+ $(CC) $(CFLAGS) $(CFLAGS_EXTRA) -c $< -o $@
-$(PLUGIN_CPP): %.o: .dep/%.dpp
-$(PLUGIN_CPP): %.o: %.cpp
- $(CC) $(CFLAGS) -DPLUGIN $(PCFLAGS) -c -o $@ $<
+../$(module_name).so: $(EXTRA_DEP) $(OBJ_ALL)
+ $(CC) $(OBJ_ALL) $(PLDFLAGS) $(LIB_$(MODULE_NAME)) $(LIB_COMMON) -o $@ && chmod a-x $@
-$(BUILTIN_CPP): BUILTIN_%.o: .dep/%.dpp
-$(BUILTIN_CPP): BUILTIN_%.o: %.cpp
- $(CC) $(CFLAGS) -DBUILTIN -c -o $@ $<
+../$(module_name).a: $(EXTRA_DEP) $(OBJ_ALL)
+ rm -f $@ && ar rc $@ $(OBJ_ALL) && $(RANLIB) $@