Browse Source

DragonFly BSD is insane!

Douglas William Thrift 13 years ago
parent
commit
154914a72b
3 changed files with 271 additions and 39 deletions
  1. 243 29
      configure
  2. 12 5
      configure.ac
  3. 16 5
      dtpstree.cpp

+ 243 - 29
configure

@@ -594,6 +594,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
+ac_header_list=
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
 EGREP
@@ -2156,6 +2157,7 @@ $as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
+as_fn_append ac_header_list " kinfo.h"
 # Check that the precious variables saved in the cache have kept the same
 # value.
 ac_cache_corrupted=false
@@ -4242,6 +4244,27 @@ else
 fi
 
 
+
+
+
+  for ac_header in $ac_header_list
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kvm_openfiles" >&5
 $as_echo_n "checking for library containing kvm_openfiles... " >&6; }
 if test "${ac_cv_search_kvm_openfiles+set}" = set; then :
@@ -4302,7 +4325,10 @@ fi
 
 
 
-ac_fn_cxx_check_type "$LINENO" "struct kinfo_proc2" "ac_cv_type_struct_kinfo_proc2" "#include <kvm.h>
+ac_fn_cxx_check_type "$LINENO" "struct kinfo_proc2" "ac_cv_type_struct_kinfo_proc2" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4326,7 +4352,10 @@ else
   as_fn_error "You need libkvm" "$LINENO" 5
 fi
 
-	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "p_pid" "ac_cv_member_struct_kinfo_proc2_p_pid" "#include <kvm.h>
+	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "p_pid" "ac_cv_member_struct_kinfo_proc2_p_pid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4337,7 +4366,10 @@ if test "x$ac_cv_member_struct_kinfo_proc2_p_pid" = x""yes; then :
   $as_echo "#define HAVE_STRUCT_KINFO_PROCX_P_PID 1" >>confdefs.h
 
 else
-  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "ki_pid" "ac_cv_member_struct_kinfo_proc2_ki_pid" "#include <kvm.h>
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "ki_pid" "ac_cv_member_struct_kinfo_proc2_ki_pid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4345,7 +4377,21 @@ $ac_includes_default
 
 "
 if test "x$ac_cv_member_struct_kinfo_proc2_ki_pid" = x""yes; then :
-  $as_echo "#define HAVE_STRUCT_KINFO_PROCX__PID 1" >>confdefs.h
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KI_PID 1" >>confdefs.h
+
+else
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "kp_pid" "ac_cv_member_struct_kinfo_proc2_kp_pid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/user.h>
+$ac_includes_default
+
+"
+if test "x$ac_cv_member_struct_kinfo_proc2_kp_pid" = x""yes; then :
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KP_PID 1" >>confdefs.h
 
 else
   as_fn_error "You need libkvm" "$LINENO" 5
@@ -4353,7 +4399,12 @@ fi
 
 fi
 
-	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "p_ppid" "ac_cv_member_struct_kinfo_proc2_p_ppid" "#include <kvm.h>
+fi
+
+	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "p_ppid" "ac_cv_member_struct_kinfo_proc2_p_ppid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4364,7 +4415,10 @@ if test "x$ac_cv_member_struct_kinfo_proc2_p_ppid" = x""yes; then :
   $as_echo "#define HAVE_STRUCT_KINFO_PROCX_P_PPID 1" >>confdefs.h
 
 else
-  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "ki_ppid" "ac_cv_member_struct_kinfo_proc2_ki_ppid" "#include <kvm.h>
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "ki_ppid" "ac_cv_member_struct_kinfo_proc2_ki_ppid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4372,7 +4426,21 @@ $ac_includes_default
 
 "
 if test "x$ac_cv_member_struct_kinfo_proc2_ki_ppid" = x""yes; then :
-  $as_echo "#define HAVE_STRUCT_KINFO_PROCX__PPID 1" >>confdefs.h
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KI_PPID 1" >>confdefs.h
+
+else
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "kp_ppid" "ac_cv_member_struct_kinfo_proc2_kp_ppid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/user.h>
+$ac_includes_default
+
+"
+if test "x$ac_cv_member_struct_kinfo_proc2_kp_ppid" = x""yes; then :
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KP_PPID 1" >>confdefs.h
 
 else
   as_fn_error "You need libkvm" "$LINENO" 5
@@ -4380,7 +4448,12 @@ fi
 
 fi
 
