]> git.sesse.net Git - vlc/blobdiff - Makefile.modules
* ALL: the first libvlc commit.
[vlc] / Makefile.modules
index a13b1f4ab532d900812b0717a424a35b8fe0362a..b020a9094a15a446a38c8ec84a2105f263961612 100644 (file)
@@ -6,34 +6,42 @@
 ###############################################################################
 
 #
-# C headers directories
+# include the local Makefile
 #
-CFLAGS := -I../../include -I../../extras $(CFLAGS)
+include Makefile
 
 #
-# C compiler flags: plugin compilation
+# Analyze the target we are asked to build
 #
-PCFLAGS += -fPIC
+module_name := $(shell echo $(MAKECMDGOALS) | sed 's@.*/\(.*\)\..*@\1@')
+suff := $(shell echo $(MAKECMDGOALS) | sed 's@.*\.@@' | tr so/a lo/o)
 
 #
-# C compiler flags: plugin linking
+# Compiler flags
 #
-ifneq (,$(findstring darwin,$(SYS)))
-PLCFLAGS += -bundle -undefined suppress
+SRC_C := $(filter %.c,$($(module_name)_SOURCES))
+SRC_CPP := $(filter %.cpp,$($(module_name)_SOURCES))
+SRC_M := $(filter %.m,$($(module_name)_SOURCES))
+
+ifeq (lo,$(suff))
+extra_CFLAGS := $(plugins_CFLAGS) $($(module_name)_CFLAGS) \
+                -DMODULE_NAME=$(module_name) -DMODULE_NAME_IS_$(module_name) \
+                $($(module_name)_so_CFLAGS)
+OBJ_ALL := $(SRC_C:%.c=%.lo.$(module_name)) $(SRC_CPP:%.cpp=%.lo.$(module_name))
 else
-ifeq ($(SYS),beos)
-PLCFLAGS += -nostart ../../lib/_APP_
-else
-PLCFLAGS += -shared
-endif
+extra_CFLAGS := $(builtins_CFLAGS) $($(module_name)_CFLAGS) \
+                -DMODULE_NAME=$(module_name) -DMODULE_NAME_IS_$(module_name) \
+                $($(module_name)_a_CFLAGS)
+OBJ_ALL := $(SRC_C:%.c=%.o.$(module_name)) $(SRC_CPP:%.cpp=%.o.$(module_name)) \
+               $(SRC_M:%.m=%.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)
+M_DEP := $(SRC_M:%.m=.dep/%.dm)
 
 export
 
@@ -43,34 +51,45 @@ export
 all:
 
 clean:
-       rm -f $(ALL_OBJ)
-       rm -f *.o *.moc *.bak *.builtin
-       rm -rf .dep
+#      rm -f $(PLUGIN_ALL) $(BUILTIN_ALL)
+       rm -f *.o *.o.* *.lo *.lo.* *.obj *.moc *.moc.* *.bak
+       rm -Rf .dep
 
 FORCE:
 
-$(ALL_OBJ): %.o: ../../Makefile.modules ../../Makefile.dep Makefile
+$(OBJ_ALL): ../../Makefile.modules ../../Makefile.dep ../../Makefile ../../Makefile.opts 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) $(extra_CFLAGS)"
 
 $(CPP_DEP): %.dpp: FORCE
-       @$(MAKE) -s --no-print-directory -f ../../Makefile.dep $@
+       @$(MAKE) -s --no-print-directory -f ../../Makefile.dep $@ CFLAGS="$(CFLAGS) $(extra_CFLAGS)"
 
-$(PLUGIN_C): %.o: .dep/%.d
-$(PLUGIN_C): %.o: %.c
-       $(CC) $(CFLAGS) -DPLUGIN $(PCFLAGS) -c -o $@ $<
+$(M_DEP): %.dm: FORCE
+       @$(MAKE) -s --no-print-directory -f ../../Makefile.dep $@ CFLAGS="$(CFLAGS) $(extra_CFLAGS)"
 
-$(BUILTIN_C): BUILTIN_%.o: .dep/%.d
-$(BUILTIN_C): BUILTIN_%.o: %.c
-       $(CC) $(CFLAGS) -DBUILTIN -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) $(extra_CFLAGS) -c $< -o $@
 
-$(PLUGIN_CPP): %.o: .dep/%.dpp
-$(PLUGIN_CPP): %.o: %.cpp
-       $(CC) $(CFLAGS) -DPLUGIN $(PCFLAGS) -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) $(extra_CFLAGS) -c $< -o $@
 
-$(BUILTIN_CPP): BUILTIN_%.o: .dep/%.dpp
-$(BUILTIN_CPP): BUILTIN_%.o: %.cpp
-       $(CC) $(CFLAGS) -DBUILTIN -c -o $@ $<
+$(SRC_M:%.m=%.$(suff).$(module_name)): %.$(suff).$(module_name): .dep/%.dm
+$(SRC_M:%.m=%.$(suff).$(module_name)): %.$(suff).$(module_name): %.m
+       $(CC) $(CFLAGS) $(extra_CFLAGS) -c $< -o $@
 
+# foo_CUSTOM lets us override all target rules for foo.so and foo.a
+ifeq (,$($(module_name)_CUSTOM))
+../$(module_name).so: $(EXTRA_DEP) $(OBJ_ALL)
+       $(CC) $(OBJ_ALL) $(LDFLAGS) $(plugins_LDFLAGS) $($(module_name)_LDFLAGS) -o $@
+       chmod a-x $@
+
+../$(module_name).a: $(EXTRA_DEP) $(OBJ_ALL)
+       rm -f $@
+       ar rc $@ $(OBJ_ALL)
+       $(RANLIB) $@
+endif