Summary: Utilities for devices that use SCSI command sets
Name: sg3_utils
Version: 1.48
# Release: 1%{?dist}
Release: 1
License: GPL
Group: Utilities/System
Source: https://sg.danny.cz/sg/p/sg3_utils-%{version}.tgz
Url: https://sg.danny.cz/sg/sg3_utils.html
Provides: sg_utils
# BuildRequires: libtool
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Packager: Douglas Gilbert <dgilbert@interlog.com>

%description
Collection of Linux utilities for devices that use the SCSI command set.
Includes utilities to copy data based on "dd" syntax and semantics (called
sg_dd, sgp_dd and sgm_dd); check INQUIRY data and VPD pages (sg_inq); check
mode and log pages (sginfo, sg_modes and sg_logs); spin up and down
disks (sg_start); do self tests (sg_senddiag); and various other functions.
See the README, ChangeLog and COVERAGE files. Requires the linux kernel 2.4
series or later. In the 2.4 series SCSI generic device names (e.g. /dev/sg0)
must be used. In the 2.6 series and later other device names may be used as
well (e.g. /dev/sda). Also some support for NVMe devices, especially with
sg_ses on NVMe enclosures.

Warning: Some of these tools access the internals of your system
and the incorrect usage of them may render your system inoperable.

%package libs
Summary: Shared library for %{name}
Group: System/Libraries

%description libs
This package contains the shared library for %{name}.

%package devel
Summary: Static library and header files for the sgutils library
Group: Development/C
Requires: %{name}-libs = %{version}-%{release}

%description devel
This package contains the static %{name} library and its header files for
developing applications.

%prep
%setup -q

%build
%configure

# Don't use rpath!
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool

%install
if [ "$RPM_BUILD_ROOT" != "/" ]; then
        rm -rf $RPM_BUILD_ROOT
fi

make install \
        DESTDIR=$RPM_BUILD_ROOT

%clean
if [ "$RPM_BUILD_ROOT" != "/" ]; then
        rm -rf $RPM_BUILD_ROOT
fi

