about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichel Alexandre Salim <michel@sylvestre.me>2012-05-27T10·04+0700
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-05-31T12·59-0400
commit892234630594ea87a1b9bc945077c82c419af6d3 (patch)
tree3ecac570402a4003cfa5a268f9ce7ed3c67a0f84
parent6a214f3e06fa1c5f0a4d40e555f14d87691af297 (diff)
Major spec update: - Fix license field - Split into subpackages - Update build dependencies - Configure users and groups for multi-user mode - Fix installation location of Perl modules
-rw-r--r--nix.spec.in195
1 files changed, 149 insertions, 46 deletions
diff --git a/nix.spec.in b/nix.spec.in
index 12f3f6deceda..cbbd65e917eb 100644
--- a/nix.spec.in
+++ b/nix.spec.in
@@ -1,32 +1,26 @@
-%global enable_setuid ""
-%global nix_user "nix"
-%global nix_group "nix"
-
-# If set, the Nix user and group will be created by the RPM
-# pre-install script.
-%global nix_user_uid ""
-%global nix_group_gid ""
+%global nixbld_user "nix-builder-"
+%global nixbld_group "nix-builders"
 
 Summary: The Nix software deployment system
 Name: nix
 Version: @version@
-Release: 1
-License: GPL
+Release: 2%{?dist}
+License: LGPLv2+
 %if 0%{?rhel}
 Group: Applications/System
 %endif
 URL: http://nixos.org/
-Source0: %{name}-@version@.tar.bz2
+Source0: %{name}-%{version}.tar.bz2
 %if 0%{?el5}
-BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot
+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: perl-devel
 Requires: bzip2
-Requires: bzip2-libs
-Requires: sqlite
 BuildRequires: bzip2-devel
 BuildRequires: sqlite-devel
 
@@ -34,7 +28,6 @@ BuildRequires: sqlite-devel
 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
@@ -42,55 +35,165 @@ 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
+# 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=
-if test -n "%{enable_setuid}"; then
-    extraFlags="$extraFlags --enable-setuid"
-    if test -n "%{nix_user}"; then
-        extraFlags="$extraFlags --with-nix-user=%{nix_user}"
-    fi
-    if test -n "%{nix_group}"; then
-        extraFlags="$extraFlags --with-nix-group=%{nix_group}"
-    fi
-fi
-%configure $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
-rm $RPM_BUILD_ROOT/etc/nix/nix.conf
+
+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
+
+# fix permission of nix profile
+# (until this is fixed in the relevant Makefile)
+chmod -x $RPM_BUILD_ROOT%{_sysconfdir}/profile.d/nix.sh
+
+# Copy the byte-compiled mode file by hand
+cp -p misc/emacs/nix-mode.elc $RPM_BUILD_ROOT%{_emacs_sitelispdir}/
+
+# 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
-if test -n "%{nix_group_gid}"; then
-    /usr/sbin/groupadd -g %{nix_group_gid} %{nix_group} || true
-fi
-if test -n "%{nix_user_uid}"; then
-    /usr/sbin/useradd -c "Nix" -u %{nix_user_uid} \
-        -s /sbin/nologin -r -d /var/empty %{nix_user} \
-        -g %{nix_group} || true
-fi
+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
 
 %files
-#%defattr(-,root,root)
-%{_prefix}/bin
-%{_prefix}/lib
-%{_prefix}/libexec
-%{_prefix}/include
-%{_prefix}/share
-/etc/profile.d/nix.sh
-/nix/var
-/nix/store
-%config
-/etc/nix
+%doc COPYING AUTHORS README
+%{_bindir}/nix-*
+%dir %{_libdir}/nix
+%{_libdir}/nix/*.so.*
+%{perl_vendorarch}/*
+%exclude %dir %{perl_vendorarch}/auto/
+%{_prefix}/libexec/*
+%{_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}
+%{_emacs_sitelispdir}/*.elc
+#{_emacs_sitestartdir}/*.el
+
+%files -n emacs-%{name}-el
+%{_emacs_sitelispdir}/*.el