summaryrefslogtreecommitdiffstats
path: root/devtools
diff options
context:
space:
mode:
authorMichel Alexandre Salim <salimma@fedoraproject.org>2012-06-01 10:50:26 +0700
committerMichel Alexandre Salim <salimma@fedoraproject.org>2012-06-01 10:50:26 +0700
commit282752b2aa06b0544d9fc29283ec97677ebee0c2 (patch)
tree5ee7a65c7d5e7dbc05fff0de0cce080a16964bad /devtools
parent8e85eafb5da3f48660e8f638fff79ca8a4e0092b (diff)
downloadspecs-282752b2aa06b0544d9fc29283ec97677ebee0c2.tar.gz
specs-282752b2aa06b0544d9fc29283ec97677ebee0c2.tar.xz
specs-282752b2aa06b0544d9fc29283ec97677ebee0c2.zip
nix.spec: A purely functional package manager
Diffstat (limited to 'devtools')
-rw-r--r--devtools/nix.spec232
1 files changed, 232 insertions, 0 deletions
diff --git a/devtools/nix.spec b/devtools/nix.spec
new file mode 100644
index 0000000..f9fd94b
--- /dev/null
+++ b/devtools/nix.spec
@@ -0,0 +1,232 @@
+%global nixbld_user "nix-builder-"
+%global nixbld_group "nix-builders"
+
+Summary: A purely functional package manager
+Name: nix
+Version: 1.0
+Release: 1%{?dist}
+License: LGPLv2+
+%if 0%{?rhel}
+Group: Applications/System
+%endif
+URL: http://nixos.org/
+Source0: http://hydra.nixos.org/build/2609700/download/4/nix-1.0.tar.bz2
+Source1: nix-mode-init.el
+Patch0: nix-1.0-fedora_fixes.patch
+# yet to be submitted
+Patch1: nix-1.0-emacs_split.patch
+%if 0%{?el5}
+BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
+%endif
+BuildRequires: perl(DBD::SQLite)
+BuildRequires: perl(DBI)
+BuildRequires: perl(ExtUtils::ParseXS)
+Requires: /usr/bin/perl
+Requires: curl
+Requires: perl-DBD-SQLite
+Requires: bzip2
+BuildRequires: bzip2-devel
+BuildRequires: sqlite-devel
+
+# Hack to make that shitty RPM scanning hack shut up.
+Provides: perl(Nix::SSH)
+
+%description
+Nix is a purely functional package manager. It allows multiple
+versions of a package to be installed side-by-side, ensures that
+dependency specifications are complete, supports atomic upgrades and
+rollbacks, allows non-root users to install software, and has many
+other features. It is the basis of the NixOS Linux distribution, but
+it can be used equally well under other Unix systems.
+
+%package devel
+Summary: Development files for %{name}
+%if 0%{?rhel}
+Group: Development/Libraries
+%endif
+Requires: %{name}%{?_isa} = %{version}-%{release}
+
+%description devel
+The %{name}-devel package contains libraries and header files for
+developing applications that use %{name}.
+
+
+%package doc
+Summary: Documentation files for %{name}
+%if 0%{?rhel}
+Group: Documentation
+%endif
+BuildArch: noarch
+Requires: %{name} = %{version}-%{release}
+
+%description doc
+The %{name}-doc package contains documentation files for %{name}.
+
+
+%package -n emacs-%{name}
+Summary: Nix mode for Emacs
+%if 0%{?rhel}
+Group: Applications/Editors
+%endif
+BuildArch: noarch
+BuildRequires: emacs
+Requires: emacs(bin) >= %{_emacs_version}
+
+%description -n emacs-%{name}
+This package provides a major mode for editing Nix expressions.
+
+%package -n emacs-%{name}-el
+Summary: Elisp source files for emacs-%{name}
+%if 0%{?rhel}
+Group: Applications/Editors
+%endif
+BuildArch: noarch
+Requires: emacs-%{name} = %{version}-%{release}
+
+%description -n emacs-%{name}-el
+This package contains the elisp source file for the Nix major mode for
+GNU Emacs. You do not need to install this package to run Nix. Install
+the emacs-%{name} package to edit Nix expressions with GNU Emacs.
+
+
+%prep
+%setup -q
+# Temporary fixes until the next tarball is regenerated
+%patch0 -p1 -b .fedora_fixes
+%patch1 -p1 -b .emacs_fixes
+%{__sed} -i \
+ 's|$(INSTALL_PROGRAM) nix-profile.sh|$(INSTALL_DATA) nix-profile.sh|' \
+ scripts/Makefile.in
+# /Temporary Fixes
+
+# Install Perl modules to vendor_perl
+# configure.ac need to be changed to make this global; however, this will
+# also affect NixOS. Use discretion.
+%{__sed} -i 's|perl5/site_perl/$perlversion/$perlarchname|perl5/vendor_perl|' \
+ configure
+
+
+%build
+extraFlags=
+# - override docdir so large documentation files are owned by the
+# -doc subpackage
+# - set localstatedir by hand to the preferred nix value
+%configure --localstatedir=/nix/var \
+ --docdir=%{_defaultdocdir}/%{name}-doc-%{version} \
+ $extraFlags
+make %{?_smp_flags}
+%{_emacs_bytecompile} misc/emacs/nix-mode.el
+
+
+%install
+%if 0%{?el5}
+rm -rf $RPM_BUILD_ROOT
+%endif
+make DESTDIR=$RPM_BUILD_ROOT install
+
+find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
+
+# Fix symlink: we want to link to the versioned soname, not to the
+# unversioned one that'd be put in -devel
+pushd $RPM_BUILD_ROOT%{perl_vendorarch}/auto/Nix/Store
+ln -sf %{_libdir}/nix/libNixStore.so.0 Store.so
+popd
+
+# Specify build users group
+sed -i "s|#build-users-group =$|build-users-group = %{nixbld_group}|" \
+ $RPM_BUILD_ROOT%{_sysconfdir}/nix/nix.conf
+# ... and delete the example configuration
+rm $RPM_BUILD_ROOT%{_sysconfdir}/nix/nix.conf.example
+
+# make per-user directories
+for d in profiles gcroots;
+do
+ mkdir $RPM_BUILD_ROOT/nix/var/nix/$d/per-user
+ chmod 1777 $RPM_BUILD_ROOT/nix/var/nix/$d/per-user
+done
+
+# systemd not available on RHEL yet
+%if ! 0%{?rhel}
+# install systemd service descriptor
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/systemd/system
+cp -p misc/systemd/nix-worker.service \
+ $RPM_BUILD_ROOT%{_prefix}/lib/systemd/system/
+%endif
+
+# Copy the byte-compiled mode file by hand
+cp -p misc/emacs/nix-mode.elc $RPM_BUILD_ROOT%{_emacs_sitelispdir}/
+# and the startup file
+mkdir $RPM_BUILD_ROOT%{_emacs_sitestartdir}
+cp -p %{SOURCE1} $RPM_BUILD_ROOT%{_emacs_sitestartdir}/
+
+# we ship this file in the base package
+rm $RPM_BUILD_ROOT%{_defaultdocdir}/%{name}-doc-%{version}/README
+
+
+%check
+make check
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%pre
+getent group %{nixbld_group} >/dev/null || groupadd -r %{nixbld_group}
+for i in $(seq 10);
+do
+ getent passwd %{nixbld_user}$i >/dev/null || \
+ useradd -r -g %{nixbld_group} -G %{nixbld_group} -d /var/empty \
+ -s %{_sbindir}/nologin \
+ -c "Nix build user $i" %{nixbld_user}$i
+done
+
+%post
+chgrp %{nixbld_group} /nix/store
+chmod 1775 /nix/store
+%if ! 0%{?rhel}
+# Enable and start Nix worker
+systemctl enable nix-worker.service
+systemctl start nix-worker.service
+%endif
+
+%files
+%doc COPYING AUTHORS README
+%{_bindir}/nix-*
+%dir %{_libdir}/nix
+%{_libdir}/nix/*.so.*
+%{perl_vendorarch}/*
+%exclude %dir %{perl_vendorarch}/auto/
+%{_prefix}/libexec/*
+%if ! 0%{?rhel}
+%{_prefix}/lib/systemd/system/nix-worker.service
+%endif
+%{_datadir}/emacs/site-lisp/nix-mode.el
+%{_datadir}/nix
+%{_mandir}/man1/nix-*.1*
+%{_mandir}/man8/nix-*.8*
+%config(noreplace) %{_sysconfdir}/profile.d/nix.sh
+/nix
+%dir %{_sysconfdir}/nix
+%config(noreplace) %{_sysconfdir}/nix/nix.conf
+
+%files devel
+%{_includedir}/nix
+%{_libdir}/nix/*.so
+
+%files doc
+%docdir %{_defaultdocdir}/%{name}-doc-%{version}
+%{_defaultdocdir}/%{name}-doc-%{version}
+
+%files -n emacs-%{name}
+%doc COPYING
+%{_emacs_sitelispdir}/*.elc
+%{_emacs_sitestartdir}/*.el
+
+%files -n emacs-%{name}-el
+%{_emacs_sitelispdir}/*.el
+
+%changelog
+* Fri Jun 1 2012 Michel Salim <salimma@fedoraproject.org> - 1.0-1
+- Initial package
+