-	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "p_ruid" "ac_cv_member_struct_kinfo_proc2_p_ruid" "#include <kvm.h>
+fi
+
+	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "p_ruid" "ac_cv_member_struct_kinfo_proc2_p_ruid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4391,7 +4464,10 @@ if test "x$ac_cv_member_struct_kinfo_proc2_p_ruid" = x""yes; then :
   $as_echo "#define HAVE_STRUCT_KINFO_PROCX_P_RUID 1" >>confdefs.h
 
 else
-  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "ki_ruid" "ac_cv_member_struct_kinfo_proc2_ki_ruid" "#include <kvm.h>
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "ki_ruid" "ac_cv_member_struct_kinfo_proc2_ki_ruid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4399,7 +4475,21 @@ $ac_includes_default
 
 "
 if test "x$ac_cv_member_struct_kinfo_proc2_ki_ruid" = x""yes; then :
-  $as_echo "#define HAVE_STRUCT_KINFO_PROCX__RUID 1" >>confdefs.h
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KI_RUID 1" >>confdefs.h
+
+else
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "kp_ruid" "ac_cv_member_struct_kinfo_proc2_kp_ruid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/user.h>
+$ac_includes_default
+
+"
+if test "x$ac_cv_member_struct_kinfo_proc2_kp_ruid" = x""yes; then :
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KP_RUID 1" >>confdefs.h
 
 else
   as_fn_error "You need libkvm" "$LINENO" 5
@@ -4407,7 +4497,12 @@ fi
 
 fi
 
-	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "p_comm" "ac_cv_member_struct_kinfo_proc2_p_comm" "#include <kvm.h>
+fi
+
+	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "p_comm" "ac_cv_member_struct_kinfo_proc2_p_comm" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4418,7 +4513,10 @@ if test "x$ac_cv_member_struct_kinfo_proc2_p_comm" = x""yes; then :
   $as_echo "#define HAVE_STRUCT_KINFO_PROCX_P_COMM 1" >>confdefs.h
 
 else
-  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "ki_comm" "ac_cv_member_struct_kinfo_proc2_ki_comm" "#include <kvm.h>
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "ki_comm" "ac_cv_member_struct_kinfo_proc2_ki_comm" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4426,7 +4524,21 @@ $ac_includes_default
 
 "
 if test "x$ac_cv_member_struct_kinfo_proc2_ki_comm" = x""yes; then :
-  $as_echo "#define HAVE_STRUCT_KINFO_PROCX__COMM 1" >>confdefs.h
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KI_COMM 1" >>confdefs.h
+
+else
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc2" "kp_comm" "ac_cv_member_struct_kinfo_proc2_kp_comm" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/user.h>
+$ac_includes_default
+
+"
+if test "x$ac_cv_member_struct_kinfo_proc2_kp_comm" = x""yes; then :
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KP_COMM 1" >>confdefs.h
 
 else
   as_fn_error "You need libkvm" "$LINENO" 5
@@ -4434,10 +4546,15 @@ fi
 
 fi
 
+fi
+
 
 
 else
-  ac_fn_cxx_check_type "$LINENO" "struct kinfo_proc" "ac_cv_type_struct_kinfo_proc" "#include <kvm.h>
+  ac_fn_cxx_check_type "$LINENO" "struct kinfo_proc" "ac_cv_type_struct_kinfo_proc" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4461,7 +4578,10 @@ else
   as_fn_error "You need libkvm" "$LINENO" 5
 fi
 
-		ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "ki_pid" "ac_cv_member_struct_kinfo_proc_ki_pid" "#include <kvm.h>
+		ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "ki_pid" "ac_cv_member_struct_kinfo_proc_ki_pid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4472,7 +4592,24 @@ if test "x$ac_cv_member_struct_kinfo_proc_ki_pid" = x""yes; then :
   $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KI_PID 1" >>confdefs.h
 
 else
-  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "p_pid" "ac_cv_member_struct_kinfo_proc_p_pid" "#include <kvm.h>
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "kp_pid" "ac_cv_member_struct_kinfo_proc_kp_pid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/user.h>
+$ac_includes_default
+
+"
+if test "x$ac_cv_member_struct_kinfo_proc_kp_pid" = x""yes; then :
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KP_PID 1" >>confdefs.h
+
+else
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "p_pid" "ac_cv_member_struct_kinfo_proc_p_pid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4480,7 +4617,7 @@ $ac_includes_default
 
 "
 if test "x$ac_cv_member_struct_kinfo_proc_p_pid" = x""yes; then :
