Codebase list libatasmart / 64dda71
Imported Upstream version 0.14 Martin Pitt 14 years ago
10 changed file(s) with 1771 addition(s) and 811 deletion(s). Raw diff Collapse all Expand all
2323 atasmart.c \
2424 blob-examples/README \
2525 blob-examples/FUJITSU_MHY2120BH--0084000D \
26 blob-examples/FUJITSU_MHY2120BH--0085000B \
2627 blob-examples/FUJITSU_MHZ2160BH_G1--0084000A \
2728 blob-examples/Maxtor_96147H8--BAC51KJ0 \
2829 blob-examples/SAMSUNG_HD501LJ--CR100-12 \
8283
8384 atasmart.strpool.c: atasmart.c strpool
8485 $(top_builddir)/strpool $< $@
86
87 ACLOCAL_AMFLAGS = -I m4
0 # Makefile.in generated by automake 1.10.2 from Makefile.am.
0 # Makefile.in generated by automake 1.11 from Makefile.am.
11 # @configure_input@
22
33 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
4 # 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
4 # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
5 # Inc.
56 # This Makefile.in is free software; the Free Software Foundation
67 # gives unlimited permission to copy and/or distribute it,
78 # with or without modifications, as long as this notice is preserved.
3637
3738 VPATH = @srcdir@
3839 pkgdatadir = $(datadir)/@PACKAGE@
40 pkgincludedir = $(includedir)/@PACKAGE@
3941 pkglibdir = $(libdir)/@PACKAGE@
40 pkgincludedir = $(includedir)/@PACKAGE@
42 pkglibexecdir = $(libexecdir)/@PACKAGE@
4143 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
4244 install_sh_DATA = $(install_sh) -c -m 644
4345 install_sh_PROGRAM = $(install_sh) -c
6971 mkinstalldirs = $(install_sh) -d
7072 CONFIG_HEADER = config.h
7173 CONFIG_CLEAN_FILES = libatasmart.pc
74 CONFIG_CLEAN_VPATH_FILES =
7275 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
7376 am__vpath_adj = case $$p in \
7477 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
7578 *) f=$$p;; \
7679 esac;
77 am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
80 am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
81 am__install_max = 40
82 am__nobase_strip_setup = \
83 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
84 am__nobase_strip = \
85 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
86 am__nobase_list = $(am__nobase_strip_setup); \
87 for p in $$list; do echo "$$p $$p"; done | \
88 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
89 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
90 if (++n[$$2] == $(am__install_max)) \
91 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
92 END { for (dir in files) print dir, files[dir] }'
93 am__base_list = \
94 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
95 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
7896 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)" \
7997 "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"
80 libLTLIBRARIES_INSTALL = $(INSTALL)
8198 LTLIBRARIES = $(lib_LTLIBRARIES)
8299 am__DEPENDENCIES_1 =
83100 libatasmart_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
84101 am_libatasmart_la_OBJECTS = libatasmart_la-atasmart.strpool.lo
85102 libatasmart_la_OBJECTS = $(am_libatasmart_la_OBJECTS)
86 libatasmart_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
87 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libatasmart_la_CFLAGS) \
88 $(CFLAGS) $(libatasmart_la_LDFLAGS) $(LDFLAGS) -o $@
89 sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
103 AM_V_lt = $(am__v_lt_$(V))
104 am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
105 am__v_lt_0 = --silent
106 libatasmart_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
107 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
108 $(libatasmart_la_CFLAGS) $(CFLAGS) $(libatasmart_la_LDFLAGS) \
109 $(LDFLAGS) -o $@
90110 PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS)
91111 am_skdump_OBJECTS = skdump.$(OBJEXT)
92112 skdump_OBJECTS = $(am_skdump_OBJECTS)
100120 DEFAULT_INCLUDES = -I.@am__isrc@
101121 depcomp = $(SHELL) $(top_srcdir)/depcomp
102122 am__depfiles_maybe = depfiles
123 am__mv = mv -f
103124 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
104125 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
105 LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
106 --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
107 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
126 LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
127 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
128 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
129 $(AM_CFLAGS) $(CFLAGS)
130 AM_V_CC = $(am__v_CC_$(V))
131 am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
132 am__v_CC_0 = @echo " CC " $@;
133 AM_V_at = $(am__v_at_$(V))
134 am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
135 am__v_at_0 = @
108136 CCLD = $(CC)
109 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
110 --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
111 $(LDFLAGS) -o $@
137 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
138 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
139 $(AM_LDFLAGS) $(LDFLAGS) -o $@
140 AM_V_CCLD = $(am__v_CCLD_$(V))
141 am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
142 am__v_CCLD_0 = @echo " CCLD " $@;
143 AM_V_GEN = $(am__v_GEN_$(V))
144 am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
145 am__v_GEN_0 = @echo " GEN " $@;
112146 SOURCES = $(libatasmart_la_SOURCES) $(skdump_SOURCES) sktest.c \
113147 $(strpool_SOURCES)
114148 DIST_SOURCES = $(libatasmart_la_SOURCES) $(skdump_SOURCES) sktest.c \
120154 install-pdf-recursive install-ps-recursive install-recursive \
121155 installcheck-recursive installdirs-recursive pdf-recursive \
122156 ps-recursive uninstall-recursive
123 pkgconfigDATA_INSTALL = $(INSTALL_DATA)
124157 DATA = $(noinst_DATA) $(pkgconfig_DATA)
125 includeHEADERS_INSTALL = $(INSTALL_HEADER)
126158 HEADERS = $(include_HEADERS)
127159 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
128160 distclean-recursive maintainer-clean-recursive
161 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
162 $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
163 distdir dist dist-all distcheck
129164 ETAGS = etags
130165 CTAGS = ctags
131166 DIST_SUBDIRS = $(SUBDIRS)
133168 distdir = $(PACKAGE)-$(VERSION)
134169 top_distdir = $(distdir)
135170 am__remove_distdir = \
136 { test ! -d $(distdir) \
137 || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
138 && rm -fr $(distdir); }; }
171 { test ! -d "$(distdir)" \
172 || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
173 && rm -fr "$(distdir)"; }; }
174 am__relativize = \
175 dir0=`pwd`; \
176 sed_first='s,^\([^/]*\)/.*$$,\1,'; \
177 sed_rest='s,^[^/]*/*,,'; \
178 sed_last='s,^.*/\([^/]*\)$$,\1,'; \
179 sed_butlast='s,/*[^/]*$$,,'; \
180 while test -n "$$dir1"; do \
181 first=`echo "$$dir1" | sed -e "$$sed_first"`; \
182 if test "$$first" != "."; then \
183 if test "$$first" = ".."; then \
184 dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
185 dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
186 else \
187 first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
188 if test "$$first2" = "$$first"; then \
189 dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
190 else \
191 dir2="../$$dir2"; \
192 fi; \
193 dir0="$$dir0"/"$$first"; \
194 fi; \
195 fi; \
196 dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
197 done; \
198 reldir="$$dir2"
139199 DIST_ARCHIVES = $(distdir).tar.gz
140200 GZIP_ENV = --best
141201 distuninstallcheck_listfiles = find . -type f -print
142202 distcleancheck_listfiles = find . -type f -print
143203 ACLOCAL = @ACLOCAL@
144204 AMTAR = @AMTAR@
205 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
145206 AR = @AR@
146207 AUTOCONF = @AUTOCONF@
147208 AUTOHEADER = @AUTOHEADER@
268329 atasmart.c \
269330 blob-examples/README \
270331 blob-examples/FUJITSU_MHY2120BH--0084000D \
332 blob-examples/FUJITSU_MHY2120BH--0085000B \
271333 blob-examples/FUJITSU_MHZ2160BH_G1--0084000A \
272334 blob-examples/Maxtor_96147H8--BAC51KJ0 \
273335 blob-examples/SAMSUNG_HD501LJ--CR100-12 \
319381 BUILT_SOURCES = \
320382 atasmart.strpool.c
321383
384 ACLOCAL_AMFLAGS = -I m4
322385 all: $(BUILT_SOURCES) config.h
323386 $(MAKE) $(AM_MAKEFLAGS) all-recursive
324387
330393 @for dep in $?; do \
331394 case '$(am__configure_deps)' in \
332395 *$$dep*) \
333 echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
334 cd $(srcdir) && $(AUTOMAKE) --foreign \
396 echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
397 $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
335398 && exit 0; \
336399 exit 1;; \
337400 esac; \
338401 done; \
339 echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
340 cd $(top_srcdir) && \
341 $(AUTOMAKE) --foreign Makefile
402 echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
403 $(am__cd) $(top_srcdir) && \
404 $(AUTOMAKE) --foreign Makefile
342405 .PRECIOUS: Makefile
343406 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
344407 @case '$?' in \
354417 $(SHELL) ./config.status --recheck
355418
356419 $(top_srcdir)/configure: $(am__configure_deps)
357 cd $(srcdir) && $(AUTOCONF)
420 $(am__cd) $(srcdir) && $(AUTOCONF)
358421 $(ACLOCAL_M4): $(am__aclocal_m4_deps)
359 cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
422 $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
423 $(am__aclocal_m4_deps):
360424
361425 config.h: stamp-h1
362426 @if test ! -f $@; then \
368432 @rm -f stamp-h1
369433 cd $(top_builddir) && $(SHELL) ./config.status config.h
370434 $(srcdir)/config.h.in: $(am__configure_deps)
371 cd $(top_srcdir) && $(AUTOHEADER)
435 ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
372436 rm -f stamp-h1
373437 touch $@
374438
379443 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
380444 @$(NORMAL_INSTALL)
381445 test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
382 @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
446 @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
447 list2=; for p in $$list; do \
383448 if test -f $$p; then \
384 f=$(am__strip_dir) \
385 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
386 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
449 list2="$$list2 $$p"; \
387450 else :; fi; \
388 done
451 done; \
452 test -z "$$list2" || { \
453 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
454 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
455 }
389456
390457 uninstall-libLTLIBRARIES:
391458 @$(NORMAL_UNINSTALL)
392 @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
393 p=$(am__strip_dir) \
394 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
395 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
459 @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
460 for p in $$list; do \
461 $(am__strip_dir) \
462 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
463 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
396464 done
397465
398466 clean-libLTLIBRARIES:
404472 rm -f "$${dir}/so_locations"; \
405473 done
406474 libatasmart.la: $(libatasmart_la_OBJECTS) $(libatasmart_la_DEPENDENCIES)
407 $(libatasmart_la_LINK) -rpath $(libdir) $(libatasmart_la_OBJECTS) $(libatasmart_la_LIBADD) $(LIBS)
475 $(AM_V_CCLD)$(libatasmart_la_LINK) -rpath $(libdir) $(libatasmart_la_OBJECTS) $(libatasmart_la_LIBADD) $(LIBS)
408476
409477 clean-noinstPROGRAMS:
410 @list='$(noinst_PROGRAMS)'; for p in $$list; do \
411 f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
412 echo " rm -f $$p $$f"; \
413 rm -f $$p $$f ; \
414 done
478 @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
479 echo " rm -f" $$list; \
480 rm -f $$list || exit $$?; \
481 test -n "$(EXEEXT)" || exit 0; \
482 list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
483 echo " rm -f" $$list; \
484 rm -f $$list
415485 install-sbinPROGRAMS: $(sbin_PROGRAMS)
416486 @$(NORMAL_INSTALL)
417487 test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
418 @list='$(sbin_PROGRAMS)'; for p in $$list; do \
419 p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
420 if test -f $$p \
421 || test -f $$p1 \
422 ; then \
423 f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
424 echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
425 $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
426 else :; fi; \
427 done
488 @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
489 for p in $$list; do echo "$$p $$p"; done | \
490 sed 's/$(EXEEXT)$$//' | \
491 while read p p1; do if test -f $$p || test -f $$p1; \
492 then echo "$$p"; echo "$$p"; else :; fi; \
493 done | \
494 sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
495 -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
496 sed 'N;N;N;s,\n, ,g' | \
497 $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
498 { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
499 if ($$2 == $$4) files[d] = files[d] " " $$1; \
500 else { print "f", $$3 "/" $$4, $$1; } } \
501 END { for (d in files) print "f", d, files[d] }' | \
502 while read type dir files; do \
503 if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
504 test -z "$$files" || { \
505 echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
506 $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
507 } \
508 ; done
428509
429510 uninstall-sbinPROGRAMS:
430511 @$(NORMAL_UNINSTALL)
431 @list='$(sbin_PROGRAMS)'; for p in $$list; do \
432 f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
433 echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
434 rm -f "$(DESTDIR)$(sbindir)/$$f"; \
435 done
512 @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
513 files=`for p in $$list; do echo "$$p"; done | \
514 sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
515 -e 's/$$/$(EXEEXT)/' `; \
516 test -n "$$list" || exit 0; \
517 echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
518 cd "$(DESTDIR)$(sbindir)" && rm -f $$files
436519
437520 clean-sbinPROGRAMS:
438 @list='$(sbin_PROGRAMS)'; for p in $$list; do \
439 f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
440 echo " rm -f $$p $$f"; \
441 rm -f $$p $$f ; \
442 done
521 @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \
522 echo " rm -f" $$list; \
523 rm -f $$list || exit $$?; \
524 test -n "$(EXEEXT)" || exit 0; \
525 list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
526 echo " rm -f" $$list; \
527 rm -f $$list
443528 skdump$(EXEEXT): $(skdump_OBJECTS) $(skdump_DEPENDENCIES)
444529 @rm -f skdump$(EXEEXT)
445 $(LINK) $(skdump_OBJECTS) $(skdump_LDADD) $(LIBS)
530 $(AM_V_CCLD)$(LINK) $(skdump_OBJECTS) $(skdump_LDADD) $(LIBS)
446531 sktest$(EXEEXT): $(sktest_OBJECTS) $(sktest_DEPENDENCIES)
447532 @rm -f sktest$(EXEEXT)
448 $(LINK) $(sktest_OBJECTS) $(sktest_LDADD) $(LIBS)
533 $(AM_V_CCLD)$(LINK) $(sktest_OBJECTS) $(sktest_LDADD) $(LIBS)
449534 strpool$(EXEEXT): $(strpool_OBJECTS) $(strpool_DEPENDENCIES)
450535 @rm -f strpool$(EXEEXT)
451 $(LINK) $(strpool_OBJECTS) $(strpool_LDADD) $(LIBS)
536 $(AM_V_CCLD)$(LINK) $(strpool_OBJECTS) $(strpool_LDADD) $(LIBS)
452537
453538 mostlyclean-compile:
454539 -rm -f *.$(OBJEXT)
462547 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strpool.Po@am__quote@
463548
464549 .c.o:
465 @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
466 @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
550 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
551 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
552 @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
467553 @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
468554 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
469555 @am__fastdepCC_FALSE@ $(COMPILE) -c $<
470556
471557 .c.obj:
472 @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
473 @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
558 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
559 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
560 @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
474561 @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
475562 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
476563 @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
477564
478565 .c.lo:
479 @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
480 @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
566 @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
567 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
568 @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
481569 @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
482570 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
483571 @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
484572
485573 libatasmart_la-atasmart.strpool.lo: atasmart.strpool.c
486 @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libatasmart_la_CFLAGS) $(CFLAGS) -MT libatasmart_la-atasmart.strpool.lo -MD -MP -MF $(DEPDIR)/libatasmart_la-atasmart.strpool.Tpo -c -o libatasmart_la-atasmart.strpool.lo `test -f 'atasmart.strpool.c' || echo '$(srcdir)/'`atasmart.strpool.c
487 @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libatasmart_la-atasmart.strpool.Tpo $(DEPDIR)/libatasmart_la-atasmart.strpool.Plo
574 @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libatasmart_la_CFLAGS) $(CFLAGS) -MT libatasmart_la-atasmart.strpool.lo -MD -MP -MF $(DEPDIR)/libatasmart_la-atasmart.strpool.Tpo -c -o libatasmart_la-atasmart.strpool.lo `test -f 'atasmart.strpool.c' || echo '$(srcdir)/'`atasmart.strpool.c
575 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libatasmart_la-atasmart.strpool.Tpo $(DEPDIR)/libatasmart_la-atasmart.strpool.Plo
576 @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
488577 @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='atasmart.strpool.c' object='libatasmart_la-atasmart.strpool.lo' libtool=yes @AMDEPBACKSLASH@
489578 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
490 @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libatasmart_la_CFLAGS) $(CFLAGS) -c -o libatasmart_la-atasmart.strpool.lo `test -f 'atasmart.strpool.c' || echo '$(srcdir)/'`atasmart.strpool.c
579 @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libatasmart_la_CFLAGS) $(CFLAGS) -c -o libatasmart_la-atasmart.strpool.lo `test -f 'atasmart.strpool.c' || echo '$(srcdir)/'`atasmart.strpool.c
491580
492581 mostlyclean-libtool:
493582 -rm -f *.lo
500589 install-pkgconfigDATA: $(pkgconfig_DATA)
501590 @$(NORMAL_INSTALL)
502591 test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
503 @list='$(pkgconfig_DATA)'; for p in $$list; do \
592 @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
593 for p in $$list; do \
504594 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
505 f=$(am__strip_dir) \
506 echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
507 $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
595 echo "$$d$$p"; \
596 done | $(am__base_list) | \
597 while read files; do \
598 echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
599 $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
508600 done
509601
510602 uninstall-pkgconfigDATA:
511603 @$(NORMAL_UNINSTALL)
512 @list='$(pkgconfig_DATA)'; for p in $$list; do \
513 f=$(am__strip_dir) \
514 echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
515 rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
516 done
604 @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
605 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
606 test -n "$$files" || exit 0; \
607 echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
608 cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
517609 install-includeHEADERS: $(include_HEADERS)
518610 @$(NORMAL_INSTALL)
519611 test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
520 @list='$(include_HEADERS)'; for p in $$list; do \
612 @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
613 for p in $$list; do \
521614 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
522 f=$(am__strip_dir) \
523 echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
524 $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
615 echo "$$d$$p"; \
616 done | $(am__base_list) | \
617 while read files; do \
618 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
619 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
525620 done
526621
527622 uninstall-includeHEADERS:
528623 @$(NORMAL_UNINSTALL)
529 @list='$(include_HEADERS)'; for p in $$list; do \
530 f=$(am__strip_dir) \
531 echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
532 rm -f "$(DESTDIR)$(includedir)/$$f"; \
533 done
624 @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
625 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
626 test -n "$$files" || exit 0; \
627 echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
628 cd "$(DESTDIR)$(includedir)" && rm -f $$files
534629
535630 # This directory's subdirectories are mostly independent; you can cd
536631 # into them and run `make' without going through this Makefile.
556651 else \
557652 local_target="$$target"; \
558653 fi; \
559 (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
654 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
560655 || eval $$failcom; \
561656 done; \
562657 if test "$$dot_seen" = "no"; then \
590685 else \
591686 local_target="$$target"; \
592687 fi; \
593 (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
688 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
594689 || eval $$failcom; \
595690 done && test -z "$$fail"
596691 tags-recursive:
597692 list='$(SUBDIRS)'; for subdir in $$list; do \
598 test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
693 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
599694 done
600695 ctags-recursive:
601696 list='$(SUBDIRS)'; for subdir in $$list; do \
602 test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
697 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
603698 done
604699
605700 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
614709
615710 TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
616711 $(TAGS_FILES) $(LISP)
617 tags=; \
712 set x; \
618713 here=`pwd`; \
619714 if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
620715 include_option=--etags-include; \
626721 list='$(SUBDIRS)'; for subdir in $$list; do \
627722 if test "$$subdir" = .; then :; else \
628723 test ! -f $$subdir/TAGS || \
629 tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
724 set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
630725 fi; \
631726 done; \
632727 list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
635730 done | \
636731 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
637732 END { if (nonempty) { for (i in files) print i; }; }'`; \
638 if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
733 shift; \
734 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
639735 test -n "$$unique" || unique=$$empty_fix; \
640 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
641 $$tags $$unique; \
736 if test $$# -gt 0; then \
737 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
738 "$$@" $$unique; \
739 else \
740 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
741 $$unique; \
742 fi; \
642743 fi
643744 ctags: CTAGS
644745 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
645746 $(TAGS_FILES) $(LISP)
646 tags=; \
647747 list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
648748 unique=`for i in $$list; do \
649749 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
650750 done | \
651751 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
652752 END { if (nonempty) { for (i in files) print i; }; }'`; \
653 test -z "$(CTAGS_ARGS)$$tags$$unique" \
753 test -z "$(CTAGS_ARGS)$$unique" \
654754 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
655 $$tags $$unique
755 $$unique
656756
657757 GTAGS:
658758 here=`$(am__cd) $(top_builddir) && pwd` \
659 && cd $(top_srcdir) \
660 && gtags -i $(GTAGS_ARGS) $$here
759 && $(am__cd) $(top_srcdir) \
760 && gtags -i $(GTAGS_ARGS) "$$here"
661761
662762 distclean-tags:
663763 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
664764
665765 distdir: $(DISTFILES)
666766 $(am__remove_distdir)
667 test -d $(distdir) || mkdir $(distdir)
767 test -d "$(distdir)" || mkdir "$(distdir)"
668768 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
669769 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
670770 list='$(DISTFILES)'; \
680780 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
681781 if test -d $$d/$$file; then \
682782 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
783 if test -d "$(distdir)/$$file"; then \
784 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
785 fi; \
683786 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
684 cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
787 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
788 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
685789 fi; \
686 cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
790 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
687791 else \
688 test -f $(distdir)/$$file \
689 || cp -p $$d/$$file $(distdir)/$$file \
792 test -f "$(distdir)/$$file" \
793 || cp -p $$d/$$file "$(distdir)/$$file" \
690794 || exit 1; \
691795 fi; \
692796 done
693 list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
797 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
694798 if test "$$subdir" = .; then :; else \
695799 test -d "$(distdir)/$$subdir" \
696800 || $(MKDIR_P) "$(distdir)/$$subdir" \
697801 || exit 1; \
698 distdir=`$(am__cd) $(distdir) && pwd`; \
699 top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
700 (cd $$subdir && \
802 fi; \
803 done
804 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
805 if test "$$subdir" = .; then :; else \
806 dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
807 $(am__relativize); \
808 new_distdir=$$reldir; \
809 dir1=$$subdir; dir2="$(top_distdir)"; \
810 $(am__relativize); \
811 new_top_distdir=$$reldir; \
812 echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
813 echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
814 ($(am__cd) $$subdir && \
701815 $(MAKE) $(AM_MAKEFLAGS) \
702 top_distdir="$$top_distdir" \
703 distdir="$$distdir/$$subdir" \
816 top_distdir="$$new_top_distdir" \
817 distdir="$$new_distdir" \
704818 am__remove_distdir=: \
705819 am__skip_length_check=: \
820 am__skip_mode_fix=: \
706821 distdir) \
707822 || exit 1; \
708823 fi; \
709824 done
710 -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
825 -test -n "$(am__skip_mode_fix)" \
826 || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
711827 ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
712828 ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
713829 ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
714 || chmod -R a+r $(distdir)
830 || chmod -R a+r "$(distdir)"
715831 dist-gzip: distdir
716832 tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
717833 $(am__remove_distdir)
722838
723839 dist-lzma: distdir
724840 tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
841 $(am__remove_distdir)
842
843 dist-xz: distdir
844 tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
725845 $(am__remove_distdir)
726846
727847 dist-tarZ: distdir
752872 bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
753873 *.tar.lzma*) \
754874 unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
875 *.tar.xz*) \
876 xz -dc $(distdir).tar.xz | $(am__untar) ;;\
755877 *.tar.Z*) \
756878 uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
757879 *.shar.gz*) \
763885 mkdir $(distdir)/_build
764886 mkdir $(distdir)/_inst
765887 chmod a-w $(distdir)
888 test -d $(distdir)/_build || exit 0; \
766889 dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
767890 && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
768 && cd $(distdir)/_build \
891 && am__cwd=`pwd` \
892 && $(am__cd) $(distdir)/_build \
769893 && ../configure --srcdir=.. --prefix="$$dc_install_base" \
770894 $(DISTCHECK_CONFIGURE_FLAGS) \
771895 && $(MAKE) $(AM_MAKEFLAGS) \
787911 && rm -rf "$$dc_destdir" \
788912 && $(MAKE) $(AM_MAKEFLAGS) dist \
789913 && rm -rf $(DIST_ARCHIVES) \
790 && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
914 && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
915 && cd "$$am__cwd" \
916 || exit 1
791917 $(am__remove_distdir)
792918 @(echo "$(distdir) archives ready for distribution: "; \
793919 list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
794920 sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
795921 distuninstallcheck:
796 @cd $(distuninstallcheck_dir) \
922 @$(am__cd) '$(distuninstallcheck_dir)' \
797923 && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
798924 || { echo "ERROR: files left after uninstall:" ; \
799925 if test -n "$(DESTDIR)"; then \
842968
843969 distclean-generic:
844970 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
971 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
845972
846973 maintainer-clean-generic:
847974 @echo "This command is intended for maintainers to use"
866993
867994 html: html-recursive
868995
996 html-am:
997
869998 info: info-recursive
870999
8711000 info-am:
8741003
8751004 install-dvi: install-dvi-recursive
8761005
1006 install-dvi-am:
1007
8771008 install-exec-am: install-libLTLIBRARIES install-sbinPROGRAMS
8781009
8791010 install-html: install-html-recursive
8801011
1012 install-html-am:
1013
8811014 install-info: install-info-recursive
8821015
1016 install-info-am:
1017
8831018 install-man:
8841019
8851020 install-pdf: install-pdf-recursive
8861021
1022 install-pdf-am:
1023
8871024 install-ps: install-ps-recursive
1025
1026 install-ps-am:
8881027
8891028 installcheck-am:
8901029
9111050 uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \
9121051 uninstall-pkgconfigDATA uninstall-sbinPROGRAMS
9131052
914 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
915 install-strip
1053 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
1054 ctags-recursive install install-am install-strip \
1055 tags-recursive
9161056
9171057 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
9181058 all all-am am--refresh check check-am clean clean-generic \
9191059 clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \
9201060 clean-sbinPROGRAMS ctags ctags-recursive dist dist-all \
921 dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ dist-zip \
922 distcheck distclean distclean-compile distclean-generic \
923 distclean-hdr distclean-libtool distclean-tags distcleancheck \
924 distdir distuninstallcheck dvi dvi-am html html-am info \
925 info-am install install-am install-data install-data-am \
926 install-dvi install-dvi-am install-exec install-exec-am \
927 install-html install-html-am install-includeHEADERS \
928 install-info install-info-am install-libLTLIBRARIES \
929 install-man install-pdf install-pdf-am install-pkgconfigDATA \
930 install-ps install-ps-am install-sbinPROGRAMS install-strip \
931 installcheck installcheck-am installdirs installdirs-am \
932 maintainer-clean maintainer-clean-generic mostlyclean \
933 mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
934 pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
1061 dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ dist-xz \
1062 dist-zip distcheck distclean distclean-compile \
1063 distclean-generic distclean-hdr distclean-libtool \
1064 distclean-tags distcleancheck distdir distuninstallcheck dvi \
1065 dvi-am html html-am info info-am install install-am \
1066 install-data install-data-am install-dvi install-dvi-am \
1067 install-exec install-exec-am install-html install-html-am \
1068 install-includeHEADERS install-info install-info-am \
1069 install-libLTLIBRARIES install-man install-pdf install-pdf-am \
1070 install-pkgconfigDATA install-ps install-ps-am \
1071 install-sbinPROGRAMS install-strip installcheck \
1072 installcheck-am installdirs installdirs-am maintainer-clean \
1073 maintainer-clean-generic mostlyclean mostlyclean-compile \
1074 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
1075 tags tags-recursive uninstall uninstall-am \
9351076 uninstall-includeHEADERS uninstall-libLTLIBRARIES \
9361077 uninstall-pkgconfigDATA uninstall-sbinPROGRAMS
9371078
9381079
9391080 atasmart.strpool.c: atasmart.c strpool
9401081 $(top_builddir)/strpool $< $@
1082
9411083 # Tell versions [3.59,3.63) of GNU make to not export all variables.
9421084 # Otherwise a system limit (for SysV at least) may be exceeded.
9431085 .NOEXPORT:
0 # generated automatically by aclocal 1.10.2 -*- Autoconf -*-
0 # generated automatically by aclocal 1.11 -*- Autoconf -*-
11
22 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
3 # 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
3 # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
44 # This file is free software; the Free Software Foundation
55 # gives unlimited permission to copy and/or distribute it,
66 # with or without modifications, as long as this notice is preserved.
81358135 # generated from the m4 files accompanying Automake X.Y.
81368136 # (This private macro should not be called outside this file.)
81378137 AC_DEFUN([AM_AUTOMAKE_VERSION],
8138 [am__api_version='1.10'
8138 [am__api_version='1.11'
81398139 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
81408140 dnl require some minimum version. Point them to the right macro.
8141 m4_if([$1], [1.10.2], [],
8141 m4_if([$1], [1.11], [],
81428142 [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
81438143 ])
81448144
81548154 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
81558155 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
81568156 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
8157 [AM_AUTOMAKE_VERSION([1.10.2])dnl
8157 [AM_AUTOMAKE_VERSION([1.11])dnl
81588158 m4_ifndef([AC_AUTOCONF_VERSION],
81598159 [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
81608160 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
82148214
82158215 # AM_CONDITIONAL -*- Autoconf -*-
82168216
8217 # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
8217 # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
82188218 # Free Software Foundation, Inc.
82198219 #
82208220 # This file is free software; the Free Software Foundation
82218221 # gives unlimited permission to copy and/or distribute it,
82228222 # with or without modifications, as long as this notice is preserved.
82238223
8224 # serial 8
8224 # serial 9
82258225
82268226 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
82278227 # -------------------------------------
82348234 AC_SUBST([$1_FALSE])dnl
82358235 _AM_SUBST_NOTMAKE([$1_TRUE])dnl
82368236 _AM_SUBST_NOTMAKE([$1_FALSE])dnl
8237 m4_define([_AM_COND_VALUE_$1], [$2])dnl
82378238 if $2; then
82388239 $1_TRUE=
82398240 $1_FALSE='#'
82478248 Usually this means the macro was only invoked conditionally.]])
82488249 fi])])
82498250
8250 # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
8251 # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
82518252 # Free Software Foundation, Inc.
82528253 #
82538254 # This file is free software; the Free Software Foundation
82548255 # gives unlimited permission to copy and/or distribute it,
82558256 # with or without modifications, as long as this notice is preserved.
82568257
8257 # serial 9
8258 # serial 10
82588259
82598260 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
82608261 # written in clear, in which case automake, when reading aclocal.m4,
83118312 if test "$am_compiler_list" = ""; then
83128313 am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
83138314 fi
8315 am__universal=false
8316 m4_case([$1], [CC],
8317 [case " $depcc " in #(
8318 *\ -arch\ *\ -arch\ *) am__universal=true ;;
8319 esac],
8320 [CXX],
8321 [case " $depcc " in #(
8322 *\ -arch\ *\ -arch\ *) am__universal=true ;;
8323 esac])
8324
83148325 for depmode in $am_compiler_list; do
83158326 # Setup a source with many dependencies, because some compilers
83168327 # like to wrap large dependency lists on column 80 (with \), and
83288339 done
83298340 echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
83308341
8342 # We check with `-c' and `-o' for the sake of the "dashmstdout"
8343 # mode. It turns out that the SunPro C++ compiler does not properly
8344 # handle `-M -o', and we need to detect this. Also, some Intel
8345 # versions had trouble with output in subdirs
8346 am__obj=sub/conftest.${OBJEXT-o}
8347 am__minus_obj="-o $am__obj"
83318348 case $depmode in
8349 gcc)
8350 # This depmode causes a compiler race in universal mode.
8351 test "$am__universal" = false || continue
8352 ;;
83328353 nosideeffect)
83338354 # after this tag, mechanisms are not by side-effect, so they'll
83348355 # only be used when explicitly requested
83388359 break
83398360 fi
83408361 ;;
8362 msvisualcpp | msvcmsys)
8363 # This compiler won't grok `-c -o', but also, the minuso test has
8364 # not run yet. These depmodes are late enough in the game, and
8365 # so weak that their functioning should not be impacted.
8366 am__obj=conftest.${OBJEXT-o}
8367 am__minus_obj=
8368 ;;
83418369 none) break ;;
83428370 esac
8343 # We check with `-c' and `-o' for the sake of the "dashmstdout"
8344 # mode. It turns out that the SunPro C++ compiler does not properly
8345 # handle `-M -o', and we need to detect this.
83468371 if depmode=$depmode \
8347 source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
8372 source=sub/conftest.c object=$am__obj \
83488373 depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
8349 $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
8374 $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
83508375 >/dev/null 2>conftest.err &&
83518376 grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
83528377 grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
8353 grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
8378 grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
83548379 ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
83558380 # icc doesn't choke on unknown options, it will just issue warnings
83568381 # or remarks (even with -Werror). So we grep stderr for any message
84148439 # gives unlimited permission to copy and/or distribute it,
84158440 # with or without modifications, as long as this notice is preserved.
84168441
8417 #serial 4
8442 #serial 5
84188443
84198444 # _AM_OUTPUT_DEPENDENCY_COMMANDS
84208445 # ------------------------------
84218446 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
8422 [# Autoconf 2.62 quotes --file arguments for eval, but not when files
8423 # are listed without --file. Let's play safe and only enable the eval
8424 # if we detect the quoting.
8425 case $CONFIG_FILES in
8426 *\'*) eval set x "$CONFIG_FILES" ;;
8427 *) set x $CONFIG_FILES ;;
8428 esac
8429 shift
8430 for mf
8431 do
8432 # Strip MF so we end up with the name of the file.
8433 mf=`echo "$mf" | sed -e 's/:.*$//'`
8434 # Check whether this is an Automake generated Makefile or not.
8435 # We used to match only the files named `Makefile.in', but
8436 # some people rename them; so instead we look at the file content.
8437 # Grep'ing the first line is not enough: some people post-process
8438 # each Makefile.in and add a new line on top of each file to say so.
8439 # Grep'ing the whole file is not good either: AIX grep has a line
8440 # limit of 2048, but all sed's we know have understand at least 4000.
8441 if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
8442 dirpart=`AS_DIRNAME("$mf")`
8443 else
8444 continue
8445 fi
8446 # Extract the definition of DEPDIR, am__include, and am__quote
8447 # from the Makefile without running `make'.
8448 DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
8449 test -z "$DEPDIR" && continue
8450 am__include=`sed -n 's/^am__include = //p' < "$mf"`
8451 test -z "am__include" && continue
8452 am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
8453 # When using ansi2knr, U may be empty or an underscore; expand it
8454 U=`sed -n 's/^U = //p' < "$mf"`
8455 # Find all dependency output files, they are included files with
8456 # $(DEPDIR) in their names. We invoke sed twice because it is the
8457 # simplest approach to changing $(DEPDIR) to its actual value in the
8458 # expansion.
8459 for file in `sed -n "
8460 s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
8461 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
8462 # Make sure the directory exists.
8463 test -f "$dirpart/$file" && continue
8464 fdir=`AS_DIRNAME(["$file"])`
8465 AS_MKDIR_P([$dirpart/$fdir])
8466 # echo "creating $dirpart/$file"
8467 echo '# dummy' > "$dirpart/$file"
8447 [{
8448 # Autoconf 2.62 quotes --file arguments for eval, but not when files
8449 # are listed without --file. Let's play safe and only enable the eval
8450 # if we detect the quoting.
8451 case $CONFIG_FILES in
8452 *\'*) eval set x "$CONFIG_FILES" ;;
8453 *) set x $CONFIG_FILES ;;
8454 esac
8455 shift
8456 for mf
8457 do
8458 # Strip MF so we end up with the name of the file.
8459 mf=`echo "$mf" | sed -e 's/:.*$//'`
8460 # Check whether this is an Automake generated Makefile or not.
8461 # We used to match only the files named `Makefile.in', but
8462 # some people rename them; so instead we look at the file content.
8463 # Grep'ing the first line is not enough: some people post-process
8464 # each Makefile.in and add a new line on top of each file to say so.
8465 # Grep'ing the whole file is not good either: AIX grep has a line
8466 # limit of 2048, but all sed's we know have understand at least 4000.
8467 if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
8468 dirpart=`AS_DIRNAME("$mf")`
8469 else
8470 continue
8471 fi
8472 # Extract the definition of DEPDIR, am__include, and am__quote
8473 # from the Makefile without running `make'.
8474 DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
8475 test -z "$DEPDIR" && continue
8476 am__include=`sed -n 's/^am__include = //p' < "$mf"`
8477 test -z "am__include" && continue
8478 am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
8479 # When using ansi2knr, U may be empty or an underscore; expand it
8480 U=`sed -n 's/^U = //p' < "$mf"`
8481 # Find all dependency output files, they are included files with
8482 # $(DEPDIR) in their names. We invoke sed twice because it is the
8483 # simplest approach to changing $(DEPDIR) to its actual value in the
8484 # expansion.
8485 for file in `sed -n "
8486 s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
8487 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
8488 # Make sure the directory exists.
8489 test -f "$dirpart/$file" && continue
8490 fdir=`AS_DIRNAME(["$file"])`
8491 AS_MKDIR_P([$dirpart/$fdir])
8492 # echo "creating $dirpart/$file"
8493 echo '# dummy' > "$dirpart/$file"
8494 done
84688495 done
8469 done
8496 }
84708497 ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
84718498
84728499
84868513 # Do all the work for Automake. -*- Autoconf -*-
84878514
84888515 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
8489 # 2005, 2006, 2008 Free Software Foundation, Inc.
8516 # 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
84908517 #
84918518 # This file is free software; the Free Software Foundation
84928519 # gives unlimited permission to copy and/or distribute it,
84938520 # with or without modifications, as long as this notice is preserved.
84948521
8495 # serial 13
8522 # serial 16
84968523
84978524 # This macro actually does too much. Some checks are only needed if
84988525 # your package does certain things. But this isn't really a big deal.
85098536 # arguments mandatory, and then we can depend on a new Autoconf
85108537 # release and drop the old call support.
85118538 AC_DEFUN([AM_INIT_AUTOMAKE],
8512 [AC_PREREQ([2.60])dnl
8539 [AC_PREREQ([2.62])dnl
85138540 dnl Autoconf wants to disallow AM_ names. We explicitly allow
85148541 dnl the ones we care about.
85158542 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
85608587 AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
85618588 AM_MISSING_PROG(AUTOHEADER, autoheader)
85628589 AM_MISSING_PROG(MAKEINFO, makeinfo)
8563 AM_PROG_INSTALL_SH
8564 AM_PROG_INSTALL_STRIP
8590 AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
8591 AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
85658592 AC_REQUIRE([AM_PROG_MKDIR_P])dnl
85668593 # We need awk for the "check" target. The system "awk" is bad on
85678594 # some platforms.
85698596 AC_REQUIRE([AC_PROG_MAKE_SET])dnl
85708597 AC_REQUIRE([AM_SET_LEADING_DOT])dnl
85718598 _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
8572 [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
8573 [_AM_PROG_TAR([v7])])])
8599 [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
8600 [_AM_PROG_TAR([v7])])])
85748601 _AM_IF_OPTION([no-dependencies],,
85758602 [AC_PROVIDE_IFELSE([AC_PROG_CC],
8576 [_AM_DEPENDENCIES(CC)],
8577 [define([AC_PROG_CC],
8578 defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
8603 [_AM_DEPENDENCIES(CC)],
8604 [define([AC_PROG_CC],
8605 defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
85798606 AC_PROVIDE_IFELSE([AC_PROG_CXX],
8580 [_AM_DEPENDENCIES(CXX)],
8581 [define([AC_PROG_CXX],
8582 defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
8607 [_AM_DEPENDENCIES(CXX)],
8608 [define([AC_PROG_CXX],
8609 defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
85838610 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
8584 [_AM_DEPENDENCIES(OBJC)],
8585 [define([AC_PROG_OBJC],
8586 defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
8611 [_AM_DEPENDENCIES(OBJC)],
8612 [define([AC_PROG_OBJC],
8613 defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
85878614 ])
8615 _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
8616 dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
8617 dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
8618 dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
8619 AC_CONFIG_COMMANDS_PRE(dnl
8620 [m4_provide_if([_AM_COMPILER_EXEEXT],
8621 [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
85888622 ])
8623
8624 dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
8625 dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
8626 dnl mangled by Autoconf and run in a shell conditional statement.
8627 m4_define([_AC_COMPILER_EXEEXT],
8628 m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
85898629
85908630
85918631 # When config.status generates a header, we must update the stamp-h file.
86098649 done
86108650 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
86118651
8612 # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
8652 # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
86138653 #
86148654 # This file is free software; the Free Software Foundation
86158655 # gives unlimited permission to copy and/or distribute it,
86208660 # Define $install_sh.
86218661 AC_DEFUN([AM_PROG_INSTALL_SH],
86228662 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
8623 install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
8663 if test x"${install_sh}" != xset; then
8664 case $am_aux_dir in
8665 *\ * | *\ *)
8666 install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
8667 *)
8668 install_sh="\${SHELL} $am_aux_dir/install-sh"
8669 esac
8670 fi
86248671 AC_SUBST(install_sh)])
86258672
86268673 # Copyright (C) 2003, 2005 Free Software Foundation, Inc.
86468693
86478694 # Check to see how 'make' treats includes. -*- Autoconf -*-
86488695
8649 # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
8696 # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
86508697 #
86518698 # This file is free software; the Free Software Foundation
86528699 # gives unlimited permission to copy and/or distribute it,
86538700 # with or without modifications, as long as this notice is preserved.
86548701
8655 # serial 3
8702 # serial 4
86568703
86578704 # AM_MAKE_INCLUDE()
86588705 # -----------------
86618708 [am_make=${MAKE-make}
86628709 cat > confinc << 'END'
86638710 am__doit:
8664 @echo done
8711 @echo this is the am__doit target
86658712 .PHONY: am__doit
86668713 END
86678714 # If we don't find an include directive, just comment out the code.
86718718 _am_result=none
86728719 # First try GNU make style include.
86738720 echo "include confinc" > confmf
8674 # We grep out `Entering directory' and `Leaving directory'
8675 # messages which can occur if `w' ends up in MAKEFLAGS.
8676 # In particular we don't look at `^make:' because GNU make might
8677 # be invoked under some other name (usually "gmake"), in which
8678 # case it prints its new name instead of `make'.
8679 if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
8680 am__include=include
8681 am__quote=
8682 _am_result=GNU
8683 fi
8721 # Ignore all kinds of additional output from `make'.
8722 case `$am_make -s -f confmf 2> /dev/null` in #(
8723 *the\ am__doit\ target*)
8724 am__include=include
8725 am__quote=
8726 _am_result=GNU
8727 ;;
8728 esac
86848729 # Now try BSD make style include.
86858730 if test "$am__include" = "#"; then
86868731 echo '.include "confinc"' > confmf
8687 if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
8688 am__include=.include
8689 am__quote="\""
8690 _am_result=BSD
8691 fi
8732 case `$am_make -s -f confmf 2> /dev/null` in #(
8733 *the\ am__doit\ target*)
8734 am__include=.include
8735 am__quote="\""
8736 _am_result=BSD
8737 ;;
8738 esac
86928739 fi
86938740 AC_SUBST([am__include])
86948741 AC_SUBST([am__quote])
87338780
87348781 # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
87358782
8736 # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
8783 # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
87378784 # Free Software Foundation, Inc.
87388785 #
87398786 # This file is free software; the Free Software Foundation
87408787 # gives unlimited permission to copy and/or distribute it,
87418788 # with or without modifications, as long as this notice is preserved.
87428789
8743 # serial 5
8790 # serial 6
87448791
87458792 # AM_MISSING_PROG(NAME, PROGRAM)
87468793 # ------------------------------
87578804 AC_DEFUN([AM_MISSING_HAS_RUN],
87588805 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
87598806 AC_REQUIRE_AUX_FILE([missing])dnl
8760 test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
8807 if test x"${MISSING+set}" != xset; then
8808 case $am_aux_dir in
8809 *\ * | *\ *)
8810 MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
8811 *)
8812 MISSING="\${SHELL} $am_aux_dir/missing" ;;
8813 esac
8814 fi
87618815 # Use eval to expand $SHELL
87628816 if eval "$MISSING --run true"; then
87638817 am_missing_run="$MISSING --run "
88268880 AC_DEFUN([_AM_IF_OPTION],
88278881 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
88288882
8883 # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
8884 #
8885 # This file is free software; the Free Software Foundation
8886 # gives unlimited permission to copy and/or distribute it,
8887 # with or without modifications, as long as this notice is preserved.
8888
8889 # AM_RUN_LOG(COMMAND)
8890 # -------------------
8891 # Run COMMAND, save the exit status in ac_status, and log it.
8892 # (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
8893 AC_DEFUN([AM_RUN_LOG],
8894 [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
8895 ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
8896 ac_status=$?
8897 echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
8898 (exit $ac_status); }])
8899
88298900 # Check to make sure that the build environment is sane. -*- Autoconf -*-
88308901
8831 # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
8902 # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
88328903 # Free Software Foundation, Inc.
88338904 #
88348905 # This file is free software; the Free Software Foundation
88358906 # gives unlimited permission to copy and/or distribute it,
88368907 # with or without modifications, as long as this notice is preserved.
88378908
8838 # serial 4
8909 # serial 5
88398910
88408911 # AM_SANITY_CHECK
88418912 # ---------------
88448915 # Just in case
88458916 sleep 1
88468917 echo timestamp > conftest.file
8918 # Reject unsafe characters in $srcdir or the absolute working directory
8919 # name. Accept space and tab only in the latter.
8920 am_lf='
8921 '
8922 case `pwd` in
8923 *[[\\\"\#\$\&\'\`$am_lf]]*)
8924 AC_MSG_ERROR([unsafe absolute working directory name]);;
8925 esac
8926 case $srcdir in
8927 *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
8928 AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
8929 esac
8930
88478931 # Do `set' in a subshell so we don't clobber the current shell's
88488932 # arguments. Must try -L first in case configure is actually a
88498933 # symlink; some systems play weird games with the mod time of symlinks
88508934 # (eg FreeBSD returns the mod time of the symlink's containing
88518935 # directory).
88528936 if (
8853 set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
8937 set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
88548938 if test "$[*]" = "X"; then
88558939 # -L didn't work.
8856 set X `ls -t $srcdir/configure conftest.file`
8940 set X `ls -t "$srcdir/configure" conftest.file`
88578941 fi
88588942 rm -f conftest.file
88598943 if test "$[*]" != "X $srcdir/configure conftest.file" \
88778961 Check your system clock])
88788962 fi
88798963 AC_MSG_RESULT(yes)])
8964
8965 # Copyright (C) 2009 Free Software Foundation, Inc.
8966 #
8967 # This file is free software; the Free Software Foundation
8968 # gives unlimited permission to copy and/or distribute it,
8969 # with or without modifications, as long as this notice is preserved.
8970
8971 # serial 1
8972
8973 # AM_SILENT_RULES([DEFAULT])
8974 # --------------------------
8975 # Enable less verbose build rules; with the default set to DEFAULT
8976 # (`yes' being less verbose, `no' or empty being verbose).
8977 AC_DEFUN([AM_SILENT_RULES],
8978 [AC_ARG_ENABLE([silent-rules],
8979 [ --enable-silent-rules less verbose build output (undo: `make V=1')
8980 --disable-silent-rules verbose build output (undo: `make V=0')])
8981 case $enable_silent_rules in
8982 yes) AM_DEFAULT_VERBOSITY=0;;
8983 no) AM_DEFAULT_VERBOSITY=1;;
8984 *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
8985 esac
8986 AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
8987 AM_BACKSLASH='\'
8988 AC_SUBST([AM_BACKSLASH])dnl
8989 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
8990 ])
88808991
88818992 # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
88828993 #
89069017 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
89079018 AC_SUBST([INSTALL_STRIP_PROGRAM])])
89089019
8909 # Copyright (C) 2006 Free Software Foundation, Inc.
9020 # Copyright (C) 2006, 2008 Free Software Foundation, Inc.
89109021 #
89119022 # This file is free software; the Free Software Foundation
89129023 # gives unlimited permission to copy and/or distribute it,
89139024 # with or without modifications, as long as this notice is preserved.
9025
9026 # serial 2
89149027
89159028 # _AM_SUBST_NOTMAKE(VARIABLE)
89169029 # ---------------------------
89179030 # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
89189031 # This macro is traced by Automake.
89199032 AC_DEFUN([_AM_SUBST_NOTMAKE])
9033
9034 # AM_SUBST_NOTMAKE(VARIABLE)
9035 # ---------------------------
9036 # Public sister of _AM_SUBST_NOTMAKE.
9037 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
89209038
89219039 # Check how to create a tarball. -*- Autoconf -*-
89229040
6363 /* These three will be autotested for: */
6464 SK_DISK_TYPE_ATA_PASSTHROUGH_12, /* ATA passthrough over SCSI transport, 12-byte version */
6565 SK_DISK_TYPE_ATA_PASSTHROUGH_16, /* ATA passthrough over SCSI transport, 16-byte version */
66 SK_DISK_TYPE_ATA, /* Classic Linux /dev/hda ioctls */
66 SK_DISK_TYPE_LINUX_IDE, /* Classic Linux /dev/hda ioctls */
6767
6868 /* These three will not be autotested for */
6969 SK_DISK_TYPE_SUNPLUS, /* SunPlus USB/ATA bridges */
7070 SK_DISK_TYPE_JMICRON, /* JMicron USB/ATA bridges */
71 SK_DISK_TYPE_BLOB,
72 SK_DISK_TYPE_UNKNOWN,
71 SK_DISK_TYPE_BLOB, /* From a file */
72 SK_DISK_TYPE_NONE, /* No access method */
73 SK_DISK_TYPE_AUTO, /* We don't know yet */
7374 _SK_DISK_TYPE_MAX,
7475 _SK_DISK_TYPE_TEST_MAX = SK_DISK_TYPE_SUNPLUS /* only auto test until here */
7576 } SkDiskType;
113114 SkBool blob_smart_status:1;
114115 SkBool blob_smart_status_valid:1;
115116
117 SkBool attribute_verification_bad:1;
118
116119 SkIdentifyParsedData identify_parsed_data;
117120 SkSmartParsedData smart_parsed_data;
118121
137140 SK_SMART_COMMAND_RETURN_STATUS = 0xDA
138141 } SkSmartCommand;
139142
140 static const char *disk_type_to_string(SkDiskType type) {
143 /* Hmm, if the data we parse is out of a certain range just consider it misparsed */
144 #define SK_MKELVIN_VALID_MIN ((uint64_t) ((-15LL*1000LL) + 273150LL))
145 #define SK_MKELVIN_VALID_MAX ((uint64_t) ((100LL*1000LL) + 273150LL))
146
147 #define SK_MSECOND_VALID_MIN 1ULL
148 #define SK_MSECOND_VALID_SHORT_MAX (60ULL * 60ULL * 1000ULL)
149 #define SK_MSECOND_VALID_LONG_MAX (30ULL * 365ULL * 24ULL * 60ULL * 60ULL * 1000ULL)
150
151 static const char *disk_type_to_human_string(SkDiskType type) {
141152
142153 /* %STRINGPOOLSTART% */
143154 static const char* const map[_SK_DISK_TYPE_MAX] = {
144155 [SK_DISK_TYPE_ATA_PASSTHROUGH_16] = "16 Byte SCSI ATA SAT Passthru",
145156 [SK_DISK_TYPE_ATA_PASSTHROUGH_12] = "12 Byte SCSI ATA SAT Passthru",
146 [SK_DISK_TYPE_ATA] = "Native Linux ATA",
157 [SK_DISK_TYPE_LINUX_IDE] = "Native Linux IDE",
147158 [SK_DISK_TYPE_SUNPLUS] = "Sunplus SCSI ATA Passthru",
148159 [SK_DISK_TYPE_JMICRON] = "JMicron SCSI ATA Passthru",
149160 [SK_DISK_TYPE_BLOB] = "Blob",
150 [SK_DISK_TYPE_UNKNOWN] = "Unknown"
161 [SK_DISK_TYPE_AUTO] = "Automatic",
162 [SK_DISK_TYPE_NONE] = "None"
151163 };
152164 /* %STRINGPOOLSTOP% */
153165
157169 return _P(map[type]);
158170 }
159171
172 static const char *disk_type_to_prefix_string(SkDiskType type) {
173
174 /* %STRINGPOOLSTART% */
175 static const char* const map[_SK_DISK_TYPE_MAX] = {
176 [SK_DISK_TYPE_ATA_PASSTHROUGH_16] = "sat16",
177 [SK_DISK_TYPE_ATA_PASSTHROUGH_12] = "sat12",
178 [SK_DISK_TYPE_LINUX_IDE] = "linux-ide",
179 [SK_DISK_TYPE_SUNPLUS] = "sunplus",
180 [SK_DISK_TYPE_JMICRON] = "jmicron",
181 [SK_DISK_TYPE_NONE] = "none",
182 [SK_DISK_TYPE_AUTO] = "auto",
183 };
184 /* %STRINGPOOLSTOP% */
185
186 if (type >= _SK_DISK_TYPE_MAX)
187 return NULL;
188
189 return _P(map[type]);
190 }
191
192 static const char *disk_type_from_string(const char *s, SkDiskType *type) {
193 unsigned u;
194
195 assert(s);
196 assert(type);
197
198 for (u = 0; u < _SK_DISK_TYPE_MAX; u++) {
199 const char *t;
200 size_t l;
201
202 if (!(t = disk_type_to_prefix_string(u)))
203 continue;
204
205 l = strlen(t);
206
207 if (strncmp(s, t, l))
208 continue;
209
210 if (s[l] != ':')
211 continue;
212
213 *type = u;
214
215 return s + l + 1;
216 }
217
218 return NULL;
219 }
220
160221 static SkBool disk_smart_is_available(SkDisk *d) {
161222 return d->identify_valid && !!(d->identify[164] & 1);
162223 }
188249 return !!(d->smart_data[367] & 41);
189250 }
190251
191 static int disk_ata_command(SkDisk *d, SkAtaCommand command, SkDirection direction, void* cmd_data, void* data, size_t *len) {
252 static int disk_linux_ide_command(SkDisk *d, SkAtaCommand command, SkDirection direction, void* cmd_data, void* data, size_t *len) {
192253 uint8_t *bytes = cmd_data;
193254 int ret;
194255
195 assert(d->type == SK_DISK_TYPE_ATA);
256 assert(d->type == SK_DISK_TYPE_LINUX_IDE);
196257
197258 switch (direction) {
198259
633694 static int disk_command(SkDisk *d, SkAtaCommand command, SkDirection direction, void* cmd_data, void* data, size_t *len) {
634695
635696 static int (* const disk_command_table[_SK_DISK_TYPE_MAX]) (SkDisk *d, SkAtaCommand command, SkDirection direction, void* cmd_data, void* data, size_t *len) = {
636 [SK_DISK_TYPE_ATA] = disk_ata_command,
697 [SK_DISK_TYPE_LINUX_IDE] = disk_linux_ide_command,
637698 [SK_DISK_TYPE_ATA_PASSTHROUGH_12] = disk_passthrough_12_command,
638699 [SK_DISK_TYPE_ATA_PASSTHROUGH_16] = disk_passthrough_16_command,
639700 [SK_DISK_TYPE_SUNPLUS] = disk_sunplus_command,
640701 [SK_DISK_TYPE_JMICRON] = disk_jmicron_command,
641702 [SK_DISK_TYPE_BLOB] = NULL,
642 [SK_DISK_TYPE_UNKNOWN] = NULL
703 [SK_DISK_TYPE_AUTO] = NULL,
704 [SK_DISK_TYPE_NONE] = NULL
643705 };
644706
645707 assert(d);
11191181 else if (!strcmp(a->name, "temperature-centi-celsius"))
11201182 a->pretty_value = (fourtyeight & 0xFFFF)*100 + 273150;
11211183 else if (!strcmp(a->name, "power-on-minutes"))
1122 a->pretty_value = (((uint64_t) a->raw[0]) | (uint64_t) a->raw[1]) * 60 * 1000;
1184 a->pretty_value = fourtyeight * 60 * 1000;
11231185 else if (!strcmp(a->name, "power-on-seconds"))
11241186 a->pretty_value = fourtyeight * 1000;
11251187 else if (!strcmp(a->name, "power-on-half-minutes"))
11271189 else if (!strcmp(a->name, "power-on-hours") ||
11281190 !strcmp(a->name, "loaded-hours") ||
11291191 !strcmp(a->name, "head-flying-hours"))
1130 a->pretty_value = fourtyeight * 60 * 60 * 1000;
1131 else if (!strcmp(a->name, "reallocated-sector-count"))
1192 a->pretty_value = (fourtyeight & 0xFFFFFFFFU) * 60 * 60 * 1000;
1193 else if (!strcmp(a->name, "reallocated-sector-count") ||
1194 !strcmp(a->name, "current-pending-sector"))
11321195 a->pretty_value = fourtyeight & 0xFFFFFFFFU;
11331196 else
11341197 a->pretty_value = fourtyeight;
11351198 }
11361199
1200 typedef void (*SkSmartAttributeVerify)(SkDisk *d, SkSmartAttributeParsedData *a);
1201
11371202 typedef struct SkSmartAttributeInfo {
11381203 const char *name;
11391204 SkSmartAttributeUnit unit;
1205 SkSmartAttributeVerify verify;
11401206 } SkSmartAttributeInfo;
1207
1208 static void verify_temperature(SkDisk *d, SkSmartAttributeParsedData *a) {
1209 assert(a);
1210 assert(a->pretty_unit == SK_SMART_ATTRIBUTE_UNIT_MKELVIN);
1211
1212 if (a->pretty_value < SK_MKELVIN_VALID_MIN ||
1213 a->pretty_value > SK_MKELVIN_VALID_MAX) {
1214 a->pretty_unit = SK_SMART_ATTRIBUTE_UNIT_UNKNOWN;
1215 d->attribute_verification_bad = TRUE;
1216 }
1217 }
1218
1219 static void verify_short_time(SkDisk *d, SkSmartAttributeParsedData *a) {
1220 assert(a);
1221 assert(a->pretty_unit == SK_SMART_ATTRIBUTE_UNIT_MSECONDS);
1222
1223 if (a->pretty_value < SK_MSECOND_VALID_MIN ||
1224 a->pretty_value > SK_MSECOND_VALID_SHORT_MAX) {
1225 a->pretty_unit = SK_SMART_ATTRIBUTE_UNIT_UNKNOWN;
1226 d->attribute_verification_bad = TRUE;
1227 }
1228 }
1229
1230 static void verify_long_time(SkDisk *d, SkSmartAttributeParsedData *a) {
1231 assert(a);
1232 assert(a->pretty_unit == SK_SMART_ATTRIBUTE_UNIT_MSECONDS);
1233
1234 if (a->pretty_value < SK_MSECOND_VALID_MIN ||
1235 a->pretty_value > SK_MSECOND_VALID_LONG_MAX) {
1236 a->pretty_unit = SK_SMART_ATTRIBUTE_UNIT_UNKNOWN;
1237 d->attribute_verification_bad = TRUE;
1238 }
1239 }
1240
1241 static void verify_sectors(SkDisk *d, SkSmartAttributeParsedData *a) {
1242 uint64_t max_sectors;
1243
1244 assert(d);
1245 assert(a);
1246 assert(a->pretty_unit == SK_SMART_ATTRIBUTE_UNIT_SECTORS);
1247
1248 max_sectors = d->size / 512ULL;
1249
1250 if (max_sectors > 0 && a->pretty_value > max_sectors) {
1251 a->pretty_value = SK_SMART_ATTRIBUTE_UNIT_UNKNOWN;
1252 d->attribute_verification_bad = TRUE;
1253 } else {
1254 if ((!strcmp(a->name, "reallocated-sector-count") ||
1255 !strcmp(a->name, "current-pending-sector")) &&
1256 a->pretty_value > 0)
1257 a->warn = TRUE;
1258 }
1259 }
11411260
11421261 /* This data is stolen from smartmontools */
11431262
11441263 /* %STRINGPOOLSTART% */
11451264 static const SkSmartAttributeInfo const attribute_info[256] = {
1146 [1] = { "raw-read-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE },
1147 [2] = { "throughput-performance", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1148 [3] = { "spin-up-time", SK_SMART_ATTRIBUTE_UNIT_MSECONDS },
1149 [4] = { "start-stop-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1150 [5] = { "reallocated-sector-count", SK_SMART_ATTRIBUTE_UNIT_SECTORS },
1151 [6] = { "read-channel-margin", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1152 [7] = { "seek-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE },
1153 [8] = { "seek-time-performance", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1154 [9] = { "power-on-hours", SK_SMART_ATTRIBUTE_UNIT_MSECONDS },
1155 [10] = { "spin-retry-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1156 [11] = { "calibration-retry-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1157 [12] = { "power-cycle-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1158 [13] = { "read-soft-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE },
1159 [187] = { "reported-uncorrect", SK_SMART_ATTRIBUTE_UNIT_SECTORS },
1160 [189] = { "high-fly-writes", SK_SMART_ATTRIBUTE_UNIT_NONE },
1161 [190] = { "airflow-temperature-celsius", SK_SMART_ATTRIBUTE_UNIT_MKELVIN },
1162 [191] = { "g-sense-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE },
1163 [192] = { "power-off-retract-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1164 [193] = { "load-cycle-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1165 [194] = { "temperature-celsius-2", SK_SMART_ATTRIBUTE_UNIT_MKELVIN },
1166 [195] = { "hardware-ecc-recovered", SK_SMART_ATTRIBUTE_UNIT_NONE },
1167 [196] = { "reallocated-event-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1168 [197] = { "current-pending-sector", SK_SMART_ATTRIBUTE_UNIT_SECTORS },
1169 [198] = { "offline-uncorrectable", SK_SMART_ATTRIBUTE_UNIT_SECTORS },
1170 [199] = { "udma-crc-error-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1171 [200] = { "multi-zone-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE },
1172 [201] = { "soft-read-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE },
1173 [202] = { "ta-increase-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1174 [203] = { "run-out-cancel", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1175 [204] = { "shock-count-write-open", SK_SMART_ATTRIBUTE_UNIT_NONE },
1176 [205] = { "shock-rate-write-open", SK_SMART_ATTRIBUTE_UNIT_NONE },
1177 [206] = { "flying-height", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1178 [207] = { "spin-high-current", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1179 [208] = { "spin-buzz", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN},
1180 [209] = { "offline-seek-performance", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1181 [220] = { "disk-shift", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1182 [221] = { "g-sense-error-rate-2", SK_SMART_ATTRIBUTE_UNIT_NONE },
1183 [222] = { "loaded-hours", SK_SMART_ATTRIBUTE_UNIT_MSECONDS },
1184 [223] = { "load-retry-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1185 [224] = { "load-friction", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1186 [225] = { "load-cycle-count-2", SK_SMART_ATTRIBUTE_UNIT_NONE },
1187 [226] = { "load-in-time", SK_SMART_ATTRIBUTE_UNIT_MSECONDS },
1188 [227] = { "torq-amp-count", SK_SMART_ATTRIBUTE_UNIT_NONE },
1189 [228] = { "power-off-retract-count-2", SK_SMART_ATTRIBUTE_UNIT_NONE },
1190 [230] = { "head-amplitude", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1191 [231] = { "temperature-celsius", SK_SMART_ATTRIBUTE_UNIT_MKELVIN },
1192 [240] = { "head-flying-hours", SK_SMART_ATTRIBUTE_UNIT_MSECONDS },
1193 [250] = { "read-error-retry-rate", SK_SMART_ATTRIBUTE_UNIT_NONE }
1265 [1] = { "raw-read-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1266 [2] = { "throughput-performance", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1267 [3] = { "spin-up-time", SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_short_time },
1268 [4] = { "start-stop-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1269 [5] = { "reallocated-sector-count", SK_SMART_ATTRIBUTE_UNIT_SECTORS, verify_sectors },
1270 [6] = { "read-channel-margin", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1271 [7] = { "seek-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1272 [8] = { "seek-time-performance", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1273 [9] = { "power-on-hours", SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time },
1274 [10] = { "spin-retry-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1275 [11] = { "calibration-retry-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1276 [12] = { "power-cycle-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1277 [13] = { "read-soft-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1278 [187] = { "reported-uncorrect", SK_SMART_ATTRIBUTE_UNIT_SECTORS, verify_sectors },
1279 [189] = { "high-fly-writes", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1280 [190] = { "airflow-temperature-celsius", SK_SMART_ATTRIBUTE_UNIT_MKELVIN, verify_temperature },
1281 [191] = { "g-sense-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1282 [192] = { "power-off-retract-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1283 [193] = { "load-cycle-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1284 [194] = { "temperature-celsius-2", SK_SMART_ATTRIBUTE_UNIT_MKELVIN, verify_temperature },
1285 [195] = { "hardware-ecc-recovered", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1286 [196] = { "reallocated-event-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1287 [197] = { "current-pending-sector", SK_SMART_ATTRIBUTE_UNIT_SECTORS, verify_sectors },
1288 [198] = { "offline-uncorrectable", SK_SMART_ATTRIBUTE_UNIT_SECTORS, verify_sectors },
1289 [199] = { "udma-crc-error-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1290 [200] = { "multi-zone-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1291 [201] = { "soft-read-error-rate", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1292 [202] = { "ta-increase-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1293 [203] = { "run-out-cancel", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1294 [204] = { "shock-count-write-open", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1295 [205] = { "shock-rate-write-open", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1296 [206] = { "flying-height", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1297 [207] = { "spin-high-current", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1298 [208] = { "spin-buzz", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1299 [209] = { "offline-seek-performance", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1300 [220] = { "disk-shift", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1301 [221] = { "g-sense-error-rate-2", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1302 [222] = { "loaded-hours", SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time },
1303 [223] = { "load-retry-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1304 [224] = { "load-friction", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1305 [225] = { "load-cycle-count-2", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1306 [226] = { "load-in-time", SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_short_time },
1307 [227] = { "torq-amp-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1308 [228] = { "power-off-retract-count-2", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1309 [230] = { "head-amplitude", SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1310 [231] = { "temperature-celsius", SK_SMART_ATTRIBUTE_UNIT_MKELVIN, verify_temperature },
1311 [240] = { "head-flying-hours", SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time },
1312 [250] = { "read-error-retry-rate", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL }
11941313 };
11951314 /* %STRINGPOOLSTOP% */
11961315
11971316 typedef enum SkSmartQuirk {
1198 SK_SMART_QUIRK_9_POWERONMINUTES = 1,
1199 SK_SMART_QUIRK_9_POWERONSECONDS = 2,
1200 SK_SMART_QUIRK_9_POWERONHALFMINUTES = 4,
1201 SK_SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT = 8,
1202 SK_SMART_QUIRK_193_LOADUNLOAD = 16,
1203 SK_SMART_QUIRK_194_10XCELSIUS = 32,
1204 SK_SMART_QUIRK_194_UNKNOWN = 64,
1205 SK_SMART_QUIRK_200_WRITEERRORCOUNT = 128,
1206 SK_SMART_QUIRK_201_DETECTEDTACOUNT = 256,
1207 SK_SMART_QUIRK_9_UNKNOWN = 512
1317 SK_SMART_QUIRK_9_POWERONMINUTES = 0x0001,
1318 SK_SMART_QUIRK_9_POWERONSECONDS = 0x0002,
1319 SK_SMART_QUIRK_9_POWERONHALFMINUTES = 0x0004,
1320 SK_SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT = 0x0008,
1321 SK_SMART_QUIRK_193_LOADUNLOAD = 0x0010,
1322 SK_SMART_QUIRK_194_10XCELSIUS = 0x0020,
1323 SK_SMART_QUIRK_194_UNKNOWN = 0x0040,
1324 SK_SMART_QUIRK_200_WRITEERRORCOUNT = 0x0080,
1325 SK_SMART_QUIRK_201_DETECTEDTACOUNT = 0x0100,
1326 SK_SMART_QUIRK_5_UNKNOWN = 0x0200,
1327 SK_SMART_QUIRK_9_UNKNOWN = 0x0400,
1328 SK_SMART_QUIRK_197_UNKNOWN = 0x0800,
1329 SK_SMART_QUIRK_198_UNKNOWN = 0x1000,
12081330 } SkSmartQuirk;
12091331
12101332 /* %STRINGPOOLSTART% */
12181340 "194_UNKNOWN",
12191341 "200_WRITEERRORCOUNT",
12201342 "201_DETECTEDTACOUNT",
1343 "5_UNKNOWN",
12211344 "9_UNKNOWN",
1345 "197_UNKNOWN",
1346 "198_UNKNOWN",
12221347 NULL
12231348 };
12241349 /* %STRINGPOOLSTOP% */
12311356
12321357 static const SkSmartQuirkDatabase quirk_database[] = { {
12331358
1234 /*** Seagate */
1235 "^ST9160821AS$",
1236 NULL,
1237 SK_SMART_QUIRK_9_UNKNOWN
1359 /*** Fujitsu */
1360 "^("
1361 "FUJITSU MHY2120BH|"
1362 "FUJITSU MHY2250BH"
1363 ")$",
1364 "^0085000B$", /* seems to be specific to this firmware */
1365 SK_SMART_QUIRK_9_POWERONMINUTES|
1366 SK_SMART_QUIRK_197_UNKNOWN|
1367 SK_SMART_QUIRK_198_UNKNOWN
12381368 }, {
1239
1240 /*** Fujitsu */
12411369 "^FUJITSU MHR2040AT$",
12421370 NULL,
12431371 SK_SMART_QUIRK_9_POWERONSECONDS|
13561484 SK_SMART_QUIRK_9_POWERONMINUTES|
13571485 SK_SMART_QUIRK_193_LOADUNLOAD
13581486 }, {
1359
1487 "^HTS541010G9SA00$",
1488 "^MBZOC60P$",
1489 SK_SMART_QUIRK_5_UNKNOWN
1490 }, {
13601491 NULL,
13611492 NULL,
13621493 0
14391570 if (quirk) {
14401571 switch (id) {
14411572
1573 case 5:
1574 if (quirk & SK_SMART_QUIRK_5_UNKNOWN)
1575 return NULL;
1576
1577 break;
1578
14421579 case 9:
14431580 /* %STRINGPOOLSTART% */
14441581 if (quirk & SK_SMART_QUIRK_9_POWERONMINUTES) {
14451582 static const SkSmartAttributeInfo a = {
1446 "power-on-minutes", SK_SMART_ATTRIBUTE_UNIT_MSECONDS
1583 "power-on-minutes", SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time
14471584 };
14481585 return &a;
14491586
14501587 } else if (quirk & SK_SMART_QUIRK_9_POWERONSECONDS) {
14511588 static const SkSmartAttributeInfo a = {
1452 "power-on-seconds", SK_SMART_ATTRIBUTE_UNIT_MSECONDS
1589 "power-on-seconds", SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time
14531590 };
14541591 return &a;
14551592
14561593 } else if (quirk & SK_SMART_QUIRK_9_POWERONHALFMINUTES) {
14571594 static const SkSmartAttributeInfo a = {
1458 "power-on-half-minutes", SK_SMART_ATTRIBUTE_UNIT_MSECONDS
1595 "power-on-half-minutes", SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time
14591596 };
14601597 return &a;
14611598 } else if (quirk & SK_SMART_QUIRK_9_UNKNOWN)
14681605 /* %STRINGPOOLSTART% */
14691606 if (quirk & SK_SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT) {
14701607 static const SkSmartAttributeInfo a = {
1471 "emergency-retract-cycle-count", SK_SMART_ATTRIBUTE_UNIT_NONE
1608 "emergency-retract-cycle-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL
14721609 };
14731610 return &a;
14741611 }
14801617 /* %STRINGPOOLSTART% */
14811618 if (quirk & SK_SMART_QUIRK_194_10XCELSIUS) {
14821619 static const SkSmartAttributeInfo a = {
1483 "temperature-centi-celsius", SK_SMART_ATTRIBUTE_UNIT_MKELVIN
1620 "temperature-centi-celsius", SK_SMART_ATTRIBUTE_UNIT_MKELVIN, verify_temperature
14841621 };
14851622 return &a;
14861623 } else if (quirk & SK_SMART_QUIRK_194_UNKNOWN)
14891626
14901627 break;
14911628
1629 case 197:
1630 if (quirk & SK_SMART_QUIRK_197_UNKNOWN)
1631 return NULL;
1632
1633 break;
1634
1635 case 198:
1636 if (quirk & SK_SMART_QUIRK_198_UNKNOWN)
1637 return NULL;
1638
1639 break;
1640
14921641 case 200:
14931642 /* %STRINGPOOLSTART% */
14941643 if (quirk & SK_SMART_QUIRK_200_WRITEERRORCOUNT) {
14951644 static const SkSmartAttributeInfo a = {
1496 "write-error-count", SK_SMART_ATTRIBUTE_UNIT_NONE
1645 "write-error-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL
14971646 };
14981647 return &a;
14991648 }
15051654 /* %STRINGPOOLSTART% */
15061655 if (quirk & SK_SMART_QUIRK_201_DETECTEDTACOUNT) {
15071656 static const SkSmartAttributeInfo a = {
1508 "detected-ta-count", SK_SMART_ATTRIBUTE_UNIT_NONE
1657 "detected-ta-count", SK_SMART_ATTRIBUTE_UNIT_NONE, NULL
15091658 };
15101659 return &a;
15111660 }
15871736 uint8_t *p;
15881737 unsigned n;
15891738
1590 if (!d->smart_thresholds_valid) {
1591 a->threshold_valid = FALSE;
1592 return;
1593 }
1739 if (!d->smart_thresholds_valid)
1740 goto fail;
15941741
15951742 for (n = 0, p = d->smart_thresholds+2; n < 30; n++, p+=12)
15961743 if (p[0] == a->id)
15971744 break;
15981745
1599 if (n >= 30) {
1600 a->threshold_valid = FALSE;
1601 a->good_valid = FALSE;
1602 return;
1603 }
1746 if (n >= 30)
1747 goto fail;
16041748
16051749 a->threshold = p[1];
16061750 a->threshold_valid = p[1] != 0xFE;
16071751
1608 a->good_valid = FALSE;
1609 a->good = TRUE;
1752 a->good_now_valid = FALSE;
1753 a->good_now = TRUE;
1754 a->good_in_the_past_valid = FALSE;
1755 a->good_in_the_past = TRUE;
16101756
16111757 /* Always-Fail and Always-Passing thresholds are not relevant
16121758 * for our assessment. */
16131759 if (p[1] >= 1 && p[1] <= 0xFD) {
16141760
16151761 if (a->worst_value_valid) {
1616 a->good = a->good && (a->worst_value > a->threshold);
1617 a->good_valid = TRUE;
1762 a->good_in_the_past = a->good_in_the_past && (a->worst_value > a->threshold);
1763 a->good_in_the_past_valid = TRUE;
16181764 }
16191765
16201766 if (a->current_value_valid) {
1621 a->good = a->good && (a->current_value > a->threshold);
1622 a->good_valid = TRUE;
1767 a->good_now = a->good_now && (a->current_value > a->threshold);
1768 a->good_now_valid = TRUE;
16231769 }
16241770 }
1771
1772 a->warn =
1773 (a->good_now_valid && !a->good_now) ||
1774 (a->good_in_the_past_valid && !a->good_in_the_past);
1775
1776 return;
1777
1778 fail:
1779 a->threshold_valid = FALSE;
1780 a->good_now_valid = FALSE;
1781 a->good_in_the_past_valid = FALSE;
1782 a->warn = FALSE;
16251783 }
16261784
16271785 int sk_disk_smart_parse_attributes(SkDisk *d, SkSmartAttributeParseCallback cb, void* userdata) {
16711829
16721830 find_threshold(d, &a);
16731831
1674 /* Handle a few fields specially */
1675 if ((!strcmp(a.name, "reallocated-sector-count") ||
1676 !strcmp(a.name, "current-pending-sector")) &&
1677 a.pretty_unit == SK_SMART_ATTRIBUTE_UNIT_SECTORS &&
1678 a.pretty_value > 0) {
1679 a.good = FALSE;
1680 a.good_valid = TRUE;
1681 }
1832 if (i && i->verify)
1833 i->verify(d, &a);
16821834
16831835 cb(d, &a, userdata);
16841836 free(an);
18892041 /* %STRINGPOOLSTART% */
18902042 const char * const map[] = {
18912043 [SK_SMART_OVERALL_GOOD] = "GOOD",
2044 [SK_SMART_OVERALL_BAD_ATTRIBUTE_IN_THE_PAST] = "BAD_ATTRIBUTE_IN_THE_PAST",
2045 [SK_SMART_OVERALL_BAD_SECTOR] = "BAD_SECTOR",
2046 [SK_SMART_OVERALL_BAD_ATTRIBUTE_NOW] = "BAD_ATTRIBUTE_NOW",
2047 [SK_SMART_OVERALL_BAD_SECTOR_MANY] = "BAD_SECTOR_MANY",
18922048 [SK_SMART_OVERALL_BAD_STATUS] = "BAD_STATUS",
1893 [SK_SMART_OVERALL_BAD_ATTRIBUTE] = "BAD_ATTRIBUTE",
1894 [SK_SMART_OVERALL_BAD_SECTOR] = "BAD_SECTOR"
18952049 };
18962050 /* %STRINGPOOLSTOP% */
18972051
19012055 return _P(map[overall]);
19022056 }
19032057
1904 static void bad_attribute_cb(SkDisk *d, const SkSmartAttributeParsedData *a, SkBool *good) {
1905 if (a->prefailure && a->good_valid && !a->good)
2058 static void bad_attribute_now_cb(SkDisk *d, const SkSmartAttributeParsedData *a, SkBool *good) {
2059 if (a->prefailure && a->good_now_valid && !a->good_now)
19062060 *good = FALSE;
2061 }
2062
2063 static void bad_attribute_in_the_past_cb(SkDisk *d, const SkSmartAttributeParsedData *a, SkBool *good) {
2064 if (a->prefailure && a->good_in_the_past_valid && !a->good_in_the_past)
2065 *good = FALSE;
2066 }
2067
2068 static uint64_t u64log2(uint64_t n) {
2069 unsigned r;
2070
2071 if (n <= 1)
2072 return 0;
2073
2074 r = 0;
2075 for (;;) {
2076 n = n >> 1;
2077 if (!n)
2078 return r;
2079 r++;
2080 }
19072081 }
19082082
19092083 int sk_disk_smart_get_overall(SkDisk *d, SkSmartOverall *overall) {
19102084 SkBool good;
1911 uint64_t sectors;
2085 uint64_t sectors, sector_threshold;
19122086
19132087 assert(d);
19142088 assert(overall);
19152089
2090 /* First, check SMART self-assesment */
19162091 if (sk_disk_smart_status(d, &good) < 0)
19172092 return -1;
19182093
19212096 return 0;
19222097 }
19232098
2099 /* Second, check if the number of bad sectors is greater than
2100 * a certain threshold */
19242101 if (sk_disk_smart_get_bad(d, &sectors) < 0) {
19252102 if (errno != ENOENT)
19262103 return -1;
1927 } else if (sectors > 0) {
2104 sectors = 0;
2105 } else {
2106
2107 /* We use log2(n_sectors) as a threshold here. We had to pick
2108 * something, and this makes a bit of sense, or doesn't it? */
2109 sector_threshold = u64log2(d->size/512);
2110
2111 if (sectors >= sector_threshold) {
2112 *overall = SK_SMART_OVERALL_BAD_SECTOR_MANY;
2113 return 0;
2114 }
2115 }
2116
2117 /* Third, check if any of the SMART attributes is bad */
2118 good = TRUE;
2119 if (sk_disk_smart_parse_attributes(d, (SkSmartAttributeParseCallback) bad_attribute_now_cb, &good) < 0)
2120 return -1;
2121
2122 if (!good) {
2123 *overall = SK_SMART_OVERALL_BAD_ATTRIBUTE_NOW;
2124 return 0;
2125 }
2126
2127 /* Fourth, check if there are any bad sectors at all */
2128 if (sectors > 0) {
19282129 *overall = SK_SMART_OVERALL_BAD_SECTOR;
19292130 return 0;
19302131 }
19312132
2133 /* Fifth, check if any of the SMART attributes ever was bad */
19322134 good = TRUE;
1933 if (sk_disk_smart_parse_attributes(d, (SkSmartAttributeParseCallback) bad_attribute_cb, &good) < 0)
2135 if (sk_disk_smart_parse_attributes(d, (SkSmartAttributeParseCallback) bad_attribute_in_the_past_cb, &good) < 0)
19342136 return -1;
19352137
19362138 if (!good) {
1937 *overall = SK_SMART_OVERALL_BAD_ATTRIBUTE;
2139 *overall = SK_SMART_OVERALL_BAD_ATTRIBUTE_IN_THE_PAST;
19382140 return 0;
19392141 }
19402142
2143 /* Sixth, there's really nothing to complain about, so give it a pass */
19412144 *overall = SK_SMART_OVERALL_GOOD;
19422145 return 0;
19432146 }
20172220 snprintf(tc, sizeof(tc), "%3u", a->current_value);
20182221 tc[sizeof(tc)-1] = 0;
20192222
2020 highlight = a->good_valid && !a->good && isatty(1);
2223 highlight = a->warn && isatty(1);
20212224
20222225 if (highlight)
20232226 fprintf(stderr, HIGHLIGHT);
20242227
2025 printf("%3u %-27s %-3s %-3s %-3s %-11s 0x%02x%02x%02x%02x%02x%02x %-7s %-7s %-3s\n",
2228 printf("%3u %-27s %-3s %-3s %-3s %-11s 0x%02x%02x%02x%02x%02x%02x %-7s %-7s %-4s %-4s\n",
20262229 a->id,
20272230 print_name(name, sizeof(name), a->id, a->name),
20282231 a->current_value_valid ? tc : "n/a",
20322235 a->raw[0], a->raw[1], a->raw[2], a->raw[3], a->raw[4], a->raw[5],
20332236 a->prefailure ? "prefail" : "old-age",
20342237 a->online ? "online" : "offline",
2035 a->good_valid ? yes_no(a->good) : "n/a");
2238 a->good_now_valid ? yes_no(a->good_now) : "n/a",
2239 a->good_in_the_past_valid ? yes_no(a->good_in_the_past) : "n/a");
20362240
20372241 if (highlight)
20382242 fprintf(stderr, ENDHIGHLIGHT);
20452249
20462250 assert(d);
20472251
2048 printf("Device: %s\n"
2252 printf("Device: %s%s%s\n"
20492253 "Type: %s\n",
2254 d->name ? disk_type_to_prefix_string(d->type) : "",
2255 d->name ? ":" : "",
20502256 d->name ? d->name : "n/a",
2051 disk_type_to_string(d->type));
2257 disk_type_to_human_string(d->type));
20522258
20532259 ret = sk_disk_get_size(d, &size);
20542260 if (ret >= 0)
20832289 printf(" %s", _P(quirk_name[i]));
20842290
20852291 printf("\n");
2086
20872292 }
20882293
20892294 ret = sk_disk_check_sleep_mode(d, &awake);
20982303 uint64_t value, power_on;
20992304
21002305 ret = sk_disk_smart_status(d, &good);
2101 printf("SMART Disk Health Good: %s\n",
2102 ret >= 0 ? yes_no(good) : strerror(errno));
2103
2306 printf("%sSMART Disk Health Good: %s%s\n",
2307 ret >= 0 && !good ? HIGHLIGHT : "",
2308 ret >= 0 ? yes_no(good) : strerror(errno),
2309 ret >= 0 && !good ? ENDHIGHLIGHT : "");
21042310 if ((ret = sk_disk_smart_read_data(d)) < 0)
21052311 return ret;
21062312
21582364 else
21592365 printf("Temperature: %s\n", print_value(pretty, sizeof(pretty), value, SK_SMART_ATTRIBUTE_UNIT_MKELVIN));
21602366
2367 printf("Attribute Parsing Verification: %s\n",
2368 d->attribute_verification_bad ? "Bad" : "Good");
2369
21612370 if (sk_disk_smart_get_overall(d, &overall) < 0)
21622371 printf("Overall Status: %s\n", strerror(errno));
21632372 else
21662375 sk_smart_overall_to_string(overall),
21672376 overall != SK_SMART_OVERALL_GOOD ? ENDHIGHLIGHT : "");
21682377
2169 printf("%3s %-27s %5s %5s %5s %-11s %-14s %-7s %-7s %-3s\n",
2378 printf("%3s %-27s %5s %5s %5s %-11s %-14s %-7s %-7s %-4s %-4s\n",
21702379 "ID#",
21712380 "Name",
21722381 "Value",
21762385 "Raw",
21772386 "Type",
21782387 "Updates",
2179 "Good");
2388 "Good",
2389 "Good/Past");
21802390
21812391 if ((ret = sk_disk_smart_parse_attributes(d, disk_dump_attributes, NULL)) < 0)
21822392 return ret;
22032413 struct udev *udev;
22042414 struct udev_device *dev = NULL, *usb;
22052415 int r = -1;
2416 const char *a;
22062417
22072418 assert(d);
22082419
22132424
22142425 if (!(dev = udev_device_new_from_devnum(udev, 'b', devnum))) {
22152426 errno = ENODEV;
2427 goto finish;
2428 }
2429
2430 if ((a = udev_device_get_property_value(dev, "ID_ATA_SMART_ACCESS"))) {
2431 unsigned u;
2432
2433 for (u = 0; u < _SK_DISK_TYPE_MAX; u++) {
2434 const char *t;
2435
2436 if (!(t = disk_type_to_prefix_string(u)))
2437 continue;
2438
2439 if (!strcmp(a, t)) {
2440 d->type = u;
2441 r = 0;
2442 goto finish;
2443 }
2444 }
2445
2446 d->type = SK_DISK_TYPE_NONE;
2447 r = 0;
22162448 goto finish;
22172449 }
22182450
22332465 }
22342466
22352467 if ((vid == 0x0c0b && pid == 0xb159) ||
2236 (vid == 0x04fc && pid == 0x0c25))
2468 (vid == 0x04fc && pid == 0x0c25) ||
2469 (vid == 0x04fc && pid == 0x0c15))
22372470 d->type = SK_DISK_TYPE_SUNPLUS;
2238 if ((vid == 0x152d && pid == 0x2329) ||
2471 else if ((vid == 0x152d && pid == 0x2329) ||
22392472 (vid == 0x152d && pid == 0x2336) ||
22402473 (vid == 0x152d && pid == 0x2338) ||
22412474 (vid == 0x152d && pid == 0x2339))
22442477 d->type = SK_DISK_TYPE_ATA_PASSTHROUGH_12;
22452478
22462479 } else if (udev_device_get_parent_with_subsystem_devtype(dev, "ide", NULL))
2247 d->type = SK_DISK_TYPE_ATA;
2480 d->type = SK_DISK_TYPE_LINUX_IDE;
22482481 else if (udev_device_get_parent_with_subsystem_devtype(dev, "scsi", NULL))
22492482 d->type = SK_DISK_TYPE_ATA_PASSTHROUGH_16;
22502483 else
2251 d->type = SK_DISK_TYPE_UNKNOWN;
2484 d->type = SK_DISK_TYPE_AUTO;
22522485
22532486 r = 0;
22542487
22742507 goto fail;
22752508 }
22762509
2277 if (!name) {
2278 d->fd = -1;
2510 d->fd = -1;
2511 d->size = (uint64_t) -1;
2512
2513 if (!name)
22792514 d->type = SK_DISK_TYPE_BLOB;
2280 d->size = (uint64_t) -1;
2281 } else {
2282
2283 if (!(d->name = strdup(name))) {
2515 else {
2516 const char *dn;
2517
2518 d->type = SK_DISK_TYPE_AUTO;
2519
2520 if (!(dn = disk_type_from_string(name, &d->type)))
2521 dn = name;
2522
2523 if (!(d->name = strdup(dn))) {
22842524 errno = ENOMEM;
22852525 goto fail;
22862526 }
22872527
2288 if ((d->fd = open(name,
2528 if ((d->fd = open(d->name,
22892529 O_RDONLY|O_NOCTTY|O_NONBLOCK
22902530 #ifdef O_CLOEXEC
22912531 |O_CLOEXEC
23162556 }
23172557
23182558 /* OK, it's a real block device with a size. Now let's find the suitable API */
2319 if ((ret = disk_find_type(d, st.st_rdev)) < 0)
2320 goto fail;
2321
2322 if (d->type == SK_DISK_TYPE_UNKNOWN) {
2559 if (d->type == SK_DISK_TYPE_AUTO)
2560 if ((ret = disk_find_type(d, st.st_rdev)) < 0)
2561 goto fail;
2562
2563 if (d->type == SK_DISK_TYPE_AUTO) {
23232564 /* We have no clue, so let's autotest for a working API */
23242565 for (d->type = 0; d->type < _SK_DISK_TYPE_TEST_MAX; d->type++)
23252566 if (disk_identify_device(d) >= 0)
23262567 break;
23272568 if (d->type >= _SK_DISK_TYPE_TEST_MAX)
2328 d->type = SK_DISK_TYPE_UNKNOWN;
2569 d->type = SK_DISK_TYPE_NONE;
23292570 } else
23302571 disk_identify_device(d);
23312572
156156 SkBool prefailure:1;
157157
158158 /* Volatile data */
159 SkBool good:1, good_valid:1;
159 SkBool good_now:1, good_now_valid:1;
160 SkBool good_in_the_past:1, good_in_the_past_valid:1;
160161 SkBool current_value_valid:1, worst_value_valid:1;
162 SkBool warn:1;
161163 uint8_t current_value, worst_value;
162164 uint64_t pretty_value;
163165 uint8_t raw[6];
170172
171173 typedef enum SkSmartOverall {
172174 SK_SMART_OVERALL_GOOD,
173 SK_SMART_OVERALL_BAD_STATUS, /* Smart Self Assessment negative */
174 SK_SMART_OVERALL_BAD_SECTOR, /* At least one bad sector */
175 SK_SMART_OVERALL_BAD_ATTRIBUTE, /* At least one pre-fail attribute exceeded its threshold in the past or now */
175 SK_SMART_OVERALL_BAD_ATTRIBUTE_IN_THE_PAST, /* At least one pre-fail attribute exceeded its threshold in the past */
176 SK_SMART_OVERALL_BAD_SECTOR, /* At least one bad sector */
177 SK_SMART_OVERALL_BAD_ATTRIBUTE_NOW, /* At least one pre-fail attribute is exceeding its threshold now */
178 SK_SMART_OVERALL_BAD_SECTOR_MANY, /* Many bad sectors */
179 SK_SMART_OVERALL_BAD_STATUS, /* Smart Self Assessment negative */
176180 _SK_SMART_OVERALL_MAX
177181
178182 /* This enum may be extended at any time without this being
0 /* Saved 96 relocations, saved 2 strings (19 b) due to suffix compression. */
0 /* Saved 109 relocations, saved 2 strings (19 b) due to suffix compression. */
11 static const char _strpool_[] =
22 "16 Byte SCSI ATA SAT Passthru\0"
33 "12 Byte SCSI ATA SAT Passthru\0"
4 "Native Linux ATA\0"
4 "Native Linux IDE\0"
55 "Sunplus SCSI ATA Passthru\0"
66 "JMicron SCSI ATA Passthru\0"
77 "Blob\0"
8 "Unknown\0"
8 "Automatic\0"
9 "None\0"
10 "sat16\0"
11 "sat12\0"
12 "linux-ide\0"
13 "sunplus\0"
14 "jmicron\0"
15 "none\0"
16 "auto\0"
917 "Off-line data collection activity was never started.\0"
1018 "Off-line data collection activity was completed without error.\0"
1119 "Off-line activity in progress.\0"
8189 "194_UNKNOWN\0"
8290 "200_WRITEERRORCOUNT\0"
8391 "201_DETECTEDTACOUNT\0"
92 "5_UNKNOWN\0"
8493 "9_UNKNOWN\0"
94 "197_UNKNOWN\0"
95 "198_UNKNOWN\0"
8596 "power-on-minutes\0"
8697 "power-on-seconds\0"
8798 "power-on-half-minutes\0"
95106 "sectors\0"
96107 "mK\0"
97108 "GOOD\0"
98 "BAD_STATUS\0"
99 "BAD_ATTRIBUTE\0"
100 "BAD_SECTOR\0";
109 "BAD_ATTRIBUTE_IN_THE_PAST\0"
110 "BAD_SECTOR\0"
111 "BAD_ATTRIBUTE_NOW\0"
112 "BAD_SECTOR_MANY\0"
113 "BAD_STATUS\0";
101114 #ifndef STRPOOL
102115 #define STRPOOL
103116 #endif
172185 /* These three will be autotested for: */
173186 SK_DISK_TYPE_ATA_PASSTHROUGH_12, /* ATA passthrough over SCSI transport, 12-byte version */
174187 SK_DISK_TYPE_ATA_PASSTHROUGH_16, /* ATA passthrough over SCSI transport, 16-byte version */
175 SK_DISK_TYPE_ATA, /* Classic Linux /dev/hda ioctls */
188 SK_DISK_TYPE_LINUX_IDE, /* Classic Linux /dev/hda ioctls */
176189
177190 /* These three will not be autotested for */
178191 SK_DISK_TYPE_SUNPLUS, /* SunPlus USB/ATA bridges */
179192 SK_DISK_TYPE_JMICRON, /* JMicron USB/ATA bridges */
180 SK_DISK_TYPE_BLOB,
181 SK_DISK_TYPE_UNKNOWN,
193 SK_DISK_TYPE_BLOB, /* From a file */
194 SK_DISK_TYPE_NONE, /* No access method */
195 SK_DISK_TYPE_AUTO, /* We don't know yet */
182196 _SK_DISK_TYPE_MAX,
183197 _SK_DISK_TYPE_TEST_MAX = SK_DISK_TYPE_SUNPLUS /* only auto test until here */
184198 } SkDiskType;
222236 SkBool blob_smart_status:1;
223237 SkBool blob_smart_status_valid:1;
224238
239 SkBool attribute_verification_bad:1;
240
225241 SkIdentifyParsedData identify_parsed_data;
226242 SkSmartParsedData smart_parsed_data;
227243
246262 SK_SMART_COMMAND_RETURN_STATUS = 0xDA
247263 } SkSmartCommand;
248264
249 static const char *disk_type_to_string(SkDiskType type) {
265 /* Hmm, if the data we parse is out of a certain range just consider it misparsed */
266 #define SK_MKELVIN_VALID_MIN ((uint64_t) ((-15LL*1000LL) + 273150LL))
267 #define SK_MKELVIN_VALID_MAX ((uint64_t) ((100LL*1000LL) + 273150LL))
268
269 #define SK_MSECOND_VALID_MIN 1ULL
270 #define SK_MSECOND_VALID_SHORT_MAX (60ULL * 60ULL * 1000ULL)
271 #define SK_MSECOND_VALID_LONG_MAX (30ULL * 365ULL * 24ULL * 60ULL * 60ULL * 1000ULL)
272
273 static const char *disk_type_to_human_string(SkDiskType type) {
250274
251275 /* %STRINGPOOLSTART% */
252276 static const char* const map[_SK_DISK_TYPE_MAX] = {
253277 [SK_DISK_TYPE_ATA_PASSTHROUGH_16] = ((const char*) 1),
254278 [SK_DISK_TYPE_ATA_PASSTHROUGH_12] = ((const char*) 31),
255 [SK_DISK_TYPE_ATA] = ((const char*) 61),
279 [SK_DISK_TYPE_LINUX_IDE] = ((const char*) 61),
256280 [SK_DISK_TYPE_SUNPLUS] = ((const char*) 78),
257281 [SK_DISK_TYPE_JMICRON] = ((const char*) 104),
258282 [SK_DISK_TYPE_BLOB] = ((const char*) 130),
259 [SK_DISK_TYPE_UNKNOWN] = ((const char*) 135)
283 [SK_DISK_TYPE_AUTO] = ((const char*) 135),
284 [SK_DISK_TYPE_NONE] = ((const char*) 145)
260285 };
261286 /* %STRINGPOOLSTOP% */
262287
266291 return _P(map[type]);
267292 }
268293
294 static const char *disk_type_to_prefix_string(SkDiskType type) {
295
296 /* %STRINGPOOLSTART% */
297 static const char* const map[_SK_DISK_TYPE_MAX] = {
298 [SK_DISK_TYPE_ATA_PASSTHROUGH_16] = ((const char*) 150),
299 [SK_DISK_TYPE_ATA_PASSTHROUGH_12] = ((const char*) 156),
300 [SK_DISK_TYPE_LINUX_IDE] = ((const char*) 162),
301 [SK_DISK_TYPE_SUNPLUS] = ((const char*) 172),
302 [SK_DISK_TYPE_JMICRON] = ((const char*) 180),
303 [SK_DISK_TYPE_NONE] = ((const char*) 188),
304 [SK_DISK_TYPE_AUTO] = ((const char*) 193),
305 };
306 /* %STRINGPOOLSTOP% */
307
308 if (type >= _SK_DISK_TYPE_MAX)
309 return NULL;
310
311 return _P(map[type]);
312 }
313
314 static const char *disk_type_from_string(const char *s, SkDiskType *type) {
315 unsigned u;
316
317 assert(s);
318 assert(type);
319
320 for (u = 0; u < _SK_DISK_TYPE_MAX; u++) {
321 const char *t;
322 size_t l;
323
324 if (!(t = disk_type_to_prefix_string(u)))
325 continue;
326
327 l = strlen(t);
328
329 if (strncmp(s, t, l))
330 continue;
331
332 if (s[l] != ':')
333 continue;
334
335 *type = u;
336
337 return s + l + 1;
338 }
339
340 return NULL;
341 }
342
269343 static SkBool disk_smart_is_available(SkDisk *d) {
270344 return d->identify_valid && !!(d->identify[164] & 1);
271345 }
297371 return !!(d->smart_data[367] & 41);
298372 }
299373
300 static int disk_ata_command(SkDisk *d, SkAtaCommand command, SkDirection direction, void* cmd_data, void* data, size_t *len) {
374 static int disk_linux_ide_command(SkDisk *d, SkAtaCommand command, SkDirection direction, void* cmd_data, void* data, size_t *len) {
301375 uint8_t *bytes = cmd_data;
302376 int ret;
303377
304 assert(d->type == SK_DISK_TYPE_ATA);
378 assert(d->type == SK_DISK_TYPE_LINUX_IDE);
305379
306380 switch (direction) {
307381
742816 static int disk_command(SkDisk *d, SkAtaCommand command, SkDirection direction, void* cmd_data, void* data, size_t *len) {
743817
744818 static int (* const disk_command_table[_SK_DISK_TYPE_MAX]) (SkDisk *d, SkAtaCommand command, SkDirection direction, void* cmd_data, void* data, size_t *len) = {
745 [SK_DISK_TYPE_ATA] = disk_ata_command,
819 [SK_DISK_TYPE_LINUX_IDE] = disk_linux_ide_command,
746820 [SK_DISK_TYPE_ATA_PASSTHROUGH_12] = disk_passthrough_12_command,
747821 [SK_DISK_TYPE_ATA_PASSTHROUGH_16] = disk_passthrough_16_command,
748822 [SK_DISK_TYPE_SUNPLUS] = disk_sunplus_command,
749823 [SK_DISK_TYPE_JMICRON] = disk_jmicron_command,
750824 [SK_DISK_TYPE_BLOB] = NULL,
751 [SK_DISK_TYPE_UNKNOWN] = NULL
825 [SK_DISK_TYPE_AUTO] = NULL,
826 [SK_DISK_TYPE_NONE] = NULL
752827 };
753828
754829 assert(d);
11101185
11111186 /* %STRINGPOOLSTART% */
11121187 static const char* const map[] = {
1113 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_NEVER] = ((const char*) 143),
1114 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_SUCCESS] = ((const char*) 196),
1115 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_INPROGRESS] = ((const char*) 259),
1116 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_SUSPENDED] = ((const char*) 290),
1117 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_ABORTED] = ((const char*) 376),
1118 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_FATAL] = ((const char*) 460),
1119 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_UNKNOWN] = ((const char*) 540)
1188 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_NEVER] = ((const char*) 198),
1189 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_SUCCESS] = ((const char*) 251),
1190 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_INPROGRESS] = ((const char*) 314),
1191 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_SUSPENDED] = ((const char*) 345),
1192 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_ABORTED] = ((const char*) 431),
1193 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_FATAL] = ((const char*) 515),
1194 [SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_UNKNOWN] = ((const char*) 595)
11201195 };
11211196 /* %STRINGPOOLSTOP% */
11221197
11301205
11311206 /* %STRINGPOOLSTART% */
11321207 static const char* const map[] = {
1133 [SK_SMART_SELF_TEST_EXECUTION_STATUS_SUCCESS_OR_NEVER] = ((const char*) 555),
1134 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ABORTED] = ((const char*) 645),
1135 [SK_SMART_SELF_TEST_EXECUTION_STATUS_INTERRUPTED] = ((const char*) 692),
1136 [SK_SMART_SELF_TEST_EXECUTION_STATUS_FATAL] = ((const char*) 777),
1137 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_UNKNOWN] = ((const char*) 936),
1138 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_ELECTRICAL] = ((const char*) 1037),
1139 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_SERVO] = ((const char*) 1120),
1140 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_READ] = ((const char*) 1217),
1141 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_HANDLING] = ((const char*) 1294),
1142 [SK_SMART_SELF_TEST_EXECUTION_STATUS_INPROGRESS] = ((const char*) 1416)
1208 [SK_SMART_SELF_TEST_EXECUTION_STATUS_SUCCESS_OR_NEVER] = ((const char*) 610),
1209 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ABORTED] = ((const char*) 700),
1210 [SK_SMART_SELF_TEST_EXECUTION_STATUS_INTERRUPTED] = ((const char*) 747),
1211 [SK_SMART_SELF_TEST_EXECUTION_STATUS_FATAL] = ((const char*) 832),
1212 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_UNKNOWN] = ((const char*) 991),
1213 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_ELECTRICAL] = ((const char*) 1092),
1214 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_SERVO] = ((const char*) 1175),
1215 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_READ] = ((const char*) 1272),
1216 [SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_HANDLING] = ((const char*) 1349),
1217 [SK_SMART_SELF_TEST_EXECUTION_STATUS_INPROGRESS] = ((const char*) 1471)
11431218 };
11441219 /* %STRINGPOOLSTOP% */
11451220
12281303 else if (!strcmp(a->name, "temperature-centi-celsius"))
12291304 a->pretty_value = (fourtyeight & 0xFFFF)*100 + 273150;
12301305 else if (!strcmp(a->name, "power-on-minutes"))
1231 a->pretty_value = (((uint64_t) a->raw[0]) | (uint64_t) a->raw[1]) * 60 * 1000;
1306 a->pretty_value = fourtyeight * 60 * 1000;
12321307 else if (!strcmp(a->name, "power-on-seconds"))
12331308 a->pretty_value = fourtyeight * 1000;
12341309 else if (!strcmp(a->name, "power-on-half-minutes"))
12361311 else if (!strcmp(a->name, "power-on-hours") ||
12371312 !strcmp(a->name, "loaded-hours") ||
12381313 !strcmp(a->name, "head-flying-hours"))
1239 a->pretty_value = fourtyeight * 60 * 60 * 1000;
1240 else if (!strcmp(a->name, "reallocated-sector-count"))
1314 a->pretty_value = (fourtyeight & 0xFFFFFFFFU) * 60 * 60 * 1000;
1315 else if (!strcmp(a->name, "reallocated-sector-count") ||
1316 !strcmp(a->name, "current-pending-sector"))
12411317 a->pretty_value = fourtyeight & 0xFFFFFFFFU;
12421318 else
12431319 a->pretty_value = fourtyeight;
12441320 }
12451321
1322 typedef void (*SkSmartAttributeVerify)(SkDisk *d, SkSmartAttributeParsedData *a);
1323
12461324 typedef struct SkSmartAttributeInfo {
12471325 const char *name;
12481326 SkSmartAttributeUnit unit;
1327 SkSmartAttributeVerify verify;
12491328 } SkSmartAttributeInfo;
1329
1330 static void verify_temperature(SkDisk *d, SkSmartAttributeParsedData *a) {
1331 assert(a);
1332 assert(a->pretty_unit == SK_SMART_ATTRIBUTE_UNIT_MKELVIN);
1333
1334 if (a->pretty_value < SK_MKELVIN_VALID_MIN ||
1335 a->pretty_value > SK_MKELVIN_VALID_MAX) {
1336 a->pretty_unit = SK_SMART_ATTRIBUTE_UNIT_UNKNOWN;
1337 d->attribute_verification_bad = TRUE;
1338 }
1339 }
1340
1341 static void verify_short_time(SkDisk *d, SkSmartAttributeParsedData *a) {
1342 assert(a);
1343 assert(a->pretty_unit == SK_SMART_ATTRIBUTE_UNIT_MSECONDS);
1344
1345 if (a->pretty_value < SK_MSECOND_VALID_MIN ||
1346 a->pretty_value > SK_MSECOND_VALID_SHORT_MAX) {
1347 a->pretty_unit = SK_SMART_ATTRIBUTE_UNIT_UNKNOWN;
1348 d->attribute_verification_bad = TRUE;
1349 }
1350 }
1351
1352 static void verify_long_time(SkDisk *d, SkSmartAttributeParsedData *a) {
1353 assert(a);
1354 assert(a->pretty_unit == SK_SMART_ATTRIBUTE_UNIT_MSECONDS);
1355
1356 if (a->pretty_value < SK_MSECOND_VALID_MIN ||
1357 a->pretty_value > SK_MSECOND_VALID_LONG_MAX) {
1358 a->pretty_unit = SK_SMART_ATTRIBUTE_UNIT_UNKNOWN;
1359 d->attribute_verification_bad = TRUE;
1360 }
1361 }
1362
1363 static void verify_sectors(SkDisk *d, SkSmartAttributeParsedData *a) {
1364 uint64_t max_sectors;
1365
1366 assert(d);
1367 assert(a);
1368 assert(a->pretty_unit == SK_SMART_ATTRIBUTE_UNIT_SECTORS);
1369
1370 max_sectors = d->size / 512ULL;
1371
1372 if (max_sectors > 0 && a->pretty_value > max_sectors) {
1373 a->pretty_value = SK_SMART_ATTRIBUTE_UNIT_UNKNOWN;
1374 d->attribute_verification_bad = TRUE;
1375 } else {
1376 if ((!strcmp(a->name, "reallocated-sector-count") ||
1377 !strcmp(a->name, "current-pending-sector")) &&
1378 a->pretty_value > 0)
1379 a->warn = TRUE;
1380 }
1381 }
12501382
12511383 /* This data is stolen from smartmontools */
12521384
12531385 /* %STRINGPOOLSTART% */
12541386 static const SkSmartAttributeInfo const attribute_info[256] = {
1255 [1] = { ((const char*) 1446), SK_SMART_ATTRIBUTE_UNIT_NONE },
1256 [2] = { ((const char*) 1466), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1257 [3] = { ((const char*) 1489), SK_SMART_ATTRIBUTE_UNIT_MSECONDS },
1258 [4] = { ((const char*) 1502), SK_SMART_ATTRIBUTE_UNIT_NONE },
1259 [5] = { ((const char*) 1519), SK_SMART_ATTRIBUTE_UNIT_SECTORS },
1260 [6] = { ((const char*) 1544), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1261 [7] = { ((const char*) 1564), SK_SMART_ATTRIBUTE_UNIT_NONE },
1262 [8] = { ((const char*) 1580), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1263 [9] = { ((const char*) 1602), SK_SMART_ATTRIBUTE_UNIT_MSECONDS },
1264 [10] = { ((const char*) 1617), SK_SMART_ATTRIBUTE_UNIT_NONE },
1265 [11] = { ((const char*) 1634), SK_SMART_ATTRIBUTE_UNIT_NONE },
1266 [12] = { ((const char*) 1658), SK_SMART_ATTRIBUTE_UNIT_NONE },
1267 [13] = { ((const char*) 1676), SK_SMART_ATTRIBUTE_UNIT_NONE },
1268 [187] = { ((const char*) 1697), SK_SMART_ATTRIBUTE_UNIT_SECTORS },
1269 [189] = { ((const char*) 1716), SK_SMART_ATTRIBUTE_UNIT_NONE },
1270 [190] = { ((const char*) 1732), SK_SMART_ATTRIBUTE_UNIT_MKELVIN },
1271 [191] = { ((const char*) 1760), SK_SMART_ATTRIBUTE_UNIT_NONE },
1272 [192] = { ((const char*) 1779), SK_SMART_ATTRIBUTE_UNIT_NONE },
1273 [193] = { ((const char*) 1803), SK_SMART_ATTRIBUTE_UNIT_NONE },
1274 [194] = { ((const char*) 1820), SK_SMART_ATTRIBUTE_UNIT_MKELVIN },
1275 [195] = { ((const char*) 1842), SK_SMART_ATTRIBUTE_UNIT_NONE },
1276 [196] = { ((const char*) 1865), SK_SMART_ATTRIBUTE_UNIT_NONE },
1277 [197] = { ((const char*) 1889), SK_SMART_ATTRIBUTE_UNIT_SECTORS },
1278 [198] = { ((const char*) 1912), SK_SMART_ATTRIBUTE_UNIT_SECTORS },
1279 [199] = { ((const char*) 1934), SK_SMART_ATTRIBUTE_UNIT_NONE },
1280 [200] = { ((const char*) 1955), SK_SMART_ATTRIBUTE_UNIT_NONE },
1281 [201] = { ((const char*) 1977), SK_SMART_ATTRIBUTE_UNIT_NONE },
1282 [202] = { ((const char*) 1998), SK_SMART_ATTRIBUTE_UNIT_NONE },
1283 [203] = { ((const char*) 2016), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1284 [204] = { ((const char*) 2031), SK_SMART_ATTRIBUTE_UNIT_NONE },
1285 [205] = { ((const char*) 2054), SK_SMART_ATTRIBUTE_UNIT_NONE },
1286 [206] = { ((const char*) 2076), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1287 [207] = { ((const char*) 2090), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1288 [208] = { ((const char*) 2108), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN},
1289 [209] = { ((const char*) 2118), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1290 [220] = { ((const char*) 2143), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1291 [221] = { ((const char*) 2154), SK_SMART_ATTRIBUTE_UNIT_NONE },
1292 [222] = { ((const char*) 2175), SK_SMART_ATTRIBUTE_UNIT_MSECONDS },
1293 [223] = { ((const char*) 2188), SK_SMART_ATTRIBUTE_UNIT_NONE },
1294 [224] = { ((const char*) 2205), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1295 [225] = { ((const char*) 2219), SK_SMART_ATTRIBUTE_UNIT_NONE },
1296 [226] = { ((const char*) 2238), SK_SMART_ATTRIBUTE_UNIT_MSECONDS },
1297 [227] = { ((const char*) 2251), SK_SMART_ATTRIBUTE_UNIT_NONE },
1298 [228] = { ((const char*) 2266), SK_SMART_ATTRIBUTE_UNIT_NONE },
1299 [230] = { ((const char*) 2292), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN },
1300 [231] = { ((const char*) 1740), SK_SMART_ATTRIBUTE_UNIT_MKELVIN },
1301 [240] = { ((const char*) 2307), SK_SMART_ATTRIBUTE_UNIT_MSECONDS },
1302 [250] = { ((const char*) 2325), SK_SMART_ATTRIBUTE_UNIT_NONE }
1387 [1] = { ((const char*) 1501), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1388 [2] = { ((const char*) 1521), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1389 [3] = { ((const char*) 1544), SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_short_time },
1390 [4] = { ((const char*) 1557), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1391 [5] = { ((const char*) 1574), SK_SMART_ATTRIBUTE_UNIT_SECTORS, verify_sectors },
1392 [6] = { ((const char*) 1599), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1393 [7] = { ((const char*) 1619), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1394 [8] = { ((const char*) 1635), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1395 [9] = { ((const char*) 1657), SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time },
1396 [10] = { ((const char*) 1672), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1397 [11] = { ((const char*) 1689), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1398 [12] = { ((const char*) 1713), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1399 [13] = { ((const char*) 1731), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1400 [187] = { ((const char*) 1752), SK_SMART_ATTRIBUTE_UNIT_SECTORS, verify_sectors },
1401 [189] = { ((const char*) 1771), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1402 [190] = { ((const char*) 1787), SK_SMART_ATTRIBUTE_UNIT_MKELVIN, verify_temperature },
1403 [191] = { ((const char*) 1815), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1404 [192] = { ((const char*) 1834), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1405 [193] = { ((const char*) 1858), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1406 [194] = { ((const char*) 1875), SK_SMART_ATTRIBUTE_UNIT_MKELVIN, verify_temperature },
1407 [195] = { ((const char*) 1897), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1408 [196] = { ((const char*) 1920), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1409 [197] = { ((const char*) 1944), SK_SMART_ATTRIBUTE_UNIT_SECTORS, verify_sectors },
1410 [198] = { ((const char*) 1967), SK_SMART_ATTRIBUTE_UNIT_SECTORS, verify_sectors },
1411 [199] = { ((const char*) 1989), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1412 [200] = { ((const char*) 2010), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1413 [201] = { ((const char*) 2032), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1414 [202] = { ((const char*) 2053), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1415 [203] = { ((const char*) 2071), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1416 [204] = { ((const char*) 2086), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1417 [205] = { ((const char*) 2109), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1418 [206] = { ((const char*) 2131), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1419 [207] = { ((const char*) 2145), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1420 [208] = { ((const char*) 2163), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1421 [209] = { ((const char*) 2173), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1422 [220] = { ((const char*) 2198), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1423 [221] = { ((const char*) 2209), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1424 [222] = { ((const char*) 2230), SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time },
1425 [223] = { ((const char*) 2243), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1426 [224] = { ((const char*) 2260), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1427 [225] = { ((const char*) 2274), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1428 [226] = { ((const char*) 2293), SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_short_time },
1429 [227] = { ((const char*) 2306), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1430 [228] = { ((const char*) 2321), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL },
1431 [230] = { ((const char*) 2347), SK_SMART_ATTRIBUTE_UNIT_UNKNOWN, NULL },
1432 [231] = { ((const char*) 1795), SK_SMART_ATTRIBUTE_UNIT_MKELVIN, verify_temperature },
1433 [240] = { ((const char*) 2362), SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time },
1434 [250] = { ((const char*) 2380), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL }
13031435 };
13041436 /* %STRINGPOOLSTOP% */
13051437
13061438 typedef enum SkSmartQuirk {
1307 SK_SMART_QUIRK_9_POWERONMINUTES = 1,
1308 SK_SMART_QUIRK_9_POWERONSECONDS = 2,
1309 SK_SMART_QUIRK_9_POWERONHALFMINUTES = 4,
1310 SK_SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT = 8,
1311 SK_SMART_QUIRK_193_LOADUNLOAD = 16,
1312 SK_SMART_QUIRK_194_10XCELSIUS = 32,
1313 SK_SMART_QUIRK_194_UNKNOWN = 64,
1314 SK_SMART_QUIRK_200_WRITEERRORCOUNT = 128,
1315 SK_SMART_QUIRK_201_DETECTEDTACOUNT = 256,
1316 SK_SMART_QUIRK_9_UNKNOWN = 512
1439 SK_SMART_QUIRK_9_POWERONMINUTES = 0x0001,
1440 SK_SMART_QUIRK_9_POWERONSECONDS = 0x0002,
1441 SK_SMART_QUIRK_9_POWERONHALFMINUTES = 0x0004,
1442 SK_SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT = 0x0008,
1443 SK_SMART_QUIRK_193_LOADUNLOAD = 0x0010,
1444 SK_SMART_QUIRK_194_10XCELSIUS = 0x0020,
1445 SK_SMART_QUIRK_194_UNKNOWN = 0x0040,
1446 SK_SMART_QUIRK_200_WRITEERRORCOUNT = 0x0080,
1447 SK_SMART_QUIRK_201_DETECTEDTACOUNT = 0x0100,
1448 SK_SMART_QUIRK_5_UNKNOWN = 0x0200,
1449 SK_SMART_QUIRK_9_UNKNOWN = 0x0400,
1450 SK_SMART_QUIRK_197_UNKNOWN = 0x0800,
1451 SK_SMART_QUIRK_198_UNKNOWN = 0x1000,
13171452 } SkSmartQuirk;
13181453
13191454 /* %STRINGPOOLSTART% */
13201455 static const char *quirk_name[] = {
1321 ((const char*) 2347),
1322 ((const char*) 2364),
1323 ((const char*) 2381),
13241456 ((const char*) 2402),
1325 ((const char*) 2430),
1326 ((const char*) 2445),
1327 ((const char*) 2460),
1328 ((const char*) 2472),
1329 ((const char*) 2492),
1330 ((const char*) 2512),
1457 ((const char*) 2419),
1458 ((const char*) 2436),
1459 ((const char*) 2457),
1460 ((const char*) 2485),
1461 ((const char*) 2500),
1462 ((const char*) 2515),
1463 ((const char*) 2527),
1464 ((const char*) 2547),
1465 ((const char*) 2567),
1466 ((const char*) 2577),
1467 ((const char*) 2587),
1468 ((const char*) 2599),
13311469 NULL
13321470 };
13331471 /* %STRINGPOOLSTOP% */
13401478
13411479 static const SkSmartQuirkDatabase quirk_database[] = { {
13421480
1343 /*** Seagate */
1344 "^ST9160821AS$",
1345 NULL,
1346 SK_SMART_QUIRK_9_UNKNOWN
1481 /*** Fujitsu */
1482 "^("
1483 "FUJITSU MHY2120BH|"
1484 "FUJITSU MHY2250BH"
1485 ")$",
1486 "^0085000B$", /* seems to be specific to this firmware */
1487 SK_SMART_QUIRK_9_POWERONMINUTES|
1488 SK_SMART_QUIRK_197_UNKNOWN|
1489 SK_SMART_QUIRK_198_UNKNOWN
13471490 }, {
1348
1349 /*** Fujitsu */
13501491 "^FUJITSU MHR2040AT$",
13511492 NULL,
13521493 SK_SMART_QUIRK_9_POWERONSECONDS|
14651606 SK_SMART_QUIRK_9_POWERONMINUTES|
14661607 SK_SMART_QUIRK_193_LOADUNLOAD
14671608 }, {
1468
1609 "^HTS541010G9SA00$",
1610 "^MBZOC60P$",
1611 SK_SMART_QUIRK_5_UNKNOWN
1612 }, {
14691613 NULL,
14701614 NULL,
14711615 0
15481692 if (quirk) {
15491693 switch (id) {
15501694
1695 case 5:
1696 if (quirk & SK_SMART_QUIRK_5_UNKNOWN)
1697 return NULL;
1698
1699 break;
1700
15511701 case 9:
15521702 /* %STRINGPOOLSTART% */
15531703 if (quirk & SK_SMART_QUIRK_9_POWERONMINUTES) {
15541704 static const SkSmartAttributeInfo a = {
1555 ((const char*) 2522), SK_SMART_ATTRIBUTE_UNIT_MSECONDS
1705 ((const char*) 2611), SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time
15561706 };
15571707 return &a;
15581708
15591709 } else if (quirk & SK_SMART_QUIRK_9_POWERONSECONDS) {
15601710 static const SkSmartAttributeInfo a = {
1561 ((const char*) 2539), SK_SMART_ATTRIBUTE_UNIT_MSECONDS
1711 ((const char*) 2628), SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time
15621712 };
15631713 return &a;
15641714
15651715 } else if (quirk & SK_SMART_QUIRK_9_POWERONHALFMINUTES) {
15661716 static const SkSmartAttributeInfo a = {
1567 ((const char*) 2556), SK_SMART_ATTRIBUTE_UNIT_MSECONDS
1717 ((const char*) 2645), SK_SMART_ATTRIBUTE_UNIT_MSECONDS, verify_long_time
15681718 };
15691719 return &a;
15701720 } else if (quirk & SK_SMART_QUIRK_9_UNKNOWN)
15771727 /* %STRINGPOOLSTART% */
15781728 if (quirk & SK_SMART_QUIRK_192_EMERGENCYRETRACTCYCLECT) {
15791729 static const SkSmartAttributeInfo a = {
1580 ((const char*) 2578), SK_SMART_ATTRIBUTE_UNIT_NONE
1730 ((const char*) 2667), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL
15811731 };
15821732 return &a;
15831733 }
15891739 /* %STRINGPOOLSTART% */
15901740 if (quirk & SK_SMART_QUIRK_194_10XCELSIUS) {
15911741 static const SkSmartAttributeInfo a = {
1592 ((const char*) 2608), SK_SMART_ATTRIBUTE_UNIT_MKELVIN
1742 ((const char*) 2697), SK_SMART_ATTRIBUTE_UNIT_MKELVIN, verify_temperature
15931743 };
15941744 return &a;
15951745 } else if (quirk & SK_SMART_QUIRK_194_UNKNOWN)
15981748
15991749 break;
16001750
1751 case 197:
1752 if (quirk & SK_SMART_QUIRK_197_UNKNOWN)
1753 return NULL;
1754
1755 break;
1756
1757 case 198:
1758 if (quirk & SK_SMART_QUIRK_198_UNKNOWN)
1759 return NULL;
1760
1761 break;
1762
16011763 case 200:
16021764 /* %STRINGPOOLSTART% */
16031765 if (quirk & SK_SMART_QUIRK_200_WRITEERRORCOUNT) {
16041766 static const SkSmartAttributeInfo a = {
1605 ((const char*) 2634), SK_SMART_ATTRIBUTE_UNIT_NONE
1767 ((const char*) 2723), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL
16061768 };
16071769 return &a;
16081770 }
16141776 /* %STRINGPOOLSTART% */
16151777 if (quirk & SK_SMART_QUIRK_201_DETECTEDTACOUNT) {
16161778 static const SkSmartAttributeInfo a = {
1617 ((const char*) 2652), SK_SMART_ATTRIBUTE_UNIT_NONE
1779 ((const char*) 2741), SK_SMART_ATTRIBUTE_UNIT_NONE, NULL
16181780 };
16191781 return &a;
16201782 }
16961858 uint8_t *p;
16971859 unsigned n;
16981860
1699 if (!d->smart_thresholds_valid) {
1700 a->threshold_valid = FALSE;
1701 return;
1702 }
1861 if (!d->smart_thresholds_valid)
1862 goto fail;
17031863
17041864 for (n = 0, p = d->smart_thresholds+2; n < 30; n++, p+=12)
17051865 if (p[0] == a->id)
17061866 break;
17071867
1708 if (n >= 30) {
1709 a->threshold_valid = FALSE;
1710 a->good_valid = FALSE;
1711 return;
1712 }
1868 if (n >= 30)
1869 goto fail;
17131870
17141871 a->threshold = p[1];
17151872 a->threshold_valid = p[1] != 0xFE;
17161873
1717 a->good_valid = FALSE;
1718 a->good = TRUE;
1874 a->good_now_valid = FALSE;
1875 a->good_now = TRUE;
1876 a->good_in_the_past_valid = FALSE;
1877 a->good_in_the_past = TRUE;
17191878
17201879 /* Always-Fail and Always-Passing thresholds are not relevant
17211880 * for our assessment. */
17221881 if (p[1] >= 1 && p[1] <= 0xFD) {
17231882
17241883 if (a->worst_value_valid) {
1725 a->good = a->good && (a->worst_value > a->threshold);
1726 a->good_valid = TRUE;
1884 a->good_in_the_past = a->good_in_the_past && (a->worst_value > a->threshold);
1885 a->good_in_the_past_valid = TRUE;
17271886 }
17281887
17291888 if (a->current_value_valid) {
1730 a->good = a->good && (a->current_value > a->threshold);
1731 a->good_valid = TRUE;
1889 a->good_now = a->good_now && (a->current_value > a->threshold);
1890 a->good_now_valid = TRUE;
17321891 }
17331892 }
1893
1894 a->warn =
1895 (a->good_now_valid && !a->good_now) ||
1896 (a->good_in_the_past_valid && !a->good_in_the_past);
1897
1898 return;
1899
1900 fail:
1901 a->threshold_valid = FALSE;
1902 a->good_now_valid = FALSE;
1903 a->good_in_the_past_valid = FALSE;
1904 a->warn = FALSE;
17341905 }
17351906
17361907 int sk_disk_smart_parse_attributes(SkDisk *d, SkSmartAttributeParseCallback cb, void* userdata) {
17801951
17811952 find_threshold(d, &a);
17821953
1783 /* Handle a few fields specially */
1784 if ((!strcmp(a.name, "reallocated-sector-count") ||
1785 !strcmp(a.name, "current-pending-sector")) &&
1786 a.pretty_unit == SK_SMART_ATTRIBUTE_UNIT_SECTORS &&
1787 a.pretty_value > 0) {
1788 a.good = FALSE;
1789 a.good_valid = TRUE;
1790 }
1954 if (i && i->verify)
1955 i->verify(d, &a);
17911956
17921957 cb(d, &a, userdata);
17931958 free(an);
18061971 const char * const map[] = {
18071972 [SK_SMART_ATTRIBUTE_UNIT_UNKNOWN] = NULL,
18081973 [SK_SMART_ATTRIBUTE_UNIT_NONE] = ((const char*) 30),
1809 [SK_SMART_ATTRIBUTE_UNIT_MSECONDS] = ((const char*) 2670),
1810 [SK_SMART_ATTRIBUTE_UNIT_SECTORS] = ((const char*) 2673),
1811 [SK_SMART_ATTRIBUTE_UNIT_MKELVIN] = ((const char*) 2681)
1974 [SK_SMART_ATTRIBUTE_UNIT_MSECONDS] = ((const char*) 2759),
1975 [SK_SMART_ATTRIBUTE_UNIT_SECTORS] = ((const char*) 2762),
1976 [SK_SMART_ATTRIBUTE_UNIT_MKELVIN] = ((const char*) 2770)
18121977 };
18131978 /* %STRINGPOOLSTOP% */
18141979
19972162
19982163 /* %STRINGPOOLSTART% */
19992164 const char * const map[] = {
2000 [SK_SMART_OVERALL_GOOD] = ((const char*) 2684),
2001 [SK_SMART_OVERALL_BAD_STATUS] = ((const char*) 2689),
2002 [SK_SMART_OVERALL_BAD_ATTRIBUTE] = ((const char*) 2700),
2003 [SK_SMART_OVERALL_BAD_SECTOR] = ((const char*) 2714)
2165 [SK_SMART_OVERALL_GOOD] = ((const char*) 2773),
2166 [SK_SMART_OVERALL_BAD_ATTRIBUTE_IN_THE_PAST] = ((const char*) 2778),
2167 [SK_SMART_OVERALL_BAD_SECTOR] = ((const char*) 2804),
2168 [SK_SMART_OVERALL_BAD_ATTRIBUTE_NOW] = ((const char*) 2815),
2169 [SK_SMART_OVERALL_BAD_SECTOR_MANY] = ((const char*) 2833),
2170 [SK_SMART_OVERALL_BAD_STATUS] = ((const char*) 2849),
20042171 };
20052172 /* %STRINGPOOLSTOP% */
20062173
20102177 return _P(map[overall]);
20112178 }
20122179
2013 static void bad_attribute_cb(SkDisk *d, const SkSmartAttributeParsedData *a, SkBool *good) {
2014 if (a->prefailure && a->good_valid && !a->good)
2180 static void bad_attribute_now_cb(SkDisk *d, const SkSmartAttributeParsedData *a, SkBool *good) {
2181 if (a->prefailure && a->good_now_valid && !a->good_now)
20152182 *good = FALSE;
2183 }
2184
2185 static void bad_attribute_in_the_past_cb(SkDisk *d, const SkSmartAttributeParsedData *a, SkBool *good) {
2186 if (a->prefailure && a->good_in_the_past_valid && !a->good_in_the_past)
2187 *good = FALSE;
2188 }
2189
2190 static uint64_t u64log2(uint64_t n) {
2191 unsigned r;
2192
2193 if (n <= 1)
2194 return 0;
2195
2196 r = 0;
2197 for (;;) {
2198 n = n >> 1;
2199 if (!n)
2200 return r;
2201 r++;
2202 }
20162203 }
20172204
20182205 int sk_disk_smart_get_overall(SkDisk *d, SkSmartOverall *overall) {
20192206 SkBool good;
2020 uint64_t sectors;
2207 uint64_t sectors, sector_threshold;
20212208
20222209 assert(d);
20232210 assert(overall);
20242211
2212 /* First, check SMART self-assesment */
20252213 if (sk_disk_smart_status(d, &good) < 0)
20262214 return -1;
20272215
20302218 return 0;
20312219 }
20322220
2221 /* Second, check if the number of bad sectors is greater than
2222 * a certain threshold */
20332223 if (sk_disk_smart_get_bad(d, &sectors) < 0) {
20342224 if (errno != ENOENT)
20352225 return -1;
2036 } else if (sectors > 0) {
2226 sectors = 0;
2227 } else {
2228
2229 /* We use log2(n_sectors) as a threshold here. We had to pick
2230 * something, and this makes a bit of sense, or doesn't it? */
2231 sector_threshold = u64log2(d->size/512);
2232
2233 if (sectors >= sector_threshold) {
2234 *overall = SK_SMART_OVERALL_BAD_SECTOR_MANY;
2235 return 0;
2236 }
2237 }
2238
2239 /* Third, check if any of the SMART attributes is bad */
2240 good = TRUE;
2241 if (sk_disk_smart_parse_attributes(d, (SkSmartAttributeParseCallback) bad_attribute_now_cb, &good) < 0)
2242 return -1;
2243
2244 if (!good) {
2245 *overall = SK_SMART_OVERALL_BAD_ATTRIBUTE_NOW;
2246 return 0;
2247 }
2248
2249 /* Fourth, check if there are any bad sectors at all */
2250 if (sectors > 0) {
20372251 *overall = SK_SMART_OVERALL_BAD_SECTOR;
20382252 return 0;
20392253 }
20402254
2255 /* Fifth, check if any of the SMART attributes ever was bad */
20412256 good = TRUE;
2042 if (sk_disk_smart_parse_attributes(d, (SkSmartAttributeParseCallback) bad_attribute_cb, &good) < 0)
2257 if (sk_disk_smart_parse_attributes(d, (SkSmartAttributeParseCallback) bad_attribute_in_the_past_cb, &good) < 0)
20432258 return -1;
20442259
20452260 if (!good) {
2046 *overall = SK_SMART_OVERALL_BAD_ATTRIBUTE;
2261 *overall = SK_SMART_OVERALL_BAD_ATTRIBUTE_IN_THE_PAST;
20472262 return 0;
20482263 }
20492264
2265 /* Sixth, there's really nothing to complain about, so give it a pass */
20502266 *overall = SK_SMART_OVERALL_GOOD;
20512267 return 0;
20522268 }
21262342 snprintf(tc, sizeof(tc), "%3u", a->current_value);
21272343 tc[sizeof(tc)-1] = 0;
21282344
2129 highlight = a->good_valid && !a->good && isatty(1);
2345 highlight = a->warn && isatty(1);
21302346
21312347 if (highlight)
21322348 fprintf(stderr, HIGHLIGHT);
21332349
2134 printf("%3u %-27s %-3s %-3s %-3s %-11s 0x%02x%02x%02x%02x%02x%02x %-7s %-7s %-3s\n",
2350 printf("%3u %-27s %-3s %-3s %-3s %-11s 0x%02x%02x%02x%02x%02x%02x %-7s %-7s %-4s %-4s\n",
21352351 a->id,
21362352 print_name(name, sizeof(name), a->id, a->name),
21372353 a->current_value_valid ? tc : "n/a",
21412357 a->raw[0], a->raw[1], a->raw[2], a->raw[3], a->raw[4], a->raw[5],
21422358 a->prefailure ? "prefail" : "old-age",
21432359 a->online ? "online" : "offline",
2144 a->good_valid ? yes_no(a->good) : "n/a");
2360 a->good_now_valid ? yes_no(a->good_now) : "n/a",
2361 a->good_in_the_past_valid ? yes_no(a->good_in_the_past) : "n/a");
21452362
21462363 if (highlight)
21472364 fprintf(stderr, ENDHIGHLIGHT);
21542371
21552372 assert(d);
21562373
2157 printf("Device: %s\n"
2374 printf("Device: %s%s%s\n"
21582375 "Type: %s\n",
2376 d->name ? disk_type_to_prefix_string(d->type) : "",
2377 d->name ? ":" : "",
21592378 d->name ? d->name : "n/a",
2160 disk_type_to_string(d->type));
2379 disk_type_to_human_string(d->type));
21612380
21622381 ret = sk_disk_get_size(d, &size);
21632382 if (ret >= 0)
21922411 printf(" %s", _P(quirk_name[i]));
21932412
21942413 printf("\n");
2195
21962414 }
21972415
21982416 ret = sk_disk_check_sleep_mode(d, &awake);
22072425 uint64_t value, power_on;
22082426
22092427 ret = sk_disk_smart_status(d, &good);
2210 printf("SMART Disk Health Good: %s\n",
2211 ret >= 0 ? yes_no(good) : strerror(errno));
2212
2428 printf("%sSMART Disk Health Good: %s%s\n",
2429 ret >= 0 && !good ? HIGHLIGHT : "",
2430 ret >= 0 ? yes_no(good) : strerror(errno),
2431 ret >= 0 && !good ? ENDHIGHLIGHT : "");
22132432 if ((ret = sk_disk_smart_read_data(d)) < 0)
22142433 return ret;
22152434
22672486 else
22682487 printf("Temperature: %s\n", print_value(pretty, sizeof(pretty), value, SK_SMART_ATTRIBUTE_UNIT_MKELVIN));
22692488
2489 printf("Attribute Parsing Verification: %s\n",
2490 d->attribute_verification_bad ? "Bad" : "Good");
2491
22702492 if (sk_disk_smart_get_overall(d, &overall) < 0)
22712493 printf("Overall Status: %s\n", strerror(errno));
22722494 else
22752497 sk_smart_overall_to_string(overall),
22762498 overall != SK_SMART_OVERALL_GOOD ? ENDHIGHLIGHT : "");
22772499
2278 printf("%3s %-27s %5s %5s %5s %-11s %-14s %-7s %-7s %-3s\n",
2500 printf("%3s %-27s %5s %5s %5s %-11s %-14s %-7s %-7s %-4s %-4s\n",
22792501 "ID#",
22802502 "Name",
22812503 "Value",
22852507 "Raw",
22862508 "Type",
22872509 "Updates",
2288 "Good");
2510 "Good",
2511 "Good/Past");
22892512
22902513 if ((ret = sk_disk_smart_parse_attributes(d, disk_dump_attributes, NULL)) < 0)
22912514 return ret;
23122535 struct udev *udev;
23132536 struct udev_device *dev = NULL, *usb;
23142537 int r = -1;
2538 const char *a;
23152539
23162540 assert(d);
23172541
23222546
23232547 if (!(dev = udev_device_new_from_devnum(udev, 'b', devnum))) {
23242548 errno = ENODEV;
2549 goto finish;
2550 }
2551
2552 if ((a = udev_device_get_property_value(dev, "ID_ATA_SMART_ACCESS"))) {
2553 unsigned u;
2554
2555 for (u = 0; u < _SK_DISK_TYPE_MAX; u++) {
2556 const char *t;
2557
2558 if (!(t = disk_type_to_prefix_string(u)))
2559 continue;
2560
2561 if (!strcmp(a, t)) {
2562 d->type = u;
2563 r = 0;
2564 goto finish;
2565 }
2566 }
2567
2568 d->type = SK_DISK_TYPE_NONE;
2569 r = 0;
23252570 goto finish;
23262571 }
23272572
23422587 }
23432588
23442589 if ((vid == 0x0c0b && pid == 0xb159) ||
2345 (vid == 0x04fc && pid == 0x0c25))
2590 (vid == 0x04fc && pid == 0x0c25) ||
2591 (vid == 0x04fc && pid == 0x0c15))
23462592 d->type = SK_DISK_TYPE_SUNPLUS;
2347 if ((vid == 0x152d && pid == 0x2329) ||
2593 else if ((vid == 0x152d && pid == 0x2329) ||
23482594 (vid == 0x152d && pid == 0x2336) ||
23492595 (vid == 0x152d && pid == 0x2338) ||
23502596 (vid == 0x152d && pid == 0x2339))
23532599 d->type = SK_DISK_TYPE_ATA_PASSTHROUGH_12;
23542600
23552601 } else if (udev_device_get_parent_with_subsystem_devtype(dev, "ide", NULL))
2356 d->type = SK_DISK_TYPE_ATA;
2602 d->type = SK_DISK_TYPE_LINUX_IDE;
23572603 else if (udev_device_get_parent_with_subsystem_devtype(dev, "scsi", NULL))
23582604 d->type = SK_DISK_TYPE_ATA_PASSTHROUGH_16;
23592605 else
2360 d->type = SK_DISK_TYPE_UNKNOWN;
2606 d->type = SK_DISK_TYPE_AUTO;
23612607
23622608 r = 0;
23632609
23832629 goto fail;
23842630 }
23852631
2386 if (!name) {
2387 d->fd = -1;
2632 d->fd = -1;
2633 d->size = (uint64_t) -1;
2634
2635 if (!name)
23882636 d->type = SK_DISK_TYPE_BLOB;
2389 d->size = (uint64_t) -1;
2390 } else {
2391
2392 if (!(d->name = strdup(name))) {
2637 else {
2638 const char *dn;
2639
2640 d->type = SK_DISK_TYPE_AUTO;
2641
2642 if (!(dn = disk_type_from_string(name, &d->type)))
2643 dn = name;
2644
2645 if (!(d->name = strdup(dn))) {
23932646 errno = ENOMEM;
23942647 goto fail;
23952648 }
23962649
2397 if ((d->fd = open(name,
2650 if ((d->fd = open(d->name,
23982651 O_RDONLY|O_NOCTTY|O_NONBLOCK
23992652 #ifdef O_CLOEXEC
24002653 |O_CLOEXEC
24252678 }
24262679
24272680 /* OK, it's a real block device with a size. Now let's find the suitable API */
2428 if ((ret = disk_find_type(d, st.st_rdev)) < 0)
2429 goto fail;
2430
2431 if (d->type == SK_DISK_TYPE_UNKNOWN) {
2681 if (d->type == SK_DISK_TYPE_AUTO)
2682 if ((ret = disk_find_type(d, st.st_rdev)) < 0)
2683 goto fail;
2684
2685 if (d->type == SK_DISK_TYPE_AUTO) {
24322686 /* We have no clue, so let's autotest for a working API */
24332687 for (d->type = 0; d->type < _SK_DISK_TYPE_TEST_MAX; d->type++)
24342688 if (disk_identify_device(d) >= 0)
24352689 break;
24362690 if (d->type >= _SK_DISK_TYPE_TEST_MAX)
2437 d->type = SK_DISK_TYPE_UNKNOWN;
2691 d->type = SK_DISK_TYPE_NONE;
24382692 } else
24392693 disk_identify_device(d);
24402694
1717 # License along with libatasmart. If not, If not, see
1818 # <http://www.gnu.org/licenses/>.
1919
20 VERSION=1.9
20 VERSION=1.11
2121
2222 run_versioned() {
2323 local P
5454 mkdir -p m4
5555 "$LIBTOOLIZE" -c --force
5656 run_versioned aclocal "$VERSION"
57 run_versioned autoconf 2.59 -Wall
58 run_versioned autoheader 2.59
57 run_versioned autoconf 2.63 -Wall
58 run_versioned autoheader 2.63
5959 run_versioned automake "$VERSION" --copy --foreign --add-missing
6060
6161 if test "x$NOCONFIGURE" = "x"; then
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.63 for libatasmart 0.13.
2 # Generated by GNU Autoconf 2.63 for libatasmart 0.14.
33 #
44 # Report bugs to <mzyvongnfzneg (at) 0pointer (dot) net>.
55 #
744744 # Identity of this package.
745745 PACKAGE_NAME='libatasmart'
746746 PACKAGE_TARNAME='libatasmart'
747 PACKAGE_VERSION='0.13'
748 PACKAGE_STRING='libatasmart 0.13'
747 PACKAGE_VERSION='0.14'
748 PACKAGE_STRING='libatasmart 0.14'
749749 PACKAGE_BUGREPORT='mzyvongnfzneg (at) 0pointer (dot) net'
750750
751751 ac_unique_file="atasmart.c"
785785 # include <unistd.h>
786786 #endif"
787787
788 ac_subst_vars='LTLIBOBJS
788 ac_subst_vars='am__EXEEXT_FALSE
789 am__EXEEXT_TRUE
790 LTLIBOBJS
789791 LIBOBJS
790792 LIBUDEV_LIBS
791793 LIBUDEV_CFLAGS
843845 build
844846 LIBATASMART_VERSION_INFO
845847 PACKAGE_URL
848 AM_BACKSLASH
849 AM_DEFAULT_VERBOSITY
846850 am__untar
847851 am__tar
848852 AMTAR
906910 ac_subst_files=''
907911 ac_user_opts='
908912 enable_option_checking
913 enable_silent_rules
909914 enable_dependency_tracking
910915 enable_shared
911916 enable_static
14831488 # Omit some internal or obsolete options to make the list less imposing.
14841489 # This message is too long to be a string in the A/UX 3.1 sh.
14851490 cat <<_ACEOF
1486 \`configure' configures libatasmart 0.13 to adapt to many kinds of systems.
1491 \`configure' configures libatasmart 0.14 to adapt to many kinds of systems.
14871492
14881493 Usage: $0 [OPTION]... [VAR=VALUE]...
14891494
15531558
15541559 if test -n "$ac_init_help"; then
15551560 case $ac_init_help in
1556 short | recursive ) echo "Configuration of libatasmart 0.13:";;
1561 short | recursive ) echo "Configuration of libatasmart 0.14:";;
15571562 esac
15581563 cat <<\_ACEOF
15591564
15611566 --disable-option-checking ignore unrecognized --enable/--with options
15621567 --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
15631568 --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
1569 --enable-silent-rules less verbose build output (undo: `make V=1')
1570 --disable-silent-rules verbose build output (undo: `make V=0')
15641571 --disable-dependency-tracking speeds up one-time build
15651572 --enable-dependency-tracking do not reject slow dependency extractors
15661573 --enable-shared[=PKGS] build shared libraries [default=yes]
16611668 test -n "$ac_init_help" && exit $ac_status
16621669 if $ac_init_version; then
16631670 cat <<\_ACEOF
1664 libatasmart configure 0.13
1671 libatasmart configure 0.14
16651672 generated by GNU Autoconf 2.63
16661673
16671674 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
16751682 This file contains any messages produced by compilers while
16761683 running configure, to aid debugging if configure makes a mistake.
16771684
1678 It was created by libatasmart $as_me 0.13, which was
1685 It was created by libatasmart $as_me 0.14, which was
16791686 generated by GNU Autoconf 2.63. Invocation command line was
16801687
16811688 $ $0 $@
20482055
20492056
20502057
2051 am__api_version='1.10'
2058 am__api_version='1.11'
20522059
20532060 ac_aux_dir=
20542061 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
21792186 # Just in case
21802187 sleep 1
21812188 echo timestamp > conftest.file
2189 # Reject unsafe characters in $srcdir or the absolute working directory
2190 # name. Accept space and tab only in the latter.
2191 am_lf='
2192 '
2193 case `pwd` in
2194 *[\\\"\#\$\&\'\`$am_lf]*)
2195 { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5
2196 $as_echo "$as_me: error: unsafe absolute working directory name" >&2;}
2197 { (exit 1); exit 1; }; };;
2198 esac
2199 case $srcdir in
2200 *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
2201 { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5
2202 $as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;}
2203 { (exit 1); exit 1; }; };;
2204 esac
2205
21822206 # Do `set' in a subshell so we don't clobber the current shell's
21832207 # arguments. Must try -L first in case configure is actually a
21842208 # symlink; some systems play weird games with the mod time of symlinks
21852209 # (eg FreeBSD returns the mod time of the symlink's containing
21862210 # directory).
21872211 if (
2188 set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
2212 set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
21892213 if test "$*" = "X"; then
21902214 # -L didn't work.
2191 set X `ls -t $srcdir/configure conftest.file`
2215 set X `ls -t "$srcdir/configure" conftest.file`
21922216 fi
21932217 rm -f conftest.file
21942218 if test "$*" != "X $srcdir/configure conftest.file" \
22322256 # expand $ac_aux_dir to an absolute path
22332257 am_aux_dir=`cd $ac_aux_dir && pwd`
22342258
2235 test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
2259 if test x"${MISSING+set}" != xset; then
2260 case $am_aux_dir in
2261 *\ * | *\ *)
2262 MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
2263 *)
2264 MISSING="\${SHELL} $am_aux_dir/missing" ;;
2265 esac
2266 fi
22362267 # Use eval to expand $SHELL
22372268 if eval "$MISSING --run true"; then
22382269 am_missing_run="$MISSING --run "
22412272 { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
22422273 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
22432274 fi
2275
2276 if test x"${install_sh}" != xset; then
2277 case $am_aux_dir in
2278 *\ * | *\ *)
2279 install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
2280 *)
2281 install_sh="\${SHELL} $am_aux_dir/install-sh"
2282 esac
2283 fi
2284
2285 # Installed binaries are usually stripped using `strip' when the user
2286 # run `make install-strip'. However `strip' might not be the right
2287 # tool to use in cross-compilation environments, therefore Automake
2288 # will honor the `STRIP' environment variable to overrule this program.
2289 if test "$cross_compiling" != no; then
2290 if test -n "$ac_tool_prefix"; then
2291 # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
2292 set dummy ${ac_tool_prefix}strip; ac_word=$2
2293 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
2294 $as_echo_n "checking for $ac_word... " >&6; }
2295 if test "${ac_cv_prog_STRIP+set}" = set; then
2296 $as_echo_n "(cached) " >&6
2297 else
2298 if test -n "$STRIP"; then
2299 ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
2300 else
2301 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2302 for as_dir in $PATH
2303 do
2304 IFS=$as_save_IFS
2305 test -z "$as_dir" && as_dir=.
2306 for ac_exec_ext in '' $ac_executable_extensions; do
2307 if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
2308 ac_cv_prog_STRIP="${ac_tool_prefix}strip"
2309 $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
2310 break 2
2311 fi
2312 done
2313 done
2314 IFS=$as_save_IFS
2315
2316 fi
2317 fi
2318 STRIP=$ac_cv_prog_STRIP
2319 if test -n "$STRIP"; then
2320 { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
2321 $as_echo "$STRIP" >&6; }
2322 else
2323 { $as_echo "$as_me:$LINENO: result: no" >&5
2324 $as_echo "no" >&6; }
2325 fi
2326
2327
2328 fi
2329 if test -z "$ac_cv_prog_STRIP"; then
2330 ac_ct_STRIP=$STRIP
2331 # Extract the first word of "strip", so it can be a program name with args.
2332 set dummy strip; ac_word=$2
2333 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
2334 $as_echo_n "checking for $ac_word... " >&6; }
2335 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
2336 $as_echo_n "(cached) " >&6
2337 else
2338 if test -n "$ac_ct_STRIP"; then
2339 ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
2340 else
2341 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2342 for as_dir in $PATH
2343 do
2344 IFS=$as_save_IFS
2345 test -z "$as_dir" && as_dir=.
2346 for ac_exec_ext in '' $ac_executable_extensions; do
2347 if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
2348 ac_cv_prog_ac_ct_STRIP="strip"
2349 $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
2350 break 2
2351 fi
2352 done
2353 done
2354 IFS=$as_save_IFS
2355
2356 fi
2357 fi
2358 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
2359 if test -n "$ac_ct_STRIP"; then
2360 { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
2361 $as_echo "$ac_ct_STRIP" >&6; }
2362 else
2363 { $as_echo "$as_me:$LINENO: result: no" >&5
2364 $as_echo "no" >&6; }
2365 fi
2366
2367 if test "x$ac_ct_STRIP" = x; then
2368 STRIP=":"
2369 else
2370 case $cross_compiling:$ac_tool_warned in
2371 yes:)
2372 { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
2373 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2374 ac_tool_warned=yes ;;
2375 esac
2376 STRIP=$ac_ct_STRIP
2377 fi
2378 else
2379 STRIP="$ac_cv_prog_STRIP"
2380 fi
2381
2382 fi
2383 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
22442384
22452385 { $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
22462386 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
23722512 fi
23732513 rmdir .tst 2>/dev/null
23742514
2515 # Check whether --enable-silent-rules was given.
2516 if test "${enable_silent_rules+set}" = set; then
2517 enableval=$enable_silent_rules;
2518 fi
2519
2520 case $enable_silent_rules in
2521 yes) AM_DEFAULT_VERBOSITY=0;;
2522 no) AM_DEFAULT_VERBOSITY=1;;
2523 *) AM_DEFAULT_VERBOSITY=1;;
2524 esac
2525 AM_BACKSLASH='\'
2526
23752527 if test "`cd $srcdir && pwd`" != "`pwd`"; then
23762528 # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
23772529 # is not polluted with repeated "-I."
23962548
23972549 # Define the identity of the package.
23982550 PACKAGE='libatasmart'
2399 VERSION='0.13'
2551 VERSION='0.14'
24002552
24012553
24022554 cat >>confdefs.h <<_ACEOF
24232575
24242576
24252577 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
2426
2427 install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
2428
2429 # Installed binaries are usually stripped using `strip' when the user
2430 # run `make install-strip'. However `strip' might not be the right
2431 # tool to use in cross-compilation environments, therefore Automake
2432 # will honor the `STRIP' environment variable to overrule this program.
2433 if test "$cross_compiling" != no; then
2434 if test -n "$ac_tool_prefix"; then
2435 # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
2436 set dummy ${ac_tool_prefix}strip; ac_word=$2
2437 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
2438 $as_echo_n "checking for $ac_word... " >&6; }
2439 if test "${ac_cv_prog_STRIP+set}" = set; then
2440 $as_echo_n "(cached) " >&6
2441 else
2442 if test -n "$STRIP"; then
2443 ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
2444 else
2445 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2446 for as_dir in $PATH
2447 do
2448 IFS=$as_save_IFS
2449 test -z "$as_dir" && as_dir=.
2450 for ac_exec_ext in '' $ac_executable_extensions; do
2451 if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
2452 ac_cv_prog_STRIP="${ac_tool_prefix}strip"
2453 $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
2454 break 2
2455 fi
2456 done
2457 done
2458 IFS=$as_save_IFS
2459
2460 fi
2461 fi
2462 STRIP=$ac_cv_prog_STRIP
2463 if test -n "$STRIP"; then
2464 { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
2465 $as_echo "$STRIP" >&6; }
2466 else
2467 { $as_echo "$as_me:$LINENO: result: no" >&5
2468 $as_echo "no" >&6; }
2469 fi
2470
2471
2472 fi
2473 if test -z "$ac_cv_prog_STRIP"; then
2474 ac_ct_STRIP=$STRIP
2475 # Extract the first word of "strip", so it can be a program name with args.
2476 set dummy strip; ac_word=$2
2477 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
2478 $as_echo_n "checking for $ac_word... " >&6; }
2479 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
2480 $as_echo_n "(cached) " >&6
2481 else
2482 if test -n "$ac_ct_STRIP"; then
2483 ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
2484 else
2485 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2486 for as_dir in $PATH
2487 do
2488 IFS=$as_save_IFS
2489 test -z "$as_dir" && as_dir=.
2490 for ac_exec_ext in '' $ac_executable_extensions; do
2491 if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
2492 ac_cv_prog_ac_ct_STRIP="strip"
2493 $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
2494 break 2
2495 fi
2496 done
2497 done
2498 IFS=$as_save_IFS
2499
2500 fi
2501 fi
2502 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
2503 if test -n "$ac_ct_STRIP"; then
2504 { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
2505 $as_echo "$ac_ct_STRIP" >&6; }
2506 else
2507 { $as_echo "$as_me:$LINENO: result: no" >&5
2508 $as_echo "no" >&6; }
2509 fi
2510
2511 if test "x$ac_ct_STRIP" = x; then
2512 STRIP=":"
2513 else
2514 case $cross_compiling:$ac_tool_warned in
2515 yes:)
2516 { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
2517 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2518 ac_tool_warned=yes ;;
2519 esac
2520 STRIP=$ac_ct_STRIP
2521 fi
2522 else
2523 STRIP="$ac_cv_prog_STRIP"
2524 fi
2525
2526 fi
2527 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
25282578
25292579 # We need awk for the "check" target. The system "awk" is bad on
25302580 # some platforms.
25322582
25332583 AMTAR=${AMTAR-"${am_missing_run}tar"}
25342584
2535 am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
2536
2537
2538
2539
2540
2541
2542 PACKAGE_URL=https://http://git.0pointer.de/?p=libatasmart.git
2543
2544
2545 LIBATASMART_VERSION_INFO=3:3:3
2585
2586 { $as_echo "$as_me:$LINENO: checking how to create a pax tar archive" >&5
2587 $as_echo_n "checking how to create a pax tar archive... " >&6; }
2588 # Loop over all known methods to create a tar archive until one works.
2589 _am_tools='gnutar pax cpio none'
2590 _am_tools=${am_cv_prog_tar_pax-$_am_tools}
2591 # Do not fold the above two line into one, because Tru64 sh and
2592 # Solaris sh will not grok spaces in the rhs of `-'.
2593 for _am_tool in $_am_tools
2594 do
2595 case $_am_tool in
2596 gnutar)
2597 for _am_tar in tar gnutar gtar;
2598 do
2599 { echo "$as_me:$LINENO: $_am_tar --version" >&5
2600 ($_am_tar --version) >&5 2>&5
2601 ac_status=$?
2602 echo "$as_me:$LINENO: \$? = $ac_status" >&5
2603 (exit $ac_status); } && break
2604 done
2605 am__tar="$_am_tar --format=posix -chf - "'"$$tardir"'
2606 am__tar_="$_am_tar --format=posix -chf - "'"$tardir"'
2607 am__untar="$_am_tar -xf -"
2608 ;;
2609 plaintar)
2610 # Must skip GNU tar: if it does not support --format= it doesn't create
2611 # ustar tarball either.
2612 (tar --version) >/dev/null 2>&1 && continue
2613 am__tar='tar chf - "$$tardir"'
2614 am__tar_='tar chf - "$tardir"'
2615 am__untar='tar xf -'
2616 ;;
2617 pax)
2618 am__tar='pax -L -x pax -w "$$tardir"'
2619 am__tar_='pax -L -x pax -w "$tardir"'
2620 am__untar='pax -r'
2621 ;;
2622 cpio)
2623 am__tar='find "$$tardir" -print | cpio -o -H pax -L'
2624 am__tar_='find "$tardir" -print | cpio -o -H pax -L'
2625 am__untar='cpio -i -H pax -d'
2626 ;;
2627 none)
2628 am__tar=false
2629 am__tar_=false
2630 am__untar=false
2631 ;;
2632 esac
2633
2634 # If the value was cached, stop now. We just wanted to have am__tar
2635 # and am__untar set.
2636 test -n "${am_cv_prog_tar_pax}" && break
2637
2638 # tar/untar a dummy directory, and stop if the command works
2639 rm -rf conftest.dir
2640 mkdir conftest.dir
2641 echo GrepMe > conftest.dir/file
2642 { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5
2643 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5
2644 ac_status=$?
2645 echo "$as_me:$LINENO: \$? = $ac_status" >&5
2646 (exit $ac_status); }
2647 rm -rf conftest.dir
2648 if test -s conftest.tar; then
2649 { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5
2650 ($am__untar <conftest.tar) >&5 2>&5
2651 ac_status=$?
2652 echo "$as_me:$LINENO: \$? = $ac_status" >&5
2653 (exit $ac_status); }
2654 grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
2655 fi
2656 done
2657 rm -rf conftest.dir
2658
2659 if test "${am_cv_prog_tar_pax+set}" = set; then
2660 $as_echo_n "(cached) " >&6
2661 else
2662 am_cv_prog_tar_pax=$_am_tool
2663 fi
2664
2665 { $as_echo "$as_me:$LINENO: result: $am_cv_prog_tar_pax" >&5
2666 $as_echo "$am_cv_prog_tar_pax" >&6; }
2667
2668
2669
2670
2671
2672
2673 PACKAGE_URL=http://git.0pointer.de/?p=libatasmart.git
2674
2675
2676 LIBATASMART_VERSION_INFO=4:0:0
25462677
25472678
25482679 # Make sure we can run config.sub.
35793710 am_make=${MAKE-make}
35803711 cat > confinc << 'END'
35813712 am__doit:
3582 @echo done
3713 @echo this is the am__doit target
35833714 .PHONY: am__doit
35843715 END
35853716 # If we don't find an include directive, just comment out the code.
35903721 _am_result=none
35913722 # First try GNU make style include.
35923723 echo "include confinc" > confmf
3593 # We grep out `Entering directory' and `Leaving directory'
3594 # messages which can occur if `w' ends up in MAKEFLAGS.
3595 # In particular we don't look at `^make:' because GNU make might
3596 # be invoked under some other name (usually "gmake"), in which
3597 # case it prints its new name instead of `make'.
3598 if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
3599 am__include=include
3600 am__quote=
3601 _am_result=GNU
3602 fi
3724 # Ignore all kinds of additional output from `make'.
3725 case `$am_make -s -f confmf 2> /dev/null` in #(
3726 *the\ am__doit\ target*)
3727 am__include=include
3728 am__quote=
3729 _am_result=GNU
3730 ;;
3731 esac
36033732 # Now try BSD make style include.
36043733 if test "$am__include" = "#"; then
36053734 echo '.include "confinc"' > confmf
3606 if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
3607 am__include=.include
3608 am__quote="\""
3609 _am_result=BSD
3610 fi
3735 case `$am_make -s -f confmf 2> /dev/null` in #(
3736 *the\ am__doit\ target*)
3737 am__include=.include
3738 am__quote="\""
3739 _am_result=BSD
3740 ;;
3741 esac
36113742 fi
36123743
36133744
36643795 if test "$am_compiler_list" = ""; then
36653796 am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
36663797 fi
3798 am__universal=false
3799 case " $depcc " in #(
3800 *\ -arch\ *\ -arch\ *) am__universal=true ;;
3801 esac
3802
36673803 for depmode in $am_compiler_list; do
36683804 # Setup a source with many dependencies, because some compilers
36693805 # like to wrap large dependency lists on column 80 (with \), and
36813817 done
36823818 echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
36833819
3820 # We check with `-c' and `-o' for the sake of the "dashmstdout"
3821 # mode. It turns out that the SunPro C++ compiler does not properly
3822 # handle `-M -o', and we need to detect this. Also, some Intel
3823 # versions had trouble with output in subdirs
3824 am__obj=sub/conftest.${OBJEXT-o}
3825 am__minus_obj="-o $am__obj"
36843826 case $depmode in
3827 gcc)
3828 # This depmode causes a compiler race in universal mode.
3829 test "$am__universal" = false || continue
3830 ;;
36853831 nosideeffect)
36863832 # after this tag, mechanisms are not by side-effect, so they'll
36873833 # only be used when explicitly requested
36913837 break
36923838 fi
36933839 ;;
3840 msvisualcpp | msvcmsys)
3841 # This compiler won't grok `-c -o', but also, the minuso test has
3842 # not run yet. These depmodes are late enough in the game, and
3843 # so weak that their functioning should not be impacted.
3844 am__obj=conftest.${OBJEXT-o}
3845 am__minus_obj=
3846 ;;
36943847 none) break ;;
36953848 esac
3696 # We check with `-c' and `-o' for the sake of the "dashmstdout"
3697 # mode. It turns out that the SunPro C++ compiler does not properly
3698 # handle `-M -o', and we need to detect this.
36993849 if depmode=$depmode \
3700 source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
3850 source=sub/conftest.c object=$am__obj \
37013851 depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
3702 $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
3852 $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
37033853 >/dev/null 2>conftest.err &&
37043854 grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
37053855 grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
3706 grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
3856 grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
37073857 ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
37083858 # icc doesn't choke on unknown options, it will just issue warnings
37093859 # or remarks (even with -Werror). So we grep stderr for any message
51865336 if test "$am_compiler_list" = ""; then
51875337 am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
51885338 fi
5339 am__universal=false
5340 case " $depcc " in #(
5341 *\ -arch\ *\ -arch\ *) am__universal=true ;;
5342 esac
5343
51895344 for depmode in $am_compiler_list; do
51905345 # Setup a source with many dependencies, because some compilers
51915346 # like to wrap large dependency lists on column 80 (with \), and
52035358 done
52045359 echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
52055360
5361 # We check with `-c' and `-o' for the sake of the "dashmstdout"
5362 # mode. It turns out that the SunPro C++ compiler does not properly
5363 # handle `-M -o', and we need to detect this. Also, some Intel
5364 # versions had trouble with output in subdirs
5365 am__obj=sub/conftest.${OBJEXT-o}
5366 am__minus_obj="-o $am__obj"
52065367 case $depmode in
5368 gcc)
5369 # This depmode causes a compiler race in universal mode.
5370 test "$am__universal" = false || continue
5371 ;;
52075372 nosideeffect)
52085373 # after this tag, mechanisms are not by side-effect, so they'll
52095374 # only be used when explicitly requested
52135378 break
52145379 fi
52155380 ;;
5381 msvisualcpp | msvcmsys)
5382 # This compiler won't grok `-c -o', but also, the minuso test has
5383 # not run yet. These depmodes are late enough in the game, and
5384 # so weak that their functioning should not be impacted.
5385 am__obj=conftest.${OBJEXT-o}
5386 am__minus_obj=
5387 ;;
52165388 none) break ;;
52175389 esac
5218 # We check with `-c' and `-o' for the sake of the "dashmstdout"
5219 # mode. It turns out that the SunPro C++ compiler does not properly
5220 # handle `-M -o', and we need to detect this.
52215390 if depmode=$depmode \
5222 source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
5391 source=sub/conftest.c object=$am__obj \
52235392 depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
5224 $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
5393 $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
52255394 >/dev/null 2>conftest.err &&
52265395 grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
52275396 grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
5228 grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
5397 grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
52295398 ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
52305399 # icc doesn't choke on unknown options, it will just issue warnings
52315400 # or remarks (even with -Werror). So we grep stderr for any message
57865955 else
57875956 lt_cv_nm_interface="BSD nm"
57885957 echo "int some_variable = 0;" > conftest.$ac_ext
5789 (eval echo "\"\$as_me:5790: $ac_compile\"" >&5)
5958 (eval echo "\"\$as_me:5959: $ac_compile\"" >&5)
57905959 (eval "$ac_compile" 2>conftest.err)
57915960 cat conftest.err >&5
5792 (eval echo "\"\$as_me:5793: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
5961 (eval echo "\"\$as_me:5962: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
57935962 (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
57945963 cat conftest.err >&5
5795 (eval echo "\"\$as_me:5796: output\"" >&5)
5964 (eval echo "\"\$as_me:5965: output\"" >&5)
57965965 cat conftest.out >&5
57975966 if $GREP 'External.*some_variable' conftest.out > /dev/null; then
57985967 lt_cv_nm_interface="MS dumpbin"
69977166 ;;
69987167 *-*-irix6*)
69997168 # Find out which ABI we are using.
7000 echo '#line 7001 "configure"' > conftest.$ac_ext
7169 echo '#line 7170 "configure"' > conftest.$ac_ext
70017170 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
70027171 (eval $ac_compile) 2>&5
70037172 ac_status=$?
82688437 if test "$am_compiler_list" = ""; then
82698438 am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
82708439 fi
8440 am__universal=false
8441 case " $depcc " in #(
8442 *\ -arch\ *\ -arch\ *) am__universal=true ;;
8443 esac
8444
82718445 for depmode in $am_compiler_list; do
82728446 # Setup a source with many dependencies, because some compilers
82738447 # like to wrap large dependency lists on column 80 (with \), and
82858459 done
82868460 echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
82878461
8462 # We check with `-c' and `-o' for the sake of the "dashmstdout"
8463 # mode. It turns out that the SunPro C++ compiler does not properly
8464 # handle `-M -o', and we need to detect this. Also, some Intel
8465 # versions had trouble with output in subdirs
8466 am__obj=sub/conftest.${OBJEXT-o}
8467 am__minus_obj="-o $am__obj"
82888468 case $depmode in
8469 gcc)
8470 # This depmode causes a compiler race in universal mode.
8471 test "$am__universal" = false || continue
8472 ;;
82898473 nosideeffect)
82908474 # after this tag, mechanisms are not by side-effect, so they'll
82918475 # only be used when explicitly requested
82958479 break
82968480 fi
82978481 ;;
8482 msvisualcpp | msvcmsys)
8483 # This compiler won't grok `-c -o', but also, the minuso test has
8484 # not run yet. These depmodes are late enough in the game, and
8485 # so weak that their functioning should not be impacted.
8486 am__obj=conftest.${OBJEXT-o}
8487 am__minus_obj=
8488 ;;
82988489 none) break ;;
82998490 esac
8300 # We check with `-c' and `-o' for the sake of the "dashmstdout"
8301 # mode. It turns out that the SunPro C++ compiler does not properly
8302 # handle `-M -o', and we need to detect this.
83038491 if depmode=$depmode \
8304 source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
8492 source=sub/conftest.c object=$am__obj \
83058493 depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
8306 $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
8494 $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
83078495 >/dev/null 2>conftest.err &&
83088496 grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
83098497 grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
8310 grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
8498 grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
83118499 ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
83128500 # icc doesn't choke on unknown options, it will just issue warnings
83138501 # or remarks (even with -Werror). So we grep stderr for any message
90819269 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
90829270 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
90839271 -e 's:$: $lt_compiler_flag:'`
9084 (eval echo "\"\$as_me:9085: $lt_compile\"" >&5)
9272 (eval echo "\"\$as_me:9273: $lt_compile\"" >&5)
90859273 (eval "$lt_compile" 2>conftest.err)
90869274 ac_status=$?
90879275 cat conftest.err >&5
9088 echo "$as_me:9089: \$? = $ac_status" >&5
9276 echo "$as_me:9277: \$? = $ac_status" >&5
90899277 if (exit $ac_status) && test -s "$ac_outfile"; then
90909278 # The compiler can only warn and ignore the option if not recognized
90919279 # So say no if there are warnings other than the usual output.
94209608 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
94219609 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
94229610 -e 's:$: $lt_compiler_flag:'`
9423 (eval echo "\"\$as_me:9424: $lt_compile\"" >&5)
9611 (eval echo "\"\$as_me:9612: $lt_compile\"" >&5)
94249612 (eval "$lt_compile" 2>conftest.err)
94259613 ac_status=$?
94269614 cat conftest.err >&5
9427 echo "$as_me:9428: \$? = $ac_status" >&5
9615 echo "$as_me:9616: \$? = $ac_status" >&5
94289616 if (exit $ac_status) && test -s "$ac_outfile"; then
94299617 # The compiler can only warn and ignore the option if not recognized
94309618 # So say no if there are warnings other than the usual output.
95259713 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
95269714 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
95279715 -e 's:$: $lt_compiler_flag:'`
9528 (eval echo "\"\$as_me:9529: $lt_compile\"" >&5)
9716 (eval echo "\"\$as_me:9717: $lt_compile\"" >&5)
95299717 (eval "$lt_compile" 2>out/conftest.err)
95309718 ac_status=$?
95319719 cat out/conftest.err >&5
9532 echo "$as_me:9533: \$? = $ac_status" >&5
9720 echo "$as_me:9721: \$? = $ac_status" >&5
95339721 if (exit $ac_status) && test -s out/conftest2.$ac_objext
95349722 then
95359723 # The compiler can only warn and ignore the option if not recognized
95809768 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
95819769 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
95829770 -e 's:$: $lt_compiler_flag:'`
9583 (eval echo "\"\$as_me:9584: $lt_compile\"" >&5)
9771 (eval echo "\"\$as_me:9772: $lt_compile\"" >&5)
95849772 (eval "$lt_compile" 2>out/conftest.err)
95859773 ac_status=$?
95869774 cat out/conftest.err >&5
9587 echo "$as_me:9588: \$? = $ac_status" >&5
9775 echo "$as_me:9776: \$? = $ac_status" >&5
95889776 if (exit $ac_status) && test -s out/conftest2.$ac_objext
95899777 then
95909778 # The compiler can only warn and ignore the option if not recognized
1238312571 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
1238412572 lt_status=$lt_dlunknown
1238512573 cat > conftest.$ac_ext <<_LT_EOF
12386 #line 12387 "configure"
12574 #line 12575 "configure"
1238712575 #include "confdefs.h"
1238812576
1238912577 #if HAVE_DLFCN_H
1247912667 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
1248012668 lt_status=$lt_dlunknown
1248112669 cat > conftest.$ac_ext <<_LT_EOF
12482 #line 12483 "configure"
12670 #line 12671 "configure"
1248312671 #include "confdefs.h"
1248412672
1248512673 #if HAVE_DLFCN_H
1449914687 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
1450014688 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
1450114689 -e 's:$: $lt_compiler_flag:'`
14502 (eval echo "\"\$as_me:14503: $lt_compile\"" >&5)
14690 (eval echo "\"\$as_me:14691: $lt_compile\"" >&5)
1450314691 (eval "$lt_compile" 2>conftest.err)
1450414692 ac_status=$?
1450514693 cat conftest.err >&5
14506 echo "$as_me:14507: \$? = $ac_status" >&5
14694 echo "$as_me:14695: \$? = $ac_status" >&5
1450714695 if (exit $ac_status) && test -s "$ac_outfile"; then
1450814696 # The compiler can only warn and ignore the option if not recognized
1450914697 # So say no if there are warnings other than the usual output.
1459814786 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
1459914787 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
1460014788 -e 's:$: $lt_compiler_flag:'`
14601 (eval echo "\"\$as_me:14602: $lt_compile\"" >&5)
14789 (eval echo "\"\$as_me:14790: $lt_compile\"" >&5)
1460214790 (eval "$lt_compile" 2>out/conftest.err)
1460314791 ac_status=$?
1460414792 cat out/conftest.err >&5
14605 echo "$as_me:14606: \$? = $ac_status" >&5
14793 echo "$as_me:14794: \$? = $ac_status" >&5
1460614794 if (exit $ac_status) && test -s out/conftest2.$ac_objext
1460714795 then
1460814796 # The compiler can only warn and ignore the option if not recognized
1465014838 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
1465114839 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
1465214840 -e 's:$: $lt_compiler_flag:'`
14653 (eval echo "\"\$as_me:14654: $lt_compile\"" >&5)
14841 (eval echo "\"\$as_me:14842: $lt_compile\"" >&5)
1465414842 (eval "$lt_compile" 2>out/conftest.err)
1465514843 ac_status=$?
1465614844 cat out/conftest.err >&5
14657 echo "$as_me:14658: \$? = $ac_status" >&5
14845 echo "$as_me:14846: \$? = $ac_status" >&5
1465814846 if (exit $ac_status) && test -s out/conftest2.$ac_objext
1465914847 then
1466014848 # The compiler can only warn and ignore the option if not recognized
1800318191 LTLIBOBJS=$ac_ltlibobjs
1800418192
1800518193
18194 if test -n "$EXEEXT"; then
18195 am__EXEEXT_TRUE=
18196 am__EXEEXT_FALSE='#'
18197 else
18198 am__EXEEXT_TRUE='#'
18199 am__EXEEXT_FALSE=
18200 fi
18201
1800618202 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
1800718203 { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
1800818204 Usually this means the macro was only invoked conditionally." >&5
1835418550 # report actual input values of CONFIG_FILES etc. instead of their
1835518551 # values after options handling.
1835618552 ac_log="
18357 This file was extended by libatasmart $as_me 0.13, which was
18553 This file was extended by libatasmart $as_me 0.14, which was
1835818554 generated by GNU Autoconf 2.63. Invocation command line was
1835918555
1836018556 CONFIG_FILES = $CONFIG_FILES
1841718613 _ACEOF
1841818614 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
1841918615 ac_cs_version="\\
18420 libatasmart config.status 0.13
18616 libatasmart config.status 0.14
1842118617 configured by $0, generated by GNU Autoconf 2.63,
1842218618 with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
1842318619
1955119747
1955219748
1955319749 case $ac_file$ac_mode in
19554 "depfiles":C) test x"$AMDEP_TRUE" != x"" || # Autoconf 2.62 quotes --file arguments for eval, but not when files
19555 # are listed without --file. Let's play safe and only enable the eval
19556 # if we detect the quoting.
19557 case $CONFIG_FILES in
19558 *\'*) eval set x "$CONFIG_FILES" ;;
19559 *) set x $CONFIG_FILES ;;
19560 esac
19561 shift
19562 for mf
19563 do
19564 # Strip MF so we end up with the name of the file.
19565 mf=`echo "$mf" | sed -e 's/:.*$//'`
19566 # Check whether this is an Automake generated Makefile or not.
19567 # We used to match only the files named `Makefile.in', but
19568 # some people rename them; so instead we look at the file content.
19569 # Grep'ing the first line is not enough: some people post-process
19570 # each Makefile.in and add a new line on top of each file to say so.
19571 # Grep'ing the whole file is not good either: AIX grep has a line
19572 # limit of 2048, but all sed's we know have understand at least 4000.
19573 if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
19574 dirpart=`$as_dirname -- "$mf" ||
19750 "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
19751 # Autoconf 2.62 quotes --file arguments for eval, but not when files
19752 # are listed without --file. Let's play safe and only enable the eval
19753 # if we detect the quoting.
19754 case $CONFIG_FILES in
19755 *\'*) eval set x "$CONFIG_FILES" ;;
19756 *) set x $CONFIG_FILES ;;
19757 esac
19758 shift
19759 for mf
19760 do
19761 # Strip MF so we end up with the name of the file.
19762 mf=`echo "$mf" | sed -e 's/:.*$//'`
19763 # Check whether this is an Automake generated Makefile or not.
19764 # We used to match only the files named `Makefile.in', but
19765 # some people rename them; so instead we look at the file content.
19766 # Grep'ing the first line is not enough: some people post-process
19767 # each Makefile.in and add a new line on top of each file to say so.
19768 # Grep'ing the whole file is not good either: AIX grep has a line
19769 # limit of 2048, but all sed's we know have understand at least 4000.
19770 if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
19771 dirpart=`$as_dirname -- "$mf" ||
1957519772 $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
1957619773 X"$mf" : 'X\(//\)[^/]' \| \
1957719774 X"$mf" : 'X\(//\)$' \| \
1959419791 q
1959519792 }
1959619793 s/.*/./; q'`
19597 else
19598 continue
19599 fi
19600 # Extract the definition of DEPDIR, am__include, and am__quote
19601 # from the Makefile without running `make'.
19602 DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
19603 test -z "$DEPDIR" && continue
19604 am__include=`sed -n 's/^am__include = //p' < "$mf"`
19605 test -z "am__include" && continue
19606 am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
19607 # When using ansi2knr, U may be empty or an underscore; expand it
19608 U=`sed -n 's/^U = //p' < "$mf"`
19609 # Find all dependency output files, they are included files with
19610 # $(DEPDIR) in their names. We invoke sed twice because it is the
19611 # simplest approach to changing $(DEPDIR) to its actual value in the
19612 # expansion.
19613 for file in `sed -n "
19614 s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
19615 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
19616 # Make sure the directory exists.
19617 test -f "$dirpart/$file" && continue
19618 fdir=`$as_dirname -- "$file" ||
19794 else
19795 continue
19796 fi
19797 # Extract the definition of DEPDIR, am__include, and am__quote
19798 # from the Makefile without running `make'.
19799 DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
19800 test -z "$DEPDIR" && continue
19801 am__include=`sed -n 's/^am__include = //p' < "$mf"`
19802 test -z "am__include" && continue
19803 am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
19804 # When using ansi2knr, U may be empty or an underscore; expand it
19805 U=`sed -n 's/^U = //p' < "$mf"`
19806 # Find all dependency output files, they are included files with
19807 # $(DEPDIR) in their names. We invoke sed twice because it is the
19808 # simplest approach to changing $(DEPDIR) to its actual value in the
19809 # expansion.
19810 for file in `sed -n "
19811 s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
19812 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
19813 # Make sure the directory exists.
19814 test -f "$dirpart/$file" && continue
19815 fdir=`$as_dirname -- "$file" ||
1961919816 $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
1962019817 X"$file" : 'X\(//\)[^/]' \| \
1962119818 X"$file" : 'X\(//\)$' \| \
1963819835 q
1963919836 }
1964019837 s/.*/./; q'`
19641 { as_dir=$dirpart/$fdir
19838 { as_dir=$dirpart/$fdir
1964219839 case $as_dir in #(
1964319840 -*) as_dir=./$as_dir;;
1964419841 esac
1967919876 } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
1968019877 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
1968119878 { (exit 1); exit 1; }; }; }
19682 # echo "creating $dirpart/$file"
19683 echo '# dummy' > "$dirpart/$file"
19879 # echo "creating $dirpart/$file"
19880 echo '# dummy' > "$dirpart/$file"
19881 done
1968419882 done
19685 done
19883 }
1968619884 ;;
1968719885 "libtool":C)
1968819886
1818 # License along with libatasmart. If not, If not, see
1919 # <http://www.gnu.org/licenses/>.
2020
21 AC_PREREQ(2.57)
21 AC_PREREQ(2.63)
2222
23 AC_INIT([libatasmart], 0.13, [mzyvongnfzneg (at) 0pointer (dot) net])
23 AC_INIT([libatasmart], 0.14, [mzyvongnfzneg (at) 0pointer (dot) net])
2424 AC_CONFIG_SRCDIR([atasmart.c])
2525 AC_CONFIG_HEADERS([config.h])
2626 AC_CONFIG_MACRO_DIR(m4)
2727
28 AM_INIT_AUTOMAKE([foreign 1.9 -Wall])
28 AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability silent-rules tar-pax])
2929
30 AC_SUBST(PACKAGE_URL, [https://http://git.0pointer.de/?p=libatasmart.git])
30 AC_SUBST(PACKAGE_URL, [http://git.0pointer.de/?p=libatasmart.git])
3131
32 AC_SUBST(LIBATASMART_VERSION_INFO, [3:3:3])
32 AC_SUBST(LIBATASMART_VERSION_INFO, [4:0:0])
3333
3434 AC_CANONICAL_HOST
3535
4545 AC_PROG_CC
4646 AM_PROG_CC_C_O
4747 AC_PROG_GCC_TRADITIONAL
48 AC_GNU_SOURCE
48 AC_USE_SYSTEM_EXTENSIONS
4949
5050 # C++
5151