Skip to content

Commit f8513cd

Browse files
committed
Linux: fix install on merged usr systems
Install staged /usr child directories by merging their contents into existing destination directories instead of replacing them. This preserves /usr/sbin symlinks to bin on merged-/usr distributions while keeping traditional layouts working. Fixes issue: #1764
1 parent 37412ad commit f8513cd

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

src/Main/Main.make

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -569,9 +569,26 @@ endif
569569
570570
install: prepare
571571
ifneq "$(DESTDIR)" ""
572-
mkdir -p $(DESTDIR)
572+
mkdir -p "$(DESTDIR)"
573573
endif
574-
cp -R $(BASE_DIR)/Setup/Linux/usr $(DESTDIR)/
574+
# Merge directory contents so /usr/sbin -> bin layouts are not replaced.
575+
@set -e; \
576+
mkdir -p "$(DESTDIR)/usr"; \
577+
for _src in "$(BASE_DIR)/Setup/Linux/usr"/*; do \
578+
[ -e "$$_src" ] || continue; \
579+
_name=$$(basename "$$_src"); \
580+
_dst="$(DESTDIR)/usr/$$_name"; \
581+
if [ -d "$$_src" ]; then \
582+
if [ -e "$$_dst" ] || [ -L "$$_dst" ]; then \
583+
mkdir -p "$$_dst"; \
584+
cp -R "$$_src/." "$$_dst/"; \
585+
else \
586+
cp -R "$$_src" "$(DESTDIR)/usr/"; \
587+
fi; \
588+
else \
589+
cp -P "$$_src" "$(DESTDIR)/usr/"; \
590+
fi; \
591+
done
575592
576593
ifeq "$(TC_BUILD_CONFIG)" "Release"
577594
package: prepare

0 commit comments

Comments
 (0)