-  $as_echo "#define HAVE_STRUCT_KINFO_PROCX__PID 1" >>confdefs.h
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_P_PID 1" >>confdefs.h
 
 else
   as_fn_error "You need libkvm" "$LINENO" 5
@@ -4488,7 +4625,12 @@ fi
 
 fi
 
-	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "ki_ppid" "ac_cv_member_struct_kinfo_proc_ki_ppid" "#include <kvm.h>
+fi
+
+	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "ki_ppid" "ac_cv_member_struct_kinfo_proc_ki_ppid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4499,7 +4641,24 @@ if test "x$ac_cv_member_struct_kinfo_proc_ki_ppid" = x""yes; then :
   $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KI_PPID 1" >>confdefs.h
 
 else
-  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "p_ppid" "ac_cv_member_struct_kinfo_proc_p_ppid" "#include <kvm.h>
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "kp_ppid" "ac_cv_member_struct_kinfo_proc_kp_ppid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/user.h>
+$ac_includes_default
+
+"
+if test "x$ac_cv_member_struct_kinfo_proc_kp_ppid" = x""yes; then :
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KP_PPID 1" >>confdefs.h
+
+else
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "p_ppid" "ac_cv_member_struct_kinfo_proc_p_ppid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4507,7 +4666,7 @@ $ac_includes_default
 
 "
 if test "x$ac_cv_member_struct_kinfo_proc_p_ppid" = x""yes; then :
-  $as_echo "#define HAVE_STRUCT_KINFO_PROCX__PPID 1" >>confdefs.h
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_P_PPID 1" >>confdefs.h
 
 else
   as_fn_error "You need libkvm" "$LINENO" 5
@@ -4515,7 +4674,12 @@ fi
 
 fi
 
-	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "ki_ruid" "ac_cv_member_struct_kinfo_proc_ki_ruid" "#include <kvm.h>
+fi
+
+	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "ki_ruid" "ac_cv_member_struct_kinfo_proc_ki_ruid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4526,7 +4690,24 @@ if test "x$ac_cv_member_struct_kinfo_proc_ki_ruid" = x""yes; then :
   $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KI_RUID 1" >>confdefs.h
 
 else
-  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "p_ruid" "ac_cv_member_struct_kinfo_proc_p_ruid" "#include <kvm.h>
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "kp_ruid" "ac_cv_member_struct_kinfo_proc_kp_ruid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/user.h>
+$ac_includes_default
+
+"
+if test "x$ac_cv_member_struct_kinfo_proc_kp_ruid" = x""yes; then :
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KP_RUID 1" >>confdefs.h
+
+else
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "p_ruid" "ac_cv_member_struct_kinfo_proc_p_ruid" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4534,7 +4715,7 @@ $ac_includes_default
 
 "
 if test "x$ac_cv_member_struct_kinfo_proc_p_ruid" = x""yes; then :
-  $as_echo "#define HAVE_STRUCT_KINFO_PROCX__RUID 1" >>confdefs.h
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_P_RUID 1" >>confdefs.h
 
 else
   as_fn_error "You need libkvm" "$LINENO" 5
@@ -4542,7 +4723,12 @@ fi
 
 fi
 
-	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "ki_comm" "ac_cv_member_struct_kinfo_proc_ki_comm" "#include <kvm.h>
+fi
+
+	ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "ki_comm" "ac_cv_member_struct_kinfo_proc_ki_comm" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4553,7 +4739,24 @@ if test "x$ac_cv_member_struct_kinfo_proc_ki_comm" = x""yes; then :
   $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KI_COMM 1" >>confdefs.h
 
 else
-  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "p_comm" "ac_cv_member_struct_kinfo_proc_p_comm" "#include <kvm.h>
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "kp_comm" "ac_cv_member_struct_kinfo_proc_kp_comm" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/user.h>
+$ac_includes_default
+
+"
+if test "x$ac_cv_member_struct_kinfo_proc_kp_comm" = x""yes; then :
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_KP_COMM 1" >>confdefs.h
+
+else
+  ac_fn_cxx_check_member "$LINENO" "struct kinfo_proc" "p_comm" "ac_cv_member_struct_kinfo_proc_p_comm" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4561,7 +4764,7 @@ $ac_includes_default
 
 "
 if test "x$ac_cv_member_struct_kinfo_proc_p_comm" = x""yes; then :
-  $as_echo "#define HAVE_STRUCT_KINFO_PROCX__COMM 1" >>confdefs.h
+  $as_echo "#define HAVE_STRUCT_KINFO_PROCX_P_COMM 1" >>confdefs.h
 
 else
   as_fn_error "You need libkvm" "$LINENO" 5
