+#
+# TODO:
+# - sparc64 modules support in sparc(32) version
+# - make internal commands work even if busybox is not in /bin/busybox
+#
+#
+# Conditional build:
+# alternative busybox config file (replaces default one) you should
+# define cfgfile macro, i.e.
+#
+# rpm --rebuild busybox.*.src.rpm --with altconfig --define "cfgfile bb-emb-config.h"
+%bcond_with altconfig # use alternative config (defined by cfgfile)
+%bcond_with linkfl # creates links to busybox binary and puts them into file list
+# Options below are useful, when you want fileutils and grep providing.
+# For example, ash package requires fileutils and grep.
+%bcond_with fileutl_prov # adds fileutils providing
+%bcond_with grep_prov # adds grep providing
+# Option below is useful, when busybox is built with shell support.
+%bcond_with sh_prov # adds /bin/sh providing
+# WARNING! Shell, filetuils and grep providing may depend on config file!
+# Fileutils, grep and shell provided with busybox have not such
+# functionality as their GNU countenders.
+#
+%bcond_without static # don't build static version
+%bcond_without initrd # don't build initrd version
+%bcond_with dietlibc # build dietlibc-based initrd version
+%bcond_with glibc # build glibc-based initrd version
+#
+%ifnarch %{ix86} ppc
+%define with_glibc 1
+%endif
+%ifarch ppc
+%undefine with_dietlibc
+%endif
Summary: Set of common unix utils for embeded systems
Summary(pl): Zestaw narzêdzi uniksowych dla systemów wbudowanych
+Summary(pt_BR): BusyBox é um conjunto de utilitários UNIX em um único binário
Name: busybox
-Version: 0.51
-Release: 10
+Version: 1.1.1
+Release: 1
License: GPL
Group: Applications
-Group(de): Applikationen
-Group(pl): Aplikacje
-Source0: ftp://ftp.lineo.com/pub/busybox/%{name}-%{version}.tar.gz
-Source1: %{name}-config.h
+Source0: http://www.busybox.net/downloads/%{name}-%{version}.tar.bz2
+# Source0-md5: ff1ade47255c643b68c9113c267ce712
+Source1: %{name}.config
+Source2: %{name}-initrd.config
+%{?with_altconfig:Source3: %{cfgfile}}
Patch0: %{name}-logconsole.patch
-Patch1: %{name}-tee.patch
-Patch2: %{name}-sh-name.patch
-Patch3: %{name}-printf-gettext.patch
-Patch4: %{name}-loadfont.patch
-Patch5: %{name}-cread.patch
-URL: http://busybox.lineo.com/
-%{?BOOT:BuildRequires: uClibc-devel-BOOT >= 20010521-3}
+Patch1: %{name}-printf-gettext.patch
+Patch2: %{name}-loadfont.patch
+Patch3: %{name}-force-dietlibc.patch
+Patch4: %{name}-ash_exec.patch
+Patch5: %{name}-kernel_headers.patch
+Patch6: %{name}-insmod-morearchs.patch
+Patch7: %{name}-dhcp.patch
+Patch8: %{name}-fix_64_archs.patch
+URL: http://www.busybox.net/
+BuildRequires: gcc >= 3.2
+%{?with_static:BuildRequires: glibc-static}
+%if %{with initrd}
+ %if %{with dietlibc}
+BuildRequires: dietlibc-static
+ %else
+ %if %{with glibc}
+BuildRequires: glibc-static
+ %else
+%ifarch ppc
+BuildRequires: uClibc-static > 0.9.28
+%else
+BuildRequires: uClibc-static >= 0.9.21
+%endif
+ %endif
+ %endif
+%endif
+%{?with_fileutl_prov:Provides: fileutils}
+%{?with_grep_prov:Provides: grep}
+%{?with_sh_prov:Provides: /bin/sh}
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%define _bindir /bin
+%define _initrd_bindir /bin
+
%description
BusyBox combines tiny versions of many common UNIX utilities into a
single small executable. It provides minimalist replacements for most
systemu potrzeba jeszcze tylko kernela, shella (np. ash) oraz edytora
(np. elvis-tiny albo ae).
-%package BOOT
-Summary: busybox for PLD bootdisk
+%description -l pt_BR
+BusyBox combina versões reduzidas de muitos utilitários UNIX num único
+executável, fornecendo substitutos minimalistas para muitos dos
+executáveis encontrados em pacotes como fileutils, shellutils,
+findutils, textutils, grep, gzip, tar, etc. Os utilitários do BusyBox
+em geral têm menos opções que os utilitários GNU, mas as opções
+implementadas comportam-se de maneira similar aos equivalentes GNU.
+
+%package static
+Summary: Static busybox
+Summary(pl): Statycznie skonsolidowany busybox
Group: Applications
-Group(de): Applikationen
-Group(pl): Aplikacje
-%description BOOT
-busybox for PLD bootdisk.
+%description static
+Static busybox.
+
+%description static -l pl
+Statycznie skonsolidowany busybox.
+
+%package initrd
+Summary: Static busybox for initrd
+Summary(pl): Statycznie skonsolidowany busybox dla initrd
+Group: Applications
+Conflicts: geninitrd < 3075
+
+%description initrd
+Static busybox for initrd.
+
+%description initrd -l pl
+Statycznie skonsolidowany busybox dla initrd.
%prep
%setup -q
-%patch0
-%patch1
+%patch0 -p1
+%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
%build
-cp -f %{SOURCE1} Config.h
-# BOOT
-%if %{?BOOT:1}%{!?BOOT:0}
+install %{SOURCE1} .config
+
+%if %{with initrd}
+install %{SOURCE2} .config
+%{__make} oldconfig
+%{__make} \
+ CFLAGS_EXTRA="%{rpmcflags} -D_BSD_SOURCE" \
+ LDFLAGS="%{rpmldflags} -static" \
+%if %{with dietlibc}
+ LIBRARIES="-lrpc" \
+ CC="diet gcc"
+%else
+%if %{with glibc}
+ CC="%{__cc}"
+%else
+ CC="%{_target_cpu}-uclibc-gcc"
+%endif
+%endif
+
+mv -f busybox busybox.initrd
+%{__make} clean
+install %{SOURCE1} .config
+%endif
+
+%if %{with altconfig}
+install %{SOURCE3} .config
+%endif
+
+%if %{with static}
+%{__make} oldconfig
%{__make} \
- CFLAGS_EXTRA="-m386 -I%{_libdir}/bootdisk%{_includedir}" \
- LDFLAGS="-nostdlib -s" \
- LIBRARIES="%{_libdir}/bootdisk%{_libdir}/crt0.o %{_libdir}/bootdisk%{_libdir}/libc.a -lgcc"
-mv -f busybox busybox-BOOT
+ CFLAGS_EXTRA="%{rpmcflags}" \
+ LDFLAGS="%{rpmldflags} -static" \
+ CC="%{__cc}"
+mv -f busybox busybox.static
+%{__make} clean
%endif
-# TODO make main package dynamically linked
+%{__make} oldconfig
%{__make} \
CFLAGS_EXTRA="%{rpmcflags}" \
- LDFLAGS="%{rpmldflags}"
-
+ LDFLAGS="%{rpmldflags}" \
+ CC="%{__cc}"
+
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{%{_bindir},%{_mandir}/man1,%{_libdir}/busybox}
+install -d $RPM_BUILD_ROOT{%{_initrd_bindir},%{_bindir},%{_mandir}/man1,%{_libdir}/busybox}
-%if %{?BOOT:1}%{!?BOOT:0}
-install -d $RPM_BUILD_ROOT%{_libdir}/bootdisk/bin
+%{?with_static:install busybox.static $RPM_BUILD_ROOT%{_bindir}}
+%{?with_initrd:install busybox.initrd $RPM_BUILD_ROOT%{_initrd_bindir}/initrd-busybox}
-install busybox-BOOT $RPM_BUILD_ROOT%{_libdir}/bootdisk/bin/
-
-for i in `cat busybox.links`; do
- ln -sfn busybox "$RPM_BUILD_ROOT%{_libdir}/bootdisk/bin/`basename $i`"
-done
-install busybox.links $RPM_BUILD_ROOT%{_libdir}/bootdisk%{_libdir}/busybox
-# change sh to lash (see sh_name patch)
-mv -f $RPM_BUILD_ROOT%{_libdir}/bootdisk/bin/{sh,lash}
-%endif
-
-install busybox $RPM_BUILD_ROOT%{_bindir}
install busybox.links $RPM_BUILD_ROOT%{_libdir}/busybox
install docs/BusyBox.1 $RPM_BUILD_ROOT%{_mandir}/man1
echo ".so BusyBox.1" > $RPM_BUILD_ROOT%{_mandir}/man1/busybox.1
-gzip -9nf AUTHORS TODO Changelog README
+# install links to busybox binary, when linkfl is defined
+%if %{with linkfl}
+%{__make} install \
+ PREFIX=$RPM_BUILD_ROOT
+%else
+install busybox $RPM_BUILD_ROOT%{_bindir}
+%endif
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(644,root,root,755)
-%doc *.gz
+%doc AUTHORS README .config
+
+%if %{with linkfl}
+%attr(755,root,root) /bin/*
+%attr(755,root,root) /sbin/*
%attr(755,root,root) %{_bindir}/*
+%attr(755,root,root) %{_sbindir}/*
+%else
+%attr(755,root,root) %{_bindir}/busybox
+%endif
+
%{_libdir}/busybox
%{_mandir}/man1/*
-%if %{?BOOT:1}%{!?BOOT:0}
-%files BOOT
+%if %{with static}
+%files static
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/busybox.static
+%endif
+
+%if %{with initrd}
+%files initrd
%defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/bootdisk/bin/*
-%{_libdir}/bootdisk%{_libdir}/*
+%attr(755,root,root) %{_initrd_bindir}/initrd-busybox
%endif