summaryrefslogtreecommitdiffstats
path: root/pkgs/applications
diff options
context:
space:
mode:
authorRam Kromberg <ramkromberg@mail.com>2016-07-06 09:49:34 +0300
committerRobert Helgesson <robert@rycee.net>2016-07-06 12:42:58 +0200
commit28159315b7f2891e90157129d82a8b6fdca659bc (patch)
tree04beebb5c4c7e9bc9c6ae08ee3d0fb9d72670230 /pkgs/applications
parent3d5a41fc75cfcf8d30f7a7d2080082ac16fdefb9 (diff)
jpegrescan: init at 2016-06-01
Diffstat (limited to 'pkgs/applications')
-rw-r--r--pkgs/applications/graphics/jpegrescan/default.nix42
1 files changed, 42 insertions, 0 deletions
diff --git a/pkgs/applications/graphics/jpegrescan/default.nix b/pkgs/applications/graphics/jpegrescan/default.nix
new file mode 100644
index 000000000000..1c65c7da3a28
--- /dev/null
+++ b/pkgs/applications/graphics/jpegrescan/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, makeWrapper, libjpeg_turbo, perl, perlPackages }:
+
+stdenv.mkDerivation rec {
+ pname = "jpegrescan";
+ date = "2016-06-01";
+ name = "${pname}-${date}";
+
+ src = fetchFromGitHub {
+ owner = "kud";
+ repo = pname;
+ rev = "e5e39cd972b48ccfb2cba4da6855c511385c05f9";
+ sha256 = "0jbx1vzkzif6yjx1fnsm7fjsmq166sh7mn22lf01ll7s245nmpdp";
+ };
+
+ patchPhase = ''
+ patchShebangs jpegrescan
+ '';
+
+ installPhase = ''
+ mkdir -p $out/share/jpegrescan
+ mv README.md $out/share/jpegrescan/
+ mkdir $out/bin
+ mv jpegrescan $out/bin
+ chmod +x $out/bin/jpegrescan
+
+ wrapProgram $out/bin/jpegrescan --prefix PERL5LIB : $PERL5LIB
+ '';
+
+ propagatedBuildInputs = [ perlPackages.FileSlurp ];
+
+ buildInputs = [
+ perl libjpeg_turbo makeWrapper
+ ];
+
+ meta = with stdenv.lib; {
+ description = "losslessly shrink any JPEG file";
+ homepage = https://github.com/kud/jpegrescan;
+ license = licenses.publicDomain;
+ maintainers = [ maintainers.ramkromberg ];
+ platforms = platforms.all;
+ };
+}
lass="cm"> * original #!-checking implemented by tytso. * * em86 changes Copyright (C) 1997 Jim Paradis */ #include <linux/module.h> #include <linux/string.h> #include <linux/stat.h> #include <linux/binfmts.h> #include <linux/elf.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/file.h> #include <linux/errno.h> #define EM86_INTERP "/usr/bin/em86" #define EM86_I_NAME "em86" static int load_em86(struct linux_binprm *bprm,struct pt_regs *regs) { char *interp, *i_name, *i_arg; struct file * file; int retval; struct elfhdr elf_ex; /* Make sure this is a Linux/Intel ELF executable... */ elf_ex = *((struct elfhdr *)bprm->buf); if (memcmp(elf_ex.e_ident, ELFMAG, SELFMAG) != 0) return -ENOEXEC; /* First of all, some simple consistency checks */ if ((elf_ex.e_type != ET_EXEC && elf_ex.e_type != ET_DYN) || (!((elf_ex.e_machine == EM_386) || (elf_ex.e_machine == EM_486))) || (!bprm->file->f_op || !bprm->file->f_op->mmap)) { return -ENOEXEC; } bprm->recursion_depth++; /* Well, the bang-shell is implicit... */ allow_write_access(bprm->file); fput(bprm->file); bprm->file = NULL; /* Unlike in the script case, we don't have to do any hairy * parsing to find our interpreter... it's hardcoded! */ interp = EM86_INTERP; i_name = EM86_I_NAME; i_arg = NULL; /* We reserve the right to add an arg later */ /* * Splice in (1) the interpreter's name for argv[0] * (2) (optional) argument to interpreter * (3) filename of emulated file (replace argv[0]) * * This is done in reverse order, because of how the * user environment and arguments are stored. */ remove_arg_zero(bprm); retval = copy_strings_kernel(1, &bprm->filename, bprm); if (retval < 0) return retval; bprm->argc++; if (i_arg) { retval = copy_strings_kernel(1, &i_arg, bprm); if (retval < 0) return retval; bprm->argc++; } retval = copy_strings_kernel(1, &i_name, bprm); if (retval < 0) return retval; bprm->argc++; /* * OK, now restart the process with the interpreter's inode. * Note that we use open_exec() as the name is now in kernel * space, and we don't need to copy it. */ file = open_exec(interp); if (IS_ERR(file)) return PTR_ERR(file); bprm->file = file; retval = prepare_binprm(bprm); if (retval < 0) return retval; return search_binary_handler(bprm, regs); } static struct linux_binfmt em86_format = { .module = THIS_MODULE, .load_binary = load_em86, }; static int __init init_em86_binfmt(void) { return register_binfmt(&em86_format); } static void __exit exit_em86_binfmt(void) { unregister_binfmt(&em86_format); } core_initcall(init_em86_binfmt); module_exit(exit_em86_binfmt); MODULE_LICENSE("GPL");