فهرست منبع

rework fakeroot handling to avoid races during parallel make causing several
fakeroot instances stomping eachother's temp files.

Eric Andersen 19 سال پیش
والد
کامیت
ee66f55213
7فایلهای تغییر یافته به همراه88 افزوده شده و 76 حذف شده
  1. 15 12
      target/cramfs/cramfs.mk
  2. 15 14
      target/ext2/ext2root.mk
  3. 14 6
      target/iso9660/iso9660.mk
  4. 13 14
      target/jffs2/jffs2root.mk
  5. 1 5
      target/makedevs/makedevs.mk
  6. 15 12
      target/squashfs/squashfsroot.mk
  7. 15 13
      target/tar/tarroot.mk

+ 15 - 12
target/cramfs/cramfs.mk

@@ -58,30 +58,33 @@ ifeq ($(strip $(BR2_sparc)),y)
 CRAMFS_ENDIANNESS=-b
 endif
 
-cramfsroot: host-fakeroot makedevs $(STAGING_DIR)/fakeroot.env cramfs
+CRAMFS_TARGET=$(IMAGE).cramfs
+
+cramfsroot: host-fakeroot makedevs cramfs
 	#-@find $(TARGET_DIR)/lib -type f -name \*.so\* | xargs $(STRIP) --strip-unneeded 2>/dev/null || true;
 	-@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
 	@rm -rf $(TARGET_DIR)/usr/man
 	@rm -rf $(TARGET_DIR)/usr/info
 	-/sbin/ldconfig -r $(TARGET_DIR) 2>/dev/null
 	# Use fakeroot to pretend all target binaries are owned by root
+	rm -f $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET)
+	cat $(STAGING_DIR)/.fakeroot* > $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET)
 	-$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
+		-i $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) -- \
 		chown -R root:root $(TARGET_DIR)
 	# Use fakeroot to pretend to create all needed device nodes
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-		$(STAGING_DIR)/bin/makedevs \
-		-d $(TARGET_DEVICE_TABLE) \
-		$(TARGET_DIR)
+		-i $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) -- \
+		$(STAGING_DIR)/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(TARGET_DIR)
 	# Use fakeroot so mkcramfs believes the previous fakery
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-		$(CRAMFS_DIR)/mkcramfs -q $(CRAMFS_ENDIANNESS) \
-		$(TARGET_DIR) $(IMAGE).cramfs
+		-i $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) -- \
+	    $(CRAMFS_DIR)/mkcramfs -q $(CRAMFS_ENDIANNESS) \
+		$(TARGET_DIR) $(CRAMFS_TARGET)
+	-@rm -f $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET)
 
 cramfsroot-source: cramfs-source
 

+ 15 - 14
target/ext2/ext2root.mk

@@ -65,24 +65,24 @@ else
 EXT2_TARGET := $(EXT2_BASE)
 endif
 
-$(EXT2_BASE): host-fakeroot makedevs $(STAGING_DIR)/fakeroot.env genext2fs
+$(EXT2_BASE): host-fakeroot makedevs genext2fs
 	-@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
 	@rm -rf $(TARGET_DIR)/usr/man
 	@rm -rf $(TARGET_DIR)/usr/share/man
 	@rm -rf $(TARGET_DIR)/usr/info
 	-/sbin/ldconfig -r $(TARGET_DIR) 2>/dev/null
 	# Use fakeroot to pretend all target binaries are owned by root
+	rm -f $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET)
+	cat $(STAGING_DIR)/.fakeroot* > $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET)
 	-$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
+		-i $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) -- \
 		chown -R root:root $(TARGET_DIR)
 	# Use fakeroot to pretend to create all needed device nodes
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-		$(STAGING_DIR)/bin/makedevs \
-		-d $(TARGET_DEVICE_TABLE) \
-		$(TARGET_DIR)
+		-i $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) -- \
+		$(STAGING_DIR)/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(TARGET_DIR)
 	# Use fakeroot so genext2fs believes the previous fakery
 ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT2_BLOCKS)),0)
 	GENEXT2_REALSIZE=`LANG=C du -l -s -c -k $(TARGET_DIR) | grep total | sed -e "s/total//"`; \