@@ -4569,6 +4772,8 @@ fi
 
 fi
 
+fi
+
 
 
 else
@@ -4577,7 +4782,10 @@ fi
 
 fi
 
-ac_fn_cxx_check_decl "$LINENO" "KERN_PROC_PROC" "ac_cv_have_decl_KERN_PROC_PROC" "#include <kvm.h>
+ac_fn_cxx_check_decl "$LINENO" "KERN_PROC_PROC" "ac_cv_have_decl_KERN_PROC_PROC" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4593,7 +4801,10 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_KERN_PROC_PROC $ac_have_decl
 _ACEOF
-ac_fn_cxx_check_decl "$LINENO" "KERN_PROC_KTHREAD" "ac_cv_have_decl_KERN_PROC_KTHREAD" "#include <kvm.h>
+ac_fn_cxx_check_decl "$LINENO" "KERN_PROC_KTHREAD" "ac_cv_have_decl_KERN_PROC_KTHREAD" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -4609,7 +4820,10 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_KERN_PROC_KTHREAD $ac_have_decl
 _ACEOF
-ac_fn_cxx_check_decl "$LINENO" "KERN_PROC_ALL" "ac_cv_have_decl_KERN_PROC_ALL" "#include <kvm.h>
+ac_fn_cxx_check_decl "$LINENO" "KERN_PROC_ALL" "ac_cv_have_decl_KERN_PROC_ALL" "#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>

+ 12 - 5
configure.ac

@@ -89,8 +89,12 @@ AC_CHECK_HEADER([vis.h], [], [DT_MSG_BSD])
 AC_SEARCH_LIBS([strvis], [bsd], [], [DT_MSG_BSD])
 AC_DEFUN([DT_MSG_KVM], [AC_MSG_ERROR([You need libkvm])])
 AC_CHECK_HEADER([kvm.h], [], [DT_MSG_KVM])
+AC_CHECK_HEADERS_ONCE([kinfo.h])
 AC_SEARCH_LIBS([kvm_openfiles], [kvm], [], [DT_MSG_KVM])
