
# for i18N support
NLS_CFLAGS = -DPACKAGE=\"$(PACKAGE)\"

LINK = $(CC)

ifeq ($(MANIFEST),external)
PRELINK=$(MAKE) $@.manifest
else
ifeq ($(MANIFEST),internal)
PRELINK=$(MAKE) $(MANIFEST_OBJ)
else
PRELINK=:
endif
endif

linker_base = $(PRELINK) && $(1) $(2) -o $@ $(filter %.o,$^) $(filter %.res,$^) $(3)
linker_x = $(call linker_base,$(1),$(LDFLAGS),$(FMODE_OBJ) $(MANIFEST_OBJ) $(LIBES) $(EXTRA_LDFLAGS) $(EXTRA_LIBS) $(MATHLIB))
linker_c = $(call linker_x,$(CC))
linker_cxx = $(call linker_x,$(CXX))
linker = $(call linker_x,$(LINK))

ALL_CFLAGS = $(LFS_CFLAGS) $(EXTRA_CFLAGS) $(NLS_CFLAGS) $(DEFS) $(EXTRA_INC) $(INC) -DRELDIR=\"$(RELDIR)\"

compiler_x = $(1) $(2) $(ALL_CFLAGS) -o $@ -c $<
compiler_c = $(call compiler_x,$(CC),$(COMPILE_FLAGS_C) $($*_c_FLAGS))
compiler_cxx = $(call compiler_x,$(CXX),$(COMPILE_FLAGS_CXX) $($*_cxx_FLAGS))
compiler = $(call compiler_x,$(CC))

# default cc rules
$(OBJDIR)/%.o : %.c $(LOCAL_HEADERS) $(EXTRA_HEADERS) | $(OBJDIR)
	$(call compiler_c)

$(OBJDIR)/%.o : %.cpp $(LOCAL_HEADERS) $(EXTRA_HEADERS) | $(OBJDIR)
	$(call compiler_cxx)

# default parser generation rules, include prefix for files/vars
%.yy.c: %.l
	$(LEX) $(LFLAGS) -t $< > $@

%.output %.tab.h %.tab.c: %.y
	$(YACC) -b$* $(YFLAGS) $<

depend: $(C_SOURCES) $(CC_SOURCES) $(CPP_SOURCES)
	-$(CC) -E -MM -MG $(ALL_CFLAGS) $^ | sed 's!^[0-9a-zA-Z_.-]*\.o:!$$(OBJDIR)/&!' > $(DEPFILE)

%.manifest.res: %.manifest.rc %.exe.manifest
	$(WINDRES) --input=$< --input-format=rc --output=$@ --output-format=coff -I$(MODULE_TOPDIR)/mswindows

%.manifest.rc: $(MODULE_TOPDIR)/mswindows/generic.manifest.rc.in
	sed	-e 's/@CMD@/$(notdir $*)/' \
		-e 's/@VER_MAJOR@/$(GRASS_VERSION_MAJOR)/' \
		-e 's/@VER_MINOR@/$(GRASS_VERSION_MINOR)/' \
		-e 's/@VER_RELEASE@/$(GRASS_VERSION_RELEASE)/' \
		$^ > $@

%.exe.manifest: $(MODULE_TOPDIR)/mswindows/generic.manifest
	sed 's/@CMD@/$(notdir $*)/' $^ > $@

-include $(DEPFILE)
