-%define patchlevel r1
+#
+# Conditional build:
+%bcond_with bootstrap # build boostrap
+%bcond_without verbose # disable verbose build
+
+%define ver 0.1.9998
+%define svnrev 2700
Summary: A cross-platform build environment
Name: kBuild
-Version: 0.1.98
-Release: 3%{?patchlevel:.%{patchlevel}}
+Version: %{ver}.%{svnrev}
+Release: 3
Group: Development/Tools
# Most tools are from NetBSD, some are from FreeBSD, and make and sed are from GNU
License: BSD and GPL v2+
-URL: http://svn.netlabs.org/kbuild
-#Source0: ftp://ftp.netlabs.org/pub/kbuild/%{name}-%{version}%{?patchlevel:-%{patchlevel}}-src.tar.gz
-# svn co -e2537 http://svn.netlabs.org/repos/kbuild/trunk@2537 kBuild
-# tar czf kBuild-r2537.tar.gz --exclude .svn kBuild
-Source0: %{name}-r2537.tar.gz
+Source0: %{name}-r%{svnrev}.tar.bz2
+# Source0-md5: 7c394fbe248f903d0bc1aabd235dc0a9
+Source1: get-source.sh
Patch0: %{name}-0.1.3-escape.patch
Patch1: %{name}-0.1.5-dprintf.patch
Patch2: %{name}-0.1.5-pthread.patch
+Patch3: re_string_fetch_byte_case-not-pure-attribute.patch
+Patch4: x32.patch
+URL: http://svn.netlabs.org/kbuild
BuildRequires: acl-devel
-BuildRequires: autoconf
-BuildRequires: automake
BuildRequires: byacc
-BuildRequires: cvs
BuildRequires: flex
-BuildRequires: gettext-devel
+%if %{with bootstrap}
+BuildRequires: autoconf
+BuildRequires: automake
+BuildRequires: gettext-autopoint
+BuildRequires: libtool
+BuildRequires: texinfo
+%else
+BuildRequires: kBuild
+%endif
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+%ifarch %{x8664} x32
+%define kbuild_arch amd64
+%else
+%define kbuild_arch x86
+%endif
+
%description
This is a GNU make fork with a set of scripts to simplify complex
tasks and portable versions of various UNIX tools to ensure
cross-platform portability.
-It is used mainly to build VirtualBox OSE packages for RPM Fusion
-repository.
+The goals of the kBuild framework:
+- Similar behavior across all supported platforms
+- Flexibility, don't create unnecessary restrictions preventing ad-hoc
+ solutions
+- Makefiles can be simple to write and maintain
+- One configuration file for a subtree automatically included
+- Target configuration templates as the primary mechanism for makefile
+ simplification
+- Tools and SDKs for helping out the templates with flexibility
+- Non-recursive makefile method by using sub-makefiles
%prep
-%setup -q -n %{name}
+%setup -qc
+mv %{name} .tmp; mv .tmp/* .
%patch0 -p1
%patch1 -p1
%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+
+cat > SvnInfo.kmk << EOF
+KBUILD_SVN_REV := %{svnrev}
+KBUILD_SVN_URL := http://svn.netlabs.org/repos/kbuild/trunk
+EOF
-# Remove prebuilt stuff
-rm -rf kBuild/bin/*
+%{__sed} -i -e 's@_LDFLAGS\.%{kbuild_arch}*.*=@& %{rpmldflags}@g' Config.kmk
-# The bootstrap would probably not be needed if we depended on ourselves,
-# yet it is not guarranteed that new versions are compilable with older
-# kmk versions, so with this we are on a safer side
-find -name config.log -delete
+%ifarch x32
+# probably should add full x32 configuration
+# but can't find place to submit code upstream, so this will do for now.
+# but then again, forcing -m64 is bad and pointless
+sed -i -e 's/-m64//' kBuild/tools/GCC64.kmk kBuild/tools/GXX64.kmk tests/Config.kmk Config.kmk
+%endif
%build
-%define bootstrap_mflags %{_smp_mflags} \\\
- CFLAGS="%{optflags}" \\\
- KBUILD_VERBOSE=2 \\\
- KBUILD_VERSION_PATCH=999
-
-%define mflags %{bootstrap_mflags} \\\
- NIX_INSTALL_DIR=%{_prefix} \\\
- BUILD_TYPE=release \\\
- MY_INST_MODE=0644 \\\
+%define bootstrap_mflags %{?_smp_mflags} %{?with_verbose:KBUILD_VERBOSE=2} \\\
+ CC="%{__cc}" TOOL_GCC3_CC="%{__cc}" CFLAGS="%{rpmcflags}"
+
+%define mflags %{bootstrap_mflags} \\\
+ NIX_INSTALL_DIR=%{_prefix} \\\
+ BUILD_TYPE=release \\\
+ MY_INST_MODE=0644 \\\
MY_INST_BIN_MODE=0755
+ver=$(awk '/^KBUILD_VERSION =/{print $3}' Config.kmk)
+test "$ver" = %{ver}
+
+%if %{with bootstrap}
cd src/kmk
%{__libtoolize}
%{__aclocal} -I config
%{__autoconf}
%{__autoheader}
%{__automake}
-cd -
+cd ../sed
+%{__libtoolize}
+%{__aclocal} -I config
+%{__autoconf}
+%{__autoheader}
+%{__automake}
+cd ../..
kBuild/env.sh --full \
%{__make} -f bootstrap.gmk %{bootstrap_mflags}
-kBuild/env.sh kmk %{mflags} rebuild
+kBuild/env.sh kmk clean
+%endif
+
+kBuild/env.sh kmk %{mflags} all \
+ PATH_INS=$RPM_BUILD_ROOT
%install
rm -rf $RPM_BUILD_ROOT
-export KBUILD_VERBOSE=2
kBuild/env.sh kmk %{mflags} install \
PATH_INS=$RPM_BUILD_ROOT
%files
%defattr(644,root,root,755)
-%doc COPYING ChangeLog
+%doc ChangeLog
%doc kBuild/doc/COPYING-FDL-1.3 kBuild/doc/QuickReference*
%attr(755,root,root) %{_bindir}/kDepIDB
%attr(755,root,root) %{_bindir}/kDepObj