ソースを参照

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