+default : all
+
+.PHONY: default all clean install test
+
+include $(TOPDIR)/Make.version
+
%.a :
$(AR) -cvqs $@ $^
-% : %.o
- $(CCLD) $(ccldflags) -o $@ $^ $(foreach lib,$(LIBS),-l$(lib))
+% : %.c
+
+% : %.c
+ $(CCLD) $(ccldflags) $(CPPFLAGS) -o $@ $^ $(LDLIBS)
+
+%-static : ccldflags+=-static
+%-static : %.c
+ $(CCLD) $(ccldflags) $(CPPFLAGS) -o $@ $^ $(LDLIBS)
+
+%.so :
+ $(CCLD) $(ccldflags) $(CPPFLAGS) $(SOFLAGS) \
+ -Wl,-soname,$@.1 \
+ -Wl,--version-script=$(MAP) \
+ -o $@ $^ $(LDLIBS)
+ ln -vfs $@ $@.1
+
+%.abixml : %.so
+ $(ABIDW) --headers-dir $(TOPDIR)/src/include/efivar/ --out-file $@ $^
+ @sed -i -s 's,$(TOPDIR)/,,g' $@
-%.so.$(SONAME_VERSION) :
- $(CCLD) $(cflags) -Wl,-soname,$(SONAME) $(ccldflags) $(LIBFLAGS) $^ -o $@ $(foreach lib,$(LIBS),-l$(lib))
+%.abicheck : %.so
+ $(ABIDIFF) \
+ --suppr abignore \
+ --headers-dir2 $(TOPDIR)/src/include/efivar/ \
+ $(patsubst %.so,%.abixml,$<) \
+ $<
-%.so : %.so.$(SONAME_VERSION)
- ln -sf $^ $@
+%.o : %.c
+ $(CC) $(cflags) -fPIC $(CPPFLAGS) -c -o $@ $(filter %.c %.o %.S,$^)
-%.o: %.c
- $(CC) $(cflags) $(CPPFLAGS) -c -o $@ $<
+%.static.o : %.c
+ $(CC) $(cflags) -fPIE $(CPPFLAGS) -c -o $@ $(filter %.c %.o %.S,$^)
-.%.c.P : %.c
- $(CC) $(cflags) $(CPPFLAGS) -DEFIVAR_BUILD_ENVIRONMENT -M -MM -MF $@ $^
+%.o : %.S
+ $(CC) $(cflags) -fPIC $(CPPFLAGS) -c -o $@ $(filter %.c %.o %.S,$^)
-.%.h.P : %.h
- $(CC) $(cflags) $(CPPFLAGS) -DEFIVAR_BUILD_ENVIRONMENT -M -MM -MF $@ $^
+%.static.o : %.S
+ $(CC) $(cflags) -fPIE $(CPPFLAGS) -c -o $@ $(filter %.c %.o %.S,$^)
%.S: %.c
$(CC) $(cflags) $(CPPFLAGS) -S $< -o $@
$(CC) $(cflags) $(CPPFLAGS) -E $< -o $@
%.c : %.h
+
+define substitute-version
+ sed \
+ -e "s,@@VERSION@@,$(VERSION),g" \
+ -e "s,@@LIBDIR@@,$(LIBDIR),g" \
+ -e "s,@@PREFIX@@,$(PREFIX),g" \
+ -e "s,@@EXEC_PREFIX@@,$(EXEC_PREFIX),g" \
+ -e "s,@@INCLUDEDIR@@,$(INCLUDEDIR),g" \
+ $(1) > $(2)
+endef
+
+%.pc : %.pc.in
+ @$(call substitute-version,$<,$@)
+%.spec : %.spec.in
+ @$(call substitute-version,$<,$@)
+%.map : %.map.in
+ @$(call substitute-version,$<,$@)
+
+pkg-config-cflags = \
+ $(shell if [ -n "$(PKGS)" ]; then $(PKG_CONFIG) --cflags $(PKGS); fi)
+pkg-config-ldflags = \
+ $(shell if [ -n "$(PKGS)" ]; then $(PKG_CONFIG) --libs-only-L --libs-only-other $(PKGS) ; fi)
+pkg-config-ldlibs = \
+ $(shell if [ -n "$(PKGS)" ]; then $(PKG_CONFIG) --libs-only-l $(PKGS) ; fi)
+
+define deps-of
+ $(foreach src,$(filter %.c,$(1)),$(patsubst %.c,.%.d,$(src))) \
+ $(foreach src,$(filter %.S,$(1)),$(patsubst %.S,.%.d,$(src)))
+endef
+
+define get-config
+$(shell git config --local --get "efivar.$(1)")
+endef
+
+# vim:ft=make