nixpkgs: clean up, adopt urweb package
Signed-off-by: Austin Seipp <aseipp@pobox.com>
This commit is contained in:
parent
bd596f41f0
commit
3cff7030c0
@ -1,77 +1,41 @@
|
|||||||
{ stdenv, fetchurl, file, openssl, mlton, mysql, postgresql, sqlite }:
|
{ stdenv, fetchurl, file, openssl, mlton
|
||||||
|
, mysql, postgresql, sqlite
|
||||||
|
}:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "urweb";
|
name = "urweb-${version}";
|
||||||
version = "20150819";
|
version = "20150819";
|
||||||
name = "${pname}-${version}";
|
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "http://www.impredicative.com/ur/${name}.tgz";
|
url = "http://www.impredicative.com/ur/${name}.tgz";
|
||||||
sha256 = "0gpdlq3aazx121k3ia94qfa4dyv04q7478x2p6hvcjamn18vk56n";
|
sha256 = "0gpdlq3aazx121k3ia94qfa4dyv04q7478x2p6hvcjamn18vk56n";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [ stdenv.cc file openssl mlton mysql postgresql sqlite ];
|
buildInputs = [ openssl mlton mysql postgresql sqlite ];
|
||||||
|
|
||||||
prePatch = ''
|
prePatch = ''
|
||||||
sed -e 's@/usr/bin/file@${file}/bin/file@g' -i configure
|
sed -e 's@/usr/bin/file@${file}/bin/file@g' -i configure
|
||||||
'';
|
'';
|
||||||
|
|
||||||
preConfigure =
|
preConfigure = ''
|
||||||
''
|
export PGHEADER="${postgresql}/include/libpq-fe.h";
|
||||||
export CC="${stdenv.cc}/bin/gcc";
|
export MSHEADER="${mysql.lib}/include/mysql/mysql.h";
|
||||||
export CCARGS="-I$out/include \
|
export SQHEADER="${sqlite}/include/sqlite3.h";
|
||||||
-L${mysql.lib}/lib/mysql -L${postgresql}/lib -L${sqlite}/lib";
|
|
||||||
|
|
||||||
export PGHEADER="${postgresql}/include/libpq-fe.h";
|
export CCARGS="-I$out/include \
|
||||||
export MSHEADER="${mysql.lib}/include/mysql/mysql.h";
|
-L${mysql.lib}/lib/mysql \
|
||||||
export SQHEADER="${sqlite}/include/sqlite3.h";
|
-L${postgresql}/lib \
|
||||||
'';
|
-L${sqlite}/lib";
|
||||||
|
'';
|
||||||
configureFlags = "--with-openssl=${openssl}";
|
|
||||||
|
|
||||||
|
# Be sure to keep the statically linked libraries
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "Construct dynamic web applications backed by SQL databases";
|
description = "Advanced purely-functional web programming language";
|
||||||
longDescription = ''
|
homepage = "http://www.impredicative.com/ur/";
|
||||||
Ur is a programming language in the tradition of ML and Haskell, but
|
license = stdenv.lib.licenses.bsd3;
|
||||||
featuring a significantly richer type system. Ur is functional, pure,
|
platforms = stdenv.lib.platforms.linux;
|
||||||
statically-typed, and strict. Ur supports a powerful kind of
|
maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
|
||||||
metaprogramming based on row types.
|
|
||||||
|
|
||||||
Ur/Web is Ur plus a special standard library and associated rules for
|
|
||||||
parsing and optimization. Ur/Web supports construction of dynamic web
|
|
||||||
applications backed by SQL databases. The signature of the standard
|
|
||||||
library is such that well-typed Ur/Web programs "don't go wrong" in a
|
|
||||||
very broad sense. Not only do they not crash during particular page
|
|
||||||
generations, but they also may not:
|
|
||||||
|
|
||||||
* Suffer from any kinds of code-injection attacks
|
|
||||||
* Return invalid HTML
|
|
||||||
* Contain dead intra-application links
|
|
||||||
* Have mismatches between HTML forms and the fields expected by their handlers
|
|
||||||
* Include client-side code that makes incorrect assumptions about the "AJAX"-style services that the remote web server provides
|
|
||||||
* Attempt invalid SQL queries
|
|
||||||
* Use improper marshaling or unmarshaling in communication with SQL databases or between browsers and web servers
|
|
||||||
|
|
||||||
This type safety is just the foundation of the Ur/Web methodology. It is
|
|
||||||
also possible to use metaprogramming to build significant application pieces
|
|
||||||
by analysis of type structure. For instance, the demo includes an ML-style
|
|
||||||
functor for building an admin interface for an arbitrary SQL table. The
|
|
||||||
type system guarantees that the admin interface sub-application that comes
|
|
||||||
out will always be free of the above-listed bugs, no matter which well-typed
|
|
||||||
table description is given as input.
|
|
||||||
|
|
||||||
The Ur/Web compiler also produces very efficient object code that does not use
|
|
||||||
garbage collection. These compiled programs will often be even more efficient
|
|
||||||
than what most programmers would bother to write in C. For example, the
|
|
||||||
standalone web server generated for the demo uses less RAM than the bash shell.
|
|
||||||
The compiler also generates JavaScript versions of client-side code, with no need
|
|
||||||
to write those parts of applications in a different language.
|
|
||||||
'';
|
|
||||||
|
|
||||||
homepage = http://www.impredicative.com/ur/;
|
|
||||||
license = stdenv.lib.licenses.bsd3;
|
|
||||||
platforms = [ "i686-linux" "x86_64-linux" ];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user