@@ -92,22 +92,23 @@ ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT2_BLOCKS)),0)
 	GENEXT2_INODES=`expr $$GENEXT2_ADDTOINODESIZE + 400`; \
 	set -x; \
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-	$(GENEXT2_DIR)/genext2fs \
+		-i $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) -- \
+	    $(GENEXT2_DIR)/genext2fs \
 		-b $$GENEXT2_SIZE \
 		-i $$GENEXT2_INODES \
 		-d $(TARGET_DIR) \
 		$(EXT2_OPTS) $(EXT2_BASE)
 else
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-	$(GENEXT2_DIR)/genext2fs \
+		-i $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) -- \
+	    $(GENEXT2_DIR)/genext2fs \
 		-d $(TARGET_DIR) \
 		$(EXT2_OPTS) \
 		$(EXT2_BASE)
 endif
+	-@rm -f $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET)
 
 $(EXT2_BASE).gz: $(EXT2_BASE)
 	@gzip --best -fv $(EXT2_BASE)

+ 14 - 6
target/iso9660/iso9660.mk

@@ -52,22 +52,30 @@ ifeq ($(strip $(BR2_TARGET_ROOTFS_ISO9660_SQUASH)),y)
 ISO9660_OPTS+=-U
 endif
 
-$(ISO9660_TARGET): host-fakeroot $(STAGING_DIR)/fakeroot.env $(EXT2_TARGET) grub mkisofs
+$(ISO9660_TARGET): host-fakeroot $(EXT2_TARGET) grub mkisofs
 	mkdir -p $(ISO9660_TARGET_DIR)
 	mkdir -p $(ISO9660_TARGET_DIR)/boot/grub
 	cp $(GRUB_DIR)/stage2/stage2_eltorito $(ISO9660_TARGET_DIR)/boot/grub/
 	cp $(ISO9660_BOOT_MENU) $(ISO9660_TARGET_DIR)/boot/grub/menu.lst
 	cp $(LINUX_KERNEL) $(ISO9660_TARGET_DIR)/kernel
 	cp $(EXT2_TARGET) $(ISO9660_TARGET_DIR)/initrd
+	# Use fakeroot to pretend all target binaries are owned by root
+	rm -f $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET)
+	cat $(STAGING_DIR)/.fakeroot* > $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET)
 	-$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
+		-i $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET) -- \
 		chown -R root:root $(ISO9660_TARGET_DIR)
-	-$(MKISOFS_TARGET) \
-		-R \
-		-b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table \
+	# Use fakeroot so mkisofs believes the previous fakery
+	$(STAGING_DIR)/usr/bin/fakeroot \
+		-i $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET) -- \
+	    $(MKISOFS_TARGET) \
+		-R -b boot/grub/stage2_eltorito -no-emul-boot \
+		-boot-load-size 4 -boot-info-table \
 		-o $(ISO9660_TARGET) \
 		$(ISO9660_TARGET_DIR)
+	-@rm -f $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET)
 
 iso9660root: $(ISO9660_TARGET)
 	echo $(ISO9660_TARGET)

+ 13 - 14
target/jffs2/jffs2root.mk

@@ -38,32 +38,31 @@ JFFS2_TARGET := $(subst ",,$(BR2_TARGET_ROOTFS_JFFS2_OUTPUT))
 # value of MKFS_JFFS2 to either the previously installed copy or the one
 # just built.
 #
-$(JFFS2_TARGET): host-fakeroot makedevs $(STAGING_DIR)/fakeroot.env mtd-host
+$(JFFS2_TARGET): host-fakeroot makedevs mtd-host
 	-@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
 	@rm -rf $(TARGET_DIR)/usr/man
 	@rm -rf $(TARGET_DIR)/usr/share/man
 	@rm -rf $(TARGET_DIR)/usr/info
 	-/sbin/ldconfig -r $(TARGET_DIR) 2>/dev/null
 	# Use fakeroot to pretend all target binaries are owned by root
+	rm -f $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET)
+	cat $(STAGING_DIR)/.fakeroot* > $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET)
 	-$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
