Merge pull request #181 from its-pointless/master
authorFredrik Fornwall <fredrik@fornwall.net>
Wed, 13 Apr 2016 23:22:10 +0000 (01:22 +0200)
committerFredrik Fornwall <fredrik@fornwall.net>
Wed, 13 Apr 2016 23:22:10 +0000 (01:22 +0200)
getmail: Add package

83 files changed:
Dockerfile
build-package.sh
disabled-packages/libcrypt/crypt3.c [deleted file]
disabled-packages/mosh/BROKEN.txt [deleted file]
disabled-packages/mosh/build.sh [deleted file]
disabled-packages/racket/build.sh
disabled-packages/racket/port.c.patch [new file with mode: 0644]
disabled-packages/sbcl/build.sh [new file with mode: 0644]
disabled-packages/sbcl/make-config.sh.patch [new file with mode: 0644]
ndk_patches/paths.h.patch [new file with mode: 0644]
ndk_patches/stdio.h.patch
packages/apt/build.sh
packages/busybox/build.sh
packages/byobu/build.sh [new file with mode: 0644]
packages/cmake/build.sh
packages/command-not-found/build.sh
packages/command-not-found/commands.h
packages/cvs/build.sh [new file with mode: 0644]
packages/cvs/lib-getline.c.patch [new file with mode: 0644]
packages/cvs/lib-getline.h.patch [new file with mode: 0644]
packages/dcraw/build.sh
packages/emacs/build.sh
packages/emacs/lib-src-emacsclient.c.patch [new file with mode: 0644]
packages/emacs/lisp-cus-start.el.patch.beforehostbuild [new file with mode: 0644]
packages/emacs/lisp-loadup.el.patch.beforehostbuild
packages/emacs/lisp-server.el.patch.beforehostbuild [new file with mode: 0644]
packages/fortune/build.sh [new file with mode: 0644]
packages/fortune/fortune.c.patch [new file with mode: 0644]
packages/frobtads/build.sh
packages/git/build.sh
packages/gnupg/build.sh
packages/golang/build.sh
packages/gzip/build.sh
packages/gzip/stdio_impl_use_sfileext.patch [deleted file]
packages/gzip/zip.c.patch [deleted file]
packages/inetutils/build.sh
packages/irssi/build.sh
packages/jack/build.sh
packages/jack/jack.sh
packages/leptonica/build.sh [new file with mode: 0644]
packages/leptonica/silence-tmpfile-warnings.patch [new file with mode: 0644]
packages/libcrypt/build.sh [moved from disabled-packages/libcrypt/build.sh with 55% similarity]
packages/libcrypt/crypt.h [moved from disabled-packages/libcrypt/crypt.h with 100% similarity]
packages/libcrypt/crypt3.c [new file with mode: 0644]
packages/libcurl/build.sh
packages/libsqlite/build.sh
packages/mosh/build.sh [new file with mode: 0644]
packages/mutt/build.sh
packages/mutt/getdomain.c.patch [new file with mode: 0644]
packages/nodejs/build.sh
packages/nodejs/lib-os.js.patch
packages/picolisp/build.sh
packages/picolisp/src-Makefile.patch
packages/picolisp/src-ext.c.patch
packages/procps/build.sh
packages/procps/pgrep.c.patch [new file with mode: 0644]
packages/proot/build.sh
packages/proot/termux-chroot
packages/protobuf/build.sh
packages/termux-api/build.sh
packages/termux-api/termux-api.c
packages/termux-tools/build.sh
packages/termux-tools/su
packages/termux-tools/termux-reload-settings
packages/termux-tools/termux-setup-storage
packages/tesseract/build.sh [new file with mode: 0644]
packages/tig/build.sh
packages/tmux/build.sh
packages/tmux/compat-imsg-buffer.c.patch [moved from packages/tmux/tmux.patch with 100% similarity]
packages/tmux/custom_shell.patch [deleted file]
packages/tmux/session.c.patch [new file with mode: 0644]
packages/tmux/tmux.c.patch [new file with mode: 0644]
packages/tmux/tmux.conf
packages/tmux/tmux.h.patch [new file with mode: 0644]
packages/tmux/tmux_c.patch [deleted file]
packages/tmux/tmux_h.patch [deleted file]
packages/transmission/build.sh
packages/unzip/build.sh
packages/vim-python/build.sh
packages/vim/build.sh
packages/vorbis-tools/build.sh [new file with mode: 0644]
packages/weechat/build.sh
packages/zbar/build.sh [new file with mode: 0644]

index 9e42af8..4d550c9 100644 (file)
@@ -55,7 +55,7 @@ RUN cd /tmp && \
     unzip ndk.zip && \
     mkdir /root/lib && \
     mv /tmp/android-sdk-linux /root/lib/android-sdk && \
-    mv /tmp/android-ndk-r11-linux-x86_64.tar.bz2 /root/lib/android-ndk && \
+    mv /tmp/android-ndk-r11 /root/lib/android-ndk && \
     rm -fr /tmp/*
 
 RUN mkdir -p /data/data/com.termux/files/usr && mkdir -p /root/termux-packages && \
index 04318fc..474c071 100755 (executable)
@@ -593,7 +593,7 @@ termux_setup_golang () {
                exit 1
        fi
 
-       local TERMUX_GO_VERSION=go1.6
+       local TERMUX_GO_VERSION=go1.6.1
        local TERMUX_GO_PLATFORM=linux-amd64
        test `uname` = "Darwin" && TERMUX_GO_PLATFORM=darwin-amd64
 
diff --git a/disabled-packages/libcrypt/crypt3.c b/disabled-packages/libcrypt/crypt3.c
deleted file mode 100644 (file)
index c685f1b..0000000
+++ /dev/null
@@ -1,460 +0,0 @@
-/**************************************************************************
-*            Unix-like crypt(3) Algorithm for Password Encryption
-*
-*   File    : crypt3.c
-*   Purpose : Provides crypt(3) functionality to ANSI C compilers
-*             without a need for the crypt library.
-*   Author  : Michael Dipperstein
-*   Date    : November 3, 1998
-*
-***************************************************************************
-*   The source in this file is heavily borrowed from the crypt3.c file
-*   found on several ftp sites on the Internet.  The original source
-*   claimed to be BSD, but was not distributed with any BSD license or
-*   copyright claims.  I am releasing the source that I have provided into
-*   public domain without any restrictions, warranties, or copyright
-*   claims of my own.
-*
-*   The code below has been cleaned and compiles correctly under, gcc,
-*   lcc, and Borland's bcc C compilers.  A bug involving the left and
-*   right halves of the encrypted data block in the widely published
-*   crypt3.c source has been fixed by this version.  All implicit register
-*   declarations have been removed, because they generated suboptimal code.
-*   All constant data has been explicitly declared as const and all
-*   declarations have been given a minimal scope, because I'm paranoid.
-*
-*   Caution: crypt() returns a pointer to static data.  I left it this way
-*            to maintain backward compatibility.  The downside is that
-*            successive calls will cause previous results to be lost.
-*            This can easily be changed with only minor modifications to
-*            the function crypt().
-**************************************************************************/
-
-/* Initial permutation */
-static const char IP[] =
-{
-    58, 50, 42, 34, 26, 18, 10, 2,
-    60, 52, 44, 36, 28, 20, 12, 4,
-    62, 54, 46, 38, 30, 22, 14, 6,
-    64, 56, 48, 40, 32, 24, 16, 8,
-    57, 49, 41, 33, 25, 17,  9, 1,
-    59, 51, 43, 35, 27, 19, 11, 3,
-    61, 53, 45, 37, 29, 21, 13, 5,
-    63, 55, 47, 39, 31, 23, 15, 7,
-};
-
-/* Final permutation, FP = IP^(-1) */
-static const char FP[] = {
-    40, 8, 48, 16, 56, 24, 64, 32,
-    39, 7, 47, 15, 55, 23, 63, 31,
-    38, 6, 46, 14, 54, 22, 62, 30,
-    37, 5, 45, 13, 53, 21, 61, 29,
-    36, 4, 44, 12, 52, 20, 60, 28,
-    35, 3, 43, 11, 51, 19, 59, 27,
-    34, 2, 42, 10, 50, 18, 58, 26,
-    33, 1, 41,  9, 49, 17, 57, 25,
-};
-
-/**************************************************************************
-* Permuted-choice 1 from the key bits to yield C and D.
-* Note that bits 8,16... are left out:
-* They are intended for a parity check.
-**************************************************************************/
-static const char PC1_C[] =
-{
-    57, 49, 41, 33, 25, 17,  9,
-     1, 58, 50, 42, 34, 26, 18,
-    10,  2, 59, 51, 43, 35, 27,
-    19, 11,  3, 60, 52, 44, 36,
-};
-
-static const char PC1_D[] =
-{
-    63, 55, 47, 39, 31, 23, 15,
-     7, 62, 54, 46, 38, 30, 22,
-    14,  6, 61, 53, 45, 37, 29,
-    21, 13,  5, 28, 20, 12,  4,
-};
-
-/* Sequence of shifts used for the key schedule. */
-static const char shifts[] =
-    {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
-
-/**************************************************************************
-* Permuted-choice 2, to pick out the bits from the CD array that generate
-* the key schedule.
-**************************************************************************/
-static const char PC2_C[] =
-{
-    14, 17, 11, 24,  1,  5,
-     3, 28, 15,  6, 21, 10,
-    23, 19, 12,  4, 26,  8,
-    16,  7, 27, 20, 13,  2,
-};
-
-static const char PC2_D[] =
-{
-    41, 52, 31, 37, 47, 55,
-    30, 40, 51, 45, 33, 48,
-    44, 49, 39, 56, 34, 53,
-    46, 42, 50, 36, 29, 32,
-};
-
-/* The C and D arrays used to calculate the key schedule. */
-static char C[28];
-static char D[28];
-
-/* The key schedule.  Generated from the key. */
-static char KS[16][48];
-
-/* The E bit-selection table. */
-static char E[48];
-static const char e2[] =
-{
-    32,  1,  2,  3,  4,  5,
-     4,  5,  6,  7,  8,  9,
-     8,  9, 10, 11, 12, 13,
-    12, 13, 14, 15, 16, 17,
-    16, 17, 18, 19, 20, 21,
-    20, 21, 22, 23, 24, 25,
-    24, 25, 26, 27, 28, 29,
-    28, 29, 30, 31, 32,  1,
-};
-
-/**************************************************************************
-* Function:    setkey
-*
-* Description: Set up the key schedule from the encryption key.
-*
-* Inputs:      char *key
-*              pointer to 64 character array.  Each character represents a
-*              bit in the key.
-*
-* Returns:     none
-**************************************************************************/
-void setkey(char *key)
-{
-    int i, j, k, temp;
-
-    /**********************************************************************
-    * First, generate C and D by permuting the key.  The low order bit of
-    * each 8-bit char is not used, so C and D are only 28 bits apiece.
-    **********************************************************************/
-    for(i = 0; i < 28; i++)
-    {
-        C[i] = key[PC1_C[i] - 1];
-        D[i] = key[PC1_D[i] - 1];
-    }
-
-    /**********************************************************************
-    * To generate Ki, rotate C and D according to schedule and pick up a
-    * permutation using PC2.
-    **********************************************************************/
-    for(i = 0; i < 16; i++)
-    {
-        /* rotate */
-        for(k = 0; k < shifts[i]; k++)
-        {
-            temp = C[0];
-
-            for(j = 0; j < 28 - 1; j++)
-                C[j] = C[j+1];
-
-            C[27] = temp;
-            temp = D[0];
-            for(j = 0; j < 28 - 1; j++)
-                D[j] = D[j+1];
-
-            D[27] = temp;
-        }
-
-        /* get Ki. Note C and D are concatenated */
-        for(j = 0; j < 24; j++)
-        {
-            KS[i][j] = C[PC2_C[j] - 1];
-            KS[i][j + 24] = D[PC2_D[j] - 28 -1];
-        }
-    }
-
-    /* load E with the initial E bit selections */
-    for(i=0; i < 48; i++)
-        E[i] = e2[i];
-}
-
-/**************************************************************************
-* The 8 selection functions. For some reason, they give a 0-origin
-* index, unlike everything else.
-**************************************************************************/
-
-static const char S[8][64] =
-{
-    {
-        14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7,
-         0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8,
-         4,  1, 14,  8, 13,  6,  2, 11, 15, 12,  9,  7,  3, 10,  5,  0,
-        15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13
-    },
-
-    {
-        15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10,
-         3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5,
-         0, 14,  7, 11, 10,  4, 13,  1,  5,  8, 12,  6,  9,  3,  2, 15,
-        13,  8, 10,  1,  3, 15,  4,  2, 11,  6,  7, 12,  0,  5, 14,  9
-    },
-
-    {
-        10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8,
-        13,  7,  0,  9,  3,  4,  6, 10,  2,  8,  5, 14, 12, 11, 15,  1,
-        13,  6,  4,  9,  8, 15,  3,  0, 11,  1,  2, 12,  5, 10, 14,  7,
-         1, 10, 13,  0,  6,  9,  8,  7,  4, 15, 14,  3, 11,  5,  2, 12
-    },
-
-    {
-         7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5, 11, 12,  4, 15,
-        13,  8, 11,  5,  6, 15,  0,  3,  4,  7,  2, 12,  1, 10, 14,  9,
-        10,  6,  9,  0, 12, 11,  7, 13, 15,  1,  3, 14,  5,  2,  8,  4,
-         3, 15,  0,  6, 10,  1, 13,  8,  9,  4,  5, 11, 12,  7,  2, 14
-    },
-
-    {
-         2, 12,  4,  1,  7, 10, 11,  6,  8,  5,  3, 15, 13,  0, 14,  9,
-        14, 11,  2, 12,  4,  7, 13,  1,  5,  0, 15, 10,  3,  9,  8,  6,
-         4,  2,  1, 11, 10, 13,  7,  8, 15,  9, 12,  5,  6,  3,  0, 14,
-        11,  8, 12,  7,  1, 14,  2, 13,  6, 15,  0,  9, 10,  4,  5,  3
-    },
-
-    {
-        12,  1, 10, 15,  9,  2,  6,  8,  0, 13,  3,  4, 14,  7,  5, 11,
-        10, 15,  4,  2,  7, 12,  9,  5,  6,  1, 13, 14,  0, 11,  3,  8,
-         9, 14, 15,  5,  2,  8, 12,  3,  7,  0,  4, 10,  1, 13, 11,  6,
-         4,  3,  2, 12,  9,  5, 15, 10, 11, 14,  1,  7,  6,  0,  8, 13
-    },
-
-    {
-         4, 11,  2, 14, 15,  0,  8, 13,  3, 12,  9,  7,  5, 10,  6,  1,
-        13,  0, 11,  7,  4,  9,  1, 10, 14,  3,  5, 12,  2, 15,  8,  6,
-         1,  4, 11, 13, 12,  3,  7, 14, 10, 15,  6,  8,  0,  5,  9,  2,
-         6, 11, 13,  8,  1,  4, 10,  7,  9,  5,  0, 15, 14,  2,  3, 12
-    },
-
-    {
-        13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7,
-         1, 15, 13,  8, 10,  3,  7,  4, 12,  5,  6, 11,  0, 14,  9,  2,
-         7, 11,  4,  1,  9, 12, 14,  2,  0,  6, 10, 13, 15,  3,  5,  8,
-         2,  1, 14,  7,  4, 10,  8, 13, 15, 12,  9,  0,  3,  5,  6, 11
-    }
-};
-
-/**************************************************************************
-* P is a permutation on the selected combination of the current L and key.
-**************************************************************************/
-static const char P[] =
-{
-    16,  7, 20, 21,
-    29, 12, 28, 17,
-     1, 15, 23, 26,
-     5, 18, 31, 10,
-     2,  8, 24, 14,
-    32, 27,  3,  9,
-    19, 13, 30,  6,
-    22, 11,  4, 25,
-};
-
-/* The combination of the key and the input, before selection. */
-static char preS[48];
-
-/**************************************************************************
-* Function:    encrypt
-*
-* Description: Uses DES to encrypt a 64 bit block of data.  Requires
-*              setkey to be invoked with the encryption key before it may
-*              be used.  The results of the encryption are stored in block.
-*
-* Inputs:      char *block
-*              pointer to 64 character array.  Each character represents a
-*              bit in the data block.
-*
-* Returns:     none
-**************************************************************************/
-void encrypt(char *block)
-{
-    int i, ii, temp, j, k;
-
-    char left[32], right[32]; /* block in two halves */
-    char old[32];
-    char f[32];
-
-    /* First, permute the bits in the input */
-    for(j = 0; j < 32; j++)
-        left[j] = block[IP[j] - 1];
-
-    for(;j < 64; j++)
-        right[j - 32] = block[IP[j] - 1];
-
-    /* Perform an encryption operation 16 times. */
-    for(ii= 0; ii < 16; ii++)
-    {
-        i = ii;
-        /* Save the right array, which will be the new left. */
-        for(j = 0; j < 32; j++)
-            old[j] = right[j];
-
-        /******************************************************************
-        * Expand right to 48 bits using the E selector and
-        * exclusive-or with the current key bits.
-        ******************************************************************/
-        for(j =0 ; j < 48; j++)
-            preS[j] = right[E[j] - 1] ^ KS[i][j];
-
-        /******************************************************************
-        * The pre-select bits are now considered in 8 groups of 6 bits ea.
-        * The 8 selection functions map these 6-bit quantities into 4-bit
-        * quantities and the results are permuted to make an f(R, K).
-        * The indexing into the selection functions is peculiar;
-        * it could be simplified by rewriting the tables.
-        ******************************************************************/
-        for(j = 0; j < 8; j++)
-        {
-            temp = 6 * j;
-            k = S[j][(preS[temp + 0] << 5) +
-                (preS[temp + 1] << 3) +
-                (preS[temp + 2] << 2) +
-                (preS[temp + 3] << 1) +
-                (preS[temp + 4] << 0) +
-                (preS[temp + 5] << 4)];
-
-            temp = 4 * j;
-
-            f[temp + 0] = (k >> 3) & 01;
-            f[temp + 1] = (k >> 2) & 01;
-            f[temp + 2] = (k >> 1) & 01;
-            f[temp + 3] = (k >> 0) & 01;
-        }
-
-        /******************************************************************
-        * The new right is left ^ f(R, K).
-        * The f here has to be permuted first, though.
-        ******************************************************************/
-        for(j = 0; j < 32; j++)
-            right[j] = left[j] ^ f[P[j] - 1];
-
-        /* Finally, the new left (the original right) is copied back. */
-        for(j = 0; j < 32; j++)
-            left[j] = old[j];
-    }
-
-    /* The output left and right are reversed. */
-    for(j = 0; j < 32; j++)
-    {
-        temp = left[j];
-        left[j] = right[j];
-        right[j] = temp;
-    }
-
-    /* The final output gets the inverse permutation of the very original. */
-    for(j = 0; j < 64; j++)
-    {
-        i = FP[j];
-        if (i < 33)
-                block[j] = left[FP[j] - 1];
-        else
-                block[j] = right[FP[j] - 33];
-    }
-}
-
-/**************************************************************************
-* Function:    crypt
-*
-* Description: Clone of Unix crypt(3) function.
-*
-* Inputs:      char *pw
-*              pointer to 8 character encryption key (user password)
-*              char *salt
-*              pointer to 2 character salt used to modify the DES results.
-*
-* Returns:     Pointer to static array containing the salt concatenated
-*              on to the encrypted results.  Same as stored in passwd file.
-**************************************************************************/
-char *crypt(char *pw, char *salt)
-{
-    int i, j, temp;
-    char c,
-         block[66];             /* 1st store key, then results */
-    static char iobuf[16];      /* encrypted results */
-
-    for(i = 0; i < 66; i++)
-        block[i] = 0;
-
-    /* break pw into 64 bits */
-    for(i = 0, c = *pw; c && (i < 64); i++)
-    {
-        for(j = 0; j < 7; j++, i++)
-            block[i] = (c >> (6 - j)) & 01;
-        pw++;
-        c = *pw;
-    }
-
-    /* set key based on pw */
-    setkey(block);
-
-    for(i = 0; i < 66; i++)
-        block[i] = 0;
-
-    for(i = 0; i < 2; i++)
-    {
-        /* store salt at beginning of results */
-        c = *salt++;
-        iobuf[i] = c;
-
-        if(c > 'Z')
-            c -= 6;
-
-        if(c > '9')
-            c -= 7;
-
-        c -= '.';
-
-        /* use salt to effect the E-bit selection */
-        for(j = 0; j < 6; j++)
-        {
-            if((c >> j) & 01)
-            {
-                temp = E[6 * i + j];
-                E[6 * i +j] = E[6 * i + j + 24];
-                E[6 * i + j + 24] = temp;
-            }
-        }
-    }
-
-    /* call DES encryption 25 times using pw as key and initial data = 0 */
-    for(i = 0; i < 25; i++)
-        encrypt(block);
-
-    /* format encrypted block for standard crypt(3) output */
-    for(i=0; i < 11; i++)
-    {
-        c = 0;
-        for(j = 0; j < 6; j++)
-        {
-            c <<= 1;
-            c |= block[6 * i + j];
-        }
-
-        c += '.';
-        if(c > '9')
-            c += 7;
-
-        if(c > 'Z')
-            c += 6;
-
-        iobuf[i + 2] = c;
-    }
-
-    iobuf[i + 2] = '\0';
-
-    /* prevent premature NULL terminator */
-    if(iobuf[1] == '\0')
-        iobuf[1] = iobuf[0];
-
-    return(iobuf);
-}
diff --git a/disabled-packages/mosh/BROKEN.txt b/disabled-packages/mosh/BROKEN.txt
deleted file mode 100644 (file)
index eacd155..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#0  0xb6f72b24 in std::locale::operator=(std::locale const&) () from /data/data/com.termux/files/usr/lib/libgnustl_shared.so
-#1  0xb6f71e54 in std::ios_base::_M_init() () from /data/data/com.termux/files/usr/lib/libgnustl_shared.so
-#2  0xb6f7df64 in std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*) ()
-   from /data/data/com.termux/files/usr/lib/libgnustl_shared.so
-#3  0x2a012ef8 in std::basic_istream<char, std::char_traits<char> >::basic_istream (__vtt_parm=<optimized out>, this=0xb6167348, 
-    __in_chrg=<optimized out>) at /home/fornwall/lib/android-standalone-toolchain-arm-api21-gcc4.9/include/c++/4.9/istream:608
-#4  std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream (__mode=(std::_S_bin | std::_S_in), 
-    __s=0x2a04a560 <rdev> "/dev/urandom", this=0xb6167348, __in_chrg=<optimized out>, __vtt_parm=<optimized out>)
-    at /home/fornwall/lib/android-standalone-toolchain-arm-api21-gcc4.9/include/c++/4.9/fstream:471
-#5  PRNG::PRNG (this=0xb6167348) at /home/fornwall/termux/mosh/src/src/frontend/../crypto/prng.h:59
-#6  Network::TransportSender<Network::UserStream>::TransportSender (this=0xb6167288, s_connection=<optimized out>, initial_state=...)
-    at /home/fornwall/termux/mosh/src/src/frontend/../network/transportsender.cc:65
-#7  0x2a01322c in Network::Transport<Network::UserStream, Terminal::Complete>::Transport (this=0xb6167100, initial_state=..., 
-    initial_remote=..., key_str=<optimized out>, ip=0xb60408cc "23.229.0.146", port=0xb6037214 "60001")
-    at /home/fornwall/termux/mosh/src/src/frontend/../network/networktransport.cc:65
-#8  0x2a009cb0 in STMClient::main_init (this=this@entry=0xbefff790) at /home/fornwall/termux/mosh/src/src/frontend/stmclient.cc:251
-#9  0x2a009ff4 in STMClient::main (this=0xbefff790) at /home/fornwall/termux/mosh/src/src/frontend/stmclient.cc:414
-#10 0x2a005f00 in main (argc=<optimized out>, argv=<optimized out>) at /home/fornwall/termux/mosh/src/src/frontend/mosh-client.cc:171
-
diff --git a/disabled-packages/mosh/build.sh b/disabled-packages/mosh/build.sh
deleted file mode 100644 (file)
index 5fcf437..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-TERMUX_PKG_HOMEPAGE=http://mosh.mit.edu/
-TERMUX_PKG_DESCRIPTION="Mobile shell that supports roaming and intelligent local echo"
-TERMUX_PKG_VERSION=1.2.5
-TERMUX_PKG_SRCURL=http://mosh.mit.edu/mosh-${TERMUX_PKG_VERSION}.tar.gz
-TERMUX_PKG_DEPENDS="libandroid-support, protobuf, ncurses, openssl, libutil, perl"
-
-export PROTOC=$TERMUX_TOPDIR/protobuf/host-build/src/protoc
-
-LDFLAGS+=" -lgnustl_shared"
index b59cd9a..8e840c1 100644 (file)
@@ -1,13 +1,31 @@
 TERMUX_PKG_HOMEPAGE=https://racket-lang.org
 TERMUX_PKG_DESCRIPTION="Full-spectrum programming language going beyond Lisp and Scheme"
