blob: f8bccc390e5ffb646e1af821ccbfe4c2de3b95f7 [file] [log] [blame]
%define _rpmdir rpms
%define _builddir .
Summary: A minimal libc subset for use with initramfs.
Name: klibc
Version: 0.89
Release: 1
License: BSD/GPL
Group: Development/Libraries
URL: http://www.zytor.com/klibc
Source: /dev/null
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
Packager: Bryan O'Sullivan <bos@serpentine.com>
Prefix: /usr
Vendor: Starving Linux Artists
%description
%{name} is intended to be a minimalistic libc subset for use with
initramfs. It is deliberately written for small size, minimal
entanglement, and portability, not speed. It is definitely a work in
progress, and a lot of things are still missing.
%package kernheaders
Summary: Kernel headers used during the build of klibc.
Group: Development/Libraries
%description kernheaders
This package contains the set of kernel headers that were required to
build %{name} and the utilities that ship with it. This may or may
not be a complete enough set to build other programs that link against
%{name}. If in doubt, use real kernel headers instead.
%package utils
Summary: Small statically-linked utilities built with klibc.
Group: Utilities/System
%description utils
This package contains a collection of programs that are statically
linked against klibc. These duplicate some of the functionality of a
regular Linux toolset, but are typically much smaller than their
full-function counterparts. They are intended for inclusion in
initramfs images and embedded systems.
%prep
if [ ! -L linux ]; then
echo "*** You must have a symlink named linux to build klibc" 1>&2
exit 1
fi
if [ ! -f linux/include/asm/page.h ]; then
echo "*** You need to 'make prepare' in the linux tree before building klibc" 1>&2
exit 1
fi
mkdir -p %{buildroot} %{_rpmdir}
%build
make
%install
rm -rf %{buildroot}
dest=%{buildroot}/%{prefix}
lib=$dest/%{_lib}/klibc
inc=$dest/include/klibc
exe=$dest/libexec/klibc
doc=$dest/share/doc/%{name}-%{version}
udoc=$dest/share/doc/%{name}-utils-%{version}
# First, the library.
install -dD -m 755 $lib $inc/kernel $exe $doc $udoc
install -m 755 klibc/klibc.so $lib
install -m 644 klibc/libc.a $lib
install -m 644 klibc/crt0.o $lib
install -m 644 klibc/libc.so.hash $lib
ln $lib/klibc.so $lib/libc.so
ln $lib/klibc.so $lib/klibc-$(cat $lib/libc.so.hash).so
# Next, the generated binaries.
install -m 755 ash/sh $exe
install -m 755 gzip/gzip $exe
ln $exe/gzip $exe/gunzip
ln $exe/gzip $exe/zcat
install -m 755 ipconfig/ipconfig $exe
install -m 755 kinit/kinit $exe
install -m 755 nfsmount/nfsmount $exe
for i in chroot dd fstype mkdir mkfifo mount umount; do
install -m 755 utils/$i $exe
done
# The docs.
install -m 444 README $doc
install -m 444 klibc/README $doc/README.klibc
install -m 444 klibc/arch/README $doc/README.klibc.arch
install -m 444 gzip/COPYING $udoc/COPYING.gzip
install -m 444 gzip/README $udoc/README.gzip
install -m 444 ipconfig/README $udoc/README.ipconfig
install -m 444 kinit/README $udoc/README.kinit
# Finally, the include files.
bitsize=$(make --no-print-directory -C klibc bitsize)
cp --parents $(find klibc/include \( -name CVS -o -name SCCS \) -prune \
-o -name '*.h' -print) $inc
mv $inc/klibc $inc/klibc.$$
mv $inc/klibc.$$/include/* $inc
mv $inc/bits$bitsize/bitsize $inc
rm -rf $inc/klibc.$$ $inc/bits[0-9]*
pushd klibc/arch/%{_arch}/include
cp --parents -f $(find . \( -name CVS -o -name SCCS \) -prune \
-o -name '*.h' -print) $inc
popd
# Yeugh. Find the transitive closure over all kernel headers included
# by klibc, and copy them into place.
find . -name '.*.d' | xargs -r sed -e 's,[ \t][ \t]*,\n,g' | sed -n -e 's,^\.\./linux/include/,,p' | sort | uniq | (cd linux/include && xargs -ri cp --parents '{}' $inc/kernel)
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%docdir %{prefix}/share/doc/%{name}-%{version}
%{prefix}/%{_lib}/klibc
%dir %{prefix}/include/klibc
%{prefix}/include/klibc/*.h
%{prefix}/include/klibc/arpa
%{prefix}/include/klibc/bitsize
%{prefix}/include/klibc/klibc
%{prefix}/include/klibc/net
%{prefix}/include/klibc/netinet
%{prefix}/include/klibc/sys
%{prefix}/share/doc/%{name}-%{version}
%files kernheaders
%defattr(-,root,root,-)
%{prefix}/include/klibc/kernel
%files utils
%defattr(-,root,root,-)
%{prefix}/libexec/klibc
%docdir %{prefix}/share/doc/%{name}-utils-%{version}
%{prefix}/share/doc/%{name}-utils-%{version}
%changelog
* Sat Nov 29 2003 Bryan O'Sullivan <bos@serpentine.com> -
- Initial build.