%files
%defattr(-,root,root)
%doc AUTHORS ChangeLog COPYING COVERAGE CREDITS INSTALL NEWS README README.sg_start
%attr(755,root,root) %{_bindir}/*
%{_mandir}/man8/*

%files libs
%defattr(-,root,root)
%{_libdir}/*.so.*

%files devel
%defattr(-,root,root)
%{_includedir}/scsi/*.h
%{_libdir}/*.so
%{_libdir}/*.a
%{_libdir}/*.la

%changelog
* Wed Mar 09 2022 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.48

* Tue Nov 09 2021 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.47

* Mon Mar 29 2021 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.46

* Sat Feb 29 2020 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.45

* Wed Sep 12 2018 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.44

* Tue Sep 11 2018 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.43

* Wed Feb 17 2016 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.42

* Tue Apr 28 2015 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.41

* Mon Nov 10 2014 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.40

* Thu Jun 12 2014 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.39

* Tue Apr 01 2014 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.38

* Mon Oct 14 2013 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.37

* Fri May 31 2013 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.36

* Thu Jan 17 2013 - dgilbert at interlog dot com
- add sg_compare_and_write, track t10 changes
  * sg3_utils-1.35

* Sat Oct 13 2012 - dgilbert at interlog dot com
- add sg_xcopy and sg_copy_results; track t10 changes
  * sg3_utils-1.34

* Wed Jan 18 2012 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.33

* Wed Jun 22 2011 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.32

* Wed Feb 16 2011 - dgilbert at interlog dot com
- add sg_decode_sense; track t10 changes
  * sg3_utils-1.31

* Fri Nov 05 2010 - dgilbert at interlog dot com
- add sg_referrals; track t10 changes
  * sg3_utils-1.30

* Wed Mar 31 2010 - dgilbert at interlog dot com
- track t10 changes
  * sg3_utils-1.29

* Fri Oct 02 2009 - dgilbert at interlog dot com
- add sg_get_lba_status, sg_unmap, sg_read_block_limits
  * sg3_utils-1.28

* Sat Apr 11 2009 - dgilbert at interlog dot com
- add sg_write_same; sg_dd split; spc4r18 sync
  * sg3_utils-1.27

* Wed Jun 25 2008 - dgilbert at interlog dot com
- add sg_sat_phy_event, sync with drafts prior to this date
  * sg3_utils-1.26

* Tue Oct 16 2007 - dgilbert at interlog dot com
- add sg_sat_set_features, sg_stpg, sg_safte; sg_dd oflag=sparse,null
  * sg3_utils-1.25

* Mon May 07 2007 - dgilbert at interlog dot com
- add sg_raw; sg_rtpg, sg_log, sg_inq and sg_format updates
  * sg3_utils-1.24

* Wed Jan 31 2007 - dgilbert at interlog dot com
- add sg_read_buffer + sg_write_buffer
  * sg3_utils-1.23

* Mon Oct 16 2006 - dgilbert at interlog dot com
- add sg_sat_identify, expand sg_format and sg_requests
  * sg3_utils-1.22

* Thu Jul 06 2006 - dgilbert at interlog dot com
- add sg_vpd and sg_rdac, uniform exit statuses
  * sg3_utils-1.21

* Tue Apr 18 2006 - dgilbert at interlog dot com
- sg_logs: sas port specific page decoding, sg*_dd updates
  * sg3_utils-1.20

* Fri Jan 27 2006 - dgilbert at interlog dot com
- sg_get_config: resync features with mmc5 rev 1
  * sg3_utils-1.19

* Fri Nov 18 2005 - dgilbert at interlog dot com
- add sg_map26; sg_inq '-rr' option to play with hdparm
  * sg3_utils-1.18

* Thu Sep 22 2005 - dgilbert at interlog dot com
- add ATA information VPD page to sg_inq
  * sg3_utils-1.17

* Wed Aug 10 2005 - dgilbert at interlog dot com
- add sg_ident, sg_inq VPD page extensions
  * sg3_utils-1.16

* Sun Jun 05 2005 - dgilbert at interlog dot com
- use O_NONBLOCK on all fds that use SG_IO ioctl
  * sg3_utils-1.15

* Fri May 06 2005 - dgilbert at interlog dot com
- produce libsgutils (+ -devel variant) as well as sg3_utils binary rpm
  * sg3_utils-1.14

* Sun Mar 13 2005 - dgilbert at interlog dot com
- add sg_format, sg_dd extensions
  * sg3_utils-1.13

* Fri Jan 21 2005 - dgilbert at interlog dot com
- add sg_wr_mode, sg_rtpg + sg_reassign; sginfo sas tweaks
  * sg3_utils-1.12

* Fri Nov 26 2004 - dgilbert at interlog dot com
- add sg_sync, sg_prevent and sg_get_config; fix sg_requests
  * sg3_utils-1.11

* Sat Oct 30 2004 - dgilbert at interlog dot com
- fix read capacity (10+16), add sg_luns
  * sg3_utils-1.10

* Thu Oct 21 2004 - dgilbert at interlog dot com
- sg_requests, sg_ses, sg_verify, libsgutils(sg_lib.c+sg_cmds.c), devel rpm
  * sg3_utils-1.09

* Tue Aug 31 2004 - dgilbert at interlog dot com
- 'register+move' in sg_persist, sg_opcodes sorts, sg_write_long
  * sg3_utils-1.08

* Thu Jul 08 2004 - dgilbert at interlog dot com
- add '-fHead' to sginfo, '-i' for sg_inq, new sg_opcodes + sg_persist
  * sg3_utils-1.07

* Mon Apr 26 2004 - dgilbert at interlog dot com
- sg3_utils.spec for mandrake; more sginfo work, sg_scan, sg_logs
  * sg3_utils-1.06

* Wed Nov 12 2003 - dgilbert at interlog dot com
- sg_readcap: sizes; sg_logs: double fetch; sg_map 256 sg devices; sginfo
  * sg3_utils-1.05

* Tue May 13 2003 - dgilbert at interlog dot com
- default sg_turs '-n=' to 1, sg_logs gets '-t' for temperature, CREDITS
  * sg3_utils-1.04

* Wed Apr 02 2003 - dgilbert at interlog dot com
- 6 byte CDBs for sg_modes, sg_start on block devs, sg_senddiag, man pages
  * sg3_utils-1.03

* Wed Jan 01 2003 - dgilbert at interlog dot com
- interwork with block SG_IO, fix in sginfo, '-t' for sg_turs
  * sg3_utils-1.02

* Wed Aug 14 2002 - dgilbert at interlog dot com
- raw switch in sg_inq
  * sg3_utils-1.01

* Sun Jul 28 2002 - dgilbert at interlog dot com
- decode sg_logs pages, add dio to sgm_dd, drop "gen=1" arg, "of=/dev/null"
  * sg3_utils-1.00
