summaryrefslogtreecommitdiff
blob: e5d3151548c8a9429fcdc87ea8fd6d1697ed60a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=3

inherit eutils toolchain-funcs multilib prefix flag-o-matic user

# last part in e.g. 1.12.14.1704
PVER=1709

DESCRIPTION="Baselayout for Gentoo Prefix installs"
HOMEPAGE="https://prefix.gentoo.org/"
SRC_URI="https://dev.gentoo.org/~grobian/distfiles/${P}.${PVER}.tar.bz2"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~ppc-aix ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris ~x86-winnt"
IUSE="prefix-chaining"
DEPEND=">=sys-apps/portage-2.2.01"
RDEPEND=">=sys-libs/readline-5.0-r1
	>=app-shells/bash-3.1_p7
	>=sys-apps/coreutils-5.2.1
	kernel_Darwin? ( sys-process/pidof-bsd )
	kernel_FreeBSD? ( sys-process/pidof-bsd )"

S=${WORKDIR}/${P}.${PVER}

src_prepare() {
	if use prefix-chaining; then
		epatch "${S}"/baselayout-${PV}-prefix-chaining.patch

		# need to set the PKG_CONFIG_PATH globally for this prefix, when
		# chaining is enabled, since pkg-config may not be installed locally,
		# but still .pc files should be found for all RDEPENDable prefixes in
		# the chain.
		echo "PKG_CONFIG_PATH=\"${EPREFIX}/usr/lib/pkgconfig:${EPREFIX}/usr/share/pkgconfig\"" >> "${S}"/etc/env.d/00basic
	fi

	# The consoletype application in this form will only work on Linux
	[[ ${CHOST} == *-linux-* ]] || epatch "${FILESDIR}"/baselayout-1.12.5-prefix-no-consoletype.patch

	cd "${S}"
	eprefixify \
		etc/env.d/00basic \
		etc/profile \
		sbin/functions.sh \
		sbin/runscript.sh \
		src/runscript.c \
		sbin/depscan.sh \
		sbin/rc-daemon.sh \
		sbin/rc-services.sh
	# add the host OS MANPATH
	echo 'MANPATH="/usr/share/man"' > etc/env.d/99basic || die "can't make file"

	# avoid a re-automake run
	touch -r gnulib/configure.ac gnulib/Makefile.in gnulib/aclocal.m4 || die
}

src_configure() {
	cd gnulib || die
	default
}

src_compile() {
	# build gnulib first
	pushd gnulib > /dev/null || die
	emake || die "Cannot build gnulib"
	popd > /dev/null

	# use gnulib (buildsystem doesn't respect cppflags)
	append-cflags -I../gnulib -I../gnulib/gllib
	append-ldflags -L../gnulib/gllib
	append-libs gnu

	local libdir="lib"

	[[ ${SYMLINK_LIB} == "yes" ]] && libdir=$(get_abi_LIBDIR "${DEFAULT_ABI}")

	# CFLAGS in LD for #370695
	make -C "${S}"/src \
		CC="$(tc-getCC)" \
		LD="$(tc-getCC) ${CFLAGS} ${LDFLAGS}" \
		CFLAGS="${CFLAGS}" \
		LIBDIR="${libdir}" || die
}

src_install() {
	local dir libdirs libdirs_env rcscripts_dir

	dodir /etc
	dodir /etc/env.d
	dodir /etc/init.d			# .keep file might mess up init.d stuff

	libdirs=$(get_all_libdirs)
	: ${libdirs:=lib}	# it isn't that we don't trust multilib.eclass...

	rcscripts_dir="/lib/rcscripts"

	for dir in ${libdirs}; do
		libdirs_env=${libdirs_env:+$libdirs_env:}/${dir}:/usr/${dir}:/usr/local/${dir}
		[[ ${dir} == "lib" && ${SYMLINK_LIB} == "yes" ]] && continue
		dodir /"${dir}"
		dodir /usr/"${dir}"
		dodir /usr/local/"${dir}"
	done

	# Ugly compatibility with stupid ebuilds and old profiles symlinks
	if [[ ${SYMLINK_LIB} == "yes" ]] ; then
		rm -r "${ED}"/{lib,usr/lib,usr/local/lib} &> /dev/null
		dosym $(get_abi_LIBDIR ${DEFAULT_ABI}) /lib
		dosym $(get_abi_LIBDIR ${DEFAULT_ABI}) /usr/lib
		dosym $(get_abi_LIBDIR ${DEFAULT_ABI}) /usr/local/lib
	fi

	# FHS compatibility symlinks stuff
	dosym /var/tmp /usr/tmp

	# rc-scripts version for testing of features that *should* be present
	echo "Gentoo Prefix Base System version ${PV}" > ${ED}/etc/gentoo-release

	# get the basic stuff in there
	doenvd "${S}"/etc/env.d/* || die "doenvd"

	# copy the profile
	cp "${S}"/etc/profile "${ED}"/etc/profile

	# Setup files in /sbin
	#
	cd "${S}"/sbin
	into /
	# These moved from /etc/init.d/ to /sbin to help newb systems
	# from breaking
	dosbin runscript.sh functions.sh

	# Compat symlinks between /etc/init.d and /sbin
	# (some stuff have hardcoded paths)
	dosym ../../sbin/depscan.sh /etc/init.d/depscan.sh
	dosym ../../sbin/runscript.sh /etc/init.d/runscript.sh
	dosym ../../sbin/functions.sh /etc/init.d/functions.sh

	cd "${S}"/sbin
	into /
	dosbin depscan.sh
	insinto ${rcscripts_dir}/awk
	doins "${S}"/src/awk/functions.awk

	#
	# Install baselayout utilities
	#
	local libdir="lib"
	[[ ${SYMLINK_LIB} == "yes" ]] && libdir=$(get_abi_LIBDIR "${DEFAULT_ABI}")

	cd "${S}"/src
	make DESTDIR="${ED}" LIBDIR="${libdir}" install || die

	insinto ${rcscripts_dir}/sh
	doins "${S}"/sbin/rc-*
}

pkg_postinst() {
	if [[ ${EUID} == 0 ]] ; then
		# setup portage user, such that things that require root privs
		# don't fail, bug #321623
		enewgroup portage 250
		enewuser portage 250 -1 "${EPREFIX}"/var/tmp/portage portage
	fi

	# This is also written in src_install (so it's in CONTENTS), but
	# write it here so that the new version is immediately in the file
	# (without waiting for the user to do etc-update)
	rm -f "${EROOT}"/etc/._cfg????_gentoo-release
	echo "Gentoo Prefix Base System version ${PV}" > "${EROOT}"/etc/gentoo-release

	echo
	einfo "Please be sure to update all pending '._cfg*' files in /etc,"
	einfo "else things might break!  You can use 'etc-update'"
	einfo "to accomplish this:"
	einfo
	einfo "  # etc-update"
	echo
}