+		-i $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) -- \
 		chown -R root:root $(TARGET_DIR)
 	# Use fakeroot to pretend to create all needed device nodes
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-		$(STAGING_DIR)/bin/makedevs \
-		-d $(TARGET_DEVICE_TABLE) \
-		$(TARGET_DIR)
+		-i $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) -- \
+		$(STAGING_DIR)/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(TARGET_DIR)
 	# Use fakeroot so mkfs.jffs2 believes the previous fakery
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-		$(MKFS_JFFS2) \
-			$(JFFS2_OPTS) \
-			-d $(BUILD_DIR)/root \
-			-o $(JFFS2_TARGET)
+		-i $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) -- \
+	    $(MKFS_JFFS2) $(JFFS2_OPTS) \
+			-d $(BUILD_DIR)/root -o $(JFFS2_TARGET)
+	-@rm -f $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET)
 	@ls -l $(JFFS2_TARGET)
 
 JFFS2_COPYTO := $(strip $(subst ",,$(BR2_TARGET_ROOTFS_JFFS2_COPYTO)))

+ 1 - 5
target/makedevs/makedevs.mk

@@ -13,17 +13,13 @@ $(MAKEDEVS_DIR)/makedevs.c: target/makedevs/makedevs.c
 	cp target/makedevs/makedevs.c $(MAKEDEVS_DIR)
 
 $(MAKEDEVS_DIR)/makedevs: $(MAKEDEVS_DIR)/makedevs.c
-	$(HOSTCC) -Wall -Werror -O2 $(MAKEDEVS_DIR)/makedevs.c -o $(MAKEDEVS_DIR)/makedevs
+	gcc -Wall -Werror -O2 $(MAKEDEVS_DIR)/makedevs.c -o $(MAKEDEVS_DIR)/makedevs
 	touch -c $(MAKEDEVS_DIR)/makedevs
 
 $(STAGING_DIR)/bin/makedevs: $(MAKEDEVS_DIR)/makedevs
 	$(INSTALL) -m 755 $(MAKEDEVS_DIR)/makedevs $(STAGING_DIR)/bin/makedevs
 	touch -c $(STAGING_DIR)/bin/makedevs
 
-$(STAGING_DIR)/fakeroot.env:
-	cat $(STAGING_DIR)/.fakeroot.* > $(STAGING_DIR)/fakeroot.env
-	touch -c $(STAGING_DIR)/fakeroot.env
-
 makedevs: $(STAGING_DIR)/bin/makedevs
 
 makedevs-source:

+ 15 - 12
target/squashfs/squashfsroot.mk

@@ -53,31 +53,34 @@ ifeq ($(strip $(BR2_sparc)),y)
 SQUASHFS_ENDIANNESS=-be
 endif
 
-squashfsroot: host-fakeroot makedevs $(STAGING_DIR)/fakeroot.env squashfs
+SQUASHFS_TARGET:=$(IMAGE).squashfs
+
+squashfsroot: host-fakeroot makedevs squashfs
 	-@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
 	@rm -rf $(TARGET_DIR)/usr/man
 	@rm -rf $(TARGET_DIR)/usr/info
 	-/sbin/ldconfig -r $(TARGET_DIR) 2>/dev/null
 	# Use fakeroot to pretend all target binaries are owned by root
+	rm -f $(STAGING_DIR)/_fakeroot.$(SQUASHFS_TARGET)
+	cat $(STAGING_DIR)/.fakeroot* > $(STAGING_DIR)/_fakeroot.$(SQUASHFS_TARGET)
 	-$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
+		-i $(STAGING_DIR)/_fakeroot.$(SQUASHFS_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(SQUASHFS_TARGET) -- \
 		chown -R root:root $(TARGET_DIR)
 	# Use fakeroot to pretend to create all needed device nodes
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-		$(STAGING_DIR)/bin/makedevs \
-		-d $(TARGET_DEVICE_TABLE) \
-		$(TARGET_DIR)
+		-i $(STAGING_DIR)/_fakeroot.$(SQUASHFS_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(SQUASHFS_TARGET) -- \
+		$(STAGING_DIR)/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(TARGET_DIR)
 	# Use fakeroot so mksquashfs believes the previous fakery
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-		$(SQUASHFS_DIR)/squashfs-tools/mksquashfs \
+		-i $(STAGING_DIR)/_fakeroot.$(SQUASHFS_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(SQUASHFS_TARGET) -- \
+	    $(SQUASHFS_DIR)/squashfs-tools/mksquashfs \
 		    $(TARGET_DIR) \
-		    $(IMAGE).squashfs \
+		    $(SQUASHFS_TARGET) \
 		    -noappend $(SQUASHFS_ENDIANNESS)
+	-@rm -f $(STAGING_DIR)/_fakeroot.$(SQUASHFS_TARGET)
 
 squashfsroot-source: squashfs-source
 

+ 15 - 13
target/tar/tarroot.mk

@@ -4,30 +4,32 @@
 #
 #############################################################
 
-TAR_OPTS := $(strip $(subst ",, $(BR2_TARGET_ROOTFS_TAR_OPTIONS)))
-#"
-tarroot: host-fakeroot makedevs $(STAGING_DIR)/fakeroot.env
+TAR_OPTS:=$(strip $(BR2_TARGET_ROOTFS_TAR_OPTIONS))
+TAR_TARGET:=$(IMAGE).tar
+
+tarroot: host-fakeroot makedevs
 	-@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
 	@rm -rf $(TARGET_DIR)/usr/man
 	@rm -rf $(TARGET_DIR)/usr/info
 	-/sbin/ldconfig -r $(TARGET_DIR) 2>/dev/null
 	# Use fakeroot to pretend all target binaries are owned by root
+	rm -f $(STAGING_DIR)/_fakeroot.$(TAR_TARGET)
+	cat $(STAGING_DIR)/.fakeroot* > $(STAGING_DIR)/_fakeroot.$(TAR_TARGET)
 	-$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
+		-i $(STAGING_DIR)/_fakeroot.$(TAR_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(TAR_TARGET) -- \
 		chown -R root:root $(TARGET_DIR)
 	# Use fakeroot to pretend to create all needed device nodes
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-		$(STAGING_DIR)/bin/makedevs \
-		-d $(TARGET_DEVICE_TABLE) \
-		$(TARGET_DIR)
+		-i $(STAGING_DIR)/_fakeroot.$(TAR_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(TAR_TARGET) -- \
+		$(STAGING_DIR)/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(TARGET_DIR)
 	# Use fakeroot so tar believes the previous fakery
 	$(STAGING_DIR)/usr/bin/fakeroot \
-		-i $(STAGING_DIR)/fakeroot.env \
-		-s $(STAGING_DIR)/fakeroot.env -- \
-		tar -c$(TAR_OPTS)f $(IMAGE).tar -C $(TARGET_DIR) .
+		-i $(STAGING_DIR)/_fakeroot.$(TAR_TARGET) \
+		-s $(STAGING_DIR)/_fakeroot.$(TAR_TARGET) -- \
+	    tar -c$(TAR_OPTS)f $(TAR_TARGET) -C $(TARGET_DIR) .
+	-@rm -f $(STAGING_DIR)/_fakeroot.$(TAR_TARGET)
 
 tarroot-source: