Hello community, here is the log from the commit of package crazydiskinfo for openSUSE:Factory checked in at 2020-02-07 15:57:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/crazydiskinfo (Old) and /work/SRC/openSUSE:Factory/.crazydiskinfo.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "crazydiskinfo" Fri Feb 7 15:57:20 2020 rev:2 rq:770791 version:1.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/crazydiskinfo/crazydiskinfo.changes 2019-01-03 18:07:22.728100336 +0100 +++ /work/SRC/openSUSE:Factory/.crazydiskinfo.new.26092/crazydiskinfo.changes 2020-02-07 15:57:58.451621977 +0100 @@ -1,0 +2,10 @@ +Thu Feb 6 20:48:00 UTC 2020 - Martin Hauke <[email protected]> + +- Update to version 1.1.0 + * Add support for toggle raw values between hexadecimal and + decimal + * Add feature to hide a serial number +- Update patch: + * crazydiskinfo-obey-cflags.patch + +------------------------------------------------------------------- Old: ---- crazydiskinfo-1.0.2.tar.gz New: ---- crazydiskinfo-1.1.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ crazydiskinfo.spec ++++++ --- /var/tmp/diff_new_pack.6xQWZl/_old 2020-02-07 15:57:59.499622511 +0100 +++ /var/tmp/diff_new_pack.6xQWZl/_new 2020-02-07 15:57:59.499622511 +0100 @@ -1,7 +1,7 @@ # # spec file for package crazydiskinfo # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: crazydiskinfo -Version: 1.0.2 +Version: 1.1.0 Release: 0 Summary: An interactive TUI S.M.A.R.T viewer License: MIT ++++++ crazydiskinfo-1.0.2.tar.gz -> crazydiskinfo-1.1.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crazydiskinfo-1.0.2/.gitignore new/crazydiskinfo-1.1.0/.gitignore --- old/crazydiskinfo-1.0.2/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/crazydiskinfo-1.1.0/.gitignore 2020-02-05 23:22:57.000000000 +0100 @@ -0,0 +1 @@ +build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crazydiskinfo-1.0.2/CMakeLists.txt new/crazydiskinfo-1.1.0/CMakeLists.txt --- old/crazydiskinfo-1.0.2/CMakeLists.txt 2017-01-26 03:44:28.000000000 +0100 +++ new/crazydiskinfo-1.1.0/CMakeLists.txt 2020-02-05 23:22:57.000000000 +0100 @@ -1,8 +1,10 @@ cmake_minimum_required(VERSION 2.8.0) +option(RAW_VALUES_DEC "Display Raw Values in Decimal instead of Hex" OFF) project(CrazyDiskInfo CXX) add_executable(CrazyDiskInfo main.cpp) set(CMAKE_CXX_FLAGS "-Wall -std=c++11") SET_TARGET_PROPERTIES(CrazyDiskInfo PROPERTIES OUTPUT_NAME crazy) target_link_libraries(CrazyDiskInfo atasmart) +target_link_libraries(CrazyDiskInfo tinfow) target_link_libraries(CrazyDiskInfo ncursesw) INSTALL(TARGETS CrazyDiskInfo RUNTIME DESTINATION /usr/sbin) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crazydiskinfo-1.0.2/README.md new/crazydiskinfo-1.1.0/README.md --- old/crazydiskinfo-1.0.2/README.md 2017-01-26 03:44:28.000000000 +0100 +++ new/crazydiskinfo-1.1.0/README.md 2020-02-05 23:22:57.000000000 +0100 @@ -12,6 +12,11 @@ * ncurses * libatasmart +#### Debian(or derivative) Systems +``` +# apt-get install libatasmart-dev libncurses5-dev libncursesw5-dev +``` + ## Build and Run ``` $ mkdir build @@ -20,3 +25,12 @@ $ make && make install $ sudo crazy ``` + +### Binary Package +Debian package is available from [OBS(Open Build Service)](https://build.opensuse.org/package/show/home:tsuroot/CrazyDiskInfo) +Direct Links: +[Debian_8.0](http://download.opensuse.org/repositories/home:/tsuroot/Debian_8.0/) +Ubuntu [14.04](http://download.opensuse.org/repositories/home:/tsuroot/xUbuntu_14.04/)/[16.04](http://download.opensuse.org/repositories/home:/tsuroot/xUbuntu_16.04/)/[16.10](http://download.opensuse.org/repositories/home:/tsuroot/xUbuntu_16.10/) + +I requested for tSU-RooT. +Thank you very much for your accept with my request. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crazydiskinfo-1.0.2/main.cpp new/crazydiskinfo-1.1.0/main.cpp --- old/crazydiskinfo-1.0.2/main.cpp 2017-01-26 03:44:28.000000000 +0100 +++ new/crazydiskinfo-1.1.0/main.cpp 2020-02-05 23:22:57.000000000 +0100 @@ -9,15 +9,36 @@ #include <sys/signal.h> #include <dirent.h> -constexpr int const STATUS_WIDTH = 80; +std::string const TITLE = "CrazyDiskInfo"; +std::string const VERSION = "1.1.0"; + +constexpr int const STATUS_WIDTH = 83; constexpr int const DEVICE_BAR_HEIGHT = 4; constexpr int const VERSION_HEIGHT = 1; +constexpr int const HEALTH_COLOR = 1; +constexpr int const HEALTH_INV_COLOR = 4; +constexpr int const ATTRIBUTE_LEGEND_COLOR = 7; +constexpr int const TITLE_COLOR = 8; + int width; int height; +class Option +{ +public: + bool hideSerial; + bool isRawHex; + Option() + : + hideSerial(false), + isRawHex(true) + { + } +}; + enum class Health { Good, @@ -45,7 +66,7 @@ std::string serial; //TODO //use std::optional - std::pair<bool, uint64_t> size; + std::pair<bool, uint64_t> capacity; std::pair<bool, uint64_t> powerOnCount; std::pair<bool, uint64_t> powerOnHour; std::pair<bool, double> temperature; @@ -69,12 +90,12 @@ uint64_t value; if (!sk_disk_get_size(skdisk, &value)) { - std::get<0>(size) = true; - std::get<1>(size) = value; + std::get<0>(capacity) = true; + std::get<1>(capacity) = value; } else { - std::get<0>(size) = false; + std::get<0>(capacity) = false; } if (!sk_disk_smart_get_power_cycle(skdisk, &value)) @@ -186,13 +207,15 @@ { wresize(window, VERSION_HEIGHT, width); - wattrset(window, COLOR_PAIR(4)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR)); mvwhline(window, 0, 0, '-', width); - wattroff(window, COLOR_PAIR(4)); + wattroff(window, COLOR_PAIR(HEALTH_COLOR)); + + auto title = " " + TITLE + "-" + VERSION + " "; - wattrset(window, COLOR_PAIR(8)); - mvwprintw(window, 0, (width - sizeof(" CrazyDiskInfo-1.0.2 ")) / 2, " CrazyDiskInfo-1.0.2 "); - wattroff(window, COLOR_PAIR(8)); + wattrset(window, COLOR_PAIR(TITLE_COLOR)); + mvwprintw(window, 0, (width - title.length()) / 2, title.c_str()); + wattroff(window, COLOR_PAIR(TITLE_COLOR)); wnoutrefresh(window); } @@ -202,17 +225,17 @@ int x = 0; for (int i = 0; i < static_cast<int>(smartList.size()); ++i) { - wattrset(window, COLOR_PAIR(1 + static_cast<int>(smartToHealth(smartList[i])))); + wattrset(window, COLOR_PAIR(HEALTH_INV_COLOR + static_cast<int>(smartToHealth(smartList[i])))); mvwprintw(window, 0, x, "%-7s", healthToString(smartToHealth(smartList[i])).c_str()); - wattroff(window, COLOR_PAIR(1 + static_cast<int>(smartToHealth(smartList[i])))); + wattroff(window, COLOR_PAIR(HEALTH_INV_COLOR + static_cast<int>(smartToHealth(smartList[i])))); if (std::get<0>(smartList[i].temperature)) { - wattrset(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(std::get<1>(smartList[i].temperature))))); + wattrset(window, COLOR_PAIR(HEALTH_INV_COLOR + static_cast<int>(temperatureToHealth(std::get<1>(smartList[i].temperature))))); mvwprintw(window, 1, x, "%.1f ", smartList[i].temperature); waddch(window, ACS_DEGREE); waddstr(window, "C"); - wattroff(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(std::get<1>(smartList[i].temperature))))); + wattroff(window, COLOR_PAIR(HEALTH_INV_COLOR + static_cast<int>(temperatureToHealth(std::get<1>(smartList[i].temperature))))); } else { @@ -223,13 +246,13 @@ if (i == select) { - wattrset(window, COLOR_PAIR(4) | A_BOLD); + wattrset(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); mvwprintw(window, 2, x, smartList[i].deviceName.c_str()); - wattroff(window, COLOR_PAIR(4) | A_BOLD); + wattroff(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); - wattrset(window, COLOR_PAIR(4)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR)); mvwhline(window, 3, x, '-', smartList[i].deviceName.length()); - wattroff(window, COLOR_PAIR(4)); + wattroff(window, COLOR_PAIR(HEALTH_COLOR)); } else { @@ -241,75 +264,82 @@ pnoutrefresh(window, 0, 0, 1, 0, DEVICE_BAR_HEIGHT, width - 1); } -void drawStatus(WINDOW * window, SMART const & smart) +void drawStatus(WINDOW * window, SMART const & smart, Option const & option) { wresize(window, 10 + smart.attribute.size(), STATUS_WIDTH); wborder(window, '|', '|', '-', '-', '+', '+', '+', '+'); - if (std::get<0>(smart.size)) + if (std::get<0>(smart.capacity)) { std::vector<std::string> unit = {{"Byte", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"}}; int u = 0; - double size = std::get<1>(smart.size); + double capacity = std::get<1>(smart.capacity); while (true) { - double old = size; - size /= 1024; - if (size < 1.0) + double old = capacity; + capacity /= 1024; + if (capacity < 1.0) { - size = old; + capacity = old; break; } ++u; } char s[STATUS_WIDTH]; - int len = snprintf(s, STATUS_WIDTH, " %s [%.1f %s] ", smart.model.c_str(), size, unit[u].c_str()); - wattrset(window, COLOR_PAIR(4) | A_BOLD); + int len = snprintf(s, STATUS_WIDTH, " %s [%.1f %s] ", smart.model.c_str(), capacity, unit[u].c_str()); + wattrset(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); mvwprintw(window, 0, (STATUS_WIDTH - len) / 2, "%s", s); - wattroff(window, COLOR_PAIR(4) | A_BOLD); + wattroff(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); } else { char s[STATUS_WIDTH]; int len = snprintf(s, STATUS_WIDTH, " %s [--] ", smart.model.c_str()); - wattrset(window, COLOR_PAIR(4) | A_BOLD); + wattrset(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); mvwprintw(window, 0, (STATUS_WIDTH - len) / 2, "%s", s); - wattroff(window, COLOR_PAIR(4) | A_BOLD); + wattroff(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); } - wattrset(window, COLOR_PAIR(4)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR)); mvwprintw(window, 2, (int)(STATUS_WIDTH * (1.0 / 5)), "Firmware:"); - wattroff(window, COLOR_PAIR(4)); - wattrset(window, COLOR_PAIR(4) | A_BOLD); + wattroff(window, COLOR_PAIR(HEALTH_COLOR)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); wprintw(window, " %s", smart.firmware.c_str()); - wattroff(window, COLOR_PAIR(4) | A_BOLD); + wattroff(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); - wattrset(window, COLOR_PAIR(4)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR)); mvwprintw(window, 3, (int)(STATUS_WIDTH * (1.0 / 5)), "Serial: "); - wattroff(window, COLOR_PAIR(4)); - wattrset(window, COLOR_PAIR(4) | A_BOLD); - wprintw(window, " %s", smart.serial.c_str()); - wattroff(window, COLOR_PAIR(4) | A_BOLD); + wattroff(window, COLOR_PAIR(HEALTH_COLOR)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); + if (option.hideSerial) + { + wprintw(window, " ********************"); + } + else + { + wprintw(window, " %s", smart.serial.c_str()); + } + wattroff(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); - wattrset(window, COLOR_PAIR(4)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR)); mvwprintw(window, 1, 1, "Status"); - wattroff(window, COLOR_PAIR(4)); - wattrset(window, COLOR_PAIR(1 + static_cast<int>(smartToHealth(smart)))); + wattroff(window, COLOR_PAIR(HEALTH_COLOR)); + wattrset(window, COLOR_PAIR(HEALTH_INV_COLOR + static_cast<int>(smartToHealth(smart)))); mvwprintw(window, 2, 2, "+--------+"); mvwprintw(window, 3, 2, "| |"); mvwprintw(window, 4, 2, "+--------+"); mvwprintw(window, 3, 2 + ((sizeof("| |") - healthToString(smartToHealth(smart)).length()) / 2), "%s", healthToString(smartToHealth(smart)).c_str()); - wattroff(window, COLOR_PAIR(1 + static_cast<int>(smartToHealth(smart)))); + wattroff(window, COLOR_PAIR(HEALTH_INV_COLOR + static_cast<int>(smartToHealth(smart)))); if (std::get<0>(smart.temperature)) { - wattrset(window, COLOR_PAIR(4)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR)); mvwprintw(window, 5, 1, "Temperature"); - wattroff(window, COLOR_PAIR(4)); - wattrset(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(std::get<1>(smart.temperature))))); + wattroff(window, COLOR_PAIR(HEALTH_COLOR)); + wattrset(window, COLOR_PAIR(HEALTH_INV_COLOR + static_cast<int>(temperatureToHealth(std::get<1>(smart.temperature))))); mvwprintw(window, 6, 2, " %0.1f ", std::get<1>(smart.temperature)); waddch(window, ACS_DEGREE); waddstr(window, "C "); - wattroff(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(std::get<1>(smart.temperature))))); + wattroff(window, COLOR_PAIR(HEALTH_INV_COLOR + static_cast<int>(temperatureToHealth(std::get<1>(smart.temperature))))); } else { @@ -321,13 +351,13 @@ if (std::get<0>(smart.powerOnCount)) { - wattrset(window, COLOR_PAIR(4)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR)); mvwprintw(window, 2, (int)(STATUS_WIDTH * (3.0 / 5)), "Power On Count:"); - wattroff(window, COLOR_PAIR(4)); - wattrset(window, COLOR_PAIR(4) | A_BOLD); + wattroff(window, COLOR_PAIR(HEALTH_COLOR)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); wprintw(window, " %llu ", std::get<1>(smart.powerOnCount)); - wattroff(window, COLOR_PAIR(4) | A_BOLD); - wattrset(window, COLOR_PAIR(4)); + wattroff(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); + wattrset(window, COLOR_PAIR(HEALTH_COLOR)); wprintw(window, "count"); } else @@ -338,15 +368,15 @@ if (std::get<0>(smart.powerOnHour)) { - wattrset(window, COLOR_PAIR(4)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR)); mvwprintw(window, 3, (int)(STATUS_WIDTH * (3.0 / 5)), "Power On Hours:"); - wattroff(window, COLOR_PAIR(4)); - wattrset(window, COLOR_PAIR(4) | A_BOLD); + wattroff(window, COLOR_PAIR(HEALTH_COLOR)); + wattrset(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); wprintw(window, " %llu ", std::get<1>(smart.powerOnHour)); - wattroff(window, COLOR_PAIR(4) | A_BOLD); - wattrset(window, COLOR_PAIR(4)); + wattroff(window, COLOR_PAIR(HEALTH_COLOR) | A_BOLD); + wattrset(window, COLOR_PAIR(HEALTH_COLOR)); wprintw(window, "hours"); - wattroff(window, COLOR_PAIR(4)); + wattroff(window, COLOR_PAIR(HEALTH_COLOR)); } else { @@ -354,14 +384,23 @@ wprintw(window, " -- hours"); } - wattrset(window, COLOR_PAIR(7)); - mvwprintw(window, 8, 1, " Status ID AttributeName Current Worst Threshold Raw Values "); - wattroff(window, COLOR_PAIR(7)); + wattrset(window, COLOR_PAIR(ATTRIBUTE_LEGEND_COLOR)); + mvwprintw(window, 8, 1, " Status ID AttributeName Current Worst Threshold RawValues(%s) ", option.isRawHex ? "Hex" : "Dec"); + wattroff(window, COLOR_PAIR(ATTRIBUTE_LEGEND_COLOR)); + + auto attributeFormat = option.isRawHex ? " %-7s %02X %-28s %7d %5d %9d %012llX " : " %-7s %02X %-28s %7d %5d %9d %15llu "; for (int i = 0; i < static_cast<int>(smart.attribute.size()); ++i) { - wattrset(window, COLOR_PAIR(4 + static_cast<int>(attributeToHealth(smart.attribute[i])))); - mvwprintw(window, 9 + i, 1, " %-7s %02X %-28s %7d %5d %9d %012X ", healthToString(attributeToHealth(smart.attribute[i])).c_str(), smart.attribute[i].id, smart.attribute[i].name.c_str(), smart.attribute[i].current, smart.attribute[i].worst, smart.attribute[i].threshold, smart.attribute[i].raw); - wattroff(window, COLOR_PAIR(4 + static_cast<int>(attributeToHealth(smart.attribute[i])))); + wattrset(window, COLOR_PAIR(HEALTH_COLOR + static_cast<int>(attributeToHealth(smart.attribute[i])))); + mvwprintw(window, 9 + i, 1, attributeFormat, + healthToString(attributeToHealth(smart.attribute[i])).c_str(), + smart.attribute[i].id, + smart.attribute[i].name.c_str(), + smart.attribute[i].current, + smart.attribute[i].worst, + smart.attribute[i].threshold, + smart.attribute[i].raw); + wattroff(window, COLOR_PAIR(HEALTH_COLOR + static_cast<int>(attributeToHealth(smart.attribute[i])))); } pnoutrefresh(window, 0, 0, 5, std::max(0, (width - STATUS_WIDTH) / 2), @@ -387,16 +426,15 @@ getmaxyx(stdscr, height, width); start_color(); - init_pair(1, COLOR_BLACK, COLOR_CYAN); - init_pair(2, COLOR_BLACK, COLOR_YELLOW); - init_pair(3, COLOR_WHITE, COLOR_RED); - init_pair(4, COLOR_CYAN, COLOR_BLACK); - init_pair(5, COLOR_BLACK, COLOR_YELLOW); - init_pair(6, COLOR_WHITE, COLOR_RED); - init_pair(7, COLOR_BLACK, COLOR_GREEN); - init_pair(8, COLOR_YELLOW, COLOR_BLACK); + init_pair(HEALTH_COLOR, COLOR_CYAN, COLOR_BLACK); + init_pair(HEALTH_COLOR + 1, COLOR_BLACK, COLOR_YELLOW); + init_pair(HEALTH_COLOR + 2, COLOR_WHITE, COLOR_RED); + init_pair(HEALTH_INV_COLOR, COLOR_BLACK, COLOR_CYAN); + init_pair(HEALTH_INV_COLOR + 1, COLOR_BLACK, COLOR_YELLOW); + init_pair(HEALTH_INV_COLOR + 2, COLOR_WHITE, COLOR_RED); + init_pair(ATTRIBUTE_LEGEND_COLOR, COLOR_BLACK, COLOR_GREEN); + init_pair(TITLE_COLOR, COLOR_YELLOW, COLOR_BLACK); - int select = 0; std::vector<SMART> smartList; auto dir = opendir("/sys/block"); while (auto e = readdir(dir)) @@ -435,6 +473,9 @@ return 1; } + int select = 0; + Option option; + WINDOW * windowVersion; windowVersion = newwin(1, width, 0, 0); @@ -460,7 +501,7 @@ wclear(windowDeviceBar); drawDeviceBar(windowDeviceBar, smartList, select); wclear(windowDeviceStatus); - drawStatus(windowDeviceStatus, smartList[select]); + drawStatus(windowDeviceStatus, smartList[select], option); doupdate(); }; update(); @@ -470,7 +511,7 @@ sigaction(SIGWINCH, &s, nullptr); } - while(true) + while (true) { switch (wgetch(windowDeviceBar)) { @@ -502,6 +543,21 @@ clear(); refresh(); update(); + break; + + + case 's': + option.hideSerial = !option.hideSerial; + clear(); + refresh(); + update(); + break; + + case 'd': + option.isRawHex = !option.isRawHex; + clear(); + refresh(); + update(); break; case 'q': ++++++ crazydiskinfo-obey-cflags.patch ++++++ --- /var/tmp/diff_new_pack.6xQWZl/_old 2020-02-07 15:57:59.543622534 +0100 +++ /var/tmp/diff_new_pack.6xQWZl/_new 2020-02-07 15:57:59.543622534 +0100 @@ -1,9 +1,9 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index cba6972..3a79542 100644 +index cebc142..e3061cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -1,8 +1,8 @@ - cmake_minimum_required(VERSION 2.8.0) +@@ -2,9 +2,9 @@ cmake_minimum_required(VERSION 2.8.0) + option(RAW_VALUES_DEC "Display Raw Values in Decimal instead of Hex" OFF) project(CrazyDiskInfo CXX) add_executable(CrazyDiskInfo main.cpp) -set(CMAKE_CXX_FLAGS "-Wall -std=c++11") @@ -11,5 +11,7 @@ +add_definitions(-Wall -std=c++11) +SET_TARGET_PROPERTIES(CrazyDiskInfo PROPERTIES OUTPUT_NAME crazydiskinfo) target_link_libraries(CrazyDiskInfo atasmart) +-target_link_libraries(CrazyDiskInfo tinfow) ++#target_link_libraries(CrazyDiskInfo tinfow) target_link_libraries(CrazyDiskInfo ncursesw) INSTALL(TARGETS CrazyDiskInfo RUNTIME DESTINATION /usr/sbin)
