فهرست منبع

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 سال پیش
والد
کامیت
06744d6927
3فایلهای تغییر یافته به همراه55 افزوده شده و 26 حذف شده
  1. 22 12
      gnu-efi-3.0/gnuefi/Makefile
  2. 23 11
      gnu-efi-3.0/inc/Makefile
  3. 10 3
      gnu-efi-3.0/lib/Makefile

+ 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