diff options
| author | Michel Alexandre Salim <salimma@fedoraproject.org> | 2012-06-01 10:50:26 +0700 |
|---|---|---|
| committer | Michel Alexandre Salim <salimma@fedoraproject.org> | 2012-06-01 10:50:26 +0700 |
| commit | 282752b2aa06b0544d9fc29283ec97677ebee0c2 (patch) | |
| tree | 5ee7a65c7d5e7dbc05fff0de0cce080a16964bad /devtools | |
| parent | 8e85eafb5da3f48660e8f638fff79ca8a4e0092b (diff) | |
| download | specs-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.spec | 232 |
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 + |