-AC_DEFUN([DT_INCLUDES_KVM], [#include <kvm.h>
+AC_DEFUN([DT_INCLUDES_KVM], [#ifdef HAVE_KINFO_H
+#include <kinfo.h>
+#endif
+#include <kvm.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/user.h>
@@ -100,8 +104,11 @@ AC_DEFUN([DT_CHECK_MEMBERS_KVM],
 		[AC_CHECK_MEMBER([struct ]$1[.]$2[_]dt_member_suffix,
 			[AC_DEFINE([HAVE_STRUCT_KINFO_PROCX_]m4_toupper($2)[_]m4_toupper(dt_member_suffix))],
 			[AC_CHECK_MEMBER([struct ]$1[.]$3[_]dt_member_suffix,
-				[AC_DEFINE([HAVE_STRUCT_KINFO_PROCX_]m4_toupper($4)[_]m4_toupper(dt_member_suffix))],
-				[DT_MSG_KVM], [DT_INCLUDES_KVM]
+				[AC_DEFINE([HAVE_STRUCT_KINFO_PROCX_]m4_toupper($3)[_]m4_toupper(dt_member_suffix))],
+				[AC_CHECK_MEMBER([struct ]$1[.]$4[_]dt_member_suffix,
+					[AC_DEFINE([HAVE_STRUCT_KINFO_PROCX_]m4_toupper($4)[_]m4_toupper(dt_member_suffix))],
+					[DT_MSG_KVM], [DT_INCLUDES_KVM]
+				)], [DT_INCLUDES_KVM]
 			)], [DT_INCLUDES_KVM]
 		)]
 	)]
@@ -110,12 +117,12 @@ AC_CHECK_TYPE([struct kinfo_proc2],
 	[AC_DEFINE([HAVE_STRUCT_KINFO_PROC2])
 	AC_CHECK_FUNC([kvm_getargv2], [], [DT_MSG_KVM])
 	AC_CHECK_FUNC([kvm_getproc2], [], [DT_MSG_KVM])
-	DT_CHECK_MEMBERS_KVM([kinfo_proc2], [p], [ki])],
+	DT_CHECK_MEMBERS_KVM([kinfo_proc2], [p], [ki], [kp])],
 	[AC_CHECK_TYPE([struct kinfo_proc],
 		[AC_DEFINE([HAVE_STRUCT_KINFO_PROC])
 		AC_CHECK_FUNC([kvm_getargv], [], [DT_MSG_KVM])
 		AC_CHECK_FUNC([kvm_getprocs], [], [DT_MSG_KVM])
-		DT_CHECK_MEMBERS_KVM([kinfo_proc], [ki], [p])],
+		DT_CHECK_MEMBERS_KVM([kinfo_proc], [ki], [kp], [p])],
 		[DT_MSG_KVM], [DT_INCLUDES_KVM]
 	)], [DT_INCLUDES_KVM]
 )

+ 16 - 5
dtpstree.cpp

@@ -27,7 +27,6 @@
 #include <cstring>
 #include <iostream>
 #include <map>
-#include <set>
 #include <sstream>
 #include <string>
 #include <vector>
@@ -129,6 +128,8 @@ inline pid_t pid(Proc *proc)
 {
 #	ifdef HAVE_STRUCT_KINFO_PROCX_KI_PID
 	return proc->ki_pid;
+#	elif defined(HAVE_STRUCT_KINFO_PROCX_KP_PID)
+	return proc->kp_pid;
 #	elif defined(HAVE_STRUCT_KINFO_PROCX_P_PID)
 	return proc->p_pid;
 #	endif
@@ -139,6 +140,8 @@ inline pid_t ppid(Proc *proc)
 {
 #	ifdef HAVE_STRUCT_KINFO_PROCX_KI_PPID
 	return proc->ki_ppid;
+#	elif defined(HAVE_STRUCT_KINFO_PROCX_KP_PPID)
+	return proc->kp_ppid;
 #	elif defined(HAVE_STRUCT_KINFO_PROCX_P_PPID)
 	return proc->p_ppid;
 #	endif
@@ -149,6 +152,8 @@ inline uid_t ruid(Proc *proc)
 {
 #	ifdef HAVE_STRUCT_KINFO_PROCX_KI_RUID
 	return proc->ki_ruid;
+#	elif defined(HAVE_STRUCT_KINFO_PROCX_KP_RUID)
+	return proc->kp_ruid;
 #	elif defined(HAVE_STRUCT_KINFO_PROCX_P_RUID)
 	return proc->p_ruid;
 #	endif
@@ -159,6 +164,8 @@ inline char *comm(Proc *proc)
 {
 #	ifdef HAVE_STRUCT_KINFO_PROCX_KI_COMM
 	return proc->ki_comm;
+#	elif defined(HAVE_STRUCT_KINFO_PROCX_KP_COMM)
+	return proc->kp_comm;
 #	elif defined(HAVE_STRUCT_KINFO_PROCX_P_COMM)
 	return proc->p_comm;
 #	endif
@@ -534,7 +541,7 @@ private:
 template <typename Type>
 struct Proc
 {
-	typedef std::map<pid_t, Proc<Type> *> PidMap;
+	typedef std::multimap<pid_t, Proc<Type> *> PidMap;
 	typedef std::multimap<std::string, Proc<Type> *> NameMap;
 
 private:
@@ -569,8 +576,8 @@ public:
 			return;
 
 		proc->parent_ = this;
-		childrenByPid_[proc->pid()] = proc;
 
+		childrenByPid_.insert(typename PidMap::value_type(proc->pid(), proc));
 		childrenByName_.insert(typename NameMap::value_type(proc->name(), proc));
 	}
 
@@ -1102,14 +1109,18 @@ static void tree(pid_t hpid, pid_t pid, uint16_t flags, uid_t uid)
 	typename Proc<Type>::PidMap pids;
 
 	_forall (Pointer, proc, procs, procs + count)
-		if (flags & ShowKernel || kvm::ppid(proc) != 0 || kvm::pid(proc) == 1)
-			pids[kvm::pid(proc)] = new Proc<Type>(flags, kd, proc);
+		if (flags & ShowKernel || kvm::ppid(proc) > 0 || kvm::pid(proc) == 1)
+			pids.insert(typename Proc<Type>::PidMap::value_type(kvm::pid(proc), new Proc<Type>(flags, kd, proc)));
 
 	enum { PidSort, NameSort } sort(flags & NumericSort ? PidSort : NameSort);
 
 	_tforeach (typename Proc<Type>::PidMap, pid, pids)
 	{
 		Proc<Type> *proc(pid->second);
+
+		if (proc->parent() == -1)
+			continue;
+
 		typename Proc<Type>::PidMap::iterator parent(pids.find(proc->parent()));
 
 		if (parent != pids.end())