···10<para>This section lists the release notes for each stable version of NixOS.</para>
11</partintro>
1213-<xi:include href="rl-1410.xml" />
14<xi:include href="rl-1404.xml" />
15<xi:include href="rl-1310.xml" />
16
···10<para>This section lists the release notes for each stable version of NixOS.</para>
11</partintro>
1213+<xi:include href="rl-1411.xml" />
14<xi:include href="rl-1404.xml" />
15<xi:include href="rl-1310.xml" />
16
···2 xmlns:xlink="http://www.w3.org/1999/xlink"
3 xmlns:xi="http://www.w3.org/2001/XInclude"
4 version="5.0"
5- xml:id="sec-release-14.10">
67-<title>Release 14.10 (“Caterpillar”, 2014/10/??)</title>
89<para>When upgrading from a previous release, please be aware of the
10following incompatible changes:
···1920</para>
2122-</chapter>
···2 xmlns:xlink="http://www.w3.org/1999/xlink"
3 xmlns:xi="http://www.w3.org/2001/XInclude"
4 version="5.0"
5+ xml:id="sec-release-14.11">
67+<title>Release 14.11 (“Caterpillar”, 2014/11/??)</title>
89<para>When upgrading from a previous release, please be aware of the
10following incompatible changes:
···1920</para>
2122+</chapter>
+1-1
nixos/modules/installer/tools/tools.nix
···1# This module generates nixos-install, nixos-rebuild,
2# nixos-generate-config, etc.
34-{ config, pkgs, modulesPath, lib, ... }:
56let
7
···1# This module generates nixos-install, nixos-rebuild,
2# nixos-generate-config, etc.
34+{ config, pkgs, modulesPath, ... }:
56let
7
+2-4
nixos/modules/misc/ids.nix
···156 mailpile = 146;
157 redmine = 147;
158 seeks = 148;
159-160- prosody = 148;
161162 # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
163···281 mailpile = 146;
282 redmine = 147;
283 seeks = 148;
284-285- prosody = 148;
286287 # When adding a gid, make sure it doesn't match an existing uid. And don't use gids above 399!
288
···156 mailpile = 146;
157 redmine = 147;
158 seeks = 148;
159+ prosody = 149;
0160161 # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
162···280 mailpile = 146;
281 redmine = 147;
282 seeks = 148;
283+ prosody = 149;
0284285 # When adding a gid, make sure it doesn't match an existing uid. And don't use gids above 399!
286
···169 hardware.firmware = mkOption {
170 type = types.listOf types.path;
171 default = [];
172- example = [ "/root/my-firmware" ];
173 description = ''
174 List of directories containing firmware files. Such files
175 will be loaded automatically if the kernel asks for them
···178 firmware file with the same name, the first path in the list
179 takes precedence. Note that you must rebuild your system if
180 you add files to any of these directories. For quick testing,
181- put firmware files in /root/test-firmware and add that
182- directory to the list.
183- Note that you can also add firmware packages to this
184- list as these are directories in the nix store.
185 '';
186 apply = list: pkgs.buildEnv {
187 name = "firmware";
···244 if [ ! -e /var/lib/udev/prev-systemd -o "$(readlink /var/lib/udev/prev-systemd)" != ${config.systemd.package} ]; then
245 echo "regenerating udev hardware database..."
246 ${config.systemd.package}/bin/udevadm hwdb --update && ln -sfn ${config.systemd.package} /var/lib/udev/prev-systemd
00000247 fi
248 '';
249
···169 hardware.firmware = mkOption {
170 type = types.listOf types.path;
171 default = [];
0172 description = ''
173 List of directories containing firmware files. Such files
174 will be loaded automatically if the kernel asks for them
···177 firmware file with the same name, the first path in the list
178 takes precedence. Note that you must rebuild your system if
179 you add files to any of these directories. For quick testing,
180+ put firmware files in <filename>/root/test-firmware</filename>
181+ and add that directory to the list. Note that you can also
182+ add firmware packages to this list as these are directories in
183+ the nix store.
184 '';
185 apply = list: pkgs.buildEnv {
186 name = "firmware";
···243 if [ ! -e /var/lib/udev/prev-systemd -o "$(readlink /var/lib/udev/prev-systemd)" != ${config.systemd.package} ]; then
244 echo "regenerating udev hardware database..."
245 ${config.systemd.package}/bin/udevadm hwdb --update && ln -sfn ${config.systemd.package} /var/lib/udev/prev-systemd
246+ fi
247+248+ # Allow the kernel to find our firmware.
249+ if [ -e /sys/module/firmware_class/parameters/path ]; then
250+ echo -n "${config.hardware.firmware}" > /sys/module/firmware_class/parameters/path
251 fi
252 '';
253
···187 # Use ||, not &&, to avoid exiting from the if with $? = 1, which
188 # would make configure fail if this is the last instruction.
189 $ac_cs_success || as_fn_exit 1
000000000000000000000000000000000
···187 # Use ||, not &&, to avoid exiting from the if with $? = 1, which
188 # would make configure fail if this is the last instruction.
189 $ac_cs_success || as_fn_exit 1
190+191+diff --git a/src/Makefile b/src/Makefile
192+index 1c4d104..fff2015 100644
193+--- a/src/Makefile
194++++ b/src/Makefile
195+@@ -1298,7 +1298,7 @@ MACVIMGUI_SRC = gui.c gui_beval.c MacVim/gui_macvim.m MacVim/MMBackend.m \
196+ MacVim/MacVim.m
197+ MACVIMGUI_OBJ = objects/gui.o objects/gui_beval.o objects/pty.o \
198+ objects/gui_macvim.o objects/MMBackend.o objects/MacVim.o
199+-MACVIMGUI_DEFS = -DFEAT_GUI_MACVIM -Wall -Wno-unknown-pragmas -pipe
200++MACVIMGUI_DEFS = -DMACOS_X_UNIX -DFEAT_GUI_MACVIM -Wall -Wno-unknown-pragmas -pipe
201+ MACVIMGUI_IPATH =
202+ MACVIMGUI_LIBS_DIR =
203+ MACVIMGUI_LIBS1 = -framework Cocoa -framework Carbon
204+205+diff --git a/src/if_python.c b/src/if_python.c
206+index b356bf7..b7bfa78 100644
207+--- a/src/if_python.c
208++++ b/src/if_python.c
209+@@ -55,11 +55,7 @@
210+211+ #define PY_SSIZE_T_CLEAN
212+213+-#ifdef FEAT_GUI_MACVIM
214+-# include <Python/Python.h>
215+-#else
216+-# include <Python.h>
217+-#endif
218++#include <Python.h>
219+220+ #if !defined(PY_VERSION_HEX) || PY_VERSION_HEX < 0x02050000
221+ # undef PY_SSIZE_T_CLEAN
222+ MACVIMGUI_LIBS1 = -framework Cocoa -framework Carbon
+9-11
pkgs/applications/editors/yi/yi-custom.nix
···9# ‘reload’ and similar functions should all work as long as the user
10# doesn't need new libraries at which point they should add them to
11# extraPackages and rebuild from the expression.
12-{ cabal, yi, extraPackages, makeWrapper }:
13-00014cabal.mkDerivation (self: rec {
15 pname = "yi-custom";
16 version = "0.0.0.1";
17 src = ./yi-custom-cabal;
18 isLibrary = true;
19- buildDepends = extraPackages ++ [ yi ];
20 buildTools = [ makeWrapper ];
21 noHaddock = true;
22 doCheck = false;
2324- # Allows Yi to find the libraries it needs at runtime. We drop ‘:’
25- # from this GHC_PACKAGE_PATH because we're wrapping over a different
26- # wrapper that used --prefix: if we didn't, we end up with a
27- # double-colon, confusing GHC.
28 postInstall = ''
29- makeWrapper ${yi}/bin/yi $out/bin/yi --set GHC_PACKAGE_PATH ''${GHC_PACKAGE_PATH%?}
30 '';
31-32 meta = {
33 homepage = "http://haskell.org/haskellwiki/Yi";
34 description = "Wrapper over user-specified Haskell libraries for use in Yi config";
35 license = self.stdenv.lib.licenses.publicDomain;
36 platforms = self.ghc.meta.platforms;
37 maintainers = with self.stdenv.lib.maintainers; [ fuuzetsu ];
38- # The wrapper does not yet work properly if we actually try to use it.
39- broken = true;
40 };
4142})
···9# ‘reload’ and similar functions should all work as long as the user
10# doesn't need new libraries at which point they should add them to
11# extraPackages and rebuild from the expression.
12+{ cabal, yi, extraPackages, makeWrapper, ghcWithPackages }:
13+let
14+ w = ghcWithPackages (self: [ yi ] ++ extraPackages self);
15+ wrappedGhc = w.override { ignoreCollisions = true; };
16+in
17cabal.mkDerivation (self: rec {
18 pname = "yi-custom";
19 version = "0.0.0.1";
20 src = ./yi-custom-cabal;
21 isLibrary = true;
22+ buildDepends = [ yi ];
23 buildTools = [ makeWrapper ];
24 noHaddock = true;
25 doCheck = false;
2627+ # put custom GHC env in front which stops crap from being picked up
28+ # from user database
0029 postInstall = ''
30+ makeWrapper ${yi}/bin/yi $out/bin/yi --prefix PATH : ${wrappedGhc}/bin
31 '';
032 meta = {
33 homepage = "http://haskell.org/haskellwiki/Yi";
34 description = "Wrapper over user-specified Haskell libraries for use in Yi config";
35 license = self.stdenv.lib.licenses.publicDomain;
36 platforms = self.ghc.meta.platforms;
37 maintainers = with self.stdenv.lib.maintainers; [ fuuzetsu ];
0038 };
3940})
···1diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs
2-index 7a3e912..ced75fa 100644
3--- a/src/librustc/back/link.rs
4+++ b/src/librustc/back/link.rs
5-@@ -766,24 +766,15 @@ pub fn output_lib_filename(id: &CrateId) -> String {
67 pub fn get_cc_prog(sess: &Session) -> String {
8 match sess.opts.cg.linker {
···15- // In the future, FreeBSD will use clang as default compiler.
16- // It would be flexible to use cc (system's default C compiler)
17- // instead of hard-coded gcc.
18-- // For win32, there is no cc command, so we add a condition to make it use gcc.
19- match sess.targ_cfg.os {
20-- abi::OsWin32 => "gcc",
21- _ => "cc",
22- }.to_string()
23 }
2425- pub fn get_ar_prog(sess: &Session) -> String {
26- match sess.opts.cg.ar {
27- Some(ref ar) => (*ar).clone(),
28-- None => "ar".to_string()
29-+ None => "@arPath@".to_string()
30- }
31- }
32-00000
···1diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs
2+index 1cc60fc..2e94b99 100644
3--- a/src/librustc/back/link.rs
4+++ b/src/librustc/back/link.rs
5+@@ -383,18 +383,9 @@ pub fn mangle_internal_name_by_path_and_seq(path: PathElems, flav: &str) -> Stri
67 pub fn get_cc_prog(sess: &Session) -> String {
8 match sess.opts.cg.linker {
···15- // In the future, FreeBSD will use clang as default compiler.
16- // It would be flexible to use cc (system's default C compiler)
17- // instead of hard-coded gcc.
18+- // For Windows, there is no cc command, so we add a condition to make it use gcc.
19- match sess.targ_cfg.os {
20+- abi::OsWindows => "gcc",
21- _ => "cc",
22- }.to_string()
23 }
2425+ pub fn remove(sess: &Session, path: &Path) {
26+diff --git a/src/librustc_back/archive.rs b/src/librustc_back/archive.rs
27+index 060dda5..fecf76b 100644
28+--- a/src/librustc_back/archive.rs
29++++ b/src/librustc_back/archive.rs
30+@@ -53,7 +53,7 @@ fn run_ar(handler: &ErrorHandler, maybe_ar_prog: &Option<String>,
31+ paths: &[&Path]) -> ProcessOutput {
32+ let ar = match *maybe_ar_prog {
33+ Some(ref ar) => ar.as_slice(),
34+- None => "ar"
35++ None => "@arPath@"
36+ };
37+ let mut cmd = Command::new(ar);
···2index e78f231..6b6773b 100755
3--- a/src/etc/local_stage0.sh
4+++ b/src/etc/local_stage0.sh
5+@@ -53,11 +53,6 @@
6 fi
7+8 cp ${PREFIX}/bin/rustc${BIN_SUF} ${TARG_DIR}/stage0/bin/
9-cp ${PREFIX}/${LIB_DIR}/${RUSTLIBDIR}/${TARG_DIR}/${LIB_DIR}/* ${TARG_DIR}/stage0/${LIB_DIR}/
10-cp ${PREFIX}/${LIB_DIR}/${LIB_PREFIX}extra*${LIB_SUF} ${TARG_DIR}/stage0/${LIB_DIR}/
11-cp ${PREFIX}/${LIB_DIR}/${LIB_PREFIX}rust*${LIB_SUF} ${TARG_DIR}/stage0/${LIB_DIR}/
12-cp ${PREFIX}/${LIB_DIR}/${LIB_PREFIX}std*${LIB_SUF} ${TARG_DIR}/stage0/${LIB_DIR}/
13-cp ${PREFIX}/${LIB_DIR}/${LIB_PREFIX}syntax*${LIB_SUF} ${TARG_DIR}/stage0/${LIB_DIR}/
14+15+ # do not fail if one of the above fails, as all we need is a working rustc!
16+ exit 0
···1# This file was auto-generated by cabal2nix. Please do NOT edit manually!
23-{ cabal, asn1Types, mtl, text, time }:
45cabal.mkDerivation (self: {
6 pname = "asn1-encoding";
7- version = "0.8.1.3";
8- sha256 = "000rajx9gdxfyx521yg2mvp1z8h61sr96w1lzwawiw7n5ng6v8ni";
9- isLibrary = true;
10- isExecutable = true;
11- buildDepends = [ asn1Types mtl text time ];
0012 meta = {
13 homepage = "http://github.com/vincenthz/hs-asn1";
14 description = "ASN1 data reader and writer in RAW, BER and DER forms";
···1# This file was auto-generated by cabal2nix. Please do NOT edit manually!
23+{ cabal, asn1Types, hourglass, mtl, tasty, tastyQuickcheck, text }:
45cabal.mkDerivation (self: {
6 pname = "asn1-encoding";
7+ version = "0.9.0";
8+ sha256 = "02x3lzyl4gavl3lc2lrg8rknyvs6r2hf8kmm7xrmma5m857iks8p";
9+ buildDepends = [ asn1Types hourglass mtl ];
10+ testDepends = [
11+ asn1Types hourglass mtl tasty tastyQuickcheck text
12+ ];
13+ doCheck = false;
14 meta = {
15 homepage = "http://github.com/vincenthz/hs-asn1";
16 description = "ASN1 data reader and writer in RAW, BER and DER forms";
···1# This file was auto-generated by cabal2nix. Please do NOT edit manually!
23-{ cabal, lochTh, placeholders }:
45cabal.mkDerivation (self: {
6 pname = "focus";
7- version = "0.1.2";
8- sha256 = "0j157nv668621i94iqg923bfg7594bpfn0q9scb62cik2yikc1p0";
9- buildDepends = [ lochTh placeholders ];
10 meta = {
11 homepage = "https://github.com/nikita-volkov/focus";
12 description = "A general abstraction for manipulating elements of container data structures";
···1# This file was auto-generated by cabal2nix. Please do NOT edit manually!
23+{ cabal }:
45cabal.mkDerivation (self: {
6 pname = "focus";
7+ version = "0.1.3";
8+ sha256 = "11l6rlr22m0z41c9fynpisj0cnx70zzcxhsakz9b09ap8wj0raqy";
09 meta = {
10 homepage = "https://github.com/nikita-volkov/focus";
11 description = "A general abstraction for manipulating elements of container data structures";
···1{ stdenv, fetchurl }:
23stdenv.mkDerivation rec {
4- name = "mtdev-1.1.2";
56 src = fetchurl {
7 url = "http://bitmath.org/code/mtdev/${name}.tar.bz2";
8- sha256 = "0c2sfxxymf20ylvblgmdmybqs0cydmphg9fq6fnp6flbl0fd33b9";
9 };
1011- meta = {
12 homepage = http://bitmath.org/code/mtdev/;
13-14 description = "Multitouch Protocol Translation Library";
15-16 longDescription = ''
17 The mtdev is a stand-alone library which transforms all variants of
18 kernel MT events to the slotted type B protocol. The events put into
···20 tracking, type A with contact tracking, or type B with contact tracking.
21 See the kernel documentation for further details.
22 '';
23-24- license = stdenv.lib.licenses.mit;
025 };
26}
···1{ stdenv, fetchurl }:
23stdenv.mkDerivation rec {
4+ name = "mtdev-1.1.5";
56 src = fetchurl {
7 url = "http://bitmath.org/code/mtdev/${name}.tar.bz2";
8+ sha256 = "0zxs7shzgbalkvlaiibi25bd902rbmkv9n1lww6q8j3ri9qdaxv6";
9 };
1011+ meta = with stdenv.lib; {
12 homepage = http://bitmath.org/code/mtdev/;
013 description = "Multitouch Protocol Translation Library";
014 longDescription = ''
15 The mtdev is a stand-alone library which transforms all variants of
16 kernel MT events to the slotted type B protocol. The events put into
···18 tracking, type A with contact tracking, or type B with contact tracking.
19 See the kernel documentation for further details.
20 '';
21+ license = licenses.mit;
22+ platforms = platforms.unix;
23+ maintainers = with maintainers; [ wkennington ];
24 };
25}
+1-1
pkgs/development/libraries/pangomm/default.nix
···18 meta = with stdenv.lib; {
19 description = "C++ interface to the Pango text rendering library";
20 homepage = http://www.pango.org/;
21- # TODO license = with licenses; [ lgpl2 lgpl21 ];
22 maintainers = with maintainers; [ lovek323 raskin ];
23 platforms = platforms.unix;
24
···18 meta = with stdenv.lib; {
19 description = "C++ interface to the Pango text rendering library";
20 homepage = http://www.pango.org/;
21+ license = with licenses; [ lgpl2 lgpl21 ];
22 maintainers = with maintainers; [ lovek323 raskin ];
23 platforms = platforms.unix;
24
···1+From Ingo Hadan <ingo.hadan@sdm.de> Fri, 02 Apr 2010 21:08:50 +0200
2+From: Julien Moutinho <julm+tsocks@autogeree.net>
3+Date: Fri, 26 Apr 2013 01:57:26 +0200
4+Subject: tsocks fails if socksified application uses poll(2) (e.g. subversion-1.5)
5+6+---
7+diff --git a/tsocks.c b/tsocks.c
8+index 9cfdfff..470babd 100644
9+--- a/tsocks.c
10++++ b/tsocks.c
11+@@ -657,10 +657,11 @@ int poll(POLL_SIGNATURE) {
12+ * be ready for writing), otherwise we'll just let the select loop
13+ * come around again (since we can't flag it for read, we don't know
14+ * if there is any data to be read and can't be bothered checking) */
15+- if (conn->selectevents & WRITE) {
16+- setevents |= POLLOUT;
17++ if (conn->selectevents & POLLOUT) {
18++ ufds[i].revents |= POLLOUT;
19+ nevents++;
20+ }
21++ ufds[i].events = conn->selectevents;
22+ }
23+ }
24+ } while (nevents == 0);
25+26+
···20 --set GHC_PACKAGE_PATH "\$GHC_PACKAGE_PATH:" # always end with : to include base packages
21 '';
2223- meta = {
24- description = ihaskell.meta.description;
25- };
26-}
···20 --set GHC_PACKAGE_PATH "\$GHC_PACKAGE_PATH:" # always end with : to include base packages
21 '';
2223+ inherit (ihaskell) meta;
24+}
00
···15 homepage = http://lttng.org/;
16 # liblttvtraceread (ltt/ directory) is distributed under the GNU LGPL v2.1.
17 # The rest of the LTTV package is distributed under the GNU GPL v2.
18- # TODO license = with licenses; [ gpl2 lgpl21 ];
19 platforms = platforms.linux;
20 maintainers = [ maintainers.bjornfor ];
21 };
···15 homepage = http://lttng.org/;
16 # liblttvtraceread (ltt/ directory) is distributed under the GNU LGPL v2.1.
17 # The rest of the LTTV package is distributed under the GNU GPL v2.
18+ license = with licenses; [ gpl2 lgpl21 ];
19 platforms = platforms.linux;
20 maintainers = [ maintainers.bjornfor ];
21 };
···1011 # !!! Should we also do shared libuv?
12 deps = {
13- inherit openssl zlib http-parser;
14 cares = c-ares;
1516 # disabled system v8 because v8 3.14 no longer receives security fixes
17 # we fall back to nodejs' internal v8 copy which receives backports for now
18 # inherit v8
0019 };
2021 sharedConfigureFlags = name: [
···1011 # !!! Should we also do shared libuv?
12 deps = {
13+ inherit openssl zlib;
14 cares = c-ares;
1516 # disabled system v8 because v8 3.14 no longer receives security fixes
17 # we fall back to nodejs' internal v8 copy which receives backports for now
18 # inherit v8
19+ } // stdenv.lib.optionalAttrs (!stdenv.isDarwin) {
20+ inherit http-parser;
21 };
2223 sharedConfigureFlags = name: [
···1-From f1b66ff83a0babbe99fef81b3a960d7a4ce8dbc6 Mon Sep 17 00:00:00 2001
2-From: vadimk <vadim4j@gmail.com>
3-Date: Sat, 30 Aug 2014 15:06:00 +0300
4-Subject: ip link: Remove unnecessary device checking
5-6-The real checking is performed later in iplink_modify(..) func which
7-checks device existence if NLM_F_CREATE flag is set.
8-9-Also it fixes the case when impossible to add veth link which was
10-caused by 9a02651a87 (ip: check for missing dev arg when doing VF rate)
11-because these devices are not exist yet.
12-13-Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
14-Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
15-Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
16-17-diff --git a/ip/iplink.c b/ip/iplink.c
18-index 1a907d9..ea06871 100644
19---- a/ip/iplink.c
20-+++ b/ip/iplink.c
21-@@ -593,8 +593,6 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req,
22- duparg2("dev", *argv);
23- *dev = *argv;
24- dev_index = ll_name_to_index(*dev);
25-- if (dev_index == 0)
26-- invarg("Unknown device", *argv);
27- }
28- argc--; argv++;
29- }
30---
31-cgit v0.10.1
32-
···00000000000000000000000000000000
+8-2
pkgs/os-specific/linux/kernel/common-config.nix
···332 TRANSPARENT_HUGEPAGE_ALWAYS? n
333 TRANSPARENT_HUGEPAGE_MADVISE? y
334335- # zram support (e.g for in-memory compressed swap)
336 ${optionalString (versionAtLeast version "3.4") ''
337 ZSMALLOC y
338 ''}
339 ZRAM m
340-341 ${optionalString (versionAtLeast version "3.17") "NFC? n"}
000000342343 ${kernelPlatform.kernelExtraConfig or ""}
344 ${extraConfig}
···332 TRANSPARENT_HUGEPAGE_ALWAYS? n
333 TRANSPARENT_HUGEPAGE_MADVISE? y
334335+ # zram support (e.g for in-memory compressed swap).
336 ${optionalString (versionAtLeast version "3.4") ''
337 ZSMALLOC y
338 ''}
339 ZRAM m
340+341 ${optionalString (versionAtLeast version "3.17") "NFC? n"}
342+343+ # Enable firmware loading via udev. Only needed for non-declarative
344+ # firmware in /root/test-firmware.
345+ ${optionalString (versionAtLeast version "3.17") ''
346+ FW_LOADER_USER_HELPER_FALLBACK y
347+ ''}
348349 ${kernelPlatform.kernelExtraConfig or ""}
350 ${extraConfig}
···18 CC = stdenv.cross.config + "-gcc";
19 };
2000021 meta = {
22 homepage = http://sourceforge.net/projects/procps-ng/;
23 description = "Utilities that give information about processes using the /proc filesystem";
···18 CC = stdenv.cross.config + "-gcc";
19 };
2021+ # Too red
22+ configureFlags = [ "--disable-modern-top" ];
23+24 meta = {
25 homepage = http://sourceforge.net/projects/procps-ng/;
26 description = "Utilities that give information about processes using the /proc filesystem";
···1-diff --git a/contrib/c/makekey.c b/contrib/c/makekey.c
2-new file mode 100644
3-index 0000000..c7184e5
4---- /dev/null
5-+++ b/contrib/c/makekey.c
6-@@ -0,0 +1,46 @@
7-+/* vim: set expandtab ts=4 sw=4: */
8-+/*
9-+ * You may redistribute this program and/or modify it under the terms of
10-+ * the GNU General Public License as published by the Free Software Foundation,
11-+ * either version 3 of the License, or (at your option) any later version.
12-+ *
13-+ * This program is distributed in the hope that it will be useful,
14-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16-+ * GNU General Public License for more details.
17-+ *
18-+ * You should have received a copy of the GNU General Public License
19-+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
20-+ */
21-+#include "crypto/random/Random.h"
22-+#include "memory/MallocAllocator.h"
23-+#include "crypto/AddressCalc.h"
24-+#include "util/AddrTools.h"
25-+#include "util/Hex.h"
26-+
27-+#include "crypto_scalarmult_curve25519.h"
28-+
29-+#include <stdio.h>
30-+
31-+int main(int argc, char** argv)
32-+{
33-+ struct Allocator* alloc = MallocAllocator_new(1<<22);
34-+ struct Random* rand = Random_new(alloc, NULL, NULL);
35-+
36-+ uint8_t privateKey[32];
37-+ uint8_t publicKey[32];
38-+ uint8_t ip[16];
39-+ uint8_t hexPrivateKey[65];
40-+
41-+ for (;;) {
42-+ Random_bytes(rand, privateKey, 32);
43-+ crypto_scalarmult_curve25519_base(publicKey, privateKey);
44-+ if (AddressCalc_addressForPublicKey(ip, publicKey)) {
45-+ Hex_encode(hexPrivateKey, 65, privateKey, 32);
46-+ printf(hexPrivateKey);
47-+ return 0;
48-+ }
49-+ }
50-+ return 0;
51-+}
52-+
53-diff --git a/node_build/make.js b/node_build/make.js
54-index 5e51645..11465e3 100644
55---- a/node_build/make.js
56-+++ b/node_build/make.js
57-@@ -339,6 +339,7 @@ Builder.configure({
58- builder.buildExecutable('contrib/c/privatetopublic.c');
59- builder.buildExecutable('contrib/c/sybilsim.c');
60- builder.buildExecutable('contrib/c/makekeys.c');
61-+ builder.buildExecutable('contrib/c/makekey.c');
62-63- builder.buildExecutable('crypto/random/randombytes.c');
64-