commit 06744d69273de4945cf0ffcaa4a6abf7cec707b6 Author: Nigel Croxon Date: Fri Mar 14 13:47:39 2014 -0400 From: Sylvain Gault Date: Wed, 19 Feb 2014 05:18:14 +0100 Subject: [PATCH] make install: Don't overwrite up-to-date files make install used to copy files unconditionnally to their destination. However, if the destination is used by another Makefile, it will always see modified files. "install" target now only update the files when they need to. Signed-off-by: Sylvain Gault Signed-off-by: Nigel Croxon diff --git a/gnuefi/Makefile b/gnuefi/Makefile index e99adbe..85a7db8 100644 --- a/gnuefi/Makefile +++ b/gnuefi/Makefile @@ -49,6 +49,19 @@ OBJS = $(FILES:%=%.o) TARGETS = crt0-efi-$(ARCH).o libgnuefi.a +INSTALLTARGETS = $(TARGETS) +ifneq (,$(findstring FreeBSD,$(OS))) + ifeq ($(ARCH),x86_64) + INSTALLTARGETS += elf_$(ARCH)_fbsd_efi.lds + else + INSTALLTARGETS += elf_$(ARCH)_efi.lds + endif +else + INSTALLTARGETS += elf_$(ARCH)_efi.lds +endif + +LIBDIRINSTALL = $(INSTALLROOT)/$(LIBDIR) + all: $(TARGETS) libgnuefi.a: $(patsubst %,libgnuefi.a(%),$(OBJS)) @@ -56,17 +69,14 @@ libgnuefi.a: $(patsubst %,libgnuefi.a(%),$(OBJS)) clean: rm -f $(TARGETS) *~ *.o $(OBJS) -install: - mkdir -p $(INSTALLROOT)/$(LIBDIR) - $(INSTALL) -m 644 $(TARGETS) $(INSTALLROOT)/$(LIBDIR) -ifneq (,$(findstring FreeBSD,$(OS))) - ifeq ($(ARCH),x86_64) - $(INSTALL) -m 644 $(SRCDIR)/elf_$(ARCH)_fbsd_efi.lds $(INSTALLROOT)/$(LIBDIR) - else - $(INSTALL) -m 644 $(SRCDIR)/elf_$(ARCH)_efi.lds $(INSTALLROOT)/$(LIBDIR) - endif -else - $(INSTALL) -m 644 $(SRCDIR)/elf_$(ARCH)_efi.lds $(INSTALLROOT)/$(LIBDIR) -endif +$(LIBDIRINSTALL): + mkdir -p $@ + +.SECONDEXPANSION: + +$(LIBDIRINSTALL)/%: % | $$(dir $$@) + $(INSTALL) -m 644 $< $(dir $@) + +install: $(addprefix $(LIBDIRINSTALL)/,$(INSTALLTARGETS)) include $(SRCDIR)/../Make.rules diff --git a/inc/Makefile b/inc/Makefile index 273d303..297385b 100644 --- a/inc/Makefile +++ b/inc/Makefile @@ -8,20 +8,32 @@ TOPDIR = $(SRCDIR)/.. CDIR=$(TOPDIR)/.. +INCDIRINSTALL = $(INSTALLROOT)$(PREFIX)/include/efi + +SRCHEADERS = $(wildcard $(SRCDIR)/*.h) \ + $(wildcard $(SRCDIR)/protocol/*.h) \ + $(wildcard $(SRCDIR)/$(ARCH)/*.h) +ifeq ($(ARCH),ia64) + SRCHEADERS += $(wildcard $(SRCDIR)/protocol/$(ARCH)/*.h) +endif + +HEADERS = $(patsubst $(SRCDIR)/%,%,$(SRCHEADERS)) + all: clean: -install: - mkdir -p $(INSTALLROOT)$(PREFIX)/include/efi - mkdir -p $(INSTALLROOT)$(PREFIX)/include/efi/protocol - mkdir -p $(INSTALLROOT)$(PREFIX)/include/efi/$(ARCH) - $(INSTALL) -m 644 $(SRCDIR)/*.h $(INSTALLROOT)$(PREFIX)/include/efi - $(INSTALL) -m 644 $(SRCDIR)/protocol/*.h $(INSTALLROOT)$(PREFIX)/include/efi/protocol - $(INSTALL) -m 644 $(SRCDIR)/$(ARCH)/*.h $(INSTALLROOT)$(PREFIX)/include/efi/$(ARCH) -ifeq ($(ARCH),ia64) - mkdir -p $(INSTALLROOT)$(PREFIX)/include/efi/protocol/ia64 - $(INSTALL) -m 644 $(SRCDIR)/protocol/ia64/*.h $(INSTALLROOT)$(PREFIX)/include/efi/protocol/ia64 -endif +$(INCDIRINSTALL) \ +$(INCDIRINSTALL)/protocol \ +$(INCDIRINSTALL)/$(ARCH) \ +$(INCDIRINSTALL)/protocol/$(ARCH): + mkdir -p $@ + +.SECONDEXPANSION: + +$(INCDIRINSTALL)/%.h: %.h | $$(dir $$@) + $(INSTALL) -m 644 $< $(dir $@) + +install: $(addprefix $(INCDIRINSTALL)/,$(HEADERS)) include $(SRCDIR)/../Make.rules diff --git a/lib/Makefile b/lib/Makefile index e9f604e..d2635ad 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -61,8 +61,11 @@ OBJS = $(FILES:%=%.o) SUBDIRS = ia32 x86_64 ia64 runtime +LIBDIRINSTALL = $(INSTALLROOT)/$(LIBDIR) + all: libsubdirs libefi.a +.PHONY: libsubdirs libsubdirs: for sdir in $(SUBDIRS); do mkdir -p $$sdir; done @@ -71,9 +74,13 @@ libefi.a: $(patsubst %,libefi.a(%),$(OBJS)) clean: rm -f libefi.a *~ $(OBJS) */*.o -install: libefi.a - mkdir -p $(INSTALLROOT)/$(LIBDIR) - $(INSTALL) -m 644 libefi.a $(INSTALLROOT)/$(LIBDIR) +$(LIBDIRINSTALL): + mkdir -p $@ + +$(LIBDIRINSTALL)/libefi.a: libefi.a | $(LIBDIRINSTALL) + $(INSTALL) -m 644 $< $(dir $@) + +install: $(LIBDIRINSTALL)/libefi.a include $(SRCDIR)/../Make.rules