-TERMUX_PKG_VERSION=6.3
-TERMUX_PKG_SRCURL=https://mirror.racket-lang.org/releases/6.3/installers/racket-minimal-${TERMUX_PKG_VERSION}-src-builtpkgs.tgz
-TERMUX_PKG_DEPENDS="libffi, libandroid-support"
-# TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--with-ssl=openssl --disable-iri"
-# TERMUX_PKG_HOSTBUILD=true
+TERMUX_PKG_VERSION=6.4
+TERMUX_PKG_SRCURL=https://mirror.racket-lang.org/installers/${TERMUX_PKG_VERSION}/racket-minimal-${TERMUX_PKG_VERSION}-src-builtpkgs.tgz
 TERMUX_PKG_FOLDERNAME=racket-${TERMUX_PKG_VERSION}
-TERMUX_MAKE_PROCESSES=1
+TERMUX_PKG_HOSTBUILD=true
+TERMUX_PKG_DEPENDS="libffi, libandroid-support"
+TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--enable-racket=$TERMUX_PKG_HOSTBUILD_DIR/racket/racketcgc"
+# Building racket hits the 'the wrong gcc-problem' detailed at http://www.metastatic.org/text/libtool.html
+# due to --tag=CC being used. To avoid that a cross libtool built in termux_step_post_extract_package()
+# below and used due to this configure argument:
+_CROSS_LIBTOOL_DIR=$TERMUX_PKG_CACHEDIR/libtool-cross-2.4.6-${TERMUX_HOST_PLATFORM}
+TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --enable-lt=$_CROSS_LIBTOOL_DIR/bin/${TERMUX_HOST_PLATFORM}-libtool"
+
+LDFLAGS+=" -llog"
 
 termux_step_post_extract_package () {
+       if [ ! -d $_CROSS_LIBTOOL_DIR ]; then
+               LIBTOOL_TARFILE=$TERMUX_PKG_CACHEDIR/libtool-2.4.6.tar.gz
+               if [ ! -f $LIBTOOL_TARFILE ]; then
+                       curl -L -o $LIBTOOL_TARFILE http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz
+               fi
+               cd $TERMUX_PKG_CACHEDIR
+               tar xf $LIBTOOL_TARFILE
+               cd libtool-2.4.6
+               ./configure --prefix=$_CROSS_LIBTOOL_DIR --host=$TERMUX_HOST_PLATFORM --program-prefix=${TERMUX_HOST_PLATFORM}-
+               make install
+       fi
+
        export TERMUX_PKG_SRCDIR=$TERMUX_PKG_SRCDIR/src
 }
diff --git a/disabled-packages/racket/port.c.patch b/disabled-packages/racket/port.c.patch
new file mode 100644 (file)
index 0000000..a9e5b12
--- /dev/null
@@ -0,0 +1,36 @@
+"The getdtablesize functions has been deprecated by Posix and has been
+removed from Android's LB64 ABI. Replace calls to it with the modern
+equivalent sysconf(_SC_OPEN_MAX)."
+
+- https://groups.google.com/a/chromium.org/forum/#!topic/chromium-reviews/AXhZapYuHi8
+
+diff -u -r ../../racket-6.4/src/racket/src/port.c ./racket/src/port.c
+--- ../../racket-6.4/src/racket/src/port.c     2016-01-14 12:11:20.000000000 -0500
++++ ./racket/src/port.c        2016-04-10 17:43:40.039414493 -0400
+@@ -1090,7 +1090,7 @@
+ # ifdef USE_ULIMIT
+     dynamic_fd_size = ulimit(4, 0);
+ # else
+-    dynamic_fd_size = getdtablesize();
++    dynamic_fd_size = sysconf(_SC_OPEN_MAX);
+ # endif
+     /* divide by bits-per-byte: */
+     dynamic_fd_size = (dynamic_fd_size + 7) >> 3;
+@@ -1365,7 +1365,7 @@
+ #    ifdef FIXED_FD_LIMIT
+     limit = FIXED_FD_LIMIT;
+ #    else
+-    limit = getdtablesize();
++    limit = sysconf(_SC_OPEN_MAX);
+ #    endif
+ #   endif
+ #  endif
+@@ -10390,7 +10390,7 @@
+ # ifdef USE_ULIMIT
+   i = ulimit(4, 0);
+ # else
+-  i = getdtablesize();
++  i = sysconf(_SC_OPEN_MAX);
+ # endif
+   while (i--) {
+     int cr;
diff --git a/disabled-packages/sbcl/build.sh b/disabled-packages/sbcl/build.sh
new file mode 100644 (file)
index 0000000..64c2acc
--- /dev/null
@@ -0,0 +1,23 @@
+TERMUX_PKG_HOMEPAGE=http://www.sbcl.org/
+TERMUX_PKG_DESCRIPTION="Steel Bank Common Lisp"
+TERMUX_PKG_VERSION=1.3.4
+TERMUX_PKG_SRCURL=http://prdownloads.sourceforge.net/sbcl/sbcl-${TERMUX_PKG_VERSION}-source.tar.bz2
+TERMUX_PKG_FOLDERNAME=sbcl-$TERMUX_PKG_VERSION
+
+termux_step_pre_configure () {
+       local SBCL_HOST_TARFILE=$TERMUX_PKG_CACHEDIR/sbcl-host-${TERMUX_PKG_VERSION}.tar.bz2
+       if [ ! -f $SBCL_HOST_TARFILE ]; then
+               curl -o $SBCL_HOST_TARFILE -L http://downloads.sourceforge.net/project/sbcl/sbcl/1.3.4/sbcl-1.3.4-x86-64-linux-binary.tar.bz2
+               cd $TERMUX_PKG_TMPDIR
+               tar xf $SBCL_HOST_TARFILE
+               cd sbcl-1.3.4-x86-64-linux
+               INSTALL_ROOT=$TERMUX_PKG_CACHEDIR/sbcl-host sh install.sh
+       fi
+       export PATH=$PATH:$TERMUX_PKG_CACHEDIR/sbcl-host/bin
+       export SBCL_HOME=$TERMUX_PKG_CACHEDIR/sbcl-host/lib/sbcl
+}
+
+termux_step_make_install () {
+       cd $TERMUX_PKG_SRCDIR
+       sh make.sh --prefix=$TERMUX_PREFIX
+}
diff --git a/disabled-packages/sbcl/make-config.sh.patch b/disabled-packages/sbcl/make-config.sh.patch
new file mode 100644 (file)
index 0000000..b125bd9
--- /dev/null
@@ -0,0 +1,15 @@
+diff -u -r ../sbcl-1.3.4/make-config.sh ./make-config.sh
+--- ../sbcl-1.3.4/make-config.sh       2016-03-31 03:28:36.000000000 -0400
++++ ./make-config.sh   2016-04-10 16:43:40.651905145 -0400
+@@ -754,8 +754,9 @@
+ # cross-compilers!
+ #
+ # FIXME: integrate to grovel-features, mayhaps
+-$GNUMAKE -C tools-for-build determine-endianness -I ../src/runtime
+-tools-for-build/determine-endianness >> $ltf
++# $GNUMAKE -C tools-for-build determine-endianness -I ../src/runtime
++# tools-for-build/determine-endianness >> $ltf
++echo " :little-endian" >> $ltf # Termux patch.
+ export sbcl_os sbcl_arch
+ sh tools-for-build/grovel-features.sh >> $ltf
diff --git a/ndk_patches/paths.h.patch b/ndk_patches/paths.h.patch
new file mode 100644 (file)
index 0000000..93cb2fa
--- /dev/null
@@ -0,0 +1,17 @@
+diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/paths.h ./usr/include/paths.h
+--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/paths.h   2016-03-03 16:54:24.000000000 -0500
++++ ./usr/include/paths.h      2016-04-11 03:56:22.460545708 -0400
+@@ -66,9 +66,9 @@
+ /* Provide trailing slash, since mostly used for building pathnames. */
+ #define       _PATH_DEV       "/dev/"
+-#define       _PATH_TMP       "/tmp/"
+-#define       _PATH_VARDB     "/var/db/"
+-#define       _PATH_VARRUN    "/var/run/"
+-#define       _PATH_VARTMP    "/var/tmp/"
++#define       _PATH_TMP       "@TERMUX_PREFIX@/tmp/"
++#define       _PATH_VARDB     "@TERMUX_PREFIX@/var/db/"
++#define       _PATH_VARRUN    "@TERMUX_PREFIX@/var/run/"
++#define       _PATH_VARTMP    "@TERMUX_PREFIX@/var/tmp/"
+ #endif /* !_PATHS_H_ */
index 9155e0c..c64fda1 100644 (file)
@@ -1,16 +1,18 @@
 diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/stdio.h ./usr/include/stdio.h
---- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/stdio.h   2014-10-14 22:53:49.000000000 -0400
-+++ ./usr/include/stdio.h      2015-12-24 03:07:45.028840214 -0500
-@@ -52,6 +52,8 @@
+--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/stdio.h   2016-03-03 16:54:24.000000000 -0500
++++ ./usr/include/stdio.h      2016-04-11 06:54:22.893930847 -0400
+@@ -52,6 +52,10 @@
  #include <stdarg.h>
  #include <stddef.h>
  
 +#include <string.h>           /* For strcpy(3) used by ctermid() */
++#include <asm-generic/fcntl.h> /* For O_RDWR and other O_* constants */
++#include <stdlib.h>            /* For arc4random() */
 +
  #define __need_NULL
  #include <stddef.h>
  
-@@ -193,7 +195,7 @@
+@@ -193,7 +196,7 @@
  
  /* System V/ANSI C; this is the wrong way to do this, do *not* use these. */
  #if __BSD_VISIBLE || __XPG_VISIBLE
@@ -19,6 +21,14 @@ diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/incl
  #endif
  #define       L_tmpnam        1024    /* XXX must be == PATH_MAX */
  #define       TMP_MAX         308915776
+@@ -257,7 +260,6 @@
+ int    setvbuf(FILE * __restrict, char * __restrict, int, size_t);
+ int    sscanf(const char * __restrict, const char * __restrict, ...)
+               __scanflike(2, 3);
+-FILE  *tmpfile(void);
+ int    ungetc(int, FILE *);
+ int    vfprintf(FILE * __restrict, const char * __restrict, __va_list)
+               __printflike(2, 0);
 @@ -371,6 +373,16 @@
  #define       fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
  #endif /* __BSD_VISIBLE */
@@ -36,3 +46,33 @@ diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/incl
  #if defined(__BIONIC_FORTIFY)
  
  __BEGIN_DECLS
+@@ -462,4 +474,29 @@
+ #endif /* defined(__BIONIC_FORTIFY) */
++__BEGIN_DECLS
++
++extern int open(const char*, int, ...);
++extern pid_t getpid();
++extern int unlink(const char*);
++static FILE* tmpfile() {
++      int p = getpid();
++      char* path;
++      int i;
++      for (i = 0; i < 100; i++) {
++              unsigned int r = arc4random();
++              if (asprintf(&path, "@TERMUX_PREFIX@/tmp/tmpfile.%d-%u", p, r) == -1) return NULL;
++              int fd = open(path, O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE);
++              free(path);
++              if (fd >= 0) {
++                      FILE* result = fdopen(fd, "w+");
++                      unlink(path);
++                      return result;
++              }
++      }
++      return NULL;
++}
++
++__END_DECLS
++
+ #endif /* _STDIO_H_ */
index a4243fe..91e35b4 100644 (file)
@@ -1,7 +1,7 @@
 TERMUX_PKG_HOMEPAGE=https://packages.debian.org/apt
 TERMUX_PKG_DESCRIPTION="Front-end for the dpkg package manager"
 TERMUX_PKG_DEPENDS="liblzma, libgnustl, dpkg, gnupg"
-TERMUX_PKG_VERSION=1.2.6
+TERMUX_PKG_VERSION=1.2.10
 TERMUX_PKG_SRCURL=http://ftp.debian.org/debian/pool/main/a/apt/apt_${TERMUX_PKG_VERSION}.tar.xz
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--host=${TERMUX_ARCH}-linux --disable-rpath acl_cv_rpath=$TERMUX_PREFIX/lib gt_cv_func_CFPreferencesCopyAppValue=no gt_cv_func_CFLocaleCopyCurrent=no ac_cv_c_bigendian=no --no-create"
 # When ready to drop bz2 support:
index 2a8ac8d..2ceb027 100755 (executable)
@@ -1,8 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://www.busybox.net/
 TERMUX_PKG_DESCRIPTION="Tiny versions of many common UNIX utilities into a single small executable"
 TERMUX_PKG_ESSENTIAL=yes
-TERMUX_PKG_VERSION=1.24.1
-TERMUX_PKG_BUILD_REVISION=3
+TERMUX_PKG_VERSION=1.24.2
 TERMUX_PKG_SRCURL=http://www.busybox.net/downloads/busybox-${TERMUX_PKG_VERSION}.tar.bz2
 TERMUX_PKG_BUILD_IN_SRC=yes
 
diff --git a/packages/byobu/build.sh b/packages/byobu/build.sh
new file mode 100644 (file)
index 0000000..553ba58
--- /dev/null
@@ -0,0 +1,7 @@
+TERMUX_PKG_HOMEPAGE=http://byobu.co/
+TERMUX_PKG_DESCRIPTION="Byobu is a GPLv3 open source text-based window manager and terminal multiplexer"
+TERMUX_PKG_VERSION=5.105
+TERMUX_PKG_FOLDERNAME="byobu-${TERMUX_PKG_VERSION}"
+TERMUX_PKG_SRCURL=https://launchpad.net/byobu/trunk/${TERMUX_PKG_VERSION}/+download/byobu_${TERMUX_PKG_VERSION}.orig.tar.gz
+TERMUX_PKG_DEPENDS="gawk,tmux"
+TERMUX_PKG_PLATFORM_INDEPENDENT=yes
index 69d0c59..f28537b 100644 (file)
@@ -1,7 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://www.cmake.org/
 TERMUX_PKG_DESCRIPTION="Family of tools designed to build, test and package software"
-_MAJOR_VERSION=3.4
-TERMUX_PKG_VERSION=${_MAJOR_VERSION}.3
+_MAJOR_VERSION=3.5
+TERMUX_PKG_VERSION=${_MAJOR_VERSION}.1
 TERMUX_PKG_SRCURL=http://www.cmake.org/files/v${_MAJOR_VERSION}/cmake-${TERMUX_PKG_VERSION}.tar.gz
 TERMUX_PKG_DEPENDS="libarchive, libcurl, libexpat, ncurses, jsoncpp"
 
index 4facef1..55bf1fd 100644 (file)
@@ -1,6 +1,6 @@
 TERMUX_PKG_HOMEPAGE=http://termux.com
 TERMUX_PKG_DESCRIPTION="Suggest installation of packages in interactive shell sessions"
-TERMUX_PKG_VERSION=1.5
+TERMUX_PKG_VERSION=1.7
 
 termux_step_make_install () {
        TERMUX_LIBEXEC_DIR=$TERMUX_PREFIX/libexec/termux
index 51b4439..79e7749 100644 (file)
@@ -238,11 +238,16 @@ char const* const commands[] = {
 " curl",
 "curseofwar",
 " curseofwar",
+"cvs",
+" cvs",
+" rcs2log",
 "dash",
 " dash",
 " sh",
 "datamash",
 " datamash",
+"dcraw",
+" dcraw",
 "debianutils",
 " add-shell",
 " ischroot",
@@ -288,9 +293,9 @@ char const* const commands[] = {
 "emacs",
 " ebrowse",
 " emacs",
+" emacs-25.0.92",
 " emacsclient",
 " etags",
-" temacs",
 "espeak",
 " espeak",
 "ffmpeg",
@@ -326,6 +331,8 @@ char const* const commands[] = {
 " fc-query",
 " fc-scan",
 " fc-validate",
+"fortune",
+" fortune",
 "frobtads",
 " frob",
 " t3make",
@@ -373,6 +380,7 @@ char const* const commands[] = {
 " git-receive-pack",
 " git-upload-archive",
 " git-upload-pack",
+" perl5.22.1",
 "glib-bin",
 " gapplication",
 " gdbus",
@@ -499,7 +507,6 @@ char const* const commands[] = {
 " dnsdomainname",
 " ftp",
 " logger",
-" ping6",
 " telnet",
 " tftp",
 " traceroute",
@@ -517,6 +524,20 @@ char const* const commands[] = {
 " jq",
 "kona",
 " k",
+"leptonica",
+" convertfilestopdf",
+" convertfilestops",
+" convertformat",
+" convertsegfilestopdf",
+" convertsegfilestops",
+" converttopdf",
+" converttops",
+" fileinfo",
+" printimage",
+" printsplitimage",
+" printtiff",
+" splitimage2pdf",
+" xtractprotos",
 "less",
 " less",
 " lessecho",
@@ -659,6 +680,10 @@ char const* const commands[] = {
 " updatedb",
 "moon-buggy",
 " moon-buggy",
+"mosh",
+" mosh",
+" mosh-client",
+" mosh-server",
 "multitail",
 " multitail",
 "mutt",
@@ -1136,8 +1161,10 @@ char const* const commands[] = {
 "pick",
 " pick",
 "picolisp",
+" httpGate",
 " picolisp",
 " pil",
+" ssl",
 "pinentry",
 " pinentry",
 " pinentry-curses",
@@ -1307,9 +1334,12 @@ char const* const commands[] = {
 " dalvikvm",
 " df",
 " getprop",
+" ip",
 " logcat",
 " ping",
+" ping6",
 " pm",
+" settings",
 " su",
 " termux-elf-cleaner",
 " termux-fix-shebang",
@@ -1319,6 +1349,8 @@ char const* const commands[] = {
 "teseq",
 " reseq",
 " teseq",
+"tesseract",
+" tesseract",
 "tig",
 " tig",
 "tinyscheme",
@@ -1356,17 +1388,25 @@ char const* const commands[] = {
 "utfdecode",
 " utfdecode",
 "vim",
+" vi",
 " view",
 " vim",
 " vimdiff",
 " vimtutor",
 " xxd",
 "vim-python",
+" vi",
 " view",
 " vim",
 " vimdiff",
 " vimtutor",
 " xxd",
+"vorbis-tools",
+" oggdec",
+" oggenc",
+" ogginfo",
+" vcut",
+" vorbiscomment",
 "vttest",
 " vttest",
 "vtutils",
@@ -1421,6 +1461,8 @@ char const* const commands[] = {
 " vsyasm",
 " yasm",
 " ytasm",
+"zbar",
+" zbarimg",
 "zile",
 " zile",
 "zip",
@@ -1434,6 +1476,42 @@ char const* const commands[] = {
 " ack",
 "ant",
 " ant",
+"byobu",
+" byobu",
+" byobu-config",
+" byobu-ctrl-a",
+" byobu-disable",
+" byobu-disable-prompt",
+" byobu-enable",
+" byobu-enable-prompt",
+" byobu-export",
+" byobu-janitor",
+" byobu-keybindings",
+" byobu-launch",
+" byobu-launcher",
+" byobu-launcher-install",
+" byobu-launcher-uninstall",
+" byobu-layout",
+" byobu-prompt",
+" byobu-quiet",
+" byobu-reconnect-sockets",
+" byobu-screen",
+" byobu-select-backend",
+" byobu-select-profile",
+" byobu-select-session",
+" byobu-shell",
+" byobu-silent",
+" byobu-status",
+" byobu-status-detail",
+" byobu-tmux",
+" byobu-ugraph",
+" byobu-ulevel",
+" col1",
+" ctail",
+" manifest",
+" purge-old-kernels",
+" vigpg",
+" wifi-status",
 "dx",
 " dalvikvm-wrapper",
 " dx",
diff --git a/packages/cvs/build.sh b/packages/cvs/build.sh
new file mode 100644 (file)
index 0000000..e69c82c
--- /dev/null
@@ -0,0 +1,6 @@
+TERMUX_PKG_HOMEPAGE=http://www.nongnu.org/cvs/
+TERMUX_PKG_DESCRIPTION="Concurrent Versions System"
+TERMUX_PKG_VERSION=1.11.23
+TERMUX_PKG_SRCURL=http://ftp.gnu.org/non-gnu/cvs/source/stable/${TERMUX_PKG_VERSION}/cvs-${TERMUX_PKG_VERSION}.tar.bz2
+TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--disable-server"
+TERMUX_PKG_RM_AFTER_INSTALL="bin/cvsbug share/man/man8/cvsbug.8"
diff --git a/packages/cvs/lib-getline.c.patch b/packages/cvs/lib-getline.c.patch
new file mode 100644 (file)
index 0000000..dfb84f5
--- /dev/null
@@ -0,0 +1,19 @@
+diff -u -r ../cvs-1.11.23/lib/getline.c ./lib/getline.c
+--- ../cvs-1.11.23/lib/getline.c       2005-04-04 16:46:05.000000000 -0400
++++ ./lib/getline.c    2016-03-29 17:34:23.536876927 -0400
+@@ -155,15 +155,6 @@
+ }
+ int
+-getline (lineptr, n, stream)
+-     char **lineptr;
+-     size_t *n;
+-     FILE *stream;
+-{
+-  return getstr (lineptr, n, stream, '\n', 0, GETLINE_NO_LIMIT);
+-}
+-
+-int
+ getline_safe (lineptr, n, stream, limit)
+      char **lineptr;
+      size_t *n;
diff --git a/packages/cvs/lib-getline.h.patch b/packages/cvs/lib-getline.h.patch
new file mode 100644 (file)
index 0000000..6358e7f
--- /dev/null
@@ -0,0 +1,12 @@
+diff -u -r ../cvs-1.11.23/lib/getline.h ./lib/getline.h
+--- ../cvs-1.11.23/lib/getline.h       2005-04-04 16:46:05.000000000 -0400
++++ ./lib/getline.h    2016-03-29 17:31:15.020232824 -0400
+@@ -12,8 +12,6 @@
+ #define GETLINE_NO_LIMIT -1
+ int
+-  getline __PROTO ((char **_lineptr, size_t *_n, FILE *_stream));
+-int
+   getline_safe __PROTO ((char **_lineptr, size_t *_n, FILE *_stream,
+                          int limit));
+ int
index 84ec90d..ad03ba0 100644 (file)
@@ -1,7 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://www.cybercom.net/~dcoffin/dcraw/
 TERMUX_PKG_DESCRIPTION="Raw digital camera images decoding utility"
 TERMUX_PKG_VERSION=9.26.0
-TERMUX_PKG_BUILD_REVISION=1
+TERMUX_PKG_BUILD_REVISION=2
 TERMUX_PKG_SRCURL=http://www.cybercom.net/~dcoffin/dcraw/archive/dcraw-${TERMUX_PKG_VERSION}.tar.gz
 TERMUX_PKG_FOLDERNAME=dcraw
 TERMUX_PKG_BUILD_IN_SRC=yes
@@ -9,7 +9,7 @@ TERMUX_PKG_DEPENDS="littlecms, libjasper"
 
 termux_step_make_install () {
        # See the "install" script for flags:
-       $CC $CFLAGS $CPPFLAGS $LDFLAGS dcraw.c $TERMUX_PKG_BUILDER_DIR/swab.c -lm -ljasper -ljpeg -llcms2 -o $TERMUX_PREFIX/dcraw
+       $CC $CFLAGS $CPPFLAGS $LDFLAGS dcraw.c $TERMUX_PKG_BUILDER_DIR/swab.c -lm -ljasper -ljpeg -llcms2 -o $TERMUX_PREFIX/bin/dcraw
         chmod +w dcraw.1 # Add missing write permission
        cp dcraw.1 $TERMUX_PREFIX/share/man/man1/
 }
index bee6252..3ee4bbd 100644 (file)
@@ -1,9 +1,10 @@
 TERMUX_PKG_HOMEPAGE=http://www.gnu.org/software/emacs/
 TERMUX_PKG_DESCRIPTION="Extensible, customizable text editor-and more"
 TERMUX_PKG_VERSION=25.0.92
+TERMUX_PKG_BUILD_REVISION=5
 TERMUX_PKG_SRCURL=ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-${TERMUX_PKG_VERSION}.tar.xz
-TERMUX_PKG_DEPENDS="ncurses"
-TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--without-x --with-xpm=no --with-jpeg=no --with-png=no --with-gif=no --with-tiff=no --without-gconf --without-gsettings --without-all"
+TERMUX_PKG_DEPENDS="ncurses, gnutls, libxml2"
+TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--without-x --with-xpm=no --with-jpeg=no --with-png=no --with-gif=no --with-tiff=no --without-gconf --without-gsettings --with-gnutls --with-xml2"
 # Ensure use of system malloc:
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" emacs_cv_sanitize_address=yes"
 # Prevent configure from adding -nopie:
diff --git a/packages/emacs/lib-src-emacsclient.c.patch b/packages/emacs/lib-src-emacsclient.c.patch
new file mode 100644 (file)
index 0000000..c5b1acd
--- /dev/null
@@ -0,0 +1,12 @@
+diff -u -r ../emacs-25.0.92/lib-src/emacsclient.c ./lib-src/emacsclient.c
+--- ../emacs-25.0.92/lib-src/emacsclient.c     2016-03-02 05:21:42.000000000 -0500
++++ ./lib-src/emacsclient.c    2016-04-09 01:28:10.881760020 -0400
+@@ -1210,7 +1210,7 @@
+               }
+             else
+ #endif
+-              tmpdir = "/tmp";
++              tmpdir = "@TERMUX_PREFIX@/tmp";
+           }
+       socket_name_storage =
+         xmalloc (strlen (tmpdir) + strlen (server_name) + EXTRA_SPACE);
diff --git a/packages/emacs/lisp-cus-start.el.patch.beforehostbuild b/packages/emacs/lisp-cus-start.el.patch.beforehostbuild
new file mode 100644 (file)
index 0000000..3e5f696
--- /dev/null
@@ -0,0 +1,12 @@
+diff -u -r ../emacs-25.0.92/lisp/cus-start.el ./lisp/cus-start.el
+--- ../emacs-25.0.92/lisp/cus-start.el 2016-03-02 05:21:42.000000000 -0500
++++ ./lisp/cus-start.el        2016-04-06 18:16:00.007272810 -0400
+@@ -277,7 +277,7 @@
+                         "/tmp"))
+                    (t
+                     (or (getenv "TMPDIR") (getenv "TMP") (getenv "TEMP")
+-                        "/tmp"))))
++                        "@TERMUX_PREFIX@/tmp"))))
+             :initialize custom-initialize-delay)
+            ;; fns.c
+            (use-dialog-box menu boolean "21.1")
index d767362..8044737 100644 (file)
@@ -1,6 +1,6 @@
 diff -u -r ../emacs-25.0.92/lisp/loadup.el ./lisp/loadup.el
 --- ../emacs-25.0.92/lisp/loadup.el    2016-03-02 05:21:42.000000000 -0500
-+++ ./lisp/loadup.el   2016-03-25 21:40:48.314906360 -0400
++++ ./lisp/loadup.el   2016-03-31 18:41:25.609790054 -0400
 @@ -1,3 +1,7 @@
 +;; Termux patch: See
 +;; https://lists.gnu.org/archive/html/bug-gnu-emacs/2016-03/msg00471.html
@@ -9,7 +9,17 @@ diff -u -r ../emacs-25.0.92/lisp/loadup.el ./lisp/loadup.el
  ;;; loadup.el --- load up standardly loaded Lisp files for Emacs
  
  ;; Copyright (C) 1985-1986, 1992, 1994, 2001-2016 Free Software
-@@ -110,6 +114,12 @@
+@@ -69,7 +73,8 @@
+ ;; Prevent build-time PATH getting stored in the binary.
+ ;; Mainly cosmetic, but helpful for Guix.  (Bug#20330)
+-(setq exec-path nil)
++;; Termux patch: Keep exec-path when running undumped:
++;; (setq exec-path nil)
+ (if (eq t purify-flag)
+     ;; Hash consing saved around 11% of pure space in my tests.
+@@ -110,6 +115,12 @@
  (load "format")
  (load "bindings")
  (load "window")  ; Needed here for `replace-buffer-in-windows'.
@@ -22,7 +32,7 @@ diff -u -r ../emacs-25.0.92/lisp/loadup.el ./lisp/loadup.el
  (setq load-source-file-function 'load-with-code-conversion)
  (load "files")
  
-@@ -465,3 +475,7 @@
+@@ -465,3 +476,7 @@
  ;; End:
  
  ;;; loadup.el ends here
diff --git a/packages/emacs/lisp-server.el.patch.beforehostbuild b/packages/emacs/lisp-server.el.patch.beforehostbuild
new file mode 100644 (file)
index 0000000..b57f6d6
--- /dev/null
@@ -0,0 +1,12 @@
+diff -u -r ../emacs-25.0.92/lisp/server.el ./lisp/server.el
+--- ../emacs-25.0.92/lisp/server.el    2016-03-02 05:21:42.000000000 -0500
++++ ./lisp/server.el   2016-04-06 17:34:48.134354070 -0400
+@@ -267,7 +267,7 @@
+ ;; does not read the init file.
+ (defvar server-socket-dir
+   (and (featurep 'make-network-process '(:family local))
+-       (format "%s/emacs%d" (or (getenv "TMPDIR") "/tmp") (user-uid)))
++       (format "%s/emacs%d" (or (getenv "TMPDIR") "@TERMUX_PREFIX@/tmp") (user-uid)))
+   "The directory in which to place the server socket.
+ If local sockets are not supported, this is nil.")
diff --git a/packages/fortune/build.sh b/packages/fortune/build.sh
new file mode 100644 (file)
index 0000000..b4c3b65
--- /dev/null
@@ -0,0 +1,24 @@
+TERMUX_PKG_HOMEPAGE=https://www.fefe.de/fortune/
+TERMUX_PKG_DESCRIPTION="Revealer of fotunes"
+TERMUX_PKG_VERSION=1.2
+TERMUX_PKG_SRCURL=http://dl.fefe.de/fortune-${TERMUX_PKG_VERSION}.tar.bz2
+
+termux_step_make_install () {
+       cd $TERMUX_PKG_SRCDIR
+       $CC $CFLAGS fortune.c -o $TERMUX_PREFIX/bin/fortune
+       mkdir -p $TERMUX_PREFIX/share/man/man6
+       cp debian/fortune.6 $TERMUX_PREFIX/share/man/man6/
+
+       local TARFILE=$TERMUX_PKG_CACHEDIR/f.tar.gz
+       if [ ! -f $TARFILE ]; then
+               curl --retry 3 -L -o $TARFILE http://http.debian.net/debian/pool/main/f/fortune-mod/fortune-mod_1.99.1.orig.tar.gz
+       fi
+       cd $TERMUX_PKG_TMPDIR
+       mkdir datfiles
+       cd datfiles
+       tar xf $TARFILE
+       cd fortune-mod-1.99.1/datfiles
+       rm -Rf html off Makefile
+       mkdir -p $TERMUX_PREFIX/share/games/fortunes
+       cp * $TERMUX_PREFIX/share/games/fortunes
+}
diff --git a/packages/fortune/fortune.c.patch b/packages/fortune/fortune.c.patch
new file mode 100644 (file)
index 0000000..b67870a
--- /dev/null
@@ -0,0 +1,12 @@
+diff -u -r ../fortune-1.2/fortune.c ./fortune.c
+--- ../fortune-1.2/fortune.c   2008-02-15 08:20:30.000000000 -0500
++++ ./fortune.c        2016-04-12 04:08:49.426592095 -0400
+@@ -51,7 +51,7 @@
+ #endif
+ #define VERSION "1.0"
+-#define FORTUNEDIR "/usr/share/games/fortunes"
++#define FORTUNEDIR "@TERMUX_PREFIX@/share/games/fortunes"
+ struct option const long_options[] =
+ {
index 5409d94..949de23 100644 (file)
@@ -1,6 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://www.tads.org/frobtads.htm
 TERMUX_PKG_DESCRIPTION="TADS is a free authoring system for writing your own Interactive Fiction"
 TERMUX_PKG_VERSION=1.2.3
+TERMUX_PKG_BUILD_REVISION=1
 TERMUX_PKG_SRCURL=http://www.tads.org/frobtads/frobtads-${TERMUX_PKG_VERSION}.tar.gz
 TERMUX_PKG_RM_AFTER_INSTALL="share/frobtads/tads3/doc share/frobtads/tads3/lib/webuires"
 TERMUX_PKG_DEPENDS="curl, ncurses"
index 50e3c34..0bb5c36 100755 (executable)
@@ -2,7 +2,8 @@ TERMUX_PKG_HOMEPAGE=http://git-scm.com/
 TERMUX_PKG_DESCRIPTION="Distributed version control system designed to handle everything from small to very large projects with speed and efficiency"
 # less is required as a pager for git log, and the busybox less does not handle used escape sequences.
 TERMUX_PKG_DEPENDS="libcurl, less"
-TERMUX_PKG_VERSION=2.7.4
+TERMUX_PKG_VERSION=2.8.1
+TERMUX_PKG_BUILD_REVISION=1
 TERMUX_PKG_SRCURL=https://www.kernel.org/pub/software/scm/git/git-${TERMUX_PKG_VERSION}.tar.xz
 ## This requires a working $TERMUX_PREFIX/bin/sh on the host building:
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--without-tcltk --with-curl --with-shell=$TERMUX_PREFIX/bin/sh ac_cv_header_libintl_h=no ac_cv_fread_reads_directories=yes ac_cv_snprintf_returns_bogus=yes"
index a9441a4..7430525 100755 (executable)
@@ -1,7 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://www.gnupg.org/
 TERMUX_PKG_DESCRIPTION="OpenPGP implementation for encrypting and signing data and communication"
 TERMUX_PKG_VERSION=1.4.20
-
+TERMUX_PKG_BUILD_REVISION=1
 TERMUX_PKG_SRCURL=ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-${TERMUX_PKG_VERSION}.tar.bz2
 # disable readline since gnupg is used in bootstrap, so nice to avoid readline+ncurses dependencies.
 # ac_cv_sys_symbol_underscore=no needed for i686 build to avoid "undefined reference to `mpihelp_sub_n'" errors
index 8f3d238..78a6a2b 100644 (file)
@@ -1,6 +1,6 @@
 TERMUX_PKG_HOMEPAGE=https://golang.org/
 TERMUX_PKG_DESCRIPTION="Go programming language compiler"
-_MAJOR_VERSION=1.6
+_MAJOR_VERSION=1.6.1
 # Use the ~ deb versioning construct in the future:
 TERMUX_PKG_VERSION=2:$_MAJOR_VERSION
 TERMUX_PKG_SRCURL=https://storage.googleapis.com/golang/go${_MAJOR_VERSION}.src.tar.gz
index b82fd82..68ffd92 100644 (file)
@@ -1,4 +1,4 @@
 TERMUX_PKG_HOMEPAGE=https://www.gnu.org/software/gzip/
 TERMUX_PKG_DESCRIPTION="Standard GNU file compression utilities"
-TERMUX_PKG_VERSION=1.6
+TERMUX_PKG_VERSION=1.7
 TERMUX_PKG_SRCURL=http://ftp.gnu.org/gnu/gzip/gzip-${TERMUX_PKG_VERSION}.tar.xz
diff --git a/packages/gzip/stdio_impl_use_sfileext.patch b/packages/gzip/stdio_impl_use_sfileext.patch
deleted file mode 100644 (file)
index afe10f3..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-http://lists.gnu.org/archive/html/bug-gnulib/2013-09/msg00005.html
-
-diff -u -r ../gzip-1.6/lib/stdio-impl.h ./lib/stdio-impl.h
---- ../gzip-1.6/lib/stdio-impl.h       2013-06-09 22:37:56.000000000 +0200
-+++ ./lib/stdio-impl.h 2014-02-25 23:50:09.000000000 +0100
-@@ -57,7 +57,7 @@
- #  define fp_ fp
- # endif
--# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ /* NetBSD >= 1.5ZA, OpenBSD */
-+# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __ANDROID__ /* NetBSD >= 1.5ZA, OpenBSD */
-   /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
-      and <http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> */
-   struct __sfileext
diff --git a/packages/gzip/zip.c.patch b/packages/gzip/zip.c.patch
deleted file mode 100644 (file)
index 668c6d4..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-Re-ordering the headers in the below patch fixes aarch64
-compilation, due to gzip.h defining
-
-#  define head (prev+WSIZE) 
-
-and <asm/sigcontext.h> using
-
-struct fpsimd_context {
-       struct _aarch64_ctx head;
-       /* ... */
-}
-
-diff -u -r ../gzip-1.6/zip.c ./zip.c
---- ../gzip-1.6/zip.c  2013-02-01 23:39:13.000000000 -0500
-+++ ./zip.c    2016-01-03 19:37:00.603075562 -0500
-@@ -20,12 +20,12 @@
- #include <config.h>
- #include <ctype.h>
--#include "tailor.h"
--#include "gzip.h"
--
- #include <unistd.h>
- #include <fcntl.h>
-+#include "tailor.h"
-+#include "gzip.h"
-+
- local ulg crc;       /* crc on uncompressed file data */
- off_t header_bytes;   /* number of bytes in gzip header */
index 3933c33..e69c8d6 100644 (file)
@@ -1,11 +1,11 @@
 TERMUX_PKG_HOMEPAGE=http://www.gnu.org/software/inetutils/
 TERMUX_PKG_DESCRIPTION="Collection of common network programs"
 TERMUX_PKG_VERSION=1.9.4
-TERMUX_PKG_BUILD_REVISION=1
+TERMUX_PKG_BUILD_REVISION=2
 TERMUX_PKG_SRCURL=http://ftp.gnu.org/gnu/inetutils/inetutils-${TERMUX_PKG_VERSION}.tar.xz
 TERMUX_PKG_DEPENDS="readline, libutil"
 # These are old cruft / not suited for android:
-TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--disable-ifconfig --disable-rcp --disable-rlogin --disable-rsh --disable-rexecd --disable-uucpd --disable-rexec --disable-ping --disable-hostname"
+TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--disable-ifconfig --disable-rcp --disable-rlogin --disable-rsh --disable-rexecd --disable-uucpd --disable-rexec --disable-ping --disable-ping6 --disable-hostname"
 
 CPPFLAGS+=" -DLOGIN_PROCESS=6 -DDEAD_PROCESS=8 -DLOG_NFACILITIES=24"
 LDFLAGS+=" -llog" # for syslog
index 466114d..d9179ee 100755 (executable)
@@ -1,7 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://www.irssi.org/
 TERMUX_PKG_DESCRIPTION="Terminal based IRC client for UNIX systems"
 TERMUX_PKG_DEPENDS="ncurses, openssl, glib, libandroid-glob"
-TERMUX_PKG_VERSION=0.8.18
+TERMUX_PKG_VERSION=0.8.19
 TERMUX_PKG_SRCURL=https://github.com/irssi/irssi/releases/download/${TERMUX_PKG_VERSION}/irssi-${TERMUX_PKG_VERSION}.tar.xz
 TERMUX_PKG_FOLDERNAME=irssi-${TERMUX_PKG_VERSION}
 TERMUX_PKG_BUILD_IN_SRC=yes
index deb758a..35584fd 100755 (executable)
@@ -4,7 +4,7 @@
 TERMUX_PKG_HOMEPAGE=http://tools.android.com/tech-docs/jackandjill
 TERMUX_PKG_DESCRIPTION="Java Android Compiler Kit"
 TERMUX_PKG_VERSION="1.1-mr2"
-TERMUX_PKG_BUILD_REVISION=2
+TERMUX_PKG_BUILD_REVISION=3
 TERMUX_PKG_PLATFORM_INDEPENDENT=true
 
 termux_step_make () {
index c439255..db43657 100755 (executable)
@@ -4,20 +4,11 @@
 export ANDROID_DATA=@TERMUX_PREFIX@/var/android/
 mkdir -p $ANDROID_DATA/dalvik-cache
 
-# Find the right lib folder for dalvikvm. We cannot take LD_LIBRARY_PATH
-# as is since it contains Termux-supplied libraries which may clash with
-# system ones.
-LIBFOLDER=/system/lib
-if test -d /system/lib64; then
-       LIBFOLDER=/system/lib64
-fi
-
-LD_LIBRARY_PATH=$LIBFOLDER \
-               exec dalvikvm -Xmx256m \
-               -Djava.io.tmpdir=@TERMUX_PREFIX@/tmp \
-               -cp @TERMUX_PREFIX@/share/dex/jack.jar com.android.jack.Main \
-               -cp @TERMUX_PREFIX@/share/jack/android.jack \
-               -D jack.library.digest.algo=MD5 -D sched.vfs.case-insensitive.algo=MD5 \
-               -D jack.annotation-processor=off \
-               --output-dex=`pwd` \
-               $@
+exec dalvikvm -Xmx256m \
+-Djava.io.tmpdir=@TERMUX_PREFIX@/tmp \
+-cp @TERMUX_PREFIX@/share/dex/jack.jar com.android.jack.Main \
+-cp @TERMUX_PREFIX@/share/jack/android.jack \
+-D jack.library.digest.algo=MD5 -D sched.vfs.case-insensitive.algo=MD5 \
+-D jack.annotation-processor=off \
+--output-dex=`pwd` \
+$@
diff --git a/packages/leptonica/build.sh b/packages/leptonica/build.sh
new file mode 100644 (file)
index 0000000..c0629d5
--- /dev/null
@@ -0,0 +1,6 @@
+TERMUX_PKG_HOMEPAGE=http://www.leptonica.com/
+TERMUX_PKG_DESCRIPTION="Leptonica is a pedagogically-oriented open source site containing software that is broadly useful for image processing and image analysis applications"
+TERMUX_PKG_VERSION=1.73
+TERMUX_PKG_DEPENDS="libjpeg-turbo, libpng, libtiff"
+TERMUX_PKG_SRCURL=http://www.leptonica.com/source/leptonica-${TERMUX_PKG_VERSION}.tar.gz
+TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--without-giflib --without-libwebp --without-libopenjpeg"
diff --git a/packages/leptonica/silence-tmpfile-warnings.patch b/packages/leptonica/silence-tmpfile-warnings.patch
new file mode 100644 (file)
index 0000000..e522d76
--- /dev/null
@@ -0,0 +1,130 @@
+diff -u -r ../leptonica-1.73/src/bmpio.c ./src/bmpio.c
+--- ../leptonica-1.73/src/bmpio.c      2016-01-15 21:41:41.000000000 -0500
++++ ./src/bmpio.c      2016-04-11 06:59:55.564738401 -0400
+@@ -600,7 +600,6 @@
+     if ((fp = fmemopen((l_uint8 *)cdata, size, "rb")) == NULL)
+         return (PIX *)ERROR_PTR("stream not opened", procName, NULL);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return (PIX *)ERROR_PTR("tmpfile stream not opened", procName, NULL);
+     fwrite(cdata, 1, size, fp);
+@@ -647,7 +646,6 @@
+         return ERROR_INT("stream not opened", procName, 1);
+     ret = pixWriteStreamBmp(fp, pix);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return ERROR_INT("tmpfile stream not opened", procName, 1);
+     ret = pixWriteStreamBmp(fp, pix);
+diff -u -r ../leptonica-1.73/src/gifio.c ./src/gifio.c
+--- ../leptonica-1.73/src/gifio.c      2016-01-21 13:06:52.000000000 -0500
++++ ./src/gifio.c      2016-04-11 07:00:33.292149664 -0400
+@@ -519,7 +519,6 @@
+     if (!cdata)
+         return (PIX *)ERROR_PTR("cdata not defined", procName, NULL);
+-    L_WARNING("writing to a temp file, not directly to memory\n", procName);
+         /* Write to a temp file */
+     fname = genTempFilename("/tmp/", "mem.gif", 1, 1);
+@@ -562,7 +561,6 @@
+     *psize = 0;
+     if (!pix)
+         return ERROR_INT("&pix not defined", procName, 1 );
+-    L_WARNING("writing to a temp file, not directly to memory\n", procName);
+         /* Write to a temp file */
+     fname = genTempFilename("/tmp/", "mem.gif", 1, 1);
+diff -u -r ../leptonica-1.73/src/jp2kio.c ./src/jp2kio.c
+--- ../leptonica-1.73/src/jp2kio.c     2016-01-15 21:41:29.000000000 -0500
++++ ./src/jp2kio.c     2016-04-11 07:00:45.691956165 -0400
+@@ -786,7 +786,6 @@
+     if ((fp = fmemopen((void *)data, size, "rb")) == NULL)
+         return (PIX *)ERROR_PTR("stream not opened", procName, NULL);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return (PIX *)ERROR_PTR("tmpfile stream not opened", procName, NULL);
+     fwrite(data, 1, size, fp);
+@@ -843,7 +842,6 @@
+         return ERROR_INT("stream not opened", procName, 1);
+     ret = pixWriteStreamJp2k(fp, pix, quality, nlevels, hint, debug);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return ERROR_INT("tmpfile stream not opened", procName, 1);
+     ret = pixWriteStreamJp2k(fp, pix, quality, nlevels, hint, debug);
+diff -u -r ../leptonica-1.73/src/jpegio.c ./src/jpegio.c
+--- ../leptonica-1.73/src/jpegio.c     2016-01-15 21:41:17.000000000 -0500
++++ ./src/jpegio.c     2016-04-11 06:59:13.425396015 -0400
+@@ -987,7 +987,6 @@
+     if ((fp = fmemopen((l_uint8 *)data, size, "rb")) == NULL)
+         return (PIX *)ERROR_PTR("stream not opened", procName, NULL);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return (PIX *)ERROR_PTR("tmpfile stream not opened", procName, NULL);
+     fwrite(data, 1, size, fp);
+@@ -1047,7 +1046,6 @@
+     if ((fp = fmemopen((l_uint8 *)data, size, "rb")) == NULL)
+         return ERROR_INT("stream not opened", procName, 1);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return ERROR_INT("tmpfile stream not opened", procName, 1);
+     fwrite(data, 1, size, fp);
+@@ -1099,7 +1097,6 @@
+         return ERROR_INT("stream not opened", procName, 1);
+     ret = pixWriteStreamJpeg(fp, pix, quality, progressive);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return ERROR_INT("tmpfile stream not opened", procName, 1);
+     ret = pixWriteStreamJpeg(fp, pix, quality, progressive);
+diff -u -r ../leptonica-1.73/src/pngio.c ./src/pngio.c
+--- ../leptonica-1.73/src/pngio.c      2016-01-15 21:40:28.000000000 -0500
++++ ./src/pngio.c      2016-04-11 06:59:45.780891088 -0400
+@@ -1285,7 +1285,6 @@
+     if ((fp = fmemopen((void *)cdata, size, "rb")) == NULL)
+         return (PIX *)ERROR_PTR("stream not opened", procName, NULL);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return (PIX *)ERROR_PTR("tmpfile stream not opened", procName, NULL);
+     fwrite(cdata, 1, size, fp);
+@@ -1336,7 +1335,6 @@
+         return ERROR_INT("stream not opened", procName, 1);
+     ret = pixWriteStreamPng(fp, pix, gamma);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return ERROR_INT("tmpfile stream not opened", procName, 1);
+     ret = pixWriteStreamPng(fp, pix, gamma);
+diff -u -r ../leptonica-1.73/src/pnmio.c ./src/pnmio.c
+--- ../leptonica-1.73/src/pnmio.c      2016-01-15 21:40:19.000000000 -0500
++++ ./src/pnmio.c      2016-04-11 06:59:35.017059063 -0400
+@@ -629,7 +629,6 @@
+     if ((fp = fmemopen((l_uint8 *)cdata, size, "rb")) == NULL)
+         return (PIX *)ERROR_PTR("stream not opened", procName, NULL);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return (PIX *)ERROR_PTR("tmpfile stream not opened", procName, NULL);
+     fwrite(cdata, 1, size, fp);
+@@ -677,7 +676,6 @@
+     if ((fp = fmemopen((l_uint8 *)cdata, size, "rb")) == NULL)
+         return ERROR_INT("stream not opened", procName, 1);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return ERROR_INT("tmpfile stream not opened", procName, 1);
+     fwrite(cdata, 1, size, fp);
+@@ -727,7 +725,6 @@
+         return ERROR_INT("stream not opened", procName, 1);
+     ret = pixWriteStreamPnm(fp, pix);
+ #else
+-    L_WARNING("work-around: writing to a temp file\n", procName);
+     if ((fp = tmpfile()) == NULL)
+         return ERROR_INT("tmpfile stream not opened", procName, 1);
+     ret = pixWriteStreamPnm(fp, pix);
similarity index 55%
rename from disabled-packages/libcrypt/build.sh
rename to packages/libcrypt/build.sh
index 0e3bf1f..c93d4ce 100644 (file)
@@ -1,9 +1,10 @@
 TERMUX_PKG_HOMEPAGE=http://michael.dipperstein.com/crypt/
 TERMUX_PKG_DESCRIPTION="A crypt(3) implementation"
-TERMUX_PKG_VERSION=0.1
+TERMUX_PKG_VERSION=0.2
+TERMUX_PKG_DEPENDS="openssl"
 
 termux_step_make_install () {
-       $CC $CFLAGS $LDFLAGS -fPIC -shared $TERMUX_PKG_BUILDER_DIR/crypt3.c -o $TERMUX_PREFIX/lib/libcrypt.so
+       $CC $CFLAGS $CPPFLAGS $LDFLAGS -Wall -Wextra -fPIC -shared $TERMUX_PKG_BUILDER_DIR/crypt3.c -lcrypto -o $TERMUX_PREFIX/lib/libcrypt.so
        mkdir -p $TERMUX_PREFIX/include/
        cp $TERMUX_PKG_BUILDER_DIR/crypt.h $TERMUX_PREFIX/include/
 }
diff --git a/packages/libcrypt/crypt3.c b/packages/libcrypt/crypt3.c
new file mode 100644 (file)
index 0000000..a9de4d2
--- /dev/null
@@ -0,0 +1,1394 @@
+/**************************************************************************
+* Implementation of crypt(3) using routines in libcrypto from openssl for
+* use on Android in Termux.
+*
+*  https://www.freebsd.org/cgi/man.cgi?crypt(3)
+*  http://man7.org/linux/man-pages/man3/crypt.3.html
+*
+* Relevant code is from FreeBSD with license given below.
+**************************************************************************/
+
+/*
+ * Copyright (c) 2011 The FreeBSD Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <arpa/inet.h>
+#include <errno.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <openssl/sha.h>
+#include <openssl/md5.h>
+
+/* START: Freebsd compat */
+typedef unsigned long u_long;
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
+#define MD5_SIZE 16
+#define        _PASSWORD_EFMT1         '_'
+#define DES_SALT_ALPHABET \
+       "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
+#define MD5Init MD5_Init
+#define MD5Update MD5_Update
+#define MD5Final MD5_Final
+/* END: Freebsd compat */
+
+
+/* START: https://github.com/freebsd/freebsd/blob/master/lib/libcrypt/misc.c */
+static char itoa64[] =         /* 0 ... 63 => ascii - 64 */
+       "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+void
+_crypt_to64(char *s, u_long v, int n)
+{
+       while (--n >= 0) {
+               *s++ = itoa64[v&0x3f];
+               v >>= 6;
+       }
+}
+
+void
+b64_from_24bit(uint8_t B2, uint8_t B1, uint8_t B0, int n, int *buflen, char **cp)
+{
+       uint32_t w;
+       int i;
+
+       w = (B2 << 16) | (B1 << 8) | B0;
+       for (i = 0; i < n; i++) {
+               **cp = itoa64[w&0x3f];
+               (*cp)++;
+               if ((*buflen)-- < 0)
+                       break;
+               w >>= 6;
+       }
+}
+/* END: https://github.com/freebsd/freebsd/blob/master/lib/libcrypt/misc.c */
+
+
+/* START: https://github.com/freebsd/freebsd/blob/master/secure/lib/libcrypt/crypt-des.c */
+#if    defined(__GNUC__) && !defined(lint)
+#define INLINE inline
+#else
+#define INLINE
+#endif
+
+static u_char  IP[64] = {
+       58, 50, 42, 34, 26, 18, 10,  2, 60, 52, 44, 36, 28, 20, 12,  4,
+       62, 54, 46, 38, 30, 22, 14,  6, 64, 56, 48, 40, 32, 24, 16,  8,
+       57, 49, 41, 33, 25, 17,  9,  1, 59, 51, 43, 35, 27, 19, 11,  3,
+       61, 53, 45, 37, 29, 21, 13,  5, 63, 55, 47, 39, 31, 23, 15,  7
+};
+
+static u_char  inv_key_perm[64];
+static u_char  key_perm[56] = {
+       57, 49, 41, 33, 25, 17,  9,  1, 58, 50, 42, 34, 26, 18,
+       10,  2, 59, 51, 43, 35, 27, 19, 11,  3, 60, 52, 44, 36,
+       63, 55, 47, 39, 31, 23, 15,  7, 62, 54, 46, 38, 30, 22,
+       14,  6, 61, 53, 45, 37, 29, 21, 13,  5, 28, 20, 12,  4
+};
+
+static u_char  key_shifts[16] = {
+       1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
+};
+
+static u_char  inv_comp_perm[56];
+static u_char  comp_perm[48] = {
+       14, 17, 11, 24,  1,  5,  3, 28, 15,  6, 21, 10,
+       23, 19, 12,  4, 26,  8, 16,  7, 27, 20, 13,  2,
+       41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
+       44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32
+};
+
+/*
+ *     No E box is used, as it's replaced by some ANDs, shifts, and ORs.
+ */
+
+static u_char  u_sbox[8][64];
+static u_char  sbox[8][64] = {
+       {
+               14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7,
+                0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8,
+                4,  1, 14,  8, 13,  6,  2, 11, 15, 12,  9,  7,  3, 10,  5,  0,
+               15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13
+       },
+       {
+               15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10,
+                3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5,
+                0, 14,  7, 11, 10,  4, 13,  1,  5,  8, 12,  6,  9,  3,  2, 15,
+               13,  8, 10,  1,  3, 15,  4,  2, 11,  6,  7, 12,  0,  5, 14,  9
+       },
+       {
+               10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8,
+               13,  7,  0,  9,  3,  4,  6, 10,  2,  8,  5, 14, 12, 11, 15,  1,
+               13,  6,  4,  9,  8, 15,  3,  0, 11,  1,  2, 12,  5, 10, 14,  7,
+                1, 10, 13,  0,  6,  9,  8,  7,  4, 15, 14,  3, 11,  5,  2, 12
+       },
+       {
+                7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5, 11, 12,  4, 15,
+               13,  8, 11,  5,  6, 15,  0,  3,  4,  7,  2, 12,  1, 10, 14,  9,
+               10,  6,  9,  0, 12, 11,  7, 13, 15,  1,  3, 14,  5,  2,  8,  4,
+                3, 15,  0,  6, 10,  1, 13,  8,  9,  4,  5, 11, 12,  7,  2, 14
+       },
+       {
+                2, 12,  4,  1,  7, 10, 11,  6,  8,  5,  3, 15, 13,  0, 14,  9,
+               14, 11,  2, 12,  4,  7, 13,  1,  5,  0, 15, 10,  3,  9,  8,  6,
+                4,  2,  1, 11, 10, 13,  7,  8, 15,  9, 12,  5,  6,  3,  0, 14,
+               11,  8, 12,  7,  1, 14,  2, 13,  6, 15,  0,  9, 10,  4,  5,  3
+       },
+       {
+               12,  1, 10, 15,  9,  2,  6,  8,  0, 13,  3,  4, 14,  7,  5, 11,
+               10, 15,  4,  2,  7, 12,  9,  5,  6,  1, 13, 14,  0, 11,  3,  8,
+                9, 14, 15,  5,  2,  8, 12,  3,  7,  0,  4, 10,  1, 13, 11,  6,
+                4,  3,  2, 12,  9,  5, 15, 10, 11, 14,  1,  7,  6,  0,  8, 13
+       },
+       {
+                4, 11,  2, 14, 15,  0,  8, 13,  3, 12,  9,  7,  5, 10,  6,  1,
+               13,  0, 11,  7,  4,  9,  1, 10, 14,  3,  5, 12,  2, 15,  8,  6,
+                1,  4, 11, 13, 12,  3,  7, 14, 10, 15,  6,  8,  0,  5,  9,  2,
+                6, 11, 13,  8,  1,  4, 10,  7,  9,  5,  0, 15, 14,  2,  3, 12
+       },
+       {
+               13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7,
+                1, 15, 13,  8, 10,  3,  7,  4, 12,  5,  6, 11,  0, 14,  9,  2,
+                7, 11,  4,  1,  9, 12, 14,  2,  0,  6, 10, 13, 15,  3,  5,  8,
+                2,  1, 14,  7,  4, 10,  8, 13, 15, 12,  9,  0,  3,  5,  6, 11
+       }
+};
+
+static u_char  un_pbox[32];
+static u_char  pbox[32] = {
+       16,  7, 20, 21, 29, 12, 28, 17,  1, 15, 23, 26,  5, 18, 31, 10,
+        2,  8, 24, 14, 32, 27,  3,  9, 19, 13, 30,  6, 22, 11,  4, 25
+};
+
+static u_int32_t       bits32[32] =
+{
+       0x80000000, 0x40000000, 0x20000000, 0x10000000,
+       0x08000000, 0x04000000, 0x02000000, 0x01000000,
+       0x00800000, 0x00400000, 0x00200000, 0x00100000,
+       0x00080000, 0x00040000, 0x00020000, 0x00010000,
+       0x00008000, 0x00004000, 0x00002000, 0x00001000,
+       0x00000800, 0x00000400, 0x00000200, 0x00000100,
+       0x00000080, 0x00000040, 0x00000020, 0x00000010,
+       0x00000008, 0x00000004, 0x00000002, 0x00000001
+};
+
+static u_char  bits8[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
+
+static u_int32_t       saltbits;
+static u_int32_t       old_salt;
+static u_int32_t       *bits28, *bits24;
+static u_char          init_perm[64], final_perm[64];
+static u_int32_t       en_keysl[16], en_keysr[16];
+static u_int32_t       de_keysl[16], de_keysr[16];
+static int             des_initialised = 0;
+static u_char          m_sbox[4][4096];
+static u_int32_t       psbox[4][256];
+static u_int32_t       ip_maskl[8][256], ip_maskr[8][256];
+static u_int32_t       fp_maskl[8][256], fp_maskr[8][256];
+static u_int32_t       key_perm_maskl[8][128], key_perm_maskr[8][128];
+static u_int32_t       comp_maskl[8][128], comp_maskr[8][128];
+static u_int32_t       old_rawkey0, old_rawkey1;
+
+static u_char  ascii64[] =
+        "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+/*       0000000000111111111122222222223333333333444444444455555555556666 */
+/*       0123456789012345678901234567890123456789012345678901234567890123 */
+
+static INLINE int
+ascii_to_bin(char ch)
+{
+       if (ch > 'z')
+               return(0);
+       if (ch >= 'a')
+               return(ch - 'a' + 38);
+       if (ch > 'Z')
+               return(0);
+       if (ch >= 'A')
+               return(ch - 'A' + 12);
+       if (ch > '9')
+               return(0);
+       if (ch >= '.')
+               return(ch - '.');
+       return(0);
+}
+
+static void
+des_init(void)
+{
+       int     i, j, b, k, inbit, obit;
+       u_int32_t       *p, *il, *ir, *fl, *fr;
+
+       old_rawkey0 = old_rawkey1 = 0L;
+       saltbits = 0L;
+       old_salt = 0L;
+       bits24 = (bits28 = bits32 + 4) + 4;
+
+       /*
+        * Invert the S-boxes, reordering the input bits.
+        */
+       for (i = 0; i < 8; i++)
+               for (j = 0; j < 64; j++) {
+                       b = (j & 0x20) | ((j & 1) << 4) | ((j >> 1) & 0xf);
+                       u_sbox[i][j] = sbox[i][b];
+               }
+
+       /*
+        * Convert the inverted S-boxes into 4 arrays of 8 bits.
+        * Each will handle 12 bits of the S-box input.
+        */
+       for (b = 0; b < 4; b++)
+               for (i = 0; i < 64; i++)
+                       for (j = 0; j < 64; j++)
+                               m_sbox[b][(i << 6) | j] =
+                                       (u_char)((u_sbox[(b << 1)][i] << 4) |
+                                       u_sbox[(b << 1) + 1][j]);
+
+       /*
+        * Set up the initial & final permutations into a useful form, and
+        * initialise the inverted key permutation.
+        */
+       for (i = 0; i < 64; i++) {
+               init_perm[final_perm[i] = IP[i] - 1] = (u_char)i;
+               inv_key_perm[i] = 255;
+       }
+
+       /*
+        * Invert the key permutation and initialise the inverted key
+        * compression permutation.
+        */
+       for (i = 0; i < 56; i++) {
+               inv_key_perm[key_perm[i] - 1] = (u_char)i;
+               inv_comp_perm[i] = 255;
+       }
+
+       /*
+        * Invert the key compression permutation.
+        */
+       for (i = 0; i < 48; i++) {
+               inv_comp_perm[comp_perm[i] - 1] = (u_char)i;
+       }
+
+       /*
+        * Set up the OR-mask arrays for the initial and final permutations,
+        * and for the key initial and compression permutations.
+        */
+       for (k = 0; k < 8; k++) {
+               for (i = 0; i < 256; i++) {
+                       *(il = &ip_maskl[k][i]) = 0L;
+                       *(ir = &ip_maskr[k][i]) = 0L;
+                       *(fl = &fp_maskl[k][i]) = 0L;
+                       *(fr = &fp_maskr[k][i]) = 0L;
+                       for (j = 0; j < 8; j++) {
+                               inbit = 8 * k + j;
+                               if (i & bits8[j]) {
+                                       if ((obit = init_perm[inbit]) < 32)
+                                               *il |= bits32[obit];
+                                       else
+                                               *ir |= bits32[obit-32];
+                                       if ((obit = final_perm[inbit]) < 32)
+                                               *fl |= bits32[obit];
+                                       else
+                                               *fr |= bits32[obit - 32];
+                               }
+                       }
+               }
+               for (i = 0; i < 128; i++) {
+                       *(il = &key_perm_maskl[k][i]) = 0L;
+                       *(ir = &key_perm_maskr[k][i]) = 0L;
+                       for (j = 0; j < 7; j++) {
+                               inbit = 8 * k + j;
+                               if (i & bits8[j + 1]) {
+                                       if ((obit = inv_key_perm[inbit]) == 255)
+                                               continue;
+                                       if (obit < 28)
+                                               *il |= bits28[obit];
+                                       else
+                                               *ir |= bits28[obit - 28];
+                               }
+                       }
+                       *(il = &comp_maskl[k][i]) = 0L;
+                       *(ir = &comp_maskr[k][i]) = 0L;
+                       for (j = 0; j < 7; j++) {
+                               inbit = 7 * k + j;
+                               if (i & bits8[j + 1]) {
+                                       if ((obit=inv_comp_perm[inbit]) == 255)
+                                               continue;
+                                       if (obit < 24)
+                                               *il |= bits24[obit];
+                                       else
+                                               *ir |= bits24[obit - 24];
+                               }
+                       }
+               }
+       }
+
+       /*
+        * Invert the P-box permutation, and convert into OR-masks for
+        * handling the output of the S-box arrays setup above.
+        */
+       for (i = 0; i < 32; i++)
+               un_pbox[pbox[i] - 1] = (u_char)i;
+
+       for (b = 0; b < 4; b++)
+               for (i = 0; i < 256; i++) {
+                       *(p = &psbox[b][i]) = 0L;
+                       for (j = 0; j < 8; j++) {
+                               if (i & bits8[j])
+                                       *p |= bits32[un_pbox[8 * b + j]];
+                       }
+               }
+
+       des_initialised = 1;
+}
+
+static void
+setup_salt(u_int32_t salt)
+{
+       u_int32_t       obit, saltbit;
+       int             i;
+
+       if (salt == old_salt)
+               return;
+       old_salt = salt;
+
+       saltbits = 0L;
+       saltbit = 1;
+       obit = 0x800000;
+       for (i = 0; i < 24; i++) {
+               if (salt & saltbit)
+                       saltbits |= obit;
+               saltbit <<= 1;
+               obit >>= 1;
+       }
+}
+
+static int
+des_setkey(const char *key)
+{
+       u_int32_t       k0, k1, rawkey0, rawkey1;
+       int             shifts, round;
+
+       if (!des_initialised)
+               des_init();
+
+       rawkey0 = ntohl(*(const u_int32_t *) key);
+       rawkey1 = ntohl(*(const u_int32_t *) (key + 4));
+
+       if ((rawkey0 | rawkey1)
+           && rawkey0 == old_rawkey0
+           && rawkey1 == old_rawkey1) {
+               /*
+                * Already setup for this key.
+                * This optimisation fails on a zero key (which is weak and
+                * has bad parity anyway) in order to simplify the starting
+                * conditions.
+                */
+               return(0);
+       }
+       old_rawkey0 = rawkey0;
+       old_rawkey1 = rawkey1;
+
+       /*
+        *      Do key permutation and split into two 28-bit subkeys.
+        */
+       k0 = key_perm_maskl[0][rawkey0 >> 25]
+          | key_perm_maskl[1][(rawkey0 >> 17) & 0x7f]
+          | key_perm_maskl[2][(rawkey0 >> 9) & 0x7f]
+          | key_perm_maskl[3][(rawkey0 >> 1) & 0x7f]
+          | key_perm_maskl[4][rawkey1 >> 25]
+          | key_perm_maskl[5][(rawkey1 >> 17) & 0x7f]
+          | key_perm_maskl[6][(rawkey1 >> 9) & 0x7f]
+          | key_perm_maskl[7][(rawkey1 >> 1) & 0x7f];
+       k1 = key_perm_maskr[0][rawkey0 >> 25]
+          | key_perm_maskr[1][(rawkey0 >> 17) & 0x7f]
+          | key_perm_maskr[2][(rawkey0 >> 9) & 0x7f]
+          | key_perm_maskr[3][(rawkey0 >> 1) & 0x7f]
+          | key_perm_maskr[4][rawkey1 >> 25]
+          | key_perm_maskr[5][(rawkey1 >> 17) & 0x7f]
+          | key_perm_maskr[6][(rawkey1 >> 9) & 0x7f]
+          | key_perm_maskr[7][(rawkey1 >> 1) & 0x7f];
+       /*
+        *      Rotate subkeys and do compression permutation.
+        */
+       shifts = 0;
+       for (round = 0; round < 16; round++) {
+               u_int32_t       t0, t1;
+
+               shifts += key_shifts[round];
+
+               t0 = (k0 << shifts) | (k0 >> (28 - shifts));
+               t1 = (k1 << shifts) | (k1 >> (28 - shifts));
+
+               de_keysl[15 - round] =
+               en_keysl[round] = comp_maskl[0][(t0 >> 21) & 0x7f]
+                               | comp_maskl[1][(t0 >> 14) & 0x7f]
+                               | comp_maskl[2][(t0 >> 7) & 0x7f]
+                               | comp_maskl[3][t0 & 0x7f]
+                               | comp_maskl[4][(t1 >> 21) & 0x7f]
+                               | comp_maskl[5][(t1 >> 14) & 0x7f]
+                               | comp_maskl[6][(t1 >> 7) & 0x7f]
+                               | comp_maskl[7][t1 & 0x7f];
+
+               de_keysr[15 - round] =
+               en_keysr[round] = comp_maskr[0][(t0 >> 21) & 0x7f]
+                               | comp_maskr[1][(t0 >> 14) & 0x7f]
+                               | comp_maskr[2][(t0 >> 7) & 0x7f]
+                               | comp_maskr[3][t0 & 0x7f]
+                               | comp_maskr[4][(t1 >> 21) & 0x7f]
+                               | comp_maskr[5][(t1 >> 14) & 0x7f]
+                               | comp_maskr[6][(t1 >> 7) & 0x7f]
+                               | comp_maskr[7][t1 & 0x7f];
+       }
+       return(0);
+}
+
+static int
+do_des(        u_int32_t l_in, u_int32_t r_in, u_int32_t *l_out, u_int32_t *r_out, int count)
+{
+       /*
+        *      l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format.
+        */
+       u_int32_t       l, r, *kl, *kr, *kl1, *kr1;
+       u_int32_t       f, r48l, r48r;
+       int             round;
+
+       if (count == 0) {
+               return(1);
+       } else if (count > 0) {
+               /*
+                * Encrypting
+                */
+               kl1 = en_keysl;
+               kr1 = en_keysr;
+       } else {
+               /*
+                * Decrypting
+                */
+               count = -count;
+               kl1 = de_keysl;
+               kr1 = de_keysr;
+       }
+
+       /*
+        *      Do initial permutation (IP).
+        */
+       l = ip_maskl[0][l_in >> 24]
+         | ip_maskl[1][(l_in >> 16) & 0xff]
+         | ip_maskl[2][(l_in >> 8) & 0xff]
+         | ip_maskl[3][l_in & 0xff]
+         | ip_maskl[4][r_in >> 24]
+         | ip_maskl[5][(r_in >> 16) & 0xff]
+         | ip_maskl[6][(r_in >> 8) & 0xff]
+         | ip_maskl[7][r_in & 0xff];
+       r = ip_maskr[0][l_in >> 24]
+         | ip_maskr[1][(l_in >> 16) & 0xff]
+         | ip_maskr[2][(l_in >> 8) & 0xff]
+         | ip_maskr[3][l_in & 0xff]
+         | ip_maskr[4][r_in >> 24]
+         | ip_maskr[5][(r_in >> 16) & 0xff]
+         | ip_maskr[6][(r_in >> 8) & 0xff]
+         | ip_maskr[7][r_in & 0xff];
+
+       while (count--) {
+               /*
+                * Do each round.
+                */
+               kl = kl1;
+               kr = kr1;
+               round = 16;
+               while (round--) {
+                       /*
+                        * Expand R to 48 bits (simulate the E-box).
+                        */
+                       r48l    = ((r & 0x00000001) << 23)
+                               | ((r & 0xf8000000) >> 9)
+                               | ((r & 0x1f800000) >> 11)
+                               | ((r & 0x01f80000) >> 13)
+                               | ((r & 0x001f8000) >> 15);
+
+                       r48r    = ((r & 0x0001f800) << 7)
+                               | ((r & 0x00001f80) << 5)
+                               | ((r & 0x000001f8) << 3)
+                               | ((r & 0x0000001f) << 1)
+                               | ((r & 0x80000000) >> 31);
+                       /*
+                        * Do salting for crypt() and friends, and
+                        * XOR with the permuted key.
+                        */
+                       f = (r48l ^ r48r) & saltbits;
+                       r48l ^= f ^ *kl++;
+                       r48r ^= f ^ *kr++;
+                       /*
+                        * Do sbox lookups (which shrink it back to 32 bits)
+                        * and do the pbox permutation at the same time.
+                        */
+                       f = psbox[0][m_sbox[0][r48l >> 12]]
+                         | psbox[1][m_sbox[1][r48l & 0xfff]]
+                         | psbox[2][m_sbox[2][r48r >> 12]]
+                         | psbox[3][m_sbox[3][r48r & 0xfff]];
+                       /*
+                        * Now that we've permuted things, complete f().
+                        */
+                       f ^= l;
+                       l = r;
+                       r = f;
+               }
+               r = l;
+               l = f;
+       }
+       /*
+        * Do final permutation (inverse of IP).
+        */
+       *l_out  = fp_maskl[0][l >> 24]
+               | fp_maskl[1][(l >> 16) & 0xff]
+               | fp_maskl[2][(l >> 8) & 0xff]
+               | fp_maskl[3][l & 0xff]
+               | fp_maskl[4][r >> 24]
+               | fp_maskl[5][(r >> 16) & 0xff]
+               | fp_maskl[6][(r >> 8) & 0xff]
+               | fp_maskl[7][r & 0xff];
+       *r_out  = fp_maskr[0][l >> 24]
+               | fp_maskr[1][(l >> 16) & 0xff]
+               | fp_maskr[2][(l >> 8) & 0xff]
+               | fp_maskr[3][l & 0xff]
+               | fp_maskr[4][r >> 24]
+               | fp_maskr[5][(r >> 16) & 0xff]
+               | fp_maskr[6][(r >> 8) & 0xff]
+               | fp_maskr[7][r & 0xff];
+       return(0);
+}
+
+static int
+des_cipher(const char *in, char *out, u_long salt, int count)
+{
+       u_int32_t       l_out, r_out, rawl, rawr;
+       int             retval;
+       union {
+               u_int32_t       *ui32;
+               const char      *c;
+       } trans;
+
+       if (!des_initialised)
+               des_init();
+
+       setup_salt(salt);
+
+       trans.c = in;
+       rawl = ntohl(*trans.ui32++);
+       rawr = ntohl(*trans.ui32);
+
+       retval = do_des(rawl, rawr, &l_out, &r_out, count);
+
+       trans.c = out;
+       *trans.ui32++ = htonl(l_out);
+       *trans.ui32 = htonl(r_out);
+       return(retval);
+}
+
+char *
+crypt_des(const char *key, const char *setting)
+{
+       int             i;
+       u_int32_t       count, salt, l, r0, r1, keybuf[2];
+       u_char          *p, *q;
+       static char     output[21];
+
+       if (!des_initialised)
+               des_init();
+
+       /*
+        * Copy the key, shifting each character up by one bit
+        * and padding with zeros.
+        */
+       q = (u_char *)keybuf;
+       while (q - (u_char *)keybuf - 8) {
+               *q++ = *key << 1;
+               if (*key != '\0')
+                       key++;
+       }
+       if (des_setkey((char *)keybuf))
+               return(NULL);
+
+       if (*setting == _PASSWORD_EFMT1) {
+               /*
+                * "new"-style:
+                *      setting - underscore, 4 bytes of count, 4 bytes of salt
+                *      key - unlimited characters
+                */
+               for (i = 1, count = 0L; i < 5; i++)
+                       count |= ascii_to_bin(setting[i]) << ((i - 1) * 6);
+
+               for (i = 5, salt = 0L; i < 9; i++)
+                       salt |= ascii_to_bin(setting[i]) << ((i - 5) * 6);
+
+               while (*key) {
+                       /*
+                        * Encrypt the key with itself.
+                        */
+                       if (des_cipher((char *)keybuf, (char *)keybuf, 0L, 1))
+                               return(NULL);
+                       /*
+                        * And XOR with the next 8 characters of the key.
+                        */
+                       q = (u_char *)keybuf;
+                       while (q - (u_char *)keybuf - 8 && *key)
+                               *q++ ^= *key++ << 1;
+
+                       if (des_setkey((char *)keybuf))
+                               return(NULL);
+               }
+               strncpy(output, setting, 9);
+
+               /*
+                * Double check that we weren't given a short setting.
+                * If we were, the above code will probably have created
+                * wierd values for count and salt, but we don't really care.
+                * Just make sure the output string doesn't have an extra
+                * NUL in it.
+                */
+               output[9] = '\0';
+               p = (u_char *)output + strlen(output);
+       } else {
+               /*
+                * "old"-style:
+                *      setting - 2 bytes of salt
+                *      key - up to 8 characters
+                */
+               count = 25;
+
+               salt = (ascii_to_bin(setting[1]) << 6)
+                    |  ascii_to_bin(setting[0]);
+
+               output[0] = setting[0];
+               /*
+                * If the encrypted password that the salt was extracted from
+                * is only 1 character long, the salt will be corrupted.  We
+                * need to ensure that the output string doesn't have an extra
+                * NUL in it!
+                */
+               output[1] = setting[1] ? setting[1] : output[0];
+
+               p = (u_char *)output + 2;
+       }
+       setup_salt(salt);
+       /*
+        * Do it.
+        */
+       if (do_des(0L, 0L, &r0, &r1, (int)count))
+               return(NULL);
+       /*
+        * Now encode the result...
+        */
+       l = (r0 >> 8);
+       *p++ = ascii64[(l >> 18) & 0x3f];
+       *p++ = ascii64[(l >> 12) & 0x3f];
+       *p++ = ascii64[(l >> 6) & 0x3f];
+       *p++ = ascii64[l & 0x3f];
+
+       l = (r0 << 16) | ((r1 >> 16) & 0xffff);
+       *p++ = ascii64[(l >> 18) & 0x3f];
+       *p++ = ascii64[(l >> 12) & 0x3f];
+       *p++ = ascii64[(l >> 6) & 0x3f];
+       *p++ = ascii64[l & 0x3f];
+
+       l = r1 << 2;
+       *p++ = ascii64[(l >> 12) & 0x3f];
+       *p++ = ascii64[(l >> 6) & 0x3f];
+       *p++ = ascii64[l & 0x3f];
+       *p = 0;
+
+       return(output);
+}
+/* END: https://github.com/freebsd/freebsd/blob/master/secure/lib/libcrypt/crypt-des.c */
+
+
+/* START: https://github.com/freebsd/freebsd/blob/master/lib/libcrypt/crypt-md5.c */
+char *
+crypt_md5(const char *pw, const char *salt)
+{
+       MD5_CTX ctx,ctx1;
+       unsigned long l;
+       int sl, pl;
+       u_int i;
+       u_char final[MD5_SIZE];
+       static const char *sp, *ep;
+       static char passwd[120], *p;
+       static const char *magic = "$1$";
+
+       /* Refine the Salt first */
+       sp = salt;
+
+       /* If it starts with the magic string, then skip that */
+       if(!strncmp(sp, magic, strlen(magic)))
+               sp += strlen(magic);
+
+       /* It stops at the first '$', max 8 chars */
+       for(ep = sp; *ep && *ep != '$' && ep < (sp + 8); ep++)
+               continue;
+
+       /* get the length of the true salt */
+       sl = ep - sp;
+
+       MD5Init(&ctx);
+
+       /* The password first, since that is what is most unknown */
+       MD5Update(&ctx, (const u_char *)pw, strlen(pw));
+
+       /* Then our magic string */
+       MD5Update(&ctx, (const u_char *)magic, strlen(magic));
+
+       /* Then the raw salt */
+       MD5Update(&ctx, (const u_char *)sp, (u_int)sl);
+
+       /* Then just as many characters of the MD5(pw,salt,pw) */
+       MD5Init(&ctx1);
+       MD5Update(&ctx1, (const u_char *)pw, strlen(pw));
+       MD5Update(&ctx1, (const u_char *)sp, (u_int)sl);
+       MD5Update(&ctx1, (const u_char *)pw, strlen(pw));
+       MD5Final(final, &ctx1);
+       for(pl = (int)strlen(pw); pl > 0; pl -= MD5_SIZE)
+               MD5Update(&ctx, (const u_char *)final,
+                   (u_int)(pl > MD5_SIZE ? MD5_SIZE : pl));
+
+       /* Don't leave anything around in vm they could use. */
+       memset(final, 0, sizeof(final));
+
+       /* Then something really weird... */
+       for (i = strlen(pw); i; i >>= 1)
+               if(i & 1)
+                   MD5Update(&ctx, (const u_char *)final, 1);
+               else
+                   MD5Update(&ctx, (const u_char *)pw, 1);
+
+       /* Now make the output string */
+       strcpy(passwd, magic);
+       strncat(passwd, sp, (u_int)sl);
+       strcat(passwd, "$");
+
+       MD5Final(final, &ctx);
+
+       /*
+        * and now, just to make sure things don't run too fast
+        * On a 60 Mhz Pentium this takes 34 msec, so you would
+        * need 30 seconds to build a 1000 entry dictionary...
+        */
+       for(i = 0; i < 1000; i++) {
+               MD5Init(&ctx1);
+               if(i & 1)
+                       MD5Update(&ctx1, (const u_char *)pw, strlen(pw));
+               else
+                       MD5Update(&ctx1, (const u_char *)final, MD5_SIZE);
+
+               if(i % 3)
+                       MD5Update(&ctx1, (const u_char *)sp, (u_int)sl);
+
+               if(i % 7)
+                       MD5Update(&ctx1, (const u_char *)pw, strlen(pw));
+
+               if(i & 1)
+                       MD5Update(&ctx1, (const u_char *)final, MD5_SIZE);
+               else
+                       MD5Update(&ctx1, (const u_char *)pw, strlen(pw));
+               MD5Final(final, &ctx1);
+       }
+
+       p = passwd + strlen(passwd);
+
+       l = (final[ 0]<<16) | (final[ 6]<<8) | final[12];
+       _crypt_to64(p, l, 4); p += 4;
+       l = (final[ 1]<<16) | (final[ 7]<<8) | final[13];
+       _crypt_to64(p, l, 4); p += 4;
+       l = (final[ 2]<<16) | (final[ 8]<<8) | final[14];
+       _crypt_to64(p, l, 4); p += 4;
+       l = (final[ 3]<<16) | (final[ 9]<<8) | final[15];
+       _crypt_to64(p, l, 4); p += 4;
+       l = (final[ 4]<<16) | (final[10]<<8) | final[ 5];
+       _crypt_to64(p, l, 4); p += 4;
+       l = final[11];
+       _crypt_to64(p, l, 2); p += 2;
+       *p = '\0';
+
+       /* Don't leave anything around in vm they could use. */
+       memset(final, 0, sizeof(final));
+
+       return (passwd);
+}
+/* END: https://github.com/freebsd/freebsd/blob/master/lib/libcrypt/crypt-md5.c */
+
+
+/* START: https://github.com/freebsd/freebsd/blob/master/lib/libcrypt/crypt-sha256.c */
+static const char sha256_salt_prefix[] = "$5$";
+
+/* Prefix for optional rounds specification. */
+static const char sha256_rounds_prefix[] = "rounds=";
+
+/* Maximum salt string length. */
+#define SALT_LEN_MAX 16
+/* Default number of rounds if not explicitly specified. */
+#define ROUNDS_DEFAULT 5000
+/* Minimum number of rounds. */
+#define ROUNDS_MIN 1000
+/* Maximum number of rounds. */
+#define ROUNDS_MAX 999999999
+
+static char *
+crypt_sha256_r(const char *key, const char *salt, char *buffer, int buflen)
+{
+       u_long srounds;
+       int n;
+       uint8_t alt_result[32], temp_result[32];
+       SHA256_CTX ctx, alt_ctx;
+       size_t salt_len, key_len, cnt, rounds;
+       char *cp, *copied_key, *copied_salt, *p_bytes, *s_bytes, *endp;
+       const char *num;
+       bool rounds_custom;
+
+       copied_key = NULL;
+       copied_salt = NULL;
+
+       /* Default number of rounds. */
+       rounds = ROUNDS_DEFAULT;
+       rounds_custom = false;
+
+       /* Find beginning of salt string. The prefix should normally always
+        * be present. Just in case it is not. */
+       if (strncmp(sha256_salt_prefix, salt, sizeof(sha256_salt_prefix) - 1) == 0)
+               /* Skip salt prefix. */
+               salt += sizeof(sha256_salt_prefix) - 1;
+
+       if (strncmp(salt, sha256_rounds_prefix, sizeof(sha256_rounds_prefix) - 1)
+           == 0) {
+               num = salt + sizeof(sha256_rounds_prefix) - 1;
+               srounds = strtoul(num, &endp, 10);
+
+               if (*endp == '$') {
+                       salt = endp + 1;
+                       rounds = MAX(ROUNDS_MIN, MIN(srounds, ROUNDS_MAX));
+                       rounds_custom = true;
+               }
+       }
+
+       salt_len = MIN(strcspn(salt, "$"), SALT_LEN_MAX);
+       key_len = strlen(key);
+
+       /* Prepare for the real work. */
+       SHA256_Init(&ctx);
+
+       /* Add the key string. */
+       SHA256_Update(&ctx, key, key_len);
+
+       /* The last part is the salt string. This must be at most 8
+        * characters and it ends at the first `$' character (for
+        * compatibility with existing implementations). */
+       SHA256_Update(&ctx, salt, salt_len);
+
+       /* Compute alternate SHA256 sum with input KEY, SALT, and KEY. The
+        * final result will be added to the first context. */
+       SHA256_Init(&alt_ctx);
+
+       /* Add key. */
+       SHA256_Update(&alt_ctx, key, key_len);
+
+       /* Add salt. */
+       SHA256_Update(&alt_ctx, salt, salt_len);
+
+       /* Add key again. */
+       SHA256_Update(&alt_ctx, key, key_len);
+
+       /* Now get result of this (32 bytes) and add it to the other context. */
+       SHA256_Final(alt_result, &alt_ctx);
+
+       /* Add for any character in the key one byte of the alternate sum. */
+       for (cnt = key_len; cnt > 32; cnt -= 32)
+               SHA256_Update(&ctx, alt_result, 32);
+       SHA256_Update(&ctx, alt_result, cnt);
+
+       /* Take the binary representation of the length of the key and for
+        * every 1 add the alternate sum, for every 0 the key. */
+       for (cnt = key_len; cnt > 0; cnt >>= 1)
+               if ((cnt & 1) != 0)
+                       SHA256_Update(&ctx, alt_result, 32);
+               else
+                       SHA256_Update(&ctx, key, key_len);
+
+       /* Create intermediate result. */
+       SHA256_Final(alt_result, &ctx);
+
+       /* Start computation of P byte sequence. */
+       SHA256_Init(&alt_ctx);
+
+       /* For every character in the password add the entire password. */
+       for (cnt = 0; cnt < key_len; ++cnt)
+               SHA256_Update(&alt_ctx, key, key_len);
+
+       /* Finish the digest. */
+       SHA256_Final(temp_result, &alt_ctx);
+
+       /* Create byte sequence P. */
+       cp = p_bytes = alloca(key_len);
+       for (cnt = key_len; cnt >= 32; cnt -= 32) {
+               memcpy(cp, temp_result, 32);
+               cp += 32;
+       }
+       memcpy(cp, temp_result, cnt);
+
+       /* Start computation of S byte sequence. */
+       SHA256_Init(&alt_ctx);
+
+       /* For every character in the password add the entire password. */
+       for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt)
+               SHA256_Update(&alt_ctx, salt, salt_len);
+
+       /* Finish the digest. */
+       SHA256_Final(temp_result, &alt_ctx);
+
+       /* Create byte sequence S. */
+       cp = s_bytes = alloca(salt_len);
+       for (cnt = salt_len; cnt >= 32; cnt -= 32) {
+               memcpy(cp, temp_result, 32);
+               cp += 32;
+       }
+       memcpy(cp, temp_result, cnt);
+
+       /* Repeatedly run the collected hash value through SHA256 to burn CPU
+        * cycles. */
+       for (cnt = 0; cnt < rounds; ++cnt) {
+               /* New context. */
+               SHA256_Init(&ctx);
+
+               /* Add key or last result. */
+               if ((cnt & 1) != 0)
+                       SHA256_Update(&ctx, p_bytes, key_len);
+               else
+                       SHA256_Update(&ctx, alt_result, 32);
+
+               /* Add salt for numbers not divisible by 3. */
+               if (cnt % 3 != 0)
+                       SHA256_Update(&ctx, s_bytes, salt_len);
+
+               /* Add key for numbers not divisible by 7. */
+               if (cnt % 7 != 0)
+                       SHA256_Update(&ctx, p_bytes, key_len);
+
+               /* Add key or last result. */
+               if ((cnt & 1) != 0)
+                       SHA256_Update(&ctx, alt_result, 32);
+               else
+                       SHA256_Update(&ctx, p_bytes, key_len);
+
+               /* Create intermediate result. */
+               SHA256_Final(alt_result, &ctx);
+       }
+
+       /* Now we can construct the result string. It consists of three
+        * parts. */
+       cp = stpncpy(buffer, sha256_salt_prefix, MAX(0, buflen));
+       buflen -= sizeof(sha256_salt_prefix) - 1;
+
+       if (rounds_custom) {
+               n = snprintf(cp, MAX(0, buflen), "%s%zu$",
+                        sha256_rounds_prefix, rounds);
+
+               cp += n;
+               buflen -= n;
+       }
+
+       cp = stpncpy(cp, salt, MIN((size_t)MAX(0, buflen), salt_len));
+       buflen -= MIN((size_t)MAX(0, buflen), salt_len);
+
+       if (buflen > 0) {
+               *cp++ = '$';
+               --buflen;
+       }
+
+       b64_from_24bit(alt_result[0], alt_result[10], alt_result[20], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[21], alt_result[1], alt_result[11], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[12], alt_result[22], alt_result[2], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[3], alt_result[13], alt_result[23], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[24], alt_result[4], alt_result[14], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[15], alt_result[25], alt_result[5], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[6], alt_result[16], alt_result[26], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[27], alt_result[7], alt_result[17], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[18], alt_result[28], alt_result[8], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[9], alt_result[19], alt_result[29], 4, &buflen, &cp);
+       b64_from_24bit(0, alt_result[31], alt_result[30], 3, &buflen, &cp);
+       if (buflen <= 0) {
+               errno = ERANGE;
+               buffer = NULL;
+       }
+       else
+               *cp = '\0';     /* Terminate the string. */
+
+       /* Clear the buffer for the intermediate result so that people
+        * attaching to processes or reading core dumps cannot get any
+        * information. We do it in this way to clear correct_words[] inside
+        * the SHA256 implementation as well. */
+       SHA256_Init(&ctx);
+       SHA256_Final(alt_result, &ctx);
+       memset(temp_result, '\0', sizeof(temp_result));
+       memset(p_bytes, '\0', key_len);
+       memset(s_bytes, '\0', salt_len);
+       memset(&ctx, '\0', sizeof(ctx));
+       memset(&alt_ctx, '\0', sizeof(alt_ctx));
+       if (copied_key != NULL)
+               memset(copied_key, '\0', key_len);
+       if (copied_salt != NULL)
+               memset(copied_salt, '\0', salt_len);
+
+       return buffer;
+}
+
+/* This entry point is equivalent to crypt(3). */
+char* crypt_sha256(const char *key, const char *salt)
+{
+       /* We don't want to have an arbitrary limit in the size of the
+        * password. We can compute an upper bound for the size of the
+        * result in advance and so we can prepare the buffer we pass to
+        * `crypt_sha256_r'. */
+       static char *buffer;
+       static int buflen;
+       int needed;
+       char *new_buffer;
+
+       needed = (sizeof(sha256_salt_prefix) - 1
+             + sizeof(sha256_rounds_prefix) + 9 + 1
+             + strlen(salt) + 1 + 43 + 1);
+
+       if (buflen < needed) {
+               new_buffer = (char *)realloc(buffer, needed);
+
+               if (new_buffer == NULL)
+                       return NULL;
+
+               buffer = new_buffer;
+               buflen = needed;
+       }
+
+       return crypt_sha256_r(key, salt, buffer, buflen);
+}
+/* END: https://github.com/freebsd/freebsd/blob/master/lib/libcrypt/crypt-sha256.c */
+
+
+/* START: https://github.com/freebsd/freebsd/blob/master/lib/libcrypt/crypt-sha512.c */
+/* Define our magic string to mark salt for SHA512 "encryption" replacement. */
+static const char sha512_salt_prefix[] = "$6$";
+
+/* Prefix for optional rounds specification. */
+static const char sha512_rounds_prefix[] = "rounds=";
+
+/* Maximum salt string length. */
+#define SALT_LEN_MAX 16
+/* Default number of rounds if not explicitly specified. */
+#define ROUNDS_DEFAULT 5000
+/* Minimum number of rounds. */
+#define ROUNDS_MIN 1000
+/* Maximum number of rounds. */
+#define ROUNDS_MAX 999999999
+
+static char *
+crypt_sha512_r(const char *key, const char *salt, char *buffer, int buflen)
+{
+       u_long srounds;
+       int n;
+       uint8_t alt_result[64], temp_result[64];
+       SHA512_CTX ctx, alt_ctx;
+       size_t salt_len, key_len, cnt, rounds;
+       char *cp, *copied_key, *copied_salt, *p_bytes, *s_bytes, *endp;
+       const char *num;
+       bool rounds_custom;
+
+       copied_key = NULL;
+       copied_salt = NULL;
+
+       /* Default number of rounds. */
+       rounds = ROUNDS_DEFAULT;
+       rounds_custom = false;
+
+       /* Find beginning of salt string. The prefix should normally always
+        * be present. Just in case it is not. */
+       if (strncmp(sha512_salt_prefix, salt, sizeof(sha512_salt_prefix) - 1) == 0)
+               /* Skip salt prefix. */
+               salt += sizeof(sha512_salt_prefix) - 1;
+
+       if (strncmp(salt, sha512_rounds_prefix, sizeof(sha512_rounds_prefix) - 1)
+           == 0) {
+               num = salt + sizeof(sha512_rounds_prefix) - 1;
+               srounds = strtoul(num, &endp, 10);
+
+               if (*endp == '$') {
+                       salt = endp + 1;
+                       rounds = MAX(ROUNDS_MIN, MIN(srounds, ROUNDS_MAX));
+                       rounds_custom = true;
+               }
+       }
+
+       salt_len = MIN(strcspn(salt, "$"), SALT_LEN_MAX);
+       key_len = strlen(key);
+
+       /* Prepare for the real work. */
+       SHA512_Init(&ctx);
+
+       /* Add the key string. */
+       SHA512_Update(&ctx, key, key_len);
+
+       /* The last part is the salt string. This must be at most 8
+        * characters and it ends at the first `$' character (for
+        * compatibility with existing implementations). */
+       SHA512_Update(&ctx, salt, salt_len);
+
+       /* Compute alternate SHA512 sum with input KEY, SALT, and KEY. The
+        * final result will be added to the first context. */
+       SHA512_Init(&alt_ctx);
+
+       /* Add key. */
+       SHA512_Update(&alt_ctx, key, key_len);
+
+       /* Add salt. */
+       SHA512_Update(&alt_ctx, salt, salt_len);
+
+       /* Add key again. */
+       SHA512_Update(&alt_ctx, key, key_len);
+
+       /* Now get result of this (64 bytes) and add it to the other context. */
+       SHA512_Final(alt_result, &alt_ctx);
+
+       /* Add for any character in the key one byte of the alternate sum. */
+       for (cnt = key_len; cnt > 64; cnt -= 64)
+               SHA512_Update(&ctx, alt_result, 64);
+       SHA512_Update(&ctx, alt_result, cnt);
+
+       /* Take the binary representation of the length of the key and for
+        * every 1 add the alternate sum, for every 0 the key. */
+       for (cnt = key_len; cnt > 0; cnt >>= 1)
+               if ((cnt & 1) != 0)
+                       SHA512_Update(&ctx, alt_result, 64);
+               else
+                       SHA512_Update(&ctx, key, key_len);
+
+       /* Create intermediate result. */
+       SHA512_Final(alt_result, &ctx);
+
+       /* Start computation of P byte sequence. */
+       SHA512_Init(&alt_ctx);
+
+       /* For every character in the password add the entire password. */
+       for (cnt = 0; cnt < key_len; ++cnt)
+               SHA512_Update(&alt_ctx, key, key_len);
+
+       /* Finish the digest. */
+       SHA512_Final(temp_result, &alt_ctx);
+
+       /* Create byte sequence P. */
+       cp = p_bytes = alloca(key_len);
+       for (cnt = key_len; cnt >= 64; cnt -= 64) {
+               memcpy(cp, temp_result, 64);
+               cp += 64;
+       }
+       memcpy(cp, temp_result, cnt);
+
+       /* Start computation of S byte sequence. */
+       SHA512_Init(&alt_ctx);
+
+       /* For every character in the password add the entire password. */
+       for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt)
+               SHA512_Update(&alt_ctx, salt, salt_len);
+
+       /* Finish the digest. */
+       SHA512_Final(temp_result, &alt_ctx);
+
+       /* Create byte sequence S. */
+       cp = s_bytes = alloca(salt_len);
+       for (cnt = salt_len; cnt >= 64; cnt -= 64) {
+               memcpy(cp, temp_result, 64);
+               cp += 64;
+       }
+       memcpy(cp, temp_result, cnt);
+
+       /* Repeatedly run the collected hash value through SHA512 to burn CPU
+        * cycles. */
+       for (cnt = 0; cnt < rounds; ++cnt) {
+               /* New context. */
+               SHA512_Init(&ctx);
+
+               /* Add key or last result. */
+               if ((cnt & 1) != 0)
+                       SHA512_Update(&ctx, p_bytes, key_len);
+               else
+                       SHA512_Update(&ctx, alt_result, 64);
+
+               /* Add salt for numbers not divisible by 3. */
+               if (cnt % 3 != 0)
+                       SHA512_Update(&ctx, s_bytes, salt_len);
+
+               /* Add key for numbers not divisible by 7. */
+               if (cnt % 7 != 0)
+                       SHA512_Update(&ctx, p_bytes, key_len);
+
+               /* Add key or last result. */
+               if ((cnt & 1) != 0)
+                       SHA512_Update(&ctx, alt_result, 64);
+               else
+                       SHA512_Update(&ctx, p_bytes, key_len);
+
+               /* Create intermediate result. */
+               SHA512_Final(alt_result, &ctx);
+       }
+
+       /* Now we can construct the result string. It consists of three
+        * parts. */
+       cp = stpncpy(buffer, sha512_salt_prefix, MAX(0, buflen));
+       buflen -= sizeof(sha512_salt_prefix) - 1;
+
+       if (rounds_custom) {
+               n = snprintf(cp, MAX(0, buflen), "%s%zu$",
+                        sha512_rounds_prefix, rounds);
+
+               cp += n;
+               buflen -= n;
+       }
+
+       cp = stpncpy(cp, salt, MIN((size_t)MAX(0, buflen), salt_len));
+       buflen -= MIN((size_t)MAX(0, buflen), salt_len);
+
+       if (buflen > 0) {
+               *cp++ = '$';
+               --buflen;
+       }
+
+       b64_from_24bit(alt_result[0], alt_result[21], alt_result[42], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[22], alt_result[43], alt_result[1], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[44], alt_result[2], alt_result[23], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[3], alt_result[24], alt_result[45], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[25], alt_result[46], alt_result[4], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[47], alt_result[5], alt_result[26], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[6], alt_result[27], alt_result[48], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[28], alt_result[49], alt_result[7], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[50], alt_result[8], alt_result[29], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[9], alt_result[30], alt_result[51], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[31], alt_result[52], alt_result[10], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[53], alt_result[11], alt_result[32], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[12], alt_result[33], alt_result[54], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[34], alt_result[55], alt_result[13], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[56], alt_result[14], alt_result[35], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[15], alt_result[36], alt_result[57], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[37], alt_result[58], alt_result[16], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[59], alt_result[17], alt_result[38], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[18], alt_result[39], alt_result[60], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[40], alt_result[61], alt_result[19], 4, &buflen, &cp);
+       b64_from_24bit(alt_result[62], alt_result[20], alt_result[41], 4, &buflen, &cp);
+       b64_from_24bit(0, 0, alt_result[63], 2, &buflen, &cp);
+
+       if (buflen <= 0) {
+               errno = ERANGE;
+               buffer = NULL;
+       }
+       else
+               *cp = '\0';     /* Terminate the string. */
+
+       /* Clear the buffer for the intermediate result so that people
+        * attaching to processes or reading core dumps cannot get any
+        * information. We do it in this way to clear correct_words[] inside
+        * the SHA512 implementation as well. */
+       SHA512_Init(&ctx);
+       SHA512_Final(alt_result, &ctx);
+       memset(temp_result, '\0', sizeof(temp_result));
+       memset(p_bytes, '\0', key_len);
+       memset(s_bytes, '\0', salt_len);
+       memset(&ctx, '\0', sizeof(ctx));
+       memset(&alt_ctx, '\0', sizeof(alt_ctx));
+       if (copied_key != NULL)
+               memset(copied_key, '\0', key_len);
+       if (copied_salt != NULL)
+               memset(copied_salt, '\0', salt_len);
+
+       return buffer;
+}
+
+/* This entry point is equivalent to crypt(3). */
+char *
+crypt_sha512(const char *key, const char *salt)
+{
+       /* We don't want to have an arbitrary limit in the size of the
+        * password. We can compute an upper bound for the size of the
+        * result in advance and so we can prepare the buffer we pass to
+        * `crypt_sha512_r'. */
+       static char *buffer;
+       static int buflen;
+       int needed;
+       char *new_buffer;
+
+       needed = (sizeof(sha512_salt_prefix) - 1
+             + sizeof(sha512_rounds_prefix) + 9 + 1
+             + strlen(salt) + 1 + 86 + 1);
+
+       if (buflen < needed) {
+               new_buffer = (char *)realloc(buffer, needed);
+
+               if (new_buffer == NULL)
+                       return NULL;
+
+               buffer = new_buffer;
+               buflen = needed;
+       }
+
+       return crypt_sha512_r(key, salt, buffer, buflen);
+}
+/* END: https://github.com/freebsd/freebsd/blob/master/lib/libcrypt/crypt-sha512.c */
+
+
+/** From https://github.com/freebsd/freebsd/blob/master/lib/libcrypt/crypt.c */
+static const struct crypt_format {
+       const char* const name;
+       const char* const magic;
+       char* (*const func)(char const*, char const*);
+} crypt_formats[] = {
+       { "des", "_", crypt_des },
+       { "md5", "$1$", crypt_md5 },
+       { "sha256", "$5$", crypt_sha256 },
+       { "sha512", "$6$", crypt_sha512 },
+       { NULL, NULL, NULL }
+};
+
+
+char* crypt(const char* key, const char* salt)
+{
+       int len;
+       const struct crypt_format *cf;
+
+       for (cf = crypt_formats; cf->name != NULL; ++cf) {
+               if (cf->magic != NULL && strstr(salt, cf->magic) == salt) {
+                       return cf->func(key, salt);
+               }
+       }
+
+       len = strlen(salt);
+       if ((len == 13 || len == 2) && strspn(salt, DES_SALT_ALPHABET) == len) {
+               return (crypt_des(key, salt));
+       }
+
+       return crypt_formats[0].func(key, salt);
+}
index f1dc74c..6216a6e 100755 (executable)
@@ -1,7 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://curl.haxx.se/
 TERMUX_PKG_DESCRIPTION="Easy-to-use client-side URL transfer library"
 TERMUX_PKG_DEPENDS="openssl"
-TERMUX_PKG_VERSION=7.47.1
+TERMUX_PKG_VERSION=7.48.0
 TERMUX_PKG_SRCURL=http://curl.haxx.se/download/curl-${TERMUX_PKG_VERSION}.tar.bz2
 export TERMUX_CA_BUNDLE=$TERMUX_PREFIX/etc/tls/cert.pem
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--with-ssl --without-libidn --with-ca-bundle=$TERMUX_CA_BUNDLE"
index 804323f..416fa29 100755 (executable)
@@ -1,5 +1,5 @@
 TERMUX_PKG_HOMEPAGE=http://www.sqlite.org/
 TERMUX_PKG_DESCRIPTION="Software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine"
-TERMUX_PKG_VERSION=3.11.1
-TERMUX_PKG_SRCURL=https://www.sqlite.org/2016/sqlite-autoconf-3110100.tar.gz
+TERMUX_PKG_VERSION=3.12.0
+TERMUX_PKG_SRCURL=https://www.sqlite.org/2016/sqlite-autoconf-3120000.tar.gz
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--enable-readline"
diff --git a/packages/mosh/build.sh b/packages/mosh/build.sh
new file mode 100644 (file)
index 0000000..1df5930
--- /dev/null
@@ -0,0 +1,23 @@
+TERMUX_PKG_HOMEPAGE=http://mosh.mit.edu/
+TERMUX_PKG_DESCRIPTION="Mobile shell that supports roaming and intelligent local echo"
+TERMUX_PKG_VERSION=1.2.5.20160402
+TERMUX_PKG_SRCURL=http://mosh.mit.edu/mosh-${TERMUX_PKG_VERSION}.tar.gz
+_COMMIT=f30738e3256e90850e945c08624fce90b1ba78a1
+TERMUX_PKG_SRCURL=https://github.com/mobile-shell/mosh/archive/${_COMMIT}.zip
+TERMUX_PKG_FOLDERNAME=mosh-${_COMMIT}
+
+TERMUX_PKG_DEPENDS="libandroid-support, protobuf, ncurses, openssl, libutil, perl, libgnustl"
+
+export PROTOC=$TERMUX_TOPDIR/protobuf/host-build/src/protoc
+
+LDFLAGS+=" -lgnustl_shared"
+
+termux_step_pre_configure () {
+       cd $TERMUX_PKG_SRCDIR
+       ./autogen.sh
+}
+
+termux_step_post_make_install () {
+       # Avoid env and specify perl directly:
+       sed -i'' '1 s|^.*$|#! /bin/perl|' $TERMUX_PREFIX/bin/mosh
+}
index 063f434..16e4d9b 100644 (file)
@@ -1,8 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://www.mutt.org/
 TERMUX_PKG_DESCRIPTION="Mail client"
-TERMUX_PKG_VERSION=1.5.24
-TERMUX_PKG_BUILD_REVISION=3
-TERMUX_PKG_SRCURL=https://bitbucket.org/mutt/mutt/downloads/mutt-${TERMUX_PKG_VERSION}.tar.gz
+TERMUX_PKG_VERSION=1.6.0
+TERMUX_PKG_SRCURL=ftp://ftp.mutt.org/pub/mutt/mutt-${TERMUX_PKG_VERSION}.tar.gz
 TERMUX_PKG_DEPENDS="libandroid-support, ncurses, gdbm, openssl, libsasl, gpgme"
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--enable-smtp --enable-imap --enable-pop --with-mailpath=$TERMUX_PREFIX/var/mail --with-ssl --enable-compressed --without-idn --enable-hcache --with-sasl"
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-exec-shell=$TERMUX_PREFIX/bin/sh"
diff --git a/packages/mutt/getdomain.c.patch b/packages/mutt/getdomain.c.patch
new file mode 100644 (file)
index 0000000..8ddeb41
--- /dev/null
@@ -0,0 +1,13 @@
+diff -u -r ../mutt-1.6.0/getdomain.c ./getdomain.c
+--- ../mutt-1.6.0/getdomain.c  2016-04-02 14:12:22.000000000 -0400
++++ ./getdomain.c      2016-04-06 06:18:24.614628451 -0400
+@@ -44,7 +44,9 @@
+   hints.ai_flags = AI_CANONNAME;
+   hints.ai_family = AF_UNSPEC;
++#ifdef _SC_HOST_NAME_MAX
+   if ((node_len = sysconf(_SC_HOST_NAME_MAX)) == -1)
++#endif
+     node_len = STRING;
+   node = safe_malloc(node_len + 1);
+   if (gethostname(node, node_len))
index 449d97e..1dc35f7 100644 (file)
@@ -1,6 +1,6 @@
 TERMUX_PKG_HOMEPAGE=http://nodejs.org/
 TERMUX_PKG_DESCRIPTION="Platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications"
-TERMUX_PKG_VERSION=5.9.0
+TERMUX_PKG_VERSION=5.10.0
 TERMUX_PKG_SRCURL=https://nodejs.org/dist/v${TERMUX_PKG_VERSION}/node-v${TERMUX_PKG_VERSION}.tar.gz
 TERMUX_PKG_DEPENDS="openssl, libuv"
 TERMUX_PKG_RM_AFTER_INSTALL="lib/node_modules/npm/html lib/node_modules/npm/make.bat share/systemtap lib/dtrace"
index f724155..9f3e976 100644 (file)
@@ -1,12 +1,12 @@
-diff -u -r ../node-v0.12.3/lib/os.js ./lib/os.js
---- ../node-v0.12.3/lib/os.js  2015-05-13 20:30:45.000000000 -0400
-+++ ./lib/os.js        2015-05-22 13:23:14.286889554 -0400
-@@ -51,7 +51,7 @@
-     return process.env.TMPDIR ||
+diff -u -r ../node-v5.10.0/lib/os.js ./lib/os.js
+--- ../node-v5.10.0/lib/os.js  2016-03-31 21:52:17.000000000 -0400
++++ ./lib/os.js        2016-04-04 04:46:05.148105544 -0400
+@@ -36,7 +36,7 @@
+     path = process.env.TMPDIR ||
             process.env.TMP ||
             process.env.TEMP ||
 -           '/tmp';
 +           '@TERMUX_PREFIX@/tmp';
+     if (path.length > 1 && path.endsWith('/'))
+       path = path.slice(0, -1);
    }
- };
index 72b00c6..e761874 100644 (file)
@@ -1,13 +1,15 @@
 TERMUX_PKG_HOMEPAGE=http://picolisp.com
 TERMUX_PKG_DESCRIPTION="Lisp interpreter and application server framework"
-TERMUX_PKG_VERSION=16.3.1
+TERMUX_PKG_DEPENDS="libcrypt, openssl"
+TERMUX_PKG_VERSION=16.4.1
+TERMUX_PKG_BUILD_REVISION=1
 TERMUX_PKG_SRCURL=http://software-lab.de/picoLisp.tgz
 TERMUX_PKG_FOLDERNAME=picoLisp
 TERMUX_PKG_BUILD_IN_SRC=true
 
 termux_step_pre_configure() {
        # Validate that we have the right version:
-       grep -q '16 3 1' src64/version.l
+       grep -q '16 4 1' src64/version.l
 
        TERMUX_PKG_SRCDIR=$TERMUX_PKG_SRCDIR/src
        if [ $TERMUX_ARCH_BITS = 64 ]; then
@@ -22,12 +24,14 @@ termux_step_pre_configure() {
                fi
        fi
        TERMUX_PKG_BUILDDIR=$TERMUX_PKG_SRCDIR
+       ORIG_CFLAGS="$CFLAGS"
        CFLAGS+=" -c $LDFLAGS $CPPFLAGS"
 }
 
 termux_step_make_install () {
+       cd $TERMUX_PKG_SRCDIR/
+
        if [ $TERMUX_ARCH_BITS = "64" ]; then
-               cd $TERMUX_PKG_SRCDIR/
                $CC -pie -o ../bin/picolisp -rdynamic ${TERMUX_PKG_EXTRA_MAKE_ARGS}.base.s -lc -lm -ldl
                chmod +x ../bin/picolisp
                $CC -pie -o ../lib/ext -shared -export-dynamic ${TERMUX_PKG_EXTRA_MAKE_ARGS}.ext.s
@@ -47,4 +51,11 @@ termux_step_make_install () {
        sed -i "1 s|^.*$|#!$TERMUX_PREFIX/bin/picolisp $TERMUX_PREFIX/lib/picolisp/lib.l|g" $TERMUX_PREFIX/lib/picolisp/bin/pil
 
        ( cd $TERMUX_PREFIX/bin && ln -f -s ../lib/picolisp/bin/picolisp picolisp && ln -f -s ../lib/picolisp/bin/pil pil )
+
+       # Bundled tools:
+       $CC $ORIG_CFLAGS $CPPFLAGS $LDFLAGS -o $TERMUX_PREFIX/bin/ssl ../src/ssl.c -lssl -lcrypto
+       $CC $ORIG_CFLAGS $CPPFLAGS $LDFLAGS -o $TERMUX_PREFIX/bin/httpGate ../src/httpGate.c -lssl -lcrypto
+
+       # Man pages:
+       cp $TERMUX_PKG_SRCDIR/../man/man1/{pil,picolisp}.1 $TERMUX_PREFIX/share/man/man1/
 }
index cbdcc95..59233bd 100644 (file)
@@ -1,7 +1,7 @@
 diff -u -r ../picoLisp/src/Makefile ./src/Makefile
 --- ../picoLisp/src/Makefile   2016-02-02 10:52:49.000000000 -0500
-+++ ./src/Makefile     2016-02-08 06:15:50.293964319 -0500
-@@ -6,118 +6,13 @@
++++ ./src/Makefile     2016-04-12 05:55:14.050621923 -0400
+@@ -6,119 +6,14 @@
  
  picoFiles = main.c gc.c apply.c flow.c sym.c subr.c big.c io.c net.c tab.c
  
@@ -116,12 +116,14 @@ diff -u -r ../picoLisp/src/Makefile ./src/Makefile
 -endif
 -endif
 -endif
+-
 +CCLD = $(CC)
  
-+LCRYPT = 
++LCRYPT = -lcrypt
 +OS = Android
 +PICOLISP-FLAGS = -rdynamic -lm $(LDFLAGS)
 +DYNAMIC-LIB-FLAGS = -shared -export-dynamic $(LDFLAGS) -lm
++ 
  picolisp: $(bin)/picolisp $(lib)/ext$(dll) $(lib)/ht$(dll)
  tools: $(bin)/lat1 $(bin)/utf2 $(bin)/balance
+ gate: $(bin)/ssl $(bin)/httpGate
index cfb787b..cb246bd 100644 (file)
@@ -1,19 +1,11 @@
-The crypt(3) function is not available in Android, so remove support
-in ext for now.
-
 diff -u -r ../picoLisp/src/ext.c ./src/ext.c
---- ../picoLisp/src/ext.c      2015-11-27 02:25:22.000000000 -0500
-+++ ./src/ext.c        2016-02-08 06:19:58.405969024 -0500
-@@ -250,6 +250,7 @@
-    return T;
- }
+--- ../picoLisp/src/ext.c      2016-04-01 04:05:10.000000000 -0400
++++ ./src/ext.c        2016-04-13 06:40:31.791712225 -0400
+@@ -3,6 +3,7 @@
+  */
  
-+#ifndef __ANDROID__
- /*** Password hashing ***/
- // (ext:Crypt 'key 'salt) -> str
- any Crypt(any x) {
-@@ -269,3 +270,4 @@
-       }
-    }
- }
-+#endif
+ #include "pico.h"
++#include <crypt.h>
+ /*** Soundex Algorithm ***/
+ static int SnxTab[] = {
index 6a872fd..a1c9a81 100644 (file)
@@ -1,6 +1,7 @@
 TERMUX_PKG_HOMEPAGE=https://packages.debian.org/sid/procps
 TERMUX_PKG_DESCRIPTION="Utilities that give information about processes using the /proc filesystem"
 TERMUX_PKG_VERSION=3.3.11
+TERMUX_PKG_BUILD_REVISION=1
 TERMUX_PKG_SRCURL=http://downloads.sourceforge.net/project/procps-ng/Production/procps-ng-${TERMUX_PKG_VERSION}.tar.xz
 TERMUX_PKG_BUILD_IN_SRC=yes
 TERMUX_PKG_FOLDERNAME=procps-ng-${TERMUX_PKG_VERSION}
diff --git a/packages/procps/pgrep.c.patch b/packages/procps/pgrep.c.patch
new file mode 100644 (file)
index 0000000..3e800bd
--- /dev/null
@@ -0,0 +1,12 @@
+diff -u -r ../procps-ng-3.3.11/pgrep.c ./pgrep.c
+--- ../procps-ng-3.3.11/pgrep.c        2015-08-09 01:54:54.298117295 -0400
++++ ./pgrep.c  2016-04-12 01:14:09.647108539 -0400
+@@ -713,7 +713,7 @@
+               {NULL, 0, NULL, 0}
+       };
+-      if (strstr (program_invocation_short_name, "pkill")) {
++      if (strstr (argv[0], "pkill")) {
+               int sig;
+               i_am_pkill = 1;
+               sig = signal_option(&argc, argv);
index 5004d72..567cf98 100644 (file)
@@ -1,6 +1,6 @@
 TERMUX_PKG_HOMEPAGE=http://proot.me/
 TERMUX_PKG_DESCRIPTION="Emulate chroot, bind mount and binfmt_misc for non-root users"
-TERMUX_PKG_VERSION=5.1.99
+TERMUX_PKG_VERSION=5.1.100
 TERMUX_PKG_SRCURL=https://github.com/proot-me/PRoot/archive/next.zip
 TERMUX_PKG_FOLDERNAME=PRoot-next
 TERMUX_PKG_DEPENDS="libtalloc"
index 5dde068..9a84101 100755 (executable)
@@ -15,6 +15,11 @@ ARGS="-b /system:/system"
 # to find e.g. configurations files there work.
 ARGS="$ARGS -b $PREFIX/..:$PREFIX/.."
 
+# Expose external and internal storage:
+if [ -d /storage ]; then
+       ARGS="$ARGS -b /storage:/storage"
+fi
+
 # Mimic traditional Linux file system hierarchy - /usr:
 ARGS="$ARGS -b $PREFIX:/usr"
 
index 6d77097..a73eed3 100755 (executable)
@@ -1,7 +1,13 @@
 TERMUX_PKG_HOMEPAGE=https://code.google.com/p/protobuf/
 TERMUX_PKG_DESCRIPTION="Library for encoding structured data in an efficient yet extensible format"
 TERMUX_PKG_VERSION=2.6.1
+TERMUX_PKG_BUILD_REVISION=1
 TERMUX_PKG_SRCURL=https://github.com/google/protobuf/releases/download/v${TERMUX_PKG_VERSION}/protobuf-${TERMUX_PKG_VERSION}.tar.bz2
 # Build a host build first and use the host build protoc:
 TERMUX_PKG_HOSTBUILD=yes
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--with-protoc=$TERMUX_PKG_HOSTBUILD_DIR/src/protoc"
+# Link against libgnustl_shared.so so that other C++ programs that
+# uses protobuf (e.g. mosh) may use libgnustl_shared.so.
+TERMUX_PKG_DEPENDS="libgnustl"
+
+LDFLAGS+=" -lgnustl_shared"
index 287423d..73060d0 100644 (file)
@@ -1,6 +1,6 @@
 TERMUX_PKG_HOMEPAGE=http://termux.com/add-ons/api/
 TERMUX_PKG_DESCRIPTION="Termux API commands"
-TERMUX_PKG_VERSION=0.13
+TERMUX_PKG_VERSION=0.14
 
 termux_step_make_install () {
         mkdir -p $TERMUX_PREFIX/bin
index f1eaa71..ca51755 100644 (file)
@@ -32,12 +32,6 @@ void exec_am_broadcast(int argc, char** argv, char* input_address_string, char*
         // Close stdin:
         close(STDIN_FILENO);
 
-        char const* const file = "/system/bin/am";
-        // Avoid the system am binary from linking to wrong libraries:
-        unsetenv("LD_LIBRARY_PATH");
-       // Ensure /system/bin/app_process is in path, which is needed by am in some systems:
-       putenv("PATH=/system/bin");
-
        // The user is calculated from the uid in android.os.UserHandle#getUserId(int uid) as "uid / 100000", so we do the same:
        uid_t current_uid = getuid();
        int android_user_id = current_uid / 100000;
@@ -73,7 +67,10 @@ void exec_am_broadcast(int argc, char** argv, char* input_address_string, char*
         // End with NULL:
         child_argv[argc + extra_args] = NULL;
 
-        execv(file, child_argv);
+       // Use an a executable taking care of PATH and LD_LIBRARY_PATH:
+        char const* const am_executable = "/data/data/com.termux/files/usr/bin/am";
+        execv(am_executable, child_argv);
+
         perror("execv(\"/system/bin/am\")");
        exit(1);
 }
index 5e9bc18..a44d77c 100644 (file)
@@ -1,21 +1,27 @@
 TERMUX_PKG_HOMEPAGE=http://termux.com/
 TERMUX_PKG_DESCRIPTION="Some tools for Termux"
-TERMUX_PKG_VERSION=0.21
+TERMUX_PKG_VERSION=0.25
 
 termux_step_make_install () {
        $CXX $CFLAGS $LDFLAGS -std=c++14 -Wall -Wextra -pedantic -Werror $TERMUX_PKG_BUILDER_DIR/*.cpp -o $TERMUX_PREFIX/bin/termux-elf-cleaner
 
        # Remove LD_LIBRARY_PATH from environment to avoid conflicting
        # with system libraries that am may link against.
-       for tool in am dalvikvm df getprop logcat ping pm; do
+       for tool in am dalvikvm df getprop logcat ping ping6 ip pm settings; do
                WRAPPER_FILE=$TERMUX_PREFIX/bin/$tool
                echo '#!/bin/sh' > $WRAPPER_FILE
-               if [ $tool = am -o $tool = pm ]; then
-                       # These tools require having /system/bin/app_process in the PATH,
-                       # at least on a Nexus 6p running Android 6.0.
-                       echo -n 'PATH=$PATH:/system/bin ' >> $WRAPPER_FILE
+
+               # Some of these tools (am,dalvikvm,?) requires LD_LIBRARY_PATH setup on at least some devices:
+               if [ $tool != getprop ]; then
+                       echo 'if [ -n "`getprop ro.product.cpu.abilist64`" ]; then BITS=64; else BITS=; fi' >> $WRAPPER_FILE
+                       echo -n 'LD_LIBRARY_PATH=/system/lib$BITS ' >> $WRAPPER_FILE
                fi
-               echo "LD_LIBRARY_PATH= exec /system/bin/$tool \$@" >> $WRAPPER_FILE
+
+               # Some tools require having /system/bin/app_process in the PATH,
+               # at least am&pm on a Nexus 6p running Android 6.0:
+               echo -n 'PATH=$PATH:/system/bin ' >> $WRAPPER_FILE
+
+               echo "exec /system/bin/$tool \$@" >> $WRAPPER_FILE
                chmod +x $TERMUX_PREFIX/bin/$tool
        done
 
index 5b47429..e4a9bd8 100755 (executable)
@@ -1,12 +1,16 @@
 #!/bin/sh
 
-if [ -x /system/xbin/su ]; then
-       # The su tool may require programs from /system/bin in path:
-       PATH=/system/bin:$PATH /system/xbin/su $@
-else
-       echo "There is no su program on this device. Termux"
-       echo "does not supply tools for rooting, see e.g."
-       echo "http://www.androidcentral.com/root for"
-       echo "information about rooting Android."
-       exit 1
-fi
+for p in /system/xbin/su /su/bin/su
+do
+       if [ -x $p ]; then
+               # The su tool may require programs
+               # from /system/bin in path:
+               PATH=/system/bin:$PATH exec $p $@
+       fi
+done
+
+echo "There is no su program on this device. Termux"
+echo "does not supply tools for rooting, see e.g."
+echo "http://www.androidcentral.com/root for"
+echo "information about rooting Android."
+exit 1
index 2fbe68d..0f8e606 100755 (executable)
@@ -9,4 +9,4 @@ if [ "$#" != "0" ]; then
         exit
 fi
 
-LD_LIBRARY_PATH= am broadcast --user 0 -a com.termux.app.reload_style com.termux > /dev/null
+am broadcast --user 0 -a com.termux.app.reload_style com.termux > /dev/null
index f2cf483..eec7f77 100755 (executable)
@@ -7,6 +7,6 @@ if [ "$#" != "0" ]; then
         exit
 fi
 
-LD_LIBRARY_PATH= am broadcast --user 0 \
+am broadcast --user 0 \
                 --es com.termux.app.reload_style storage \
                 -a com.termux.app.reload_style com.termux > /dev/null
diff --git a/packages/tesseract/build.sh b/packages/tesseract/build.sh
new file mode 100644 (file)
index 0000000..3f79ad7
--- /dev/null
@@ -0,0 +1,30 @@
+TERMUX_PKG_HOMEPAGE=https://github.com/tesseract-ocr/tesseract
+TERMUX_PKG_DESCRIPTION="Tesseract is probably the most accurate open source OCR engine available"
+TERMUX_PKG_VERSION=3.04.01
+TERMUX_PKG_DEPENDS="libtool, libuuid, leptonica"
+TERMUX_PKG_SRCURL=https://github.com/tesseract-ocr/tesseract/archive/${TERMUX_PKG_VERSION}.tar.gz
+TERMUX_PKG_FOLDERNAME=tesseract-${TERMUX_PKG_VERSION}
+
+termux_step_pre_configure() {
+       # http://blog.matt-swain.com/post/26419042500/installing-tesseract-ocr-on-mac-os-x-lion
+       export LIBLEPT_HEADERSDIR=${TERMUX_PREFIX}/include/leptonica
+
+       cd $TERMUX_PKG_SRCDIR
+       perl -p -i -e 's|ADD_RT, true|ADD_RT, false|g' configure.ac
+       ./autogen.sh
+}
+
+termux_step_post_make_install() {
+       # download english trained data
+       cd "${TERMUX_PREFIX}/share/tessdata"
+       rm -f eng.*
+       wget https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.cube.bigrams
+       wget https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.cube.fold
+       wget https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.cube.lm
+       wget https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.cube.nn
+       wget https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.cube.params
+       wget https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.cube.size
+       wget https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.cube.word-freq
+       wget https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.tesseract_cube.nn
+       wget https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.traineddata
+}
index a664b9c..44c71fe 100644 (file)
@@ -1,6 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://jonas.nitro.dk/tig/
 TERMUX_PKG_DESCRIPTION="Ncurses-based text-mode interface for git"
 TERMUX_PKG_VERSION=2.1.1
+TERMUX_PKG_BUILD_REVISION=1
 TERMUX_PKG_SRCURL=http://jonas.nitro.dk/tig/releases/tig-${TERMUX_PKG_VERSION}.tar.gz
 TERMUX_PKG_BUILD_IN_SRC=yes
 TERMUX_PKG_DEPENDS="ncurses, git, libandroid-support"
index 8b61eb1..4f58d40 100755 (executable)
@@ -1,8 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://tmux.github.io/
 TERMUX_PKG_DESCRIPTION="Terminal multiplexer implementing switching between several programs in one terminal, detaching them and reattaching them to a different terminal"
 TERMUX_PKG_DEPENDS="ncurses, libevent, libutil"
-TERMUX_PKG_VERSION=2.1
-TERMUX_PKG_BUILD_REVISION=1
+TERMUX_PKG_VERSION=2.2
 TERMUX_PKG_SRCURL=https://github.com/tmux/tmux/releases/download/${TERMUX_PKG_VERSION}/tmux-${TERMUX_PKG_VERSION}.tar.gz
 TERMUX_PKG_BUILD_IN_SRC=yes
 
diff --git a/packages/tmux/custom_shell.patch b/packages/tmux/custom_shell.patch
deleted file mode 100644 (file)
index 6aca17f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-diff -u -r ../tmux-1.8/session.c ./session.c
---- ../tmux-1.8/session.c      2013-03-26 20:22:31.000000000 +0100
-+++ ./session.c        2014-02-13 18:55:45.000000000 +0100
-@@ -23,6 +23,7 @@
- #include <stdlib.h>
- #include <unistd.h>
- #include <time.h>
-+#include <sys/stat.h>
- #include "tmux.h"
-@@ -245,8 +246,10 @@
-       server_fill_environ(s, &env);
-       shell = options_get_string(&s->options, "default-shell");
--      if (*shell == '\0' || areshell(shell))
--              shell = _PATH_BSHELL;
-+      if (*shell == '\0' || areshell(shell)) {
-+              struct stat st;
-+              shell = (stat("@TERMUX_PREFIX@/home/.aterm/shell", &st) == 0) ? "@TERMUX_PREFIX@/home/.aterm/shell" : _PATH_BSHELL;
-+      }
-       hlimit = options_get_number(&s->options, "history-limit");
-       w = window_create(
diff --git a/packages/tmux/session.c.patch b/packages/tmux/session.c.patch
new file mode 100644 (file)
index 0000000..bda05ea
--- /dev/null
@@ -0,0 +1,20 @@
+diff -u -r ../tmux-2.2/session.c ./session.c
+--- ../tmux-2.2/session.c      2016-01-20 19:00:28.000000000 -0500
++++ ./session.c        2016-04-11 05:28:53.669311770 -0400
+@@ -22,6 +22,7 @@
+ #include <string.h>
+ #include <stdlib.h>
+ #include <unistd.h>
++#include <pwd.h>
+ #include <time.h>
+ #include "tmux.h"
+@@ -340,7 +341,7 @@
+       shell = options_get_string(s->options, "default-shell");
+       if (*shell == '\0' || areshell(shell))
+-              shell = _PATH_BSHELL;
++              shell = getpwuid(getuid())->pw_shell;
+       hlimit = options_get_number(s->options, "history-limit");
+       w = window_create(name, argc, argv, path, shell, cwd, env, s->tio,
diff --git a/packages/tmux/tmux.c.patch b/packages/tmux/tmux.c.patch
new file mode 100644 (file)
index 0000000..a7f8a7a
--- /dev/null
@@ -0,0 +1,26 @@
+diff -u -r ../tmux-2.2/tmux.c ./tmux.c
+--- ../tmux-2.2/tmux.c 2016-03-05 12:55:49.000000000 -0500
++++ ./tmux.c   2016-04-11 04:36:26.594521819 -0400
+@@ -24,7 +24,9 @@
+ #include <event.h>
+ #include <fcntl.h>
+ #include <getopt.h>
++#ifndef __ANDROID__
+ #include <langinfo.h>
++#endif
+ #include <locale.h>
+ #include <pwd.h>
+ #include <stdlib.h>
+@@ -195,10 +197,12 @@
+       if (setlocale(LC_CTYPE, "en_US.UTF-8") == NULL) {
+               if (setlocale(LC_CTYPE, "") == NULL)
+                       errx(1, "invalid LC_ALL, LC_CTYPE or LANG");
++#ifndef __ANDROID__
+               s = nl_langinfo(CODESET);
+               if (strcasecmp(s, "UTF-8") != 0 &&
+                   strcasecmp(s, "UTF8") != 0)
+                       errx(1, "need UTF-8 locale (LC_CTYPE) but have %s", s);
++#endif
+       }
+       setlocale(LC_TIME, "");
index 4ec5976..207e5b5 100644 (file)
@@ -1,7 +1,2 @@
 set -g mouse on
 set -s escape-time 0
-
-# Version 2.1 of tmux removed mouse wheel scrolling support by default,
-# but these two lines from https://github.com/tmux/tmux/issues/145 add it back:
-bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
-bind -n WheelDownPane select-pane -t= \; send-keys -M
diff --git a/packages/tmux/tmux.h.patch b/packages/tmux/tmux.h.patch
new file mode 100644 (file)
index 0000000..0c06784
--- /dev/null
@@ -0,0 +1,12 @@
+diff -u -r ../tmux-2.2/tmux.h ./tmux.h
+--- ../tmux-2.2/tmux.h 2016-04-03 20:16:53.000000000 -0400
++++ ./tmux.h   2016-04-11 04:38:13.276761966 -0400
+@@ -51,7 +51,7 @@
+ struct tmuxproc;
+ /* Default global configuration file. */
+-#define TMUX_CONF "/etc/tmux.conf"
++#define TMUX_CONF "@TERMUX_PREFIX@/etc/tmux.conf"
+ /*
+  * Minimum layout cell size, NOT including separator line. The scroll region
diff --git a/packages/tmux/tmux_c.patch b/packages/tmux/tmux_c.patch
deleted file mode 100644 (file)
index 7f34bf6..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -u -r ../tmux-1.9a/tmux.c ./tmux.c
---- ../tmux-1.9a/tmux.c        2014-02-22 21:48:37.000000000 +0100
-+++ ./tmux.c   2014-02-24 08:56:45.000000000 +0100
-@@ -137,7 +137,7 @@
-       else if ((s = getenv("TMPDIR")) != NULL && *s != '\0')
-               xsnprintf(base, sizeof base, "%s/tmux-%u", s, uid);
-       else
--              xsnprintf(base, sizeof base, "%s/tmux-%u", _PATH_TMP, uid);
-+              xsnprintf(base, sizeof base, "%s/tmux-%u", "@TERMUX_PREFIX@/tmp", uid);
-       if (mkdir(base, S_IRWXU) != 0 && errno != EEXIST)
-               return (NULL);
diff --git a/packages/tmux/tmux_h.patch b/packages/tmux/tmux_h.patch
deleted file mode 100644 (file)
index edcc83a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -u -r ../tmux-2.1/tmux.h ./tmux.h
---- ../tmux-2.1/tmux.h 2015-09-27 05:51:49.000000000 -0400
-+++ ./tmux.h   2015-10-19 17:33:45.737891900 -0400
-@@ -40,7 +40,7 @@
- extern char   **environ;
- /* Default global configuration file. */
--#define TMUX_CONF "/etc/tmux.conf"
-+#define TMUX_CONF "@TERMUX_PREFIX@/etc/tmux.conf"
- /*
-  * Minimum layout cell size, NOT including separator line. The scroll region
-@@ -72,7 +72,7 @@
- #define fatalx(msg) log_fatalx("%s: %s", __func__, msg);
- /* Definition to shut gcc up about unused arguments. */
--#define unused __attribute__ ((unused))
-+#define unused
- /* Attribute to make gcc check printf-like arguments. */
- #define printflike(a, b) __attribute__ ((format (printf, a, b)))
index 658988d..6ee79db 100755 (executable)
@@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=http://www.transmissionbt.com/
 TERMUX_PKG_DESCRIPTION="Easy, lean and powerful BitTorrent client"
 TERMUX_PKG_DEPENDS="curl, libevent, openssl"
 TERMUX_PKG_VERSION=2.92
+TERMUX_PKG_BUILD_REVISION=1
 TERMUX_PKG_SRCURL=https://transmission.cachefly.net/transmission-${TERMUX_PKG_VERSION}.tar.xz
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--disable-gtk --enable-lightweight --cache-file=termux_configure.cache"
 
index b9adb8e..3fd01f1 100644 (file)
@@ -1,4 +1,5 @@
 TERMUX_PKG_VERSION=6.0
+TERMUX_PKG_BUILD_REVISION=1
 TERMUX_PKG_HOMEPAGE=http://www.info-zip.org/
 TERMUX_PKG_DESCRIPTION="Tools for working with zip files"
 TERMUX_PKG_SRCURL="http://downloads.sourceforge.net/project/infozip/UnZip%206.x%20%28latest%29/UnZip%206.0/unzip60.tar.gz"
index d53a729..6f96377 100755 (executable)
@@ -3,7 +3,7 @@ TERMUX_PKG_HOMEPAGE=http://www.vim.org/
 TERMUX_PKG_DEPENDS="ncurses, vim-runtime, python"
 
 # Vim 7.4 patches described at ftp://ftp.vim.org/pub/vim/patches/7.4/README
-TERMUX_PKG_VERSION=7.4.1627
+TERMUX_PKG_VERSION=7.4.1707
 TERMUX_PKG_SRCURL="https://github.com/vim/vim/archive/v${TERMUX_PKG_VERSION}.tar.gz"
 TERMUX_PKG_FOLDERNAME=vim-${TERMUX_PKG_VERSION}
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS="vim_cv_toupper_broken=no vim_cv_terminfo=yes vim_cv_tty_group=world"
@@ -34,4 +34,7 @@ termux_step_post_make_install () {
         cp $TERMUX_PREFIX/share/vim/vim74/tutor/{tutor,tutor.vim,tutor.utf-8} $TERMUX_PKG_TMPDIR/
         rm -f $TERMUX_PREFIX/share/vim/vim74/tutor/*
         cp $TERMUX_PKG_TMPDIR/{tutor,tutor.vim,tutor.utf-8} $TERMUX_PREFIX/share/vim/vim74/tutor/
+
+       cd $TERMUX_PREFIX/bin
+       ln -f -s vim vi
 }
index 247c684..985784f 100755 (executable)
@@ -3,7 +3,7 @@ TERMUX_PKG_HOMEPAGE=http://www.vim.org/
 TERMUX_PKG_DEPENDS="ncurses, vim-runtime"
 
 # Vim 7.4 patches described at ftp://ftp.vim.org/pub/vim/patches/7.4/README
-TERMUX_PKG_VERSION=7.4.1627
+TERMUX_PKG_VERSION=7.4.1707
 TERMUX_PKG_SRCURL="https://github.com/vim/vim/archive/v${TERMUX_PKG_VERSION}.tar.gz"
 TERMUX_PKG_FOLDERNAME=vim-${TERMUX_PKG_VERSION}
 TERMUX_PKG_EXTRA_CONFIGURE_ARGS="vim_cv_toupper_broken=no vim_cv_terminfo=yes vim_cv_tty_group=world"
@@ -29,4 +29,7 @@ termux_step_post_make_install () {
         cp $TERMUX_PREFIX/share/vim/vim74/tutor/{tutor,tutor.vim,tutor.utf-8} $TERMUX_PKG_TMPDIR/
         rm -f $TERMUX_PREFIX/share/vim/vim74/tutor/*
         cp $TERMUX_PKG_TMPDIR/{tutor,tutor.vim,tutor.utf-8} $TERMUX_PREFIX/share/vim/vim74/tutor/
+
+       cd $TERMUX_PREFIX/bin
+       ln -f -s vim vi
 }
diff --git a/packages/vorbis-tools/build.sh b/packages/vorbis-tools/build.sh
new file mode 100644 (file)
index 0000000..ef64c6c
--- /dev/null
@@ -0,0 +1,7 @@
+TERMUX_PKG_HOMEPAGE=http://www.vorbis.com
+TERMUX_PKG_DESCRIPTION="Ogg Vorbis tools"
+TERMUX_PKG_VERSION=1.4.0
+TERMUX_PKG_SRCURL=http://downloads.xiph.org/releases/vorbis/vorbis-tools-${TERMUX_PKG_VERSION}.tar.gz
+TERMUX_PKG_DEPENDS="libvorbis"
+
+LDFLAGS+=" -lm"
index 1230d9b..4a8835e 100755 (executable)
@@ -1,7 +1,7 @@
 TERMUX_PKG_HOMEPAGE=http://weechat.org/
 TERMUX_PKG_DESCRIPTION="Fast, light and extensible IRC chat client"
 TERMUX_PKG_VERSION=1.4
-TERMUX_PKG_BUILD_REVISION=1
+TERMUX_PKG_BUILD_REVISION=2
 TERMUX_PKG_SRCURL=http://www.weechat.org/files/src/weechat-${TERMUX_PKG_VERSION}.tar.bz2
 TERMUX_PKG_DEPENDS="ncurses, libgcrypt, libcurl, libgnutls, libandroid-support"
 # weechat-curses is a symlink to weechat, so remove it:
diff --git a/packages/zbar/build.sh b/packages/zbar/build.sh
new file mode 100644 (file)
index 0000000..fec6dad
--- /dev/null
@@ -0,0 +1,6 @@
+TERMUX_PKG_HOMEPAGE=http://zbar.sourceforge.net
+TERMUX_PKG_DESCRIPTION="Software suite for reading bar codes from various sources"
+TERMUX_PKG_VERSION=0.10
+TERMUX_PKG_SRCURL=http://downloads.sourceforge.net/project/zbar/zbar/0.10/zbar-${TERMUX_PKG_VERSION}.tar.bz2
+TERMUX_PKG_DEPENDS="imagemagick"
+TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--disable-pthread --disable-video --without-xshm --without-xv --without-gtk --without-qt --without-python --mandir=$TERMUX_PREFIX/share/man"