configure.ac 13.9 KB
Newer Older
Hisham Muhammad's avatar
Hisham Muhammad committed
1
2
3
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

4
AC_PREREQ(2.65)
Hisham Muhammad's avatar
Hisham Muhammad committed
5
AC_INIT([htop],[3.0.0beta3],[hisham@gobolinux.org])
6

Hisham's avatar
Hisham committed
7
8
SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +%s)}"
year=$(date -u -d "@$SOURCE_DATE_EPOCH" "+%Y" 2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" "+%Y" 2>/dev/null || date -u "+%Y")
Hisham Muhammad's avatar
Hisham Muhammad committed
9

Hisham Muhammad's avatar
Hisham Muhammad committed
10
AC_CONFIG_SRCDIR([htop.c])
11
AC_CONFIG_AUX_DIR([.])
12
AC_CONFIG_HEADERS([config.h])
13
AC_CONFIG_MACRO_DIR([m4])
Hisham Muhammad's avatar
Hisham Muhammad committed
14

15
16
17
18
19
# Required by hwloc scripts
AC_CANONICAL_TARGET

AM_INIT_AUTOMAKE([1.11])

Hisham Muhammad's avatar
Hisham Muhammad committed
20
# Checks for programs.
Hisham Muhammad's avatar
Hisham Muhammad committed
21
# ----------------------------------------------------------------------
Hisham Muhammad's avatar
Hisham Muhammad committed
22
AC_PROG_CC
23
24
AM_PROG_CC_C_O

25
26
27
# Required by hwloc scripts
AC_USE_SYSTEM_EXTENSIONS

28
29
# Checks for platform.
# ----------------------------------------------------------------------
30
case "$target_os" in
James Clarke's avatar
James Clarke committed
31
linux*|gnu*)
32
33
   my_htop_platform=linux
   ;;
34
freebsd*|kfreebsd*)
Hisham Muhammad's avatar
Hisham Muhammad committed
35
36
   my_htop_platform=freebsd
   ;;
37
openbsd*)
38
39
   my_htop_platform=openbsd
   ;;
40
41
42
dragonfly*)
   my_htop_platform=dragonflybsd
   ;;
43
darwin*)
44
45
   my_htop_platform=darwin
   ;;
46
47
48
49
50
*)
   my_htop_platform=unsupported
   ;;
esac

Hisham Muhammad's avatar
Hisham Muhammad committed
51
# Checks for libraries.
Hisham Muhammad's avatar
Hisham Muhammad committed
52
# ----------------------------------------------------------------------
53
54
AC_CHECK_LIB([m], [ceil], [], [missing_libraries="$missing_libraries libm"])

Hisham Muhammad's avatar
Hisham Muhammad committed
55
# Checks for header files.
Hisham Muhammad's avatar
Hisham Muhammad committed
56
# ----------------------------------------------------------------------
Hisham Muhammad's avatar
Hisham Muhammad committed
57
58
AC_HEADER_DIRENT
AC_HEADER_STDC
59
AC_CHECK_HEADERS([stdlib.h string.h strings.h sys/param.h sys/time.h unistd.h],[:],[
60
61
  missing_headers="$missing_headers $ac_header"
])
62
AC_CHECK_HEADERS([execinfo.h],[:],[:])
63

64
65
66
67
68
AC_HEADER_MAJOR
dnl glibc 2.25 deprecates 'major' and 'minor' in <sys/types.h> and requires to
dnl include <sys/sysmacros.h>. However the logic in AC_HEADER_MAJOR has not yet
dnl been updated in Autoconf 2.69, so use a workaround:
m4_version_prereq([2.70], [],
Jesin's avatar
Jesin committed
69
[if test "x$ac_cv_header_sys_mkdev_h" = xno; then
70
71
72
73
   AC_CHECK_HEADER(sys/sysmacros.h, [AC_DEFINE(MAJOR_IN_SYSMACROS, 1,
      [Define to 1 if `major', `minor', and `makedev' are declared in <sys/sysmacros.h>.])])
fi])

Hisham Muhammad's avatar
Hisham Muhammad committed
74
# Checks for typedefs, structures, and compiler characteristics.
Hisham Muhammad's avatar
Hisham Muhammad committed
75
# ----------------------------------------------------------------------
Hisham Muhammad's avatar
Hisham Muhammad committed
76
77
78
79
80
AC_HEADER_STDBOOL
AC_C_CONST
AC_TYPE_PID_T
AC_TYPE_UID_T

Hisham Muhammad's avatar
Hisham Muhammad committed
81
82
# Checks for library functions and compiler features.
# ----------------------------------------------------------------------
Hisham Muhammad's avatar
Hisham Muhammad committed
83
84
85
86
87
AC_FUNC_CLOSEDIR_VOID
AC_TYPE_SIGNAL
AC_FUNC_STAT
AC_CHECK_FUNCS([memmove strncasecmp strstr strdup])

88
save_cflags="${CFLAGS}"
Hisham Muhammad's avatar
Hisham Muhammad committed
89
90
CFLAGS="${CFLAGS} -std=c99"
AC_MSG_CHECKING([whether gcc -std=c99 option works])
91
92
93
94
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
   [AC_INCLUDES_DEFAULT], [[char *a; a = strdup("foo"); int i = 0; i++; // C99]])],
   [AC_MSG_RESULT([yes])],
   [AC_MSG_ERROR([htop is written in C99. A newer version of gcc is required.])])
95
CFLAGS="$save_cflags"
Hisham Muhammad's avatar
Hisham Muhammad committed
96

97
98
99
save_cflags="${CFLAGS}"
CFLAGS="$CFLAGS -Wextra"
AC_MSG_CHECKING([if compiler supports -Wextra])
100
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],[
101
102
103
104
105
106
107
108
109
   wextra_flag=-Wextra
   AC_MSG_RESULT([yes])
],[
   wextra_flag=
   AC_MSG_RESULT([no])
])
CFLAGS="$save_cflags"
AC_SUBST(wextra_flag)

Hisham Muhammad's avatar
Hisham Muhammad committed
110
111
# Checks for features and flags.
# ----------------------------------------------------------------------
Hisham Muhammad's avatar
Hisham Muhammad committed
112
PROCDIR=/proc
113

114
AC_ARG_ENABLE(proc, [AS_HELP_STRING([--enable-proc], [use Linux-compatible proc filesystem])], enable_proc="yes", enable_proc="no")
115
if test "x$enable_proc" = xyes; then
116
117
   # An enabled proc assumes we're emulating Linux.
   my_htop_platform=linux
118
119
120
   AC_DEFINE(HAVE_PROC, 1, [Define if using a Linux-compatible proc filesystem.])
fi

121
AC_ARG_WITH(proc, [AS_HELP_STRING([--with-proc=DIR], [Location of a Linux-compatible proc filesystem (default=/proc).])],
Hisham Muhammad's avatar
Hisham Muhammad committed
122

123
124
125
126
127
if test -n "$withval"; then
   AC_DEFINE_UNQUOTED(PROCDIR, "$withval", [Path of proc filesystem])
   PROCDIR="$withval"
fi,
AC_DEFINE(PROCDIR, "/proc", [Path of proc filesystem]))
Hisham Muhammad's avatar
Hisham Muhammad committed
128

Hisham Muhammad's avatar
Hisham Muhammad committed
129
if test "x$cross_compiling" = xno; then
130
131
132
133
   if test "x$enable_proc" = xyes; then
      AC_CHECK_FILE($PROCDIR/stat,,AC_MSG_ERROR(Cannot find $PROCDIR/stat. Make sure you have a Linux-compatible /proc filesystem mounted. See the file README for help.))
      AC_CHECK_FILE($PROCDIR/meminfo,,AC_MSG_ERROR(Cannot find $PROCDIR/meminfo. Make sure you have a Linux-compatible /proc filesystem mounted. See the file README for help.))
   fi
Hisham Muhammad's avatar
Hisham Muhammad committed
134
135
fi

136
AC_ARG_ENABLE(openvz, [AS_HELP_STRING([--enable-openvz], [enable OpenVZ support])], ,enable_openvz="no")
137
if test "x$enable_openvz" = xyes; then
138
139
140
   AC_DEFINE(HAVE_OPENVZ, 1, [Define if openvz support enabled.])
fi

141
AC_ARG_ENABLE(cgroup, [AS_HELP_STRING([--enable-cgroup], [enable cgroups support])], ,enable_cgroup="no")
142
143
144
145
if test "x$enable_cgroup" = xyes; then
   AC_DEFINE(HAVE_CGROUP, 1, [Define if cgroup support enabled.])
fi

146
AC_ARG_ENABLE(vserver, [AS_HELP_STRING([--enable-vserver], [enable VServer support])], ,enable_vserver="no")
Hisham Muhammad's avatar
Hisham Muhammad committed
147
148
149
150
if test "x$enable_vserver" = xyes; then
    AC_DEFINE(HAVE_VSERVER, 1, [Define if vserver support enabled.])
fi

151
AC_ARG_ENABLE(ancient_vserver, [AS_HELP_STRING([--enable-ancient-vserver], [enable ancient VServer support (implies --enable-vserver)])], ,enable_ancient_vserver="no")
Hisham Muhammad's avatar
Hisham Muhammad committed
152
153
154
155
156
if test "x$enable_ancient_vserver" = xyes; then
    AC_DEFINE(HAVE_VSERVER, 1, [Define if vserver support enabled.])
    AC_DEFINE(HAVE_ANCIENT_VSERVER, 1, [Define if ancient vserver support enabled.])
fi

157
AC_ARG_ENABLE(taskstats, [AS_HELP_STRING([--enable-taskstats], [enable per-task IO Stats (taskstats kernel sup required)])], ,enable_taskstats="yes")
158
159
160
161
if test "x$enable_taskstats" = xyes; then
    AC_DEFINE(HAVE_TASKSTATS, 1, [Define if taskstats support enabled.])
fi

162
163
# HTOP_CHECK_SCRIPT(LIBNAME, FUNCTION, DEFINE, CONFIG_SCRIPT, ELSE_PART)
m4_define([HTOP_CHECK_SCRIPT],
164
[
165
166
   if test ! -z "m4_toupper($HTOP_[$1]_CONFIG_SCRIPT)"; then
      # to be used to set the path to ncurses*-config when cross-compiling
167
168
      htop_config_script_libs=$(m4_toupper($HTOP_[$1]_CONFIG_SCRIPT) --libs 2> /dev/null)
      htop_config_script_cflags=$(m4_toupper($HTOP_[$1]_CONFIG_SCRIPT) --cflags 2> /dev/null)
169
   else
170
171
      htop_config_script_libs=$([$4] --libs 2> /dev/null)
      htop_config_script_cflags=$([$4] --cflags 2> /dev/null)
172
   fi
173
174
   htop_script_success=no
   htop_save_LDFLAGS="$LDFLAGS"
175
176
177
178
   htop_save_CFLAGS="$CFLAGS"
   if test ! "x$htop_config_script_libs" = x; then
      LDFLAGS="$htop_config_script_libs $LDFLAGS"
      CFLAGS="$htop_config_script_cflags $CFLAGS"
179
180
      AC_CHECK_LIB([$1], [$2], [
         AC_DEFINE([$3], 1, [The library is present.])
181
         LIBS="$htop_config_script_libs $LIBS "
182
         htop_script_success=yes
183
184
185
      ], [
        CFLAGS="$htop_save_CFLAGS"
      ])
186
      LDFLAGS="$htop_save_LDFLAGS"
187
   fi
Hisham Muhammad's avatar
Oops!    
Hisham Muhammad committed
188
   if test "x$htop_script_success" = xno; then
189
      [$5]
190
   fi
191
192
193
194
195
])

# HTOP_CHECK_LIB(LIBNAME, FUNCTION, DEFINE, ELSE_PART)
m4_define([HTOP_CHECK_LIB],
[
196
197
   AC_CHECK_LIB([$1], [$2], [
      AC_DEFINE([$3], 1, [The library is present.])
198
199
      LIBS="-l[$1] $LIBS "
   ], [$4])
200
201
])

202
AC_ARG_ENABLE(unicode, [AS_HELP_STRING([--enable-unicode], [enable Unicode support])], ,enable_unicode="yes")
203
if test "x$enable_unicode" = xyes; then
204
   HTOP_CHECK_SCRIPT([ncursesw6], [addnwstr], [HAVE_LIBNCURSESW], "ncursesw6-config",
205
206
207
208
209
210
211
212
213
    HTOP_CHECK_SCRIPT([ncursesw], [addnwstr], [HAVE_LIBNCURSESW], "ncursesw6-config",
     HTOP_CHECK_SCRIPT([ncursesw], [addnwstr], [HAVE_LIBNCURSESW], "ncursesw5-config",
      HTOP_CHECK_SCRIPT([ncurses], [addnwstr], [HAVE_LIBNCURSESW], "ncurses5-config",
       HTOP_CHECK_LIB([ncursesw6], [addnwstr], [HAVE_LIBNCURSESW],
        HTOP_CHECK_LIB([ncursesw], [addnwstr], [HAVE_LIBNCURSESW],
         HTOP_CHECK_LIB([ncurses], [addnwstr], [HAVE_LIBNCURSESW],
       missing_libraries="$missing_libraries libncursesw"
       AC_MSG_ERROR([You may want to use --disable-unicode or install libncursesw.])
   )))))))
214

215
   AC_CHECK_HEADERS([ncursesw/curses.h],[:],
216
217
218
      [AC_CHECK_HEADERS([ncurses/ncurses.h],[:],
         [AC_CHECK_HEADERS([ncurses/curses.h],[:],
            [AC_CHECK_HEADERS([ncurses.h],[:],[missing_headers="$missing_headers $ac_header"])])])])
219
else
220
221
222
223
224
225
226
   HTOP_CHECK_SCRIPT([ncurses6], [refresh], [HAVE_LIBNCURSES], "ncurses6-config",
    HTOP_CHECK_SCRIPT([ncurses], [refresh], [HAVE_LIBNCURSES], "ncurses5-config",
     HTOP_CHECK_LIB([ncurses6],  [refresh], [HAVE_LIBNCURSES],
      HTOP_CHECK_LIB([ncurses],  [refresh], [HAVE_LIBNCURSES],
      missing_libraries="$missing_libraries libncurses"
   ))))
   
227
228
229
230
   AC_CHECK_HEADERS([curses.h],[:],
      [AC_CHECK_HEADERS([ncurses/curses.h],[:],
         [AC_CHECK_HEADERS([ncurses/ncurses.h],[:],
            [AC_CHECK_HEADERS([ncurses.h],[:],[missing_headers="$missing_headers $ac_header"])])])])
231
232
fi

Hisham Muhammad's avatar
Hisham Muhammad committed
233
234
235
236
if test "$my_htop_platform" = "freebsd"; then
   AC_CHECK_LIB([kvm], [kvm_open], [], [missing_libraries="$missing_libraries libkvm"])
fi

237
238
239
240
if test "$my_htop_platform" = "openbsd"; then
   AC_CHECK_LIB([kvm], [kvm_open], [], [missing_libraries="$missing_libraries libkvm"])
fi

241
AC_ARG_ENABLE(linux_affinity, [AS_HELP_STRING([--enable-linux-affinity], [enable Linux sched_setaffinity and sched_getaffinity for affinity support, disables hwloc])], ,enable_linux_affinity="yes")
Hisham's avatar
Hisham committed
242
if test "x$enable_linux_affinity" = xyes -a "x$cross_compiling" = xno; then
243
244
245
246
247
248
249
250
251
252
253
   AC_MSG_CHECKING([for usable sched_setaffinity])
   AC_RUN_IFELSE([
     AC_LANG_PROGRAM([[
       #include <sched.h>
       #include <errno.h>
       static cpu_set_t cpuset;
       ]], [[
       CPU_ZERO(&cpuset);
       sched_setaffinity(0, sizeof(cpu_set_t), &cpuset);
       if (errno == ENOSYS) return 1;
       ]])],
254
     [AC_MSG_RESULT([yes])],
Hisham's avatar
Hisham committed
255
     [enable_linux_affinity=no
256
257
      AC_MSG_RESULT([no])])
fi
Hisham's avatar
Hisham committed
258
259
if test "x$enable_linux_affinity" = xyes; then
   AC_DEFINE(HAVE_LINUX_AFFINITY, 1, [Define if Linux sched_setaffinity and sched_getaffinity are to be used.])
260
261
fi

262
AC_ARG_ENABLE(hwloc, [AS_HELP_STRING([--enable-hwloc], [enable hwloc support for CPU affinity])],, enable_hwloc="no")
263
if test "x$enable_hwloc" = xyes
264
then
Hisham's avatar
Hisham committed
265
   AC_CHECK_LIB([hwloc], [hwloc_get_proc_cpubind], [], [missing_libraries="$missing_libraries libhwloc"])
266
   AC_CHECK_HEADERS([hwloc.h],[:], [missing_headers="$missing_headers $ac_header"])
267
fi
268

269
270
271
272
273
274
AC_ARG_ENABLE(setuid, [AS_HELP_STRING([--enable-setuid], [enable setuid support for platforms that need it])],, enable_setuid="no")
if test "x$enable_setuid" = xyes
then
   AC_DEFINE(HAVE_SETUID_ENABLED, 1, [Define if setuid support should be enabled.])
fi

275
AC_ARG_ENABLE(perfcounters, [AS_HELP_STRING([--enable-perfcounters], [enable hardware performance counters])],, enable_perfcounters="yes")
276
if test "x$enable_perfcounters" = "xyes" -a "$my_htop_platform" = "linux"
277
then
278
279
   AC_DEFINE(HAVE_PERFCOUNTERS, 1, [Define if hardware performance counter support should be enabled.])

280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
   AC_CHECK_HEADERS([linux/perf_counter.h], [have_perf_counter=yes],
                                            [have_perf_counter=no])
   
   AC_CHECK_HEADERS([linux/perf_event.h], [have_perf_event=yes],
                                          [have_perf_event=no])
   
   if test "x${have_perf_counter}" = xno -a "x${have_perf_event}" = xno; then
      os=`uname -s -r`
      AC_MSG_FAILURE([
     ------------------------------------------------------------
      Could not locate linux/perf_count.h or linux/perf_event.h.
      Are performance counters supported on this machine?
      Linux 2.6.31+ is required.
      uname reports: ${os}
     ------------------------------------------------------------])
   fi
   
   # Check for hardware architecture
   no_target=yes
   AC_MSG_CHECKING([hardware])
   hw=`uname -m`
   case $hw in
      x86_64 | i386 | i686 ) :
         AC_MSG_RESULT([x86])
         AC_DEFINE([TARGET_X86], [1], [Define to 1 if the target is x86.])
         no_target=no
         ;;
      unknown ) :
         AC_MSG_RESULT([unknown])
         AC_MSG_WARN([Could not detect architecture])
         ;;
      * ) :
         AC_MSG_RESULT([$hw])
         ;;
   esac
   
   if test x$no_target = xyes; then
      AC_DEFINE([NOTARGET], [1], [Define to 1 when no specific target is supported.])
   fi
fi

321
322
323
AC_ARG_ENABLE(delayacct, [AS_HELP_STRING([--enable-delayacct], [enable linux delay accounting])],, enable_delayacct="no")
if test "x$enable_delayacct" = xyes
then
324
   PKG_PROG_PKG_CONFIG()
325
326
   PKG_CHECK_MODULES(LIBNL3, libnl-3.0, [], [missing_libraries="$missing_libraries libnl-3"])
   PKG_CHECK_MODULES(LIBNL3GENL, libnl-genl-3.0, [], [missing_libraries="$missing_libraries libnl-genl-3"])
Jesin's avatar
Jesin committed
327
328
   CFLAGS="$CFLAGS $LIBNL3_CFLAGS $LIBNL3GENL_CFLAGS"
   LIBS="$LIBS $LIBNL3_LIBS $LIBNL3GENL_LIBS"
329
330
331
332
   AC_DEFINE(HAVE_DELAYACCT, 1, [Define if delay accounting support should be enabled.])
fi


Hisham Muhammad's avatar
Hisham Muhammad committed
333
334
335
336
337
338
339
340
341
# Bail out on errors.
# ----------------------------------------------------------------------
if test ! -z "$missing_libraries"; then
  AC_MSG_ERROR([missing libraries: $missing_libraries])
fi
if test ! -z "$missing_headers"; then
  AC_MSG_ERROR([missing headers: $missing_headers])
fi

Hisham Muhammad's avatar
Hisham Muhammad committed
342
343
AC_DEFINE_UNQUOTED(COPYRIGHT, "(C) 2004-$year Hisham Muhammad", [Copyright message.])

Hisham Muhammad's avatar
Hisham Muhammad committed
344
345
# We're done, let's go!
# ----------------------------------------------------------------------
346
AM_CONDITIONAL([HTOP_LINUX], [test "$my_htop_platform" = linux])
Hisham Muhammad's avatar
Hisham Muhammad committed
347
AM_CONDITIONAL([HTOP_FREEBSD], [test "$my_htop_platform" = freebsd])
348
AM_CONDITIONAL([HTOP_DRAGONFLYBSD], [test "$my_htop_platform" = dragonflybsd])
349
AM_CONDITIONAL([HTOP_OPENBSD], [test "$my_htop_platform" = openbsd])
350
AM_CONDITIONAL([HTOP_DARWIN], [test "$my_htop_platform" = darwin])
351
AM_CONDITIONAL([HTOP_UNSUPPORTED], [test "$my_htop_platform" = unsupported])
352
AC_SUBST(my_htop_platform)
Hisham Muhammad's avatar
Hisham Muhammad committed
353
AC_CONFIG_FILES([Makefile htop.1])
Hisham Muhammad's avatar
Hisham Muhammad committed
354
AC_OUTPUT
355
356
357
358
359
360
361
362
363
364
365
366
367
368

if test "$my_htop_platform" = "unsupported"
then
   echo ""
   echo "****************************************************************"
   echo "WARNING! This platform is not currently supported by htop."
   echo ""
   echo "The code will build, but it will produce a dummy version of htop"
   echo "which shows no processes, using the files from the unsupported/"
   echo "directory. This is meant to be a skeleton, to be used as a"
   echo "starting point if you are porting htop to a new platform."
   echo "****************************************************************"
   echo ""
fi