configure.ac 14.5 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.0beta4],[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
   ;;
gmbroome's avatar
gmbroome committed
46
47
48
solaris*)
   my_htop_platform=solaris
   ;;
49
50
51
52
53
*)
   my_htop_platform=unsupported
   ;;
esac

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

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

67
68
69
70
71
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
72
[if test "x$ac_cv_header_sys_mkdev_h" = xno; then
73
74
75
76
   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
77
# Checks for typedefs, structures, and compiler characteristics.
Hisham Muhammad's avatar
Hisham Muhammad committed
78
# ----------------------------------------------------------------------
Hisham Muhammad's avatar
Hisham Muhammad committed
79
80
81
82
83
AC_HEADER_STDBOOL
AC_C_CONST
AC_TYPE_PID_T
AC_TYPE_UID_T

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

91
save_cflags="${CFLAGS}"
Hisham Muhammad's avatar
Hisham Muhammad committed
92
93
CFLAGS="${CFLAGS} -std=c99"
AC_MSG_CHECKING([whether gcc -std=c99 option works])
94
95
96
97
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.])])
98
CFLAGS="$save_cflags"
Hisham Muhammad's avatar
Hisham Muhammad committed
99

100
101
102
save_cflags="${CFLAGS}"
CFLAGS="$CFLAGS -Wextra"
AC_MSG_CHECKING([if compiler supports -Wextra])
103
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],[
104
105
106
107
108
109
110
111
112
   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
113
114
# Checks for features and flags.
# ----------------------------------------------------------------------
Hisham Muhammad's avatar
Hisham Muhammad committed
115
PROCDIR=/proc
116

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

124
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
125

126
127
128
129
130
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
131

Hisham Muhammad's avatar
Hisham Muhammad committed
132
if test "x$cross_compiling" = xno; then
133
134
135
136
   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
137
138
fi

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

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

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

154
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
155
156
157
158
159
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

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

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

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

205
AC_ARG_ENABLE(unicode, [AS_HELP_STRING([--enable-unicode], [enable Unicode support])], ,enable_unicode="yes")
206
if test "x$enable_unicode" = xyes; then
207
   HTOP_CHECK_SCRIPT([ncursesw6], [addnwstr], [HAVE_LIBNCURSESW], "ncursesw6-config",
208
209
210
211
212
213
214
215
216
    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.])
   )))))))
217

218
   AC_CHECK_HEADERS([ncursesw/curses.h],[:],
219
220
221
      [AC_CHECK_HEADERS([ncurses/ncurses.h],[:],
         [AC_CHECK_HEADERS([ncurses/curses.h],[:],
            [AC_CHECK_HEADERS([ncurses.h],[:],[missing_headers="$missing_headers $ac_header"])])])])
222
else
223
224
225
226
227
228
229
   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"
   ))))
   
230
231
232
233
   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"])])])])
234
235
fi

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

240
241
242
243
if test "$my_htop_platform" = "openbsd"; then
   AC_CHECK_LIB([kvm], [kvm_open], [], [missing_libraries="$missing_libraries libkvm"])
fi

gmbroome's avatar
gmbroome committed
244
245
if test "$my_htop_platform" = "solaris"; then
   AC_CHECK_LIB([kstat], [kstat_open], [], [missing_libraries="$missing_libraries libkstat"])
246
   AC_CHECK_LIB([proc], [Pgrab_error], [], [missing_libraries="$missing_libraries libproc"])
247
   AC_CHECK_LIB([malloc], [free], [], [missing_libraries="$missing_libraries libmalloc"])
248
249
   AC_CHECK_HEADERS([err.h],[:],[
      missing_headers="$missing_headers err.h"
250
      AC_MSG_ERROR([You appear to be on Solaris 10, or very early Solaris Express, which are currently unsupported.])
251
   ])
gmbroome's avatar
gmbroome committed
252
253
fi

254
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
255
if test "x$enable_linux_affinity" = xyes -a "x$cross_compiling" = xno; then
256
257
258
259
260
261
262
263
264
265
266
   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;
       ]])],
267
     [AC_MSG_RESULT([yes])],
Hisham's avatar
Hisham committed
268
     [enable_linux_affinity=no
269
270
      AC_MSG_RESULT([no])])
fi
Hisham's avatar
Hisham committed
271
272
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.])
273
274
fi

275
AC_ARG_ENABLE(hwloc, [AS_HELP_STRING([--enable-hwloc], [enable hwloc support for CPU affinity])],, enable_hwloc="no")
276
if test "x$enable_hwloc" = xyes
277
then
Hisham's avatar
Hisham committed
278
   AC_CHECK_LIB([hwloc], [hwloc_get_proc_cpubind], [], [missing_libraries="$missing_libraries libhwloc"])
279
   AC_CHECK_HEADERS([hwloc.h],[:], [missing_headers="$missing_headers $ac_header"])
280
fi
281

282
283
284
285
286
287
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

288
AC_ARG_ENABLE(perfcounters, [AS_HELP_STRING([--enable-perfcounters], [enable hardware performance counters])],, enable_perfcounters="yes")
289
if test "x$enable_perfcounters" = "xyes" -a "$my_htop_platform" = "linux"
290
then
291
292
   AC_DEFINE(HAVE_PERFCOUNTERS, 1, [Define if hardware performance counter support should be enabled.])

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
321
322
323
324
325
326
327
328
329
330
331
332
333
   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

334
335
336
AC_ARG_ENABLE(delayacct, [AS_HELP_STRING([--enable-delayacct], [enable linux delay accounting])],, enable_delayacct="no")
if test "x$enable_delayacct" = xyes
then
337
   PKG_PROG_PKG_CONFIG()
338
339
   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
340
341
   CFLAGS="$CFLAGS $LIBNL3_CFLAGS $LIBNL3GENL_CFLAGS"
   LIBS="$LIBS $LIBNL3_LIBS $LIBNL3GENL_LIBS"
342
343
344
345
   AC_DEFINE(HAVE_DELAYACCT, 1, [Define if delay accounting support should be enabled.])
fi


Hisham Muhammad's avatar
Hisham Muhammad committed
346
347
348
349
350
351
352
353
354
# 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
355
356
AC_DEFINE_UNQUOTED(COPYRIGHT, "(C) 2004-$year Hisham Muhammad", [Copyright message.])

Hisham Muhammad's avatar
Hisham Muhammad committed
357
358
# We're done, let's go!
# ----------------------------------------------------------------------
359
AM_CONDITIONAL([HTOP_LINUX], [test "$my_htop_platform" = linux])
Hisham Muhammad's avatar
Hisham Muhammad committed
360
AM_CONDITIONAL([HTOP_FREEBSD], [test "$my_htop_platform" = freebsd])
361
AM_CONDITIONAL([HTOP_DRAGONFLYBSD], [test "$my_htop_platform" = dragonflybsd])
362
AM_CONDITIONAL([HTOP_OPENBSD], [test "$my_htop_platform" = openbsd])
363
AM_CONDITIONAL([HTOP_DARWIN], [test "$my_htop_platform" = darwin])
gmbroome's avatar
gmbroome committed
364
AM_CONDITIONAL([HTOP_SOLARIS], [test "$my_htop_platform" = solaris])
365
AM_CONDITIONAL([HTOP_UNSUPPORTED], [test "$my_htop_platform" = unsupported])
366
AC_SUBST(my_htop_platform)
Hisham Muhammad's avatar
Hisham Muhammad committed
367
AC_CONFIG_FILES([Makefile htop.1])
Hisham Muhammad's avatar
Hisham Muhammad committed
368
AC_OUTPUT
369
370
371
372
373
374
375
376
377
378
379
380
381
382

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