configure.ac 14.3 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
   ;;
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"])
gmbroome's avatar
gmbroome committed
248
249
fi

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

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

278
279
280
281
282
283
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

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

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

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


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

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

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