From 44f45ec4ec84ce424df4dedcea974643e1af1333 Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Fri, 13 Oct 2017 18:00:24 +0200 Subject: [PATCH] less: add recipe for version 487. --- sys-apps/less/less-487.recipe | 65 +++++ sys-apps/less/patches/less-487.patchset | 329 ++++++++++++++++++++++++ 2 files changed, 394 insertions(+) create mode 100644 sys-apps/less/less-487.recipe create mode 100644 sys-apps/less/patches/less-487.patchset diff --git a/sys-apps/less/less-487.recipe b/sys-apps/less/less-487.recipe new file mode 100644 index 000000000..3322bceb8 --- /dev/null +++ b/sys-apps/less/less-487.recipe @@ -0,0 +1,65 @@ +SUMMARY="A free, open-source file pager" +DESCRIPTION="GNU 'less' is a program similar to 'more', but which allows \ +backward movement in the file as well as forward movement. Also, 'less' \ +does not have to read the entire input file before starting, so with \ +large input files it starts up faster than text editors like 'vi'. +Less uses 'termcap' (or 'terminfo' on some systems), so it can run on a \ +variety of terminals. There is even limited support for hardcopy terminals." +HOMEPAGE="http://www.greenwoodsoftware.com/less/" +COPYRIGHT="1984-2015 Mark Nudelman" +LICENSE="GNU GPL v3" +REVISION="1" +SOURCE_URI="http://www.greenwoodsoftware.com/less/less-$portVersion.tar.gz" +CHECKSUM_SHA256="f3dc8455cb0b2b66e0c6b816c00197a71bf6d1787078adeee0bcf2aea4b12706" +PATCHES="less-$portVersion.patchset" +ADDITIONAL_FILES="sysless.in" + +ARCHITECTURES="x86_gcc2 x86 x86_64" + +PROVIDES=" + less = $portVersion + cmd:less + cmd:lessecho + cmd:lesskey + " +REQUIRES=" + haiku$secondaryArchSuffix + lib:libncurses$secondaryArchSuffix + " + +BUILD_REQUIRES=" + haiku${secondaryArchSuffix}_devel + devel:libncurses$secondaryArchSuffix + " +BUILD_PREREQUIRES=" + cmd:gcc$secondaryArchSuffix + cmd:make + cmd:ld$secondaryArchSuffix + cmd:autoconf + cmd:aclocal + " + +GLOBAL_WRITABLE_FILES=" + settings/etc/sysless.src keep-old + settings/etc/sysless keep-old + " + +BUILD() +{ + autoconf + runConfigure ./configure --with-editor=nano \ + --sysconfdir=$settingsDir/etc + make +} + +INSTALL() +{ + make install + + syslessDir=$settingsDir/etc + mkdir $syslessDir + cp "$portDir/additional-files/sysless.in" \ + "$syslessDir/sysless.src" + $binDir/lesskey -o "$syslessDir/sysless" \ + "$syslessDir/sysless.src" +} diff --git a/sys-apps/less/patches/less-487.patchset b/sys-apps/less/patches/less-487.patchset new file mode 100644 index 000000000..f6ea1b845 --- /dev/null +++ b/sys-apps/less/patches/less-487.patchset @@ -0,0 +1,329 @@ +From ffa25716611e1af39cf5cd4f6a1248d208040374 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Wed, 3 Sep 2014 15:09:24 +0000 +Subject: haiku patch + + +diff --git a/cmdbuf.c b/cmdbuf.c +index 69d7414..6686cdf 100644 +--- a/cmdbuf.c ++++ b/cmdbuf.c +@@ -74,16 +74,16 @@ struct mlist + /* + * These are the various command histories that exist. + */ +-struct mlist mlist_search = ++struct mlist mlist_search = + { &mlist_search, &mlist_search, &mlist_search, NULL, 0 }; + public void * constant ml_search = (void *) &mlist_search; + +-struct mlist mlist_examine = ++struct mlist mlist_examine = + { &mlist_examine, &mlist_examine, &mlist_examine, NULL, 0 }; + public void * constant ml_examine = (void *) &mlist_examine; + + #if SHELL_ESCAPE || PIPEC +-struct mlist mlist_shell = ++struct mlist mlist_shell = + { &mlist_shell, &mlist_shell, &mlist_shell, NULL, 0 }; + public void * constant ml_shell = (void *) &mlist_shell; + #endif +@@ -420,7 +420,7 @@ cmd_right() + char *pr; + char *ncp; + int width; +- ++ + if (*cp == '\0') + { + /* Already at the end of the line. */ +@@ -454,7 +454,7 @@ cmd_left() + { + char *ncp; + int width, bswidth; +- ++ + if (cp <= cmdbuf) + { + /* Already at the beginning of the line */ +@@ -485,14 +485,14 @@ cmd_ichar(cs, clen) + int clen; + { + char *s; +- ++ + if (strlen(cmdbuf) + clen >= sizeof(cmdbuf)-1) + { + /* No room in the command buffer for another char. */ + bell(); + return (CC_ERROR); + } +- ++ + /* + * Make room for the new character (shift the tail of the buffer right). + */ +@@ -552,7 +552,7 @@ cmd_erase() + */ + updown_match = -1; + cmd_repaint(cp); +- ++ + /* + * We say that erasing the entire command string causes us + * to abort the current command, if CF_QUIT_ON_ERASE is set. +@@ -689,7 +689,7 @@ cmd_updown(action) + { + char *s; + struct mlist *ml; +- ++ + if (curr_mlist == NULL) + { + /* +@@ -754,7 +754,7 @@ cmd_addhist(mlist, cmd, modified) + { + #if CMD_HISTORY + struct mlist *ml; +- ++ + /* + * Don't save a trivial command. + */ +@@ -826,7 +826,7 @@ cmd_edit(c) + #else + #define not_in_completion() + #endif +- ++ + /* + * See if the char is indeed a line-editing command. + */ +@@ -937,7 +937,7 @@ cmd_istr(str) + char *s; + int action; + char *endline = str + strlen(str); +- ++ + for (s = str; *s != '\0'; ) + { + char *os = s; +@@ -969,7 +969,7 @@ delimit_word() + char *esc = get_meta_escape(); + int esclen = (int) strlen(esc); + #endif +- ++ + /* + * Move cursor to end of word. + */ +@@ -1042,7 +1042,7 @@ delimit_word() + + /* + * Set things up to enter completion mode. +- * Expand the word under the cursor into a list of filenames ++ * Expand the word under the cursor into a list of filenames + * which start with that word, and set tk_text to that list. + */ + static void +@@ -1050,7 +1050,7 @@ init_compl() + { + char *word; + char c; +- ++ + /* + * Get rid of any previous tk_text. + */ +@@ -1139,8 +1139,8 @@ cmd_complete(action) + if (!in_completion || action == EC_EXPAND) + { + /* +- * Expand the word under the cursor and +- * use the first word in the expansion ++ * Expand the word under the cursor and ++ * use the first word in the expansion + * (or the entire expansion if we're doing EC_EXPAND). + */ + init_compl(); +@@ -1172,13 +1172,13 @@ cmd_complete(action) + */ + tk_trial = next_compl(action, tk_trial); + } +- ++ + /* + * Remove the original word, or the previous trial completion. + */ + while (cp > tk_ipoint) + (void) cmd_erase(); +- ++ + if (tk_trial == NULL) + { + /* +@@ -1209,9 +1209,9 @@ cmd_complete(action) + goto fail; + } + } +- ++ + return (CC_OK); +- ++ + fail: + in_completion = 0; + bell(); +@@ -1292,7 +1292,7 @@ cmd_char(c) + literal = 0; + return (cmd_ichar(cmd_mbc_buf, len)); + } +- ++ + /* + * See if it is a line-editing character. + */ +@@ -1308,7 +1308,7 @@ cmd_char(c) + break; + } + } +- ++ + /* + * Insert the char into the command buffer. + */ +@@ -1378,10 +1378,14 @@ mlist_size(ml) + static char * + histfile_name() + { ++#ifdef __HAIKU__ ++ char home[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH]; ++#else + char *home; ++#endif + char *name; + int len; +- ++ + /* See if filename is explicitly specified by $LESSHISTFILE. */ + name = lgetenv("LESSHISTFILE"); + if (name != NULL && *name != '\0') +@@ -1396,6 +1400,13 @@ histfile_name() + if (strcmp(LESSHISTFILE, "") == 0 || strcmp(LESSHISTFILE, "-") == 0) + return (NULL); + ++#ifdef __HAIKU__ ++ { ++ dev_t volume = dev_for_path("/boot"); ++ if (find_directory(B_USER_SETTINGS_DIRECTORY, volume, true, home, sizeof(home)) != B_OK) ++ return (NULL); ++ } ++#else + /* Otherwise, file is in $HOME. */ + home = lgetenv("HOME"); + if (home == NULL || *home == '\0') +@@ -1406,6 +1417,7 @@ histfile_name() + #endif + return (NULL); + } ++#endif + len = (int) (strlen(home) + strlen(LESSHISTFILE) + 2); + name = (char *) ecalloc(len, sizeof(char)); + SNPRINTF2(name, len, "%s/%s", home, LESSHISTFILE); +diff --git a/configure.ac b/configure.ac +index 4ac9a35..d9e299a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -596,10 +596,17 @@ AH_TOP([ + * LESSHISTFILE is the filename of the history file + * (in the HOME directory). + */ +-#define LESSKEYFILE ".less" +-#define LESSKEYFILE_SYS SYSDIR "/sysless" +-#define DEF_LESSKEYINFILE ".lesskey" +-#define LESSHISTFILE ".lesshst" ++#ifdef __HAIKU__ ++# define LESSKEYFILE "less" ++# define LESSKEYFILE_SYS SYSDIR "/sysless" ++# define DEF_LESSKEYINFILE "lesskey" ++# define LESSHISTFILE "lesshst" ++#else ++# define LESSKEYFILE ".less" ++# define LESSKEYFILE_SYS SYSDIR "/sysless" ++# define DEF_LESSKEYINFILE ".lesskey" ++# define LESSHISTFILE ".lesshst" ++#endif + + + /* Settings always true on Unix. */ +diff --git a/filename.c b/filename.c +index 9631f1c..dc13a96 100644 +--- a/filename.c ++++ b/filename.c +@@ -266,12 +266,23 @@ homefile(filename) + { + register char *pathname; + ++#ifdef __HAIKU__ ++ char path[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH]; ++ dev_t volume = dev_for_path("/boot"); ++ if (find_directory(B_USER_SETTINGS_DIRECTORY, volume, true, path, sizeof(path)) != B_OK) ++ return (NULL); ++ ++ pathname = dirfile(&path, filename); ++ if (pathname != NULL) ++ return (pathname); ++#else + /* + * Try $HOME/filename. + */ + pathname = dirfile(lgetenv("HOME"), filename); + if (pathname != NULL) + return (pathname); ++#endif + #if OS2 + /* + * Try $INIT/filename. +diff --git a/less.h b/less.h +index f57fb1e..17159dd 100644 +--- a/less.h ++++ b/less.h +@@ -93,6 +93,11 @@ + #include + #endif + ++#ifdef __HAIKU__ ++#include ++#include ++#endif ++ + #if MSDOS_COMPILER==WIN32C || OS2 + #include + #endif +diff --git a/lesskey.c b/lesskey.c +index 298748b..fa4c05b 100644 +--- a/lesskey.c ++++ b/lesskey.c +@@ -246,8 +246,19 @@ homefile(filename) + char *p; + char *pathname; + ++#ifdef __HAIKU__ ++ char path[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH]; ++ dev_t volume = dev_for_path("/boot"); ++ if (find_directory(B_USER_SETTINGS_DIRECTORY, volume, true, path, sizeof(path)) != B_OK) ++ return (NULL); ++ ++ pathname = mkpathname(&path, filename); ++ if (pathname != NULL) ++ return (pathname); ++#else + if ((p = getenv("HOME")) != NULL && *p != '\0') + pathname = mkpathname(p, filename); ++#endif + #if OS2 + else if ((p = getenv("INIT")) != NULL && *p != '\0') + pathname = mkpathname(p, filename); +-- +2.2.2 +