From 95a8e95af948014d024842892be1405d656ab5fc Mon Sep 17 00:00:00 2001
From: Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
Date: Thu, 21 Mar 2019 11:19:20 +0100
Subject: [PATCH] add prefix-guest support

Unlike Prefix RAP, Prefix Guest does use the host OS' libc, hence
requires a reduced set of baselayout.  Beyond that, some content depends
on what is found on the host OS, hence needs to be generated.
---
 Makefile | 67 +++++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 44 insertions(+), 23 deletions(-)

diff --git a/Makefile b/Makefile
index 069b207..395d1a6 100644
--- a/Makefile
+++ b/Makefile
@@ -21,6 +21,7 @@ INSTALL_SECURE = install -m 0600
 # if not, take them from environment, or use fallbacks
 OS ?=
 EPREFIX ?=
+ROOT ?=
 
 ifeq ($(OS),)
 OS=$(shell uname -s)
@@ -29,23 +30,26 @@ OS=BSD
 endif
 endif
 
+KEEP_DIRS-OS += \
+	/boot \
+	/home \
+	/media \
+	/mnt \
+	/opt \
+	/proc \
+	/root
 KEEP_DIRS-BSD += \
+	$(KEEP_DIRS-OS) \
 	/var/lock \
 	/var/run
 KEEP_DIRS-Linux += \
+	$(KEEP_DIRS-OS) \
 	/dev \
 	/run \
 	/sys \
 	/usr/src
 KEEP_DIRS = $(KEEP_DIRS-$(OS)) \
-	/boot \
 	/etc/profile.d \
-	/home \
-	/media \
-	/mnt \
-	/proc \
-	/opt \
-	/root \
 	/usr/local/bin \
 	/usr/local/sbin \
 	/var/cache \
@@ -54,26 +58,31 @@ KEEP_DIRS = $(KEEP_DIRS-$(OS)) \
 	/var/log \
 	/var/spool
 
+ETCFILE-OS += \
+	etc.$(OS)/issue \
+	etc.$(OS)/issue.logo \
+	etc.$(OS)/os-release \
+	etc/hosts \
+	etc/networks \
+	etc/protocols \
+	etc/services \
+	etc/shells
 ETCFILES-BSD += \
+	$(ETCFILE-OS) \
 	etc.BSD/COPYRIGHT \
 	etc.BSD/login.conf
 ETCFILES-Linux += \
+	$(ETCFILE-OS) \
 	etc.Linux/filesystems \
 	etc.Linux/inputrc \
 	etc.Linux/modprobe.d/aliases.conf \
 	etc.Linux/modprobe.d/i386.conf \
 	etc.Linux/sysctl.conf
+ETCFILES-prefix-guest += \
+	gen-etc.prefix-guest/env.d/99host
 ETCFILES = $(ETCFILES-$(OS)) \
-	etc.$(OS)/issue \
-	etc.$(OS)/issue.logo \
-	etc.$(OS)/os-release \
 	etc/env.d/50baselayout \
-	etc/hosts \
-	etc/networks \
-	etc/profile \
-	etc/protocols \
-	etc/services \
-	etc/shells
+	etc/profile
 
 SHAREFILES-OS += \
 	share.$(OS)/fstab \
@@ -95,7 +104,14 @@ changelog:
 
 clean:
 
-install:
+gen-etc.prefix-guest/env.d/99host:
+	# Define PATH,MANPATH for host system
+	$(INSTALL_DIR) $(@D)
+	{ echo PATH=/usr/sbin:/usr/bin:/sbin:/bin \
+	; ! test -d '$(ROOT)/usr/share/man' || echo MANPATH=/usr/share/man \
+	; } > $@
+
+install: $(ETCFILES) $(SHAREFILES)
 	test -n '$(DESTDIR)'
 	instfiles= ; \
 	for srcf in $(ETCFILES) ; do \
@@ -123,19 +139,24 @@ layout-dirs:
 		touch $(DESTDIR)$(EPREFIX)$$x/.keep || echo "ignoring touch failure; mounted fs?" ; \
 	done
 
-layout-BSD: layout-dirs
+layout-$(OS): layout-dirs
+
+layout-OS:
+	# Special dirs
+	install -m 0700 -d $(DESTDIR)$(EPREFIX)/root
+	touch $(DESTDIR)$(EPREFIX)/root/.keep
+
+layout-BSD: layout-OS
 	-chgrp uucp $(DESTDIR)$(EPREFIX)/var/lock
 	install -m 0775 -d $(DESTDIR)$(EPREFIX)/var/lock
 
-layout-Linux: layout-dirs
+layout-Linux: layout-OS
 	ln -snf /proc/self/mounts $(DESTDIR)$(EPREFIX)/etc/mtab
 	ln -snf /run $(DESTDIR)$(EPREFIX)/var/run
 	ln -snf /run/lock $(DESTDIR)$(EPREFIX)/var/lock
 
-layout: layout-dirs layout-$(OS)
+layout: layout-$(OS)
 	# Special dirs
-	install -m 0700 -d $(DESTDIR)$(EPREFIX)/root
-	touch $(DESTDIR)$(EPREFIX)/root/.keep
 	install -m 1777 -d $(DESTDIR)$(EPREFIX)/var/tmp
 	touch $(DESTDIR)$(EPREFIX)/var/tmp/.keep
 	install -m 1777 -d $(DESTDIR)$(EPREFIX)/tmp
@@ -144,7 +165,7 @@ layout: layout-dirs layout-$(OS)
 	ln -snf $(EPREFIX)/var/tmp $(DESTDIR)$(EPREFIX)/usr/tmp
 
 layout-usrmerge: layout
-ifeq ($(OS),Linux)
+ifneq ($(OS),BSD)
 	ln -snf usr/bin $(DESTDIR)$(EPREFIX)/bin
 	ln -snf usr/sbin $(DESTDIR)$(EPREFIX)/sbin
 	ln -snf bin $(DESTDIR)$(EPREFIX)/usr/sbin
