CYGWINFLAGS =
if CYGWIN
- CYGWINFLAGS += -lintl
+CYGWINFLAGS += -lintl
+usrbin_exec_PROGRAMS =
endif
AM_CPPFLAGS = \
AM_CFLAGS = -Iproc
LDADD = ./proc/libprocps.la $(CYGWINFLAGS)
-transform = s/pscommand/ps/; $(program_transform_name)
+if CYGWIN
+AM_LDFLAGS = ./proc/libprocps.la $(CYGWINFLAGS)
+endif
+
+transform =
+
+if !CYGWIN
+transform += s/pscommand/ps/; $(program_transform_name)
+sbin_PROGRAMS = \
+ sysctl
+else
+transform += s/pscommand/procps/; $(program_transform_name)
+endif
+if !CYGWIN
bin_PROGRAMS = \
ps/pscommand \
free \
uptime \
vmstat \
w
-
-sbin_PROGRAMS = \
- sysctl
+else
+usrbin_exec_PROGRAMS += \
+ ps/pscommand \
+ free \
+ pgrep \
+ pkill \
+ pmap \
+ uptime \
+ vmstat \
+ w
+endif
lib_LTLIBRARIES = \
proc/libprocps.la
pgrep.1 \
pkill.1 \
pmap.1 \
- pwdx.1 \
- sysctl.8 \
- sysctl.conf.5 \
- tload.1 \
uptime.1 \
vmstat.8 \
w.1 \
+ ps/procps.1
+
+if !CYGWIN
+dist_man_MANS += \
+ pwdx.1 \
+ tload.1 \
+ sysctl.8 \
+ sysctl.conf.5 \
ps/ps.1
+endif
EXTRA_DIST = \
.version \
misc/git-version-gen \
Documentation/CodingStyle.md \
Documentation/TODO \
- sysctl.conf \
ps/HACKING \
ps/regression \
$(DIST_MAN_POTS)
Documentation/bugs.md \
Documentation/FAQ
+if !CYGWIN
+EXTRA_DIST += \
+ sysctl.conf
+endif
+
if BUILD_PIDOF
+if !CYGWIN
bin_PROGRAMS += pidof
+else
+usrbin_exec_PROGRAMS += pidof
+endif
dist_man_MANS += pidof.1
pidof_SOURCES = pidof.c lib/fileutils.c
else
endif
if BUILD_KILL
+if CYGWIN
+transform += ;s/^kill/prockill/; $(program_transform_name)
+usrbin_exec_PROGRAMS += kill
+else
bin_PROGRAMS += kill
+endif
+
dist_man_MANS += kill.1
kill_SOURCES = skill.c lib/strutils.c lib/fileutils.c lib/nsutils.c
else
endif
if WITH_NCURSES
+if !CYGWIN
bin_PROGRAMS += \
slabtop \
watch \
top/top
+else
+usrbin_exec_PROGRAMS += \
+ watch \
+ top/top
+endif
+
dist_man_MANS += \
- slabtop.1 \
watch.1 \
top/top.1
-slabtop_SOURCES = slabtop.c lib/strutils.c lib/fileutils.c
-slabtop_LDADD = $(LDADD) @NCURSES_LIBS@
watch_SOURCES = watch.c lib/strutils.c lib/fileutils.c
watch_LDADD = @WATCH_NCURSES_LIBS@ $(CYGWINFLAGS)
watch_CFLAGS = @WATCH_NCURSES_CFLAGS@
top/top_nls.h \
top/top_nls.c \
lib/fileutils.c
+
if CYGWIN
- top_top_SOURCES += lib/strverscmp.c
+top_top_SOURCES += lib/strverscmp.c
+else
+dist_man_MANS += \
+ slabtop.1
+slabtop_SOURCES = slabtop.c lib/strutils.c lib/fileutils.c
+slabtop_LDADD = $(LDADD) @NCURSES_LIBS@
endif
top_top_LDADD = $(LDADD) @NCURSES_LIBS@ $(DL_LIB)
endif
if BUILD_SKILL
+if !CYGWIN
bin_PROGRAMS += \
skill \
snice
+else
+usrbin_exec_PROGRAMS += \
+ skill \
+ snice
+endif
skill_SOURCES = skill.c lib/strutils.c lib/fileutils.c lib/nsutils.c
snice_SOURCES = skill.c lib/strutils.c lib/fileutils.c lib/nsutils.c
dist_man_MANS += \
pgrep_SOURCES = pgrep.c lib/fileutils.c lib/nsutils.c
pkill_SOURCES = pgrep.c lib/fileutils.c lib/nsutils.c
pmap_SOURCES = pmap.c lib/fileutils.c
+if !CYGWIN
pwdx_SOURCES = pwdx.c lib/fileutils.c
pwdx_LDADD= $(CYGWINFLAGS)
sysctl_SOURCES = sysctl.c lib/fileutils.c
+endif
tload_SOURCES = tload.c lib/strutils.c lib/fileutils.c
uptime_SOURCES = uptime.c lib/fileutils.c
vmstat_SOURCES = vmstat.c lib/strutils.c lib/fileutils.c
lib_test_strtod_nol_SOURCES = lib/test_strtod_nol.c lib/strutils.c
lib_test_strtod_nol_LDADD = $(CYGWINFLAGS)
+if CYGWIN
+ skill_LDADD = $(CYGWINFLAGS)
+ kill_LDADD = $(CYGWINFLAGS)
+ free_LDADD = $(CYGWINFLAGS)
+ pgrep_LDADD = $(CYGWINFLAGS)
+ pkill_LDADD = $(CYGWINFLAGS)
+ pidof_LDADD = $(CYGWINFLAGS)
+ pmap_LDADD = $(CYGWINFLAGS)
+ snice_LDADD = $(CYGWINFLAGS)
+ tload_LDADD = $(CYGWINFLAGS)
+ uptime_LDADD = $(CYGWINFLAGS)
+ w_LDADD = $(CYGWINFLAGS)
+ vmstat_LDADD = $(CYGWINFLAGS)
+endif
+
if EXAMPLE_FILES
+if !CYGWIN
sysconf_DATA = sysctl.conf
endif
+endif
BUILT_SOURCES = $(top_srcdir)/.version
AC_FUNC_REALLOC
AC_FUNC_STRTOD
+usrbin_execdir='${exec_prefix}/bin'
+AC_SUBST([usrbin_execdir])
+
+if test "x$host_os" = xcygwin
+then
+ prefix=/usr
+ sysconfdir=/etc
+ libexecdir=/usr/lib
+ localstatedir=/var
+ datadir=/usr/share
+ mandir=/usr/share/man
+ infodir=/usr/share/info
+ AC_SUBST([prefix])
+ AC_SUBST([sysconfdir])
+ AC_SUBST([libexecdir])
+ AC_SUBST([localstatedir])
+ AC_SUBST([datadir])
+ AC_SUBST([mandir])
+ AC_SUBST([infodir])
+fi
+
AM_GNU_GETTEXT_VERSION([0.14.1])
AM_GNU_GETTEXT([external])
if test -d "$srcdir/po"
/* Try to guess the device name (useful until /proc/PID/tty is added) */
static int guess_name(char *restrict const buf, unsigned maj, unsigned min){
struct stat sbuf;
+#ifndef __CYGWIN__
int t0, t1;
+#endif
unsigned tmpmin = min;
switch(maj){
case 3: /* /dev/[pt]ty[p-za-o][0-9a-z] is 936 */
if(tmpmin > 255) return 0; // should never happen; array index protection
+#ifdef __CYGWIN__
+ sprintf(buf, "dev/cons%d", tmpmin);
+ /* Skip stat call. The reason is that cons devices are local to
+ the processes running in that console. Calling stat from another
+ console or pty will return -1. */
+ return 1;
+#else
t0 = "pqrstuvwxyzabcde"[tmpmin>>4];
t1 = "0123456789abcdef"[tmpmin&0x0f];
sprintf(buf, "/dev/tty%c%c", t0, t1);
+#endif
break;
case 4:
if(min<64){
case 78: sprintf(buf, "/dev/ttyM%d", min); break; /* conflict */
case 105: sprintf(buf, "/dev/ttyV%d", min); break;
case 112: sprintf(buf, "/dev/ttyM%d", min); break; /* conflict */
+#ifdef __CYGWIN__
+ case 136: sprintf(buf, "/dev/pty%d", min); break;
+#else
/* 136 ... 143 are /dev/pts/0, /dev/pts/1, /dev/pts/2 ... */
case 136 ... 143: sprintf(buf, "/dev/pts/%d", min+(maj-136)*256); break;
+#endif
case 148: sprintf(buf, "/dev/ttyT%d", min); break;
case 154: sprintf(buf, "/dev/ttySR%d", min); break;
case 156: sprintf(buf, "/dev/ttySR%d", min+256); break;
return 1;
}
+#ifdef __CYGWIN__
+/* Cygwin keeps the name to the controlling tty in a virtual file called
+ /proc/PID/ctty, including a trailing LF (sigh). */
+static int ctty_name(char *restrict const buf, int pid) {
+ char path[32];
+ FILE *fp;
+ char *lf;
+ sprintf (path, "/proc/%d/ctty", pid); /* often permission denied */
+ fp = fopen (path, "r");
+ if (!fp)
+ return 0;
+ if (!fgets (buf,TTY_NAME_SIZE,fp))
+ {
+ fclose (fp);
+ return 0;
+ }
+ fclose (fp);
+ lf = strchr (buf, '\n');
+ if (lf)
+ *lf = (lf == buf ? '?' : '\0');
+ return 1;
+}
+#endif
+
/* number --> name */
unsigned dev_to_tty(char *restrict ret, unsigned chop, dev_t dev_t_dev, int pid, unsigned int flags) {
static char buf[TTY_NAME_SIZE];
unsigned i = 0;
int c;
if(dev == 0u) goto no_tty;
+#ifdef __CYGWIN__
+ if( ctty_name(tmp, pid )) goto abbrev;
+#endif
if(driver_name(tmp, MAJOR_OF(dev), MINOR_OF(dev) )) goto abbrev;
if( link_name(tmp, MAJOR_OF(dev), MINOR_OF(dev), pid, "fd/2" )) goto abbrev;
if( guess_name(tmp, MAJOR_OF(dev), MINOR_OF(dev) )) goto abbrev;
// Like HIDDEN, but for an alias that gets created.
// In gcc-3.2 there is an alias+hidden conflict.
// Many will have patched this bug, but oh well.
-#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 2 ) || __GNUC__ > 3
+#if (( __GNUC__ == 3 && __GNUC_MINOR__ > 2 ) || __GNUC__ > 3) && !defined(__CYGWIN__)
#define HIDDEN_ALIAS(x) extern __typeof(x) x##_direct __attribute__((alias(#x),visibility("hidden")))
#else
#define HIDDEN_ALIAS(x) extern __typeof(x) x##_direct __attribute__((alias(#x)))
#include <unistd.h>
#include <fcntl.h>
+#ifdef __CYGWIN__
+#include <sys/param.h>
+#endif
#include "alloc.h"
#include "version.h"
#include "sysinfo.h" /* include self to verify prototypes */
#include <netinet/in.h> /* htons */
#endif
+#ifndef __CYGWIN__
#include <link.h>
+#endif
#include <elf.h>
long smp_num_cpus; /* number of CPUs */
#define SET_IF_DESIRED(x,y) do{ if(x) *(x) = (y); }while(0)
/* return minimum of two values */
+#ifndef __CYGWIN__
#define MIN(x,y) ((x) < (y) ? (x) : (y))
+#endif
/***********************************************************************/
int uptime(double *restrict uptime_secs, double *restrict idle_secs) {
case 247 ... 252 : Hertz = 250; break;
case 253 ... 260 : Hertz = 256; break;
case 393 ... 408 : Hertz = 400; break; /* normal << 2 */
+ case 410 ... 600 : Hertz = 500; break; /* SMP WinNT */
case 790 ... 808 : Hertz = 800; break; /* normal << 3 */
case 990 ... 1010 : Hertz = 1000; break; /* ARM */
case 1015 ... 1035 : Hertz = 1024; break; /* Alpha, ia64 */
static unsigned long find_elf_note(unsigned long type)
{
+#ifdef __CYGWIN__
+ return NOTE_NOT_FOUND;
+#else
ElfW(auxv_t) auxv_struct;
ElfW(auxv_t) *auxv_temp;
FILE *fd;
auxv = NULL;
}
return ret_val;
+#endif
}
int have_privs;
Hertz = 100;
return;
#endif /* __FreeBSD__ */
+#ifdef __CYGWIN__
+ // On Cygwin we can rely on the HZ value given in sys/param.h
+ Hertz = (unsigned long long)HZ; /* <sys/param.h> */
+ return;
+#endif
old_Hertz_hack();
}
--- /dev/null
+ps.1
\ No newline at end of file
else if (strcmp(program_invocation_short_name, "snice") == 0 ||
strcmp(program_invocation_short_name, "lt-snice") == 0)
program = PROG_SNICE;
+#ifdef __CYGWIN__
+ else if (strcmp(program_invocation_short_name, "prockill") == 0 ||
+ strcmp(program_invocation_short_name, "lt-prockill") == 0)
+ program = PROG_KILL;
+#endif
switch (program) {
case PROG_SNICE:
# temporarily disabled on other than linux systems, see commit
# 3d807ae853b8b4264da156065b34f1447658a8ba
DEJATOOL += \
- pmap \
+ pmap
+if !CYGWIN
+DEJATOOL += \
slabtop \
sysctl
+endif
if BUILD_KILL
DEJATOOL += kill
endif
EXTRA_DIST = \
- config/unix.exp \
+ config/unix.exp \
free.test/free.exp \
kill.test/kill.exp \
lib.test/fileutils.exp \
ps.test/ps_personality.exp \
ps.test/ps_sched_batch.exp \
pwdx.test/pwdx.exp \
- slabtop.test/slabtop.exp \
- sysctl.test/sysctl_read.exp \
uptime.test/uptime.exp \
vmstat.test/vmstat.exp \
w.test/w.exp
+if !CYGWIN
+EXTRA_DIST += \
+ slabtop.test/slabtop.exp \
+ sysctl.test/sysctl_read.exp
+endif