Эх сурвалжийг харах

From: Sylvain Gault <sylvain.gault@gmail.com>
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 <sylvain.gault@gmail.com>
Signed-off-by: Nigel Croxon <nigel.croxon@hp.com>

Nigel Croxon 11 жил өмнө
parent
commit
06744d6927

+ 22 - 12
gnu-efi-3.0/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

+ 23 - 11
gnu-efi-3.0/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

+ 10 - 3
gnu-efi-3.0/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