sys-libs/compiler-rt-sanitizers: amd64 stable wrt bug #657516
[gentoo.git] / sys-libs / libselinux / libselinux-9999.ebuild
1 # Copyright 1999-2018 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI="6"
5 PYTHON_COMPAT=( python2_7 python3_4 python3_5 python3_6 )
6 USE_RUBY="ruby23"
7
8 # No, I am not calling ruby-ng
9 inherit multilib python-r1 toolchain-funcs multilib-minimal
10
11 MY_P="${P//_/-}"
12 SEPOL_VER="${PV}"
13 MY_RELEASEDATE="20180524"
14
15 DESCRIPTION="SELinux userland library"
16 HOMEPAGE="https://github.com/SELinuxProject/selinux/wiki"
17
18 if [[ ${PV} == 9999 ]] ; then
19         inherit git-r3
20         EGIT_REPO_URI="https://github.com/SELinuxProject/selinux.git"
21         S="${WORKDIR}/${MY_P}/${PN}"
22 else
23         SRC_URI="https://raw.githubusercontent.com/wiki/SELinuxProject/selinux/files/releases/${MY_RELEASEDATE}/${MY_P}.tar.gz"
24         KEYWORDS="~amd64 ~arm ~arm64 ~mips ~x86"
25         S="${WORKDIR}/${MY_P}"
26 fi
27
28 LICENSE="public-domain"
29 SLOT="0"
30 IUSE="pcre2 python ruby static-libs ruby_targets_ruby23"
31 REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
32
33 RDEPEND=">=sys-libs/libsepol-${SEPOL_VER}:=[${MULTILIB_USEDEP}]
34         !pcre2? ( >=dev-libs/libpcre-8.33-r1:=[static-libs?,${MULTILIB_USEDEP}] )
35         pcre2? ( dev-libs/libpcre2:=[static-libs?,${MULTILIB_USEDEP}] )
36         python? ( ${PYTHON_DEPS} )
37         ruby? (
38                 ruby_targets_ruby23? ( dev-lang/ruby:2.3 )
39         )
40         elibc_musl? ( sys-libs/fts-standalone )"
41 DEPEND="${RDEPEND}
42         virtual/pkgconfig
43         python? ( >=dev-lang/swig-2.0.9 )
44         ruby? ( >=dev-lang/swig-2.0.9 )"
45
46 src_prepare() {
47         eapply_user
48
49         multilib_copy_sources
50 }
51
52 multilib_src_compile() {
53         tc-export AR CC PKG_CONFIG RANLIB
54
55         emake \
56                 LIBDIR="\$(PREFIX)/$(get_libdir)" \
57                 SHLIBDIR="/$(get_libdir)" \
58                 LDFLAGS="-fPIC ${LDFLAGS} -pthread" \
59                 USE_PCRE2="$(usex pcre2 y n)" \
60                 FTS_LDLIBS="$(usex elibc_musl '-lfts' '')" \
61                 all
62
63         if multilib_is_native_abi && use python; then
64                 building() {
65                         emake \
66                                 LDFLAGS="-fPIC ${LDFLAGS} -lpthread" \
67                                 LIBDIR="\$(PREFIX)/$(get_libdir)" \
68                                 SHLIBDIR="/$(get_libdir)" \
69                                 USE_PCRE2="$(usex pcre2 y n)" \
70                                 FTS_LDLIBS="$(usex elibc_musl '-lfts' '')" \
71                                 pywrap
72                 }
73                 python_foreach_impl building
74         fi
75
76         if multilib_is_native_abi && use ruby; then
77                 building() {
78                         einfo "Calling rubywrap for ${1}"
79                         # Clean up .lo file to force rebuild
80                         rm -f src/selinuxswig_ruby_wrap.lo || die
81                         emake \
82                                 RUBY=${1} \
83                                 LDFLAGS="-fPIC ${LDFLAGS} -lpthread" \
84                                 LIBDIR="\$(PREFIX)/$(get_libdir)" \
85                                 SHLIBDIR="/$(get_libdir)" \
86                                 USE_PCRE2="$(usex pcre2 y n)" \
87                                 FTS_LDLIBS="$(usex elibc_musl '-lfts' '')" \
88                                 rubywrap
89                 }
90                 for RUBYTARGET in ${USE_RUBY}; do
91                         use ruby_targets_${RUBYTARGET} || continue
92
93                         building ${RUBYTARGET}
94                 done
95         fi
96 }
97
98 multilib_src_install() {
99         emake DESTDIR="${D}" \
100                 LIBDIR="\$(PREFIX)/$(get_libdir)" \
101                 SHLIBDIR="/$(get_libdir)" \
102                 USE_PCRE2="$(usex pcre2 y n)" \
103                 install
104
105         if multilib_is_native_abi && use python; then
106                 installation() {
107                         emake DESTDIR="${D}" \
108                                 LIBDIR="\$(PREFIX)/$(get_libdir)" \
109                                 SHLIBDIR="/$(get_libdir)" \
110                                 USE_PCRE2="$(usex pcre2 y n)" \
111                                 install-pywrap
112                         python_optimize # bug 531638
113                 }
114                 python_foreach_impl installation
115         fi
116
117         if multilib_is_native_abi && use ruby; then
118                 installation() {
119                         einfo "Calling install-rubywrap for ${1}"
120                         # Forcing (re)build here as otherwise the resulting SO file is used for all ruby versions
121                         rm src/selinuxswig_ruby_wrap.lo
122                         emake DESTDIR="${D}" \
123                                 LIBDIR="\$(PREFIX)/$(get_libdir)" \
124                                 SHLIBDIR="/$(get_libdir)" \
125                                 RUBY=${1} \
126                                 USE_PCRE2="$(usex pcre2 y n)" \
127                                 install-rubywrap
128                 }
129                 for RUBYTARGET in ${USE_RUBY}; do
130                         use ruby_targets_${RUBYTARGET} || continue
131
132                         installation ${RUBYTARGET}
133                 done
134         fi
135
136         use static-libs || rm "${D}"/usr/lib*/*.a || die
137 }
138
139 pkg_postinst() {
140         # Fix bug 473502
141         for POLTYPE in ${POLICY_TYPES};
142         do
143                 mkdir -p /etc/selinux/${POLTYPE}/contexts/files || die
144                 touch /etc/selinux/${POLTYPE}/contexts/files/file_contexts.local || die
145                 # Fix bug 516608
146                 for EXPRFILE in file_contexts file_contexts.homedirs file_contexts.local ; do
147                         if [[ -f "/etc/selinux/${POLTYPE}/contexts/files/${EXPRFILE}" ]]; then
148                                 sefcontext_compile /etc/selinux/${POLTYPE}/contexts/files/${EXPRFILE} \
149                                 || die "Failed to recompile contexts"
150                         fi
151                 done
152         done
153 }