diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 0000000..ed0ec9b --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,162 @@ +# spell-checker:words POSIX repo SDK SDKs toolchain toolchains +# spell-checker:ignore uutils ARCH ABI BACKTRACE BINDIR cl COMNTOOLS dllcrt findstr maint MINGW MINGWDIR mkdir MSVC MSYS rustc rustlib rustup USERPROFILE vcvarsall + +version: "{build} ~ {branch}" + +branches: + except: + - gh-pages + +os: Visual Studio 2015 + +artifacts: + - path: target\%TARGET%\debug\libuucore.rlib + name: libuucore.rlib + +matrix: + allow_failures: + - CHANNEL: nightly +# - ABI: gnu + +environment: + global: + FEATURES: "" + BUILD_OPTIONS: "--all-features" + TEST_OPTIONS: "--all-features --no-fail-fast" + + matrix: + # minimum version + - CHANNEL: 1.31.0 + ARCH: i686 + ABI: msvc + # "msvc" ABI + - CHANNEL: stable + ARCH: i686 + ABI: msvc + - CHANNEL: stable + ARCH: x86_64 + ABI: msvc +# - CHANNEL: beta +# ARCH: i686 +# ABI: msvc +# - CHANNEL: beta +# ARCH: x86_64 +# ABI: msvc + - CHANNEL: nightly + ARCH: i686 + ABI: msvc + - CHANNEL: nightly + ARCH: x86_64 + ABI: msvc + # "gnu" ABI + - CHANNEL: stable + ARCH: i686 + ABI: gnu + - CHANNEL: stable + ARCH: x86_64 + ABI: gnu +# - CHANNEL: beta +# ARCH: i686 +# ABI: gnu +# - CHANNEL: beta +# ARCH: x86_64 +# ABI: gnu +# - CHANNEL: nightly +# ARCH: i686 +# ABI: gnu +# - CHANNEL: nightly +# ARCH: x86_64 +# ABI: gnu + # * specific gnu compilers + - CHANNEL: stable + ARCH: i686 + ABI: gnu + MINGW_URL: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.9.2/threads-win32/dwarf/i686-4.9.2-release-win32-dwarf-rt_v4-rev4.7z/download + MINGW_ARCHIVE: i686-4.9.2-release-win32-dwarf-rt_v4-rev4.7z + - CHANNEL: stable + ARCH: x86_64 + ABI: gnu + MINGW_URL: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/7.3.0/threads-posix/seh/x86_64-7.3.0-release-posix-seh-rt_v5-rev0.7z/download#mingw-w64-x86_64-7.3.0-posix-seh.7z + +install: + # force branch checkout (if knowable), then reset to the specific commit ## (can be needed for accurate code coverage info) + # * this allows later apps to see the branch name using standard `git branch` operations, yet always builds the correct specific commit + # * ref: [`@`](https://archive.is/RVpnF) + - if DEFINED APPVEYOR_REPO_BRANCH if /I "%APPVEYOR_REPO_SCM%"=="git" ( git checkout "%APPVEYOR_REPO_BRANCH%" 2>NUL & git reset --hard "%APPVEYOR_REPO_COMMIT%" ) + # ensure CWD is project main directory + - cd "%APPVEYOR_BUILD_FOLDER%" + # create a working area + - ps: if ( ! $env:CI_TEMP_DIR ) { $env:CI_TEMP_DIR = "${env:TEMP}\${env:APPVEYOR_JOB_ID}" ; mkdir -force $env:CI_TEMP_DIR | out-null } + + # define the TARGET host + - set "TARGET=%ARCH%-pc-windows-%ABI%" + + # show relevant environment settings + - ps: ('CHANNEL', 'ARCH', 'ABI', 'FEATURES', 'BUILD_OPTIONS', 'TEST_OPTIONS', 'TARGET') |% { write-host -f yellow "$_=$(get-content -ea silent env:/$_)" } + + # rust installation + # * install `rust` via `rustup` + - appveyor DownloadFile "https://win.rustup.rs/" -FileName "%CI_TEMP_DIR%\rustup-init.exe" + - call "%CI_TEMP_DIR%\rustup-init.exe" -y --default-toolchain %CHANNEL% --default-host %TARGET% --no-modify-path >NUL + - set "PATH=%PATH%;%USERPROFILE%\.cargo\bin" + - ps: $env:TOOLCHAIN = $("$(rustup show active-toolchain)" -split '\s+')[0] + # * set RUST_BACKTRACE for enhanced error messages + - set RUST_BACKTRACE=1 + # * show rust versions + - rustc -vV + - cargo -vV + + # "gnu" ABI setup + # * use the system MinGW/MSYS if we can + - if /i "%ABI%"=="gnu" set MSYS_BINDIR=C:\msys64\usr\bin + - if /i "%ABI%"=="gnu" if /i "%ARCH%"=="i686" set "MSYS_BITS=32" + - if /i "%ABI%"=="gnu" if /i "%ARCH%"=="x86_64" set "MSYS_BITS=64" + - if defined MSYS_BITS set "MSYS_MINGWDIR=C:\msys64\mingw%MSYS_BITS%" + - if defined MSYS_MINGWDIR set "MSYS_BINDIR=C:\msys64\usr\bin" + ## * workaround for rust-lang/rust#47048 / rust-lang/rust#53454 ## !maint: remove when resolved + - if /i "%ABI%"=="gnu" if /i "%ARCH%"=="i686" if not DEFINED MINGW_URL set "MINGW_URL=https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win32/Personal Builds/mingw-builds/8.1.0/threads-posix/dwarf/i686-8.1.0-release-posix-dwarf-rt_v6-rev0.7z" + - if /i "%ABI%"=="gnu" if /i "%ARCH%"=="x86_64" if not DEFINED MINGW_URL set "MINGW_URL=https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win64/Personal Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z" + ## (end workaround) + # * specific MinGW, if specified + - ps: if ( ! $env:MINGW_ARCHIVE -and $env:MINGW_URL ) { $env:MINGW_ARCHIVE = $($([URI]$env:MINGW_URL).fragment).TrimStart('#') } + - ps: if ( ! $env:MINGW_ARCHIVE -and $env:MINGW_URL ) { $env:MINGW_ARCHIVE = $([URI]$env:MINGW_URL).segments[-1] } + - if defined MINGW_ARCHIVE curl --insecure -fsSL "%MINGW_URL%" -o "%CI_TEMP_DIR%\%MINGW_ARCHIVE%" + - if defined MINGW_ARCHIVE mkdir "%CI_TEMP_DIR%\MinGW" >NUL + - if defined MINGW_ARCHIVE 7z x -y "%CI_TEMP_DIR%\%MINGW_ARCHIVE%" -o"%CI_TEMP_DIR%\MinGW" >NUL + - if defined MINGW_ARCHIVE set "MSYS_MINGWDIR=%CI_TEMP_DIR%\MinGW\mingw%MSYS_BITS%" + - if defined MINGW_ARCHIVE set "MSYS_BINDIR=%MSYS_MINGWDIR%\bin" + # * MinGW/MSYS PATH setup + - if defined MSYS_MINGWDIR set PATH=%MSYS_MINGWDIR%\%ARCH%-w64-mingw32\bin;%MSYS_BINDIR%;%PATH% + ## * workaround for rust-lang/rust#47048 / rust-lang/rust#53454 ## !maint: remove when resolved + # ** ref: , + # ** egs: , + - if /i "%ABI%"=="gnu" rustup install %CHANNEL%-%ARCH%-pc-windows-msvc + - if /i "%ABI%"=="gnu" rustup default %CHANNEL%-%ARCH%-pc-windows-msvc + - if /i "%ABI%"=="gnu" rustup target add %TARGET% + - ps: $env:TOOLCHAIN = $("$(rustup show active-toolchain)" -split '\s+')[0] + - if /i "%ABI%"=="gnu" rustup show + - if /i "%ABI%"=="gnu" rustc -vV + # ** copy libs from gcc toolchain to rust toolchain (more specifically, "crt2.o" and "dllcrt2.o" are needed) + - if defined MSYS_MINGWDIR copy /y "%MSYS_MINGWDIR%\%ARCH%-w64-mingw32\lib\*.o" "%USERPROFILE%\.rustup\toolchains\%TOOLCHAIN%\lib\rustlib\%TARGET%\lib" >NUL + ## (end workaround) + # * show `gcc` info + - if /i "%ABI%"=="gnu" ( where gcc && gcc --version ) + + # "msvc" ABI setup + - if /i "%ABI%" == "msvc" if /i "%ARCH%" == "i686" call "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" + - if /i "%ABI%" == "msvc" if /i "%ARCH%" == "x86_64" call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 + - if /i "%ABI%" == "msvc" if /i "%ARCH%" == "x86_64" call "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" x86_amd64 + # * show `cl` info + - if /i "%ABI%"=="msvc" ( where cl && cl 2>&1 | findstr /i /c:"version" ) + + # finalize options + - ps: if ("$env:FEATURES".length) { $env:BUILD_OPTIONS = $(($env:BUILD_OPTIONS, "--features `"${env:FEATURES}`"")|?{$_}) -join ' ' } + - ps: if ("$env:FEATURES".length) { $env:TEST_OPTIONS = $(($env:TEST_OPTIONS, "--features `"${env:FEATURES}`"")|?{$_}) -join ' ' } + +build_script: + - ps: $env:BUILD_CMD = $(("cargo +${env:TOOLCHAIN} build --target=${env:TARGET}", $env:BUILD_OPTIONS)|?{$_}) -join ' ' + - echo [ `%BUILD_CMD%` ] & %BUILD_CMD% + +test_script: + - ps: $env:TEST_CMD = $(("cargo +${env:TOOLCHAIN} test --target=${env:TARGET}", $env:TEST_OPTIONS)|?{$_}) -join ' ' + - echo [ `%TEST_CMD%` ] & %TEST_CMD% diff --git a/.cirrus.yml b/.cirrus.yml new file mode 100644 index 0000000..b94acfa --- /dev/null +++ b/.cirrus.yml @@ -0,0 +1,15 @@ +freebsd_instance: + image: freebsd-12-0-release-amd64 + +task: + name: stable x86_64-unknown-freebsd + setup_script: + - pkg install -y curl + - curl https://sh.rustup.rs -sSf --output rustup.sh + - sh rustup.sh -y + build_script: + - . $HOME/.cargo/env + - cargo build + test_script: + - . $HOME/.cargo/env + - cargo test diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 0000000..69cb760 --- /dev/null +++ b/.codecov.yml @@ -0,0 +1 @@ +comment: false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b1ac525 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +target/ +/src/*/gen_table +/build/ +/tmp/ +/busybox/ +/.vscode/ +/.vs/ +*~ +.*.swp +.*.swo +.idea +Cargo.lock +lib*.a +/docs/_build diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..21a7345 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,47 @@ +language: rust + +rust: + - stable + - beta + +os: + - linux + - osx + +env: + global: FEATURES='' CARGO_ARGS='--all-features' + +matrix: + allow_failures: + - rust: nightly + fast_finish: true + include: + - rust: 1.31.0 + - rust: stable + os: linux + - rust: stable + os: osx + - rust: nightly + os: linux + - rust: nightly + os: osx + +cache: + directories: + - $HOME/.cargo + +script: + - cargo build $CARGO_ARGS --features "$FEATURES" + - cargo test $CARGO_ARGS --features "$FEATURES" --no-fail-fast + +addons: + apt: + packages: + - libssl-dev + +after_success: | + if [ "$TRAVIS_OS_NAME" = linux -a "$TRAVIS_RUST_VERSION" = stable ]; then + bash <(curl https://raw.githubusercontent.com/xd009642/tarpaulin/master/travis-install.sh) + cargo tarpaulin --out Xml + bash <(curl -s https://codecov.io/bash) + fi diff --git a/Cargo.toml b/Cargo.toml index faba36a..a80e118 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "uucore" version = "0.0.1" -authors = [] +authors = ["uutils developers"] [dependencies] getopts = "0.2.18" @@ -32,6 +32,3 @@ zero-copy = ["nix", "libc", "lazy_static", "platform-info"] wide = [] default = [] -[lib] -path = "lib.rs" -name = "uucore" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0177c4a --- /dev/null +++ b/LICENSE @@ -0,0 +1,18 @@ +Copyright (c) Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..599b1fd --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +uutils uucore +============= + +[![Discord](https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat)](https://discord.gg/wQVJbvJ) +[![License](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/uutils/uucore/blob/master/LICENSE) +[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fuutils%2Fuucore.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fuutils%2Fuucore?ref=badge_shield) +[![LOC](https://tokei.rs/b1/github/uutils/uucore?category=code)](https://github.com/Aaronepower/tokei) +[![dependency status](https://deps.rs/repo/github/uutils/uucore/status.svg)](https://deps.rs/repo/github/uutils/uucore) + +[![Build Status](https://api.travis-ci.org/uutils/coreutils.svg?branch=master)](https://travis-ci.org/uutils/uucore) +[![Build Status (Windows)](https://ci.appveyor.com/api/projects/status/787ltcxgy86r20le?svg=true)](https://ci.appveyor.com/project/Arcterus/uucore) +[![Build Status (FreeBSD)](https://api.cirrus-ci.com/github/uutils/coreutils.svg)](https://cirrus-ci.com/github/uutils/uucore/master) + +----------------------------------------------- + +uucore is a collection of code used by various uutils projects. Currently, +almost all of the code is used by [uutils/coreutils](https://github.com/uutils/coreutils). +In the future, much of this repository may be supplanted by smaller, more +focused repositories/crates. + +### Rust Version ### + +uucore follows Rust's release channels and is tested against stable, beta and nightly. +The current oldest supported version of the Rust compiler is `1.31.0`. + +On both Windows and Redox, only the nightly version is tested currently. + +License +------- + +uucore is licensed under the MIT License - see the `LICENSE` file for details + +[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fuutils%2Fuucore.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fuutils%2Fuucore?ref=badge_large) diff --git a/coreopts.rs b/src/coreopts.rs similarity index 100% rename from coreopts.rs rename to src/coreopts.rs diff --git a/encoding.rs b/src/encoding.rs similarity index 100% rename from encoding.rs rename to src/encoding.rs diff --git a/entries.rs b/src/entries.rs similarity index 100% rename from entries.rs rename to src/entries.rs diff --git a/fs.rs b/src/fs.rs similarity index 100% rename from fs.rs rename to src/fs.rs diff --git a/lib.rs b/src/lib.rs similarity index 100% rename from lib.rs rename to src/lib.rs diff --git a/macros.rs b/src/macros.rs similarity index 100% rename from macros.rs rename to src/macros.rs diff --git a/mode.rs b/src/mode.rs similarity index 100% rename from mode.rs rename to src/mode.rs diff --git a/panic.rs b/src/panic.rs similarity index 100% rename from panic.rs rename to src/panic.rs diff --git a/parse_time.rs b/src/parse_time.rs similarity index 100% rename from parse_time.rs rename to src/parse_time.rs diff --git a/process.rs b/src/process.rs similarity index 100% rename from process.rs rename to src/process.rs diff --git a/signals.rs b/src/signals.rs similarity index 99% rename from signals.rs rename to src/signals.rs index 76a153a..d6ee017 100644 --- a/signals.rs +++ b/src/signals.rs @@ -332,7 +332,7 @@ pub fn signal_by_name_or_value(signal_name_or_value: &str) -> Option { return None; } } - let signal_name = signal_name_or_value.trim_left_matches("SIG"); + let signal_name = signal_name_or_value.trim_start_matches("SIG"); ALL_SIGNALS .iter() diff --git a/utmpx.rs b/src/utmpx.rs similarity index 100% rename from utmpx.rs rename to src/utmpx.rs diff --git a/wide.rs b/src/wide.rs similarity index 100% rename from wide.rs rename to src/wide.rs diff --git a/zero_copy/mod.rs b/src/zero_copy/mod.rs similarity index 100% rename from zero_copy/mod.rs rename to src/zero_copy/mod.rs diff --git a/zero_copy/platform/default.rs b/src/zero_copy/platform/default.rs similarity index 100% rename from zero_copy/platform/default.rs rename to src/zero_copy/platform/default.rs diff --git a/zero_copy/platform/linux.rs b/src/zero_copy/platform/linux.rs similarity index 100% rename from zero_copy/platform/linux.rs rename to src/zero_copy/platform/linux.rs diff --git a/zero_copy/platform/mod.rs b/src/zero_copy/platform/mod.rs similarity index 100% rename from zero_copy/platform/mod.rs rename to src/zero_copy/platform/mod.rs diff --git a/zero_copy/platform/unix.rs b/src/zero_copy/platform/unix.rs similarity index 100% rename from zero_copy/platform/unix.rs rename to src/zero_copy/platform/unix.rs diff --git a/zero_copy/platform/windows.rs b/src/zero_copy/platform/windows.rs similarity index 100% rename from zero_copy/platform/windows.rs rename to src/zero_copy/platform/windows.rs