###############################################################################
# vlc (VideoLAN Client) common module Makefile
# (c)2001 VideoLAN
###############################################################################
# This file should be included by all module Makefiles
###############################################################################

#
# include the local Makefile
#
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 := $(SRC_C:%.c=.dep/%.d)
CPP_DEP := $(SRC_CPP:%.cpp=.dep/%.dpp)

export

#
# Virtual targets
#
all:

clean:
#	rm -f $(PLUGIN_ALL) $(BUILTIN_ALL)
	rm -f *.o *.o.* *.lo *.lo.* *.moc *.moc.* *.bak
	rm -rf .dep

FORCE:

$(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 $@ CFLAGS="$(CFLAGS) $(CFLAGS_EXTRA)"

$(CPP_DEP): %.dpp: FORCE
	@$(MAKE) -s --no-print-directory -f ../../Makefile.dep $@ CFLAGS="$(CFLAGS) $(CFLAGS_EXTRA)"

$(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 $@

$(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 $@

../$(module_name).so: $(EXTRA_DEP) $(OBJ_ALL)
	$(CC) $(OBJ_ALL) $(PLDFLAGS) $(LIB_$(MODULE_NAME)) -o $@ && chmod a-x $@

../$(module_name).a: $(EXTRA_DEP) $(OBJ_ALL)
	rm -f $@ && ar rc $@ $(OBJ_ALL) && $(RANLIB) $@