diff --git a/sys-apps/coreutils/coreutils-8.26.recipe b/sys-apps/coreutils/coreutils-8.26.recipe new file mode 100644 index 000000000..f9b285dc6 --- /dev/null +++ b/sys-apps/coreutils/coreutils-8.26.recipe @@ -0,0 +1,268 @@ +SUMMARY="Standard GNU core utilities" +DESCRIPTION=" +Most of these programs have significant advantages over their Unix \ +counterparts, such as greater speed, additional options, and fewer \ +arbitrary limits. + +The programs that can be built with this package are: + + [ arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp \ +csplit cut date dd df dir dircolors dirname du echo env expand expr \ +factor false fmt fold groups head hostid hostname id install join kill \ +link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup \ +nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink \ +realpath rm rmdir runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum \ +shred shuf sleep sort split stat stdbuf stty sum sync tac tail tee test \ +timeout touch tr true truncate tsort tty uname unexpand uniq unlink \ +uptime users vdir wc who whoami yes +" +HOMEPAGE="http://www.gnu.org/software/coreutils" +COPYRIGHT="1994-2016 Free Software Foundation, Inc." +LICENSE="GNU GPL v3" +SOURCE_URI="http://ftp.gnu.org/gnu/coreutils/coreutils-$portVersion.tar.xz" +CHECKSUM_SHA256="155e94d748f8e2bc327c66e0cbebdb8d6ab265d2f37c3c928f7bf6c3beba9a8e" +REVISION="1" +ARCHITECTURES="?x86_gcc2 ?x86 x86_64 ?arm" + +PATCHES=" + coreutils-$portVersion.patchset + " + +PROVIDES=" + coreutils = $portVersion compat >= 8 + cmd:[ = $portVersion compat >= 8 + cmd:b2sum = $portVersion compat >= 8 + cmd:base32 = $portVersion compat >= 8 + cmd:base64 = $portVersion compat >= 8 + cmd:basename = $portVersion compat >= 8 + cmd:cat = $portVersion compat >= 8 + cmd:chcon = $portVersion compat >= 8 + cmd:chgrp = $portVersion compat >= 8 + cmd:chmod = $portVersion compat >= 8 + cmd:chown = $portVersion compat >= 8 + cmd:chroot = $portVersion compat >= 8 + cmd:cksum = $portVersion compat >= 8 + cmd:comm = $portVersion compat >= 8 + cmd:cp = $portVersion compat >= 8 + cmd:csplit = $portVersion compat >= 8 + cmd:cut = $portVersion compat >= 8 + cmd:date = $portVersion compat >= 8 + cmd:dd = $portVersion compat >= 8 + cmd:dir = $portVersion compat >= 8 + cmd:dircolors = $portVersion compat >= 8 + cmd:dirname = $portVersion compat >= 8 + cmd:du = $portVersion compat >= 8 + cmd:echo = $portVersion compat >= 8 + cmd:env = $portVersion compat >= 8 + cmd:expand = $portVersion compat >= 8 + cmd:expr = $portVersion compat >= 8 + cmd:factor = $portVersion compat >= 8 + cmd:false = $portVersion compat >= 8 + cmd:fmt = $portVersion compat >= 8 + cmd:fold = $portVersion compat >= 8 + cmd:groups = $portVersion compat >= 8 + cmd:head = $portVersion compat >= 8 + cmd:hostname = $portVersion compat >= 8 + cmd:id = $portVersion compat >= 8 + cmd:install = $portVersion compat >= 8 + cmd:join = $portVersion compat >= 8 + cmd:kill = $portVersion compat >= 8 + cmd:link = $portVersion compat >= 8 + cmd:ln = $portVersion compat >= 8 + cmd:logname = $portVersion compat >= 8 + cmd:ls = $portVersion compat >= 8 + cmd:md5sum = $portVersion compat >= 8 + cmd:mkdir = $portVersion compat >= 8 + cmd:mkfifo = $portVersion compat >= 8 + cmd:mknod = $portVersion compat >= 8 + cmd:mktemp = $portVersion compat >= 8 + cmd:mv = $portVersion compat >= 8 + cmd:nl = $portVersion compat >= 8 + cmd:nohup = $portVersion compat >= 8 + cmd:nproc = $portVersion compat >= 8 + cmd:numfmt = $portVersion compat >= 8 + cmd:od = $portVersion compat >= 8 + cmd:paste = $portVersion compat >= 8 + cmd:pathchk = $portVersion compat >= 8 + cmd:pr = $portVersion compat >= 8 + cmd:printenv = $portVersion compat >= 8 + cmd:printf = $portVersion compat >= 8 + cmd:ptx = $portVersion compat >= 8 + cmd:pwd = $portVersion compat >= 8 + cmd:readlink = $portVersion compat >= 8 + cmd:realpath = $portVersion compat >= 8 + cmd:rm = $portVersion compat >= 8 + cmd:rmdir = $portVersion compat >= 8 + cmd:runcon = $portVersion compat >= 8 + cmd:seq = $portVersion compat >= 8 + cmd:sha1sum = $portVersion compat >= 8 + cmd:sha224sum = $portVersion compat >= 8 + cmd:sha256sum = $portVersion compat >= 8 + cmd:sha384sum = $portVersion compat >= 8 + cmd:sha512sum = $portVersion compat >= 8 + cmd:shred = $portVersion compat >= 8 + cmd:shuf = $portVersion compat >= 8 + cmd:sleep = $portVersion compat >= 8 + cmd:sort = $portVersion compat >= 8 + cmd:split = $portVersion compat >= 8 + cmd:stat = $portVersion compat >= 8 + cmd:stdbuf = $portVersion compat >= 8 + cmd:stty = $portVersion compat >= 8 + cmd:sum = $portVersion compat >= 8 + cmd:sync = $portVersion compat >= 8 + cmd:tac = $portVersion compat >= 8 + cmd:tail = $portVersion compat >= 8 + cmd:tee = $portVersion compat >= 8 + cmd:test = $portVersion compat >= 8 + cmd:timeout = $portVersion compat >= 8 + cmd:touch = $portVersion compat >= 8 + cmd:tr = $portVersion compat >= 8 + cmd:true = $portVersion compat >= 8 + cmd:truncate = $portVersion compat >= 8 + cmd:tsort = $portVersion compat >= 8 + cmd:tty = $portVersion compat >= 8 + cmd:uname = $portVersion compat >= 8 + cmd:unexpand = $portVersion compat >= 8 + cmd:uniq = $portVersion compat >= 8 + cmd:unlink = $portVersion compat >= 8 + cmd:vdir = $portVersion compat >= 8 + cmd:wc = $portVersion compat >= 8 + cmd:whoami = $portVersion compat >= 8 + cmd:yes = $portVersion compat >= 8 + " + +REQUIRES=" + haiku + " + +BUILD_PREREQUIRES=" + haiku_devel + cmd:gcc + cmd:grep + cmd:ld + cmd:make + cmd:awk + cmd:sed + cmd:help2man + cmd:makeinfo + " + +defineDebugInfoPackage coreutils \ + $binDir/[ \ + $binDir/base64 \ + $binDir/basename \ + $binDir/cat \ + $binDir/chcon \ + $binDir/chgrp \ + $binDir/chmod \ + $binDir/chown \ + $binDir/chroot \ + $binDir/cksum \ + $binDir/comm \ + $binDir/cp \ + $binDir/csplit \ + $binDir/cut \ + $binDir/date \ + $binDir/dd \ + $binDir/dir \ + $binDir/dircolors \ + $binDir/dirname \ + $binDir/du \ + $binDir/echo \ + $binDir/env \ + $binDir/expand \ + $binDir/expr \ + $binDir/factor \ + $binDir/false \ + $binDir/fmt \ + $binDir/fold \ + $binDir/groups \ + $binDir/head \ + $binDir/hostname \ + $binDir/id \ + $binDir/install \ + $binDir/join \ + $binDir/kill \ + $binDir/link \ + $binDir/ln \ + $binDir/logname \ + $binDir/ls \ + $binDir/md5sum \ + $binDir/mkdir \ + $binDir/mkfifo \ + $binDir/mknod \ + $binDir/mktemp \ + $binDir/mv \ + $binDir/nl \ + $binDir/nohup \ + $binDir/nproc \ + $binDir/numfmt \ + $binDir/od \ + $binDir/paste \ + $binDir/pathchk \ + $binDir/pr \ + $binDir/printenv \ + $binDir/printf \ + $binDir/ptx \ + $binDir/pwd \ + $binDir/readlink \ + $binDir/realpath \ + $binDir/rm \ + $binDir/rmdir \ + $binDir/runcon \ + $binDir/seq \ + $binDir/sha1sum \ + $binDir/sha224sum \ + $binDir/sha256sum \ + $binDir/sha384sum \ + $binDir/sha512sum \ + $binDir/shred \ + $binDir/shuf \ + $binDir/sleep \ + $binDir/sort \ + $binDir/split \ + $binDir/stat \ + $binDir/stdbuf \ + $binDir/stty \ + $binDir/sum \ + $binDir/sync \ + $binDir/tac \ + $binDir/tail \ + $binDir/tee \ + $binDir/test \ + $binDir/timeout \ + $binDir/touch \ + $binDir/tr \ + $binDir/true \ + $binDir/truncate \ + $binDir/tsort \ + $binDir/tty \ + $binDir/uname \ + $binDir/unexpand \ + $binDir/uniq \ + $binDir/unlink \ + $binDir/vdir \ + $binDir/wc \ + $binDir/whoami \ + $binDir/yes \ + +PATCH() +{ + sed -i -e 's|O_NOCACHE|DD_NOCACHE|g' src/dd.c +} + +BUILD() +{ + FORCE_UNSAFE_CONFIGURE=1 runConfigure ./configure \ + --without-included-regex \ + --disable-rpath --with-gnu-ld \ + --enable-no-install-program=df,uptime \ + --enable-install-program=hostname + touch doc/*.info + make $jobArgs +} + +INSTALL() +{ + make install +} diff --git a/sys-apps/coreutils/patches/coreutils-8.26.patchset b/sys-apps/coreutils/patches/coreutils-8.26.patchset new file mode 100644 index 000000000..cfba90f8b --- /dev/null +++ b/sys-apps/coreutils/patches/coreutils-8.26.patchset @@ -0,0 +1,608 @@ +From 2febd541c8cf8040aa8b2b220f43a8792bc379b5 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Tue, 13 May 2014 17:18:52 +0000 +Subject: define __USE_GNU for wempcpy + + +diff --git a/lib/fnmatch.c b/lib/fnmatch.c +index a9a6924..8a4394a 100644 +--- a/lib/fnmatch.c ++++ b/lib/fnmatch.c +@@ -21,6 +21,9 @@ + #ifndef _GNU_SOURCE + # define _GNU_SOURCE 1 + #endif ++#ifndef __USE_GNU ++# define __USE_GNU 1 ++#endif + + #if ! defined __builtin_expect && (!defined __GNUC__ || __GNUC__ < 3) + # define __builtin_expect(expr, expected) (expr) +-- +2.10.2 + + +From 021c43ca9218d65ea24ccfe7d93760c186b49d90 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Tue, 13 May 2014 17:22:10 +0000 +Subject: force declaration of rpl_inet_ntop + + +diff --git a/lib/arpa_inet.in.h b/lib/arpa_inet.in.h +index 026c4dc..758391f 100644 +--- a/lib/arpa_inet.in.h ++++ b/lib/arpa_inet.in.h +@@ -72,7 +72,7 @@ + + For more details, see the POSIX:2001 specification + . */ +-# if @REPLACE_INET_NTOP@ ++# if 1 + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef inet_ntop + # define inet_ntop rpl_inet_ntop +-- +2.10.2 + + +From 22a527c6a80be7648a456d2499d6219148bb44d8 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Tue, 13 May 2014 17:32:36 +0000 +Subject: Haiku defines mknod in unistd.h + + +diff --git a/lib/mknod.c b/lib/mknod.c +index 26e80cc..601aa79 100644 +--- a/lib/mknod.c ++++ b/lib/mknod.c +@@ -18,6 +18,7 @@ + + #include + ++#include + #include + + #include +-- +2.10.2 + + +From 5d8a5e1cc55c083afb7ca44600c499a2f94499a6 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Tue, 13 May 2014 17:35:25 +0000 +Subject: protect the label, not used on Haiku + + +diff --git a/lib/mountlist.c b/lib/mountlist.c +index cf4020e..c269690 100644 +--- a/lib/mountlist.c ++++ b/lib/mountlist.c +@@ -1109,6 +1109,7 @@ read_file_system_list (bool need_fs_type) + return mount_list; + + ++#ifndef __HAIKU__ + free_then_fail: _GL_UNUSED_LABEL + { + int saved_errno = errno; +@@ -1124,6 +1125,7 @@ read_file_system_list (bool need_fs_type) + errno = saved_errno; + return NULL; + } ++#endif + } + + /* Free a mount entry as returned from read_file_system_list (). */ +-- +2.10.2 + + +From 10a9d74eb18a959683035b9464ef06737be4eb92 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Thu, 15 May 2014 15:40:32 +0000 +Subject: strchrnul needs __USE_GNU on Haiku + + +diff --git a/lib/regex.h b/lib/regex.h +index b7496f9..620d9bd 100644 +--- a/lib/regex.h ++++ b/lib/regex.h +@@ -31,8 +31,10 @@ extern "C" { + /* Define __USE_GNU to declare GNU extensions that violate the + POSIX name space rules. */ + #ifdef _GNU_SOURCE ++#ifndef __USE_GNU + # define __USE_GNU 1 + #endif ++#endif + + #ifdef _REGEX_LARGE_OFFSETS + +diff --git a/lib/string.in.h b/lib/string.in.h +index b3213c4..657910a 100644 +--- a/lib/string.in.h ++++ b/lib/string.in.h +@@ -37,6 +37,9 @@ + #define _GL_ALREADY_INCLUDING_STRING_H + + /* The include_next requires a split double-inclusion guard. */ ++#ifndef __USE_GNU ++#define __USE_GNU ++#endif + #@INCLUDE_NEXT@ @NEXT_STRING_H@ + + #undef _GL_ALREADY_INCLUDING_STRING_H +-- +2.10.2 + + +From 074016eac630acde7f0c9f79b640eae9f295ea42 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Thu, 15 May 2014 20:13:58 +0000 +Subject: don't build hostid, uptime, nice, users, who, dd + + +diff --git a/Makefile.in b/Makefile.in +index ea37995..d97ab47 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -1521,16 +1521,16 @@ nodist_src_libver_a_OBJECTS = src/version.$(OBJEXT) + src_libver_a_OBJECTS = $(nodist_src_libver_a_OBJECTS) + am__EXEEXT_1 = src/arch$(EXEEXT) src/coreutils$(EXEEXT) \ + src/hostname$(EXEEXT) +-am__EXEEXT_2 = src/chroot$(EXEEXT) src/df$(EXEEXT) src/hostid$(EXEEXT) \ +- src/libstdbuf.so$(EXEEXT) src/nice$(EXEEXT) src/pinky$(EXEEXT) \ +- src/stdbuf$(EXEEXT) src/stty$(EXEEXT) src/uptime$(EXEEXT) \ ++am__EXEEXT_2 = src/chroot$(EXEEXT) src/df$(EXEEXT) \ ++ src/libstdbuf.so$(EXEEXT) \ ++ src/stdbuf$(EXEEXT) src/stty$(EXEEXT) \ + src/users$(EXEEXT) src/who$(EXEEXT) + am__EXEEXT_3 = src/[$(EXEEXT) src/b2sum$(EXEEXT) src/base64$(EXEEXT) \ + src/base32$(EXEEXT) src/basename$(EXEEXT) src/cat$(EXEEXT) \ + src/chcon$(EXEEXT) src/chgrp$(EXEEXT) src/chmod$(EXEEXT) \ + src/chown$(EXEEXT) src/cksum$(EXEEXT) src/comm$(EXEEXT) \ + src/cp$(EXEEXT) src/csplit$(EXEEXT) src/cut$(EXEEXT) \ +- src/date$(EXEEXT) src/dd$(EXEEXT) src/dir$(EXEEXT) \ ++ src/date$(EXEEXT) src/dir$(EXEEXT) \ + src/dircolors$(EXEEXT) src/dirname$(EXEEXT) src/du$(EXEEXT) \ + src/echo$(EXEEXT) src/env$(EXEEXT) src/expand$(EXEEXT) \ + src/expr$(EXEEXT) src/factor$(EXEEXT) src/false$(EXEEXT) \ +@@ -4407,7 +4407,7 @@ WARN_ON_USE_H = lib/warn-on-use.h + # FIXME: once lib/ and gnulib-tests/ are also converted, hoist to Makefile.am + AM_CFLAGS = $(WERROR_CFLAGS) + no_install__progs = src/arch src/coreutils src/hostname +-build_if_possible__progs = src/chroot src/df src/hostid \ ++build_if_possible__progs = src/chroot src/df \ + src/libstdbuf.so src/nice src/pinky src/stdbuf src/stty \ + src/uptime src/users src/who + default__progs = src/[ src/b2sum src/base64 src/base32 src/basename \ +-- +2.10.2 + + +From 2d94b239beac4ea7805e1154afdcab8751e8b081 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Fri, 6 Feb 2015 20:24:12 +0000 +Subject: import Haiku changes, fix warnings. + + +diff --git a/INSTALL b/INSTALL +index 8865734..5bc8a54 100644 +--- a/INSTALL ++++ b/INSTALL +@@ -245,10 +245,10 @@ directory contains several dysfunctional programs; working variants of + these programs are available in '/usr/bin'. So, if you need '/usr/ucb' + in your 'PATH', put it _after_ '/usr/bin'. + +- On Haiku, software installed for all users goes in '/boot/common', ++ On Haiku, software installed for all users goes in '/boot/system', + not '/usr/local'. It is recommended to use the following options: + +- ./configure --prefix=/boot/common ++ ./configure --prefix=/boot/system + + Specifying the System Type + ========================== +diff --git a/lib/localcharset.c b/lib/localcharset.c +index b2a0369..7dcf3d9 100644 +--- a/lib/localcharset.c ++++ b/lib/localcharset.c +@@ -128,7 +128,7 @@ get_charset_aliases (void) + cp = charset_aliases; + if (cp == NULL) + { +-#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2) ++#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2 || defined __HAIKU__) + const char *dir; + const char *base = "charset.alias"; + char *file_name; +@@ -372,6 +372,13 @@ get_charset_aliases (void) + "CP1386" "\0" "GBK" "\0" + "CP3372" "\0" "EUC-JP" "\0"; + # endif ++ ++# if defined __HAIKU__ ++ /* To avoid the troubles of installing a separate file in the same ++ directory as the DLL and of retrieving the DLL's directory at ++ runtime, simply inline the aliases here. */ ++ cp = "UTF-8" "\0"; ++# endif + #endif + + charset_aliases = cp; +diff --git a/src/copy.c b/src/copy.c +index b3acff3..013fc28 100644 +--- a/src/copy.c ++++ b/src/copy.c +@@ -18,6 +18,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -64,6 +65,10 @@ + #include "yesno.h" + #include "selinux.h" + ++#if (defined(__BEOS__) || defined(__HAIKU__)) ++# include ++#endif ++ + #if USE_XATTR + # include + # include +@@ -589,6 +594,92 @@ is_ancestor (const struct stat *sb, const struct dir_list *ancestors) + return false; + } + ++ ++static int ++copy_attributes(int fromFd, int toFd) ++{ ++ struct dirent *dirent; ++ char buffer[65536]; ++ ++ DIR *attributes = fs_fopen_attr_dir(fromFd); ++ if (attributes == NULL) ++ return errno == B_UNSUPPORTED ? 0 : -1; ++ ++ while ((dirent = fs_read_attr_dir(attributes)) != NULL) { ++ struct stat stat; ++ off_t pos = 0; ++ int attrFromFD = fs_fopen_attr(fromFd, dirent->d_name, 0, O_RDONLY); ++ int attrToFD; ++ ++ if (attrFromFD < 0) ++ continue; ++ ++ if (fstat(attrFromFD, &stat) != 0) { ++ close(attrFromFD); ++ continue; ++ } ++ ++ attrToFD = fs_fopen_attr(toFd, dirent->d_name, stat.st_type, ++ O_WRONLY | O_TRUNC | O_CREAT); ++ if (attrToFD < 0) { ++ close(attrFromFD); ++ continue; ++ } ++ ++ while (true) { ++ ssize_t bytesRead, bytesWritten; ++ ++ bytesRead = read_pos(attrFromFD, pos, buffer, sizeof(buffer)); ++ if (bytesRead < 0) { ++ fprintf(stderr, "error reading attribute '%s'", dirent->d_name); ++ break; ++ } ++ ++ bytesWritten = write_pos(attrToFD, pos, buffer, bytesRead); ++ if (bytesWritten != bytesRead) { ++ fprintf(stderr, "error writing attribute '%s'", dirent->d_name); ++ break; ++ } ++ ++ pos += bytesWritten; ++ stat.st_size -= bytesWritten; ++ ++ if (stat.st_size <= 0) ++ break; ++ } ++ close(attrToFD); ++ close(attrFromFD); ++ } ++ ++ fs_close_attr_dir(attributes); ++ return 0; ++} ++ ++ ++static int ++copy_attributes_by_name(const char *from, const char *to, int resolveLinks) ++{ ++ int fromFd, toFd, result; ++ ++ fromFd = open(from, O_RDONLY | (resolveLinks ? 0 : O_NOTRAVERSE)); ++ if (fromFd < 0) ++ return -1; ++ ++ toFd = open(to, O_RDONLY | (resolveLinks ? 0 : O_NOTRAVERSE)); ++ if (toFd < 0) { ++ close(fromFd); ++ return -1; ++ } ++ ++ result = copy_attributes(fromFd, toFd); ++ ++ close(fromFd); ++ close(toFd); ++ ++ return result; ++} ++ ++ + static bool + errno_unsupported (int err) + { +@@ -722,6 +813,10 @@ copy_dir (char const *src_name_in, char const *dst_name_in, bool new_dst, + error (0, errno, _("cannot access %s"), quoteaf (src_name_in)); + return false; + } ++ ++ if (x->ignore_attributes == 0 ++ && copy_attributes_by_name(src_name_in, dst_name_in, true) != 0) ++ fprintf(stderr, "%s: could not copy attributes\n", src_name_in); + + /* For cp's -H option, dereference command line arguments, but do not + dereference symlinks that are found via recursive traversal. */ +@@ -1390,6 +1485,11 @@ preserve_metadata: + return_val = false; + } + } ++ ++ if (x->ignore_attributes == 0 ++ && copy_attributes(source_desc, dest_desc) != 0) ++ fprintf(stderr, "%s: could not copy attributes\n", src_name); ++ + + close_src_and_dst_desc: + if (close (dest_desc) < 0) +@@ -2320,6 +2420,12 @@ copy_internal (char const *src_name, char const *dst_name, + dereference)) + goto un_backup; + ++ if (x->ignore_attributes == 0 ++ && copy_attributes_by_name (earlier_file, dst_name, ++ false) != 0) ++ error (0, errno, "cannot copy attributes from %s\n", ++ earlier_file); ++ + return true; + } + } +@@ -2721,6 +2827,11 @@ copy_internal (char const *src_name, char const *dst_name, + preserving owner/group is a potential security problem. */ + } + } ++ ++ if (x->ignore_attributes == 0 ++ && copy_attributes_by_name(src_name, dst_name, false) != 0) ++ fprintf(stderr, "%s: could not copy attributes\n", src_name); ++ + } + else + { +diff --git a/src/copy.h b/src/copy.h +index a516002..87ac381 100644 +--- a/src/copy.h ++++ b/src/copy.h +@@ -187,6 +187,9 @@ struct cp_options + must be false. */ + bool require_preserve; + ++ /* If nonzero, attributes will be ignored when copying. */ ++ int ignore_attributes; ++ + /* If true, attempt to preserve the SELinux security context, too. + Set this only if the kernel is SELinux enabled. */ + bool preserve_security_context; +diff --git a/src/cp.c b/src/cp.c +index 1b528c6..e07f7a6 100644 +--- a/src/cp.c ++++ b/src/cp.c +@@ -74,6 +74,7 @@ struct dir_attr + enum + { + ATTRIBUTES_ONLY_OPTION = CHAR_MAX + 1, ++ IGNORE_ATTRIBUTES, + COPY_CONTENTS_OPTION, + NO_PRESERVE_ATTRIBUTES_OPTION, + PARENTS_OPTION, +@@ -122,6 +123,7 @@ static struct option const long_opts[] = + {"copy-contents", no_argument, NULL, COPY_CONTENTS_OPTION}, + {"dereference", no_argument, NULL, 'L'}, + {"force", no_argument, NULL, 'f'}, ++ {"ignore-attributes", no_argument, NULL, IGNORE_ATTRIBUTES}, + {"interactive", no_argument, NULL, 'i'}, + {"link", no_argument, NULL, 'l'}, + {"no-clobber", no_argument, NULL, 'n'}, +@@ -180,6 +182,7 @@ Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.\n\ + -f, --force if an existing destination file cannot be\n\ + opened, remove it and try again (this option\n\ + is ignored when the -n option is also used)\n\ ++ --ignore-attributes do not copy attributes\n\ + -i, --interactive prompt before overwrite (overrides a previous -n\ + \n\ + option)\n\ +@@ -790,6 +793,7 @@ cp_option_init (struct cp_options *x) + x->data_copy_required = true; + x->require_preserve = false; + x->recursive = false; ++ x->ignore_attributes = false; + x->sparse_mode = SPARSE_AUTO; + x->symbolic_link = false; + x->set_mode = false; +@@ -990,6 +994,10 @@ main (int argc, char **argv) + x.dereference = DEREF_COMMAND_LINE_ARGUMENTS; + break; + ++ case IGNORE_ATTRIBUTES: ++ x.ignore_attributes = true; ++ break; ++ + case 'i': + x.interactive = I_ASK_USER; + break; +diff --git a/src/dircolors.h b/src/dircolors.h +index f3f38a4..024b82b 100644 +--- a/src/dircolors.h ++++ b/src/dircolors.h +@@ -59,7 +59,7 @@ static char const G_line[] = + 'S','E','T','G','I','D',' ','3','0',';','4','3',' ','#',' ','f','i','l','e',' ','t','h','a','t',' ','i','s',' ','s','e','t','g','i','d',' ','(','g','+','s',')',0, + 'C','A','P','A','B','I','L','I','T','Y',' ','3','0',';','4','1',' ','#',' ','f','i','l','e',' ','w','i','t','h',' ','c','a','p','a','b','i','l','i','t','y',0, + 'S','T','I','C','K','Y','_','O','T','H','E','R','_','W','R','I','T','A','B','L','E',' ','3','0',';','4','2',' ','#',' ','d','i','r',' ','t','h','a','t',' ','i','s',' ','s','t','i','c','k','y',' ','a','n','d',' ','o','t','h','e','r','-','w','r','i','t','a','b','l','e',' ','(','+','t',',','o','+','w',')',0, +- 'O','T','H','E','R','_','W','R','I','T','A','B','L','E',' ','3','4',';','4','2',' ','#',' ','d','i','r',' ','t','h','a','t',' ','i','s',' ','o','t','h','e','r','-','w','r','i','t','a','b','l','e',' ','(','o','+','w',')',' ','a','n','d',' ','n','o','t',' ','s','t','i','c','k','y',0, ++ 'O','T','H','E','R','_','W','R','I','T','A','B','L','E',' ','3','4',';','4','3',' ','#',' ','d','i','r',' ','t','h','a','t',' ','i','s',' ','o','t','h','e','r','-','w','r','i','t','a','b','l','e',' ','(','o','+','w',')',' ','a','n','d',' ','n','o','t',' ','s','t','i','c','k','y',0, + 'S','T','I','C','K','Y',' ','3','7',';','4','4',' ','#',' ','d','i','r',' ','w','i','t','h',' ','t','h','e',' ','s','t','i','c','k','y',' ','b','i','t',' ','s','e','t',' ','(','+','t',')',' ','a','n','d',' ','n','o','t',' ','o','t','h','e','r','-','w','r','i','t','a','b','l','e',0, + '#',' ','T','h','i','s',' ','i','s',' ','f','o','r',' ','f','i','l','e','s',' ','w','i','t','h',' ','e','x','e','c','u','t','e',' ','p','e','r','m','i','s','s','i','o','n',':',0, + 'E','X','E','C',' ','0','1',';','3','2',0, +diff --git a/src/dircolors.hin b/src/dircolors.hin +index 3c00faf..031deae 100644 +--- a/src/dircolors.hin ++++ b/src/dircolors.hin +@@ -61,7 +61,7 @@ SETUID 37;41 # file that is setuid (u+s) + SETGID 30;43 # file that is setgid (g+s) + CAPABILITY 30;41 # file with capability + STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w) +-OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky ++OTHER_WRITABLE 34;43 # dir that is other-writable (o+w) and not sticky + STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable + + # This is for files with execute permission: +diff --git a/src/ls.c b/src/ls.c +index f462e61..12984fa 100644 +--- a/src/ls.c ++++ b/src/ls.c +@@ -697,6 +697,11 @@ static struct ignore_pattern *hide_patterns; + want to mess up the terminal if control chars get sent to it, and some + quoting methods pass through control chars as-is. */ + static bool qmark_funny_chars; ++#if defined(__HAIKU__) /* Default to show UTF8 chars in Haiku terminal. */ ++#define QMARK_FUNNY_CHARS_TTY 0 ++#else ++#define QMARK_FUNNY_CHARS_TTY 1 ++#endif + + /* Quoting options for file and dir name output. */ + +@@ -1655,7 +1660,7 @@ decode_switches (int argc, char **argv) + bool sort_type_specified = false; + bool kibibytes_specified = false; + +- qmark_funny_chars = false; ++ qmark_funny_chars = QMARK_FUNNY_CHARS_TTY; + + /* initialize all switches to default settings */ + +@@ -1680,7 +1685,9 @@ decode_switches (int argc, char **argv) + format = many_per_line; + set_quoting_style (NULL, shell_escape_quoting_style); + /* See description of qmark_funny_chars, above. */ ++#ifndef __HAIKU__ + qmark_funny_chars = true; ++#endif + } + else + { +@@ -4054,6 +4061,7 @@ print_long_format (const struct fileinfo *f) + p = buf; + } + ++#if !defined(__HAIKU__) + if (f->stat_ok + && (S_ISCHR (f->stat.st_mode) || S_ISBLK (f->stat.st_mode))) + { +@@ -4070,6 +4078,7 @@ print_long_format (const struct fileinfo *f) + p += file_size_width + 1; + } + else ++#endif + { + char hbuf[LONGEST_HUMAN_READABLE + 1]; + char const *size = +diff --git a/src/mv.c b/src/mv.c +index 04d2be3..c6a14eb 100644 +--- a/src/mv.c ++++ b/src/mv.c +@@ -126,6 +126,7 @@ cp_option_init (struct cp_options *x) + x->reduce_diagnostics = false; + x->data_copy_required = true; + x->require_preserve = false; /* FIXME: maybe make this an option */ ++ x->ignore_attributes = false; + x->require_preserve_context = false; + x->preserve_xattr = true; + x->require_preserve_xattr = false; +diff --git a/src/remove.c b/src/remove.c +index 7309f03..56c876f 100644 +--- a/src/remove.c ++++ b/src/remove.c +@@ -214,7 +214,7 @@ prompt (FTS const *fts, FTSENT const *ent, bool is_dir, + wp_errno = errno; + } + +- if (write_protected || x->interactive == RMI_ALWAYS) ++ if (write_protected || errno || x->interactive == RMI_ALWAYS) + { + if (0 <= write_protected && dirent_type == DT_UNKNOWN) + { +diff --git a/src/uname.c b/src/uname.c +index 6371ca2..0831319 100644 +--- a/src/uname.c ++++ b/src/uname.c +@@ -49,6 +49,10 @@ + # include + #endif + ++#ifdef __HAIKU__ ++# include ++#endif ++ + #include "system.h" + #include "die.h" + #include "error.h" +@@ -338,6 +342,30 @@ main (int argc, char **argv) + # endif + } + #endif ++ ++#ifdef __HAIKU__ ++ { ++ cpu_topology_node_info root; ++ uint32 count = 1; ++ status_t error = get_cpu_topology_info(&root, &count); ++ if (error != B_OK || count < 1) ++ element = "unknown"; ++ else { ++ switch (root.data.root.platform) { ++ case B_CPU_x86: ++ element = "x86"; ++ break; ++ case B_CPU_x86_64: ++ element = "x86_64"; ++ break; ++ default: ++ element = "other"; ++ break; ++ } ++ } ++ } ++#endif ++ + if (! (toprint == UINT_MAX && element == unknown)) + print_element (element); + } +-- +2.10.2 +