diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..799bb5f
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,127 @@
+#
+#    Copyright (c) 2010-2011 Nest, Inc.
+#    All rights reserved.
+#
+#    This document is the property of Nest. It is considered
+#    confidential and proprietary information.
+#
+#    This document may not be reproduced or transmitted in any form,
+#    in whole or in part, without the express written permission of
+#    Nest.
+#
+#    Description:
+#      This file is for the Linux process utilities, procps. These
+#      utilities provide both command line and full-screen information
+#      about the Linux process table and the processes within it.
+#
+
+
+include pre.mak
+
+PackageName		:= procps
+
+PackageExtension	:= tar.gz
+PackageSeparator	:= -
+
+PackagePatchArgs	:= -p1
+
+PackageArchive		:= $(PackageName).$(PackageExtension)
+PackageSourceDir	:= $(PackageName)$(PackageSeparator)$(PackageVersion)
+
+PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)
+
+LicenseSourceFiles	:= COPYING COPYING.LIB
+LicenseSourcePaths      := $(addprefix $(PackageSourceDir)/,$(LicenseSourceFiles))
+
+CleanPaths		+= $(PackageLicenseFile)
+
+SOURCEDIRS                      = $(PackageSourceDir)
+$(PackageSourceDir)_RULE_TARGET = $(BuildDirectory)/configure
+
+all: $(PackageDefaultGoal)
+
+# Generate the package license contents.
+
+$(LicenseSourcePaths): $(BuildDirectory)/source
+
+$(PackageLicenseFile): $(LicenseSourcePaths)
+	$(Verbose)for file in $(LicenseSourcePaths); do	\
+		echo "Concatenating \"$${file}\"...";	\
+		cat $${file} >> $@;			\
+	done
+	$(Verbose)touch $@
+
+# Extract the source from the archive and apply patches, if any.
+
+$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
+	$(expand-and-patch-package)
+
+# Prepare the sources.
+
+$(BuildDirectory)/source: | $(PackageSourceDir) $(BuildDirectory)
+	$(Verbose)touch $@
+
+# Patch the sources, if necessary.
+
+$(BuildDirectory)/patch: $(BuildDirectory)/source
+	$(Verbose)touch $@
+
+# Generate the package build makefile.
+# Configure the source for building.
+
+$(BuildDirectory)/configure: $(BuildDirectory)/source | $(PackageSourceDir) $(BuildDirectory)
+	$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory))
+	$(Verbose)touch $@
+
+# Build the source.
+#
+# We have to unset MAKEFLAGS since they confuse the package build otherwise.
+
+$(BuildDirectory)/build: $(BuildDirectory)/configure | $(BuildDirectory)
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
+	CC="$(CC) $(CPPOPTFLAGS)" CXX="$(CXX) $(CPPOPTFLAGS)" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
+	CPPFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncludePath)) \
+	$(call ToolGenerateIncludeArgument,$(NCursesIncludePath))" \
+	LDFLAGS="$(call GenerateLibraryPathArgument,$(NCursesLibraryPath))" \
+	all
+	$(Verbose)touch $@
+
+# Stage the build to a temporary installation area.
+#
+# We have to unset MAKEFLAGS since they confuse the package build otherwise.
+#
+# Also, override both install and ldconfig. We aren't running install
+# for a native host and we aren't running as super user, so the
+# default actions for those won't otherwise work.
+
+.PHONY: stage
+stage: $(BuildDirectory)/stage-default $(BuildDirectory)/stage-headers
+
+$(BuildDirectory)/stage-default: $(BuildDirectory)/build | $(ResultDirectory)
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
+	DESTDIR=$(ResultDirectory) \
+	install="$(shell which install) -D" \
+	ldconfig="$(shell which true)" \
+        m64=-m32 \
+        lib64=lib \
+	install
+	$(Verbose)touch $@
+
+ResultHeaderDir			= $(ResultDirectory)/usr/include/proc
+SourceHeaderPaths		= $(wildcard $(BuildDirectory)/proc/*.h)
+
+$(ResultHeaderDir):
+	$(create-directory)
+
+$(BuildDirectory)/stage-headers: $(BuildDirectory)/build | $(ResultHeaderDir)
+	install --mode=0664 $(SourceHeaderPaths) $(ResultHeaderDir)
+	$(Verbose)touch $@
+
+clean:
+	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory)
+
+include post.mak
diff --git a/procps.patches/procps-50.description b/procps.patches/procps-50.description
new file mode 100644
index 0000000..4438692
--- /dev/null
+++ b/procps.patches/procps-50.description
@@ -0,0 +1,2 @@
+This patch ensures that installed binaries are user-writable so that 
+they may be stripped.
diff --git a/procps.patches/procps-50.patch b/procps.patches/procps-50.patch
new file mode 100644
index 0000000..e00b5a9
--- /dev/null
+++ b/procps.patches/procps-50.patch
@@ -0,0 +1,36 @@
+diff -aruN a/Makefile b/Makefile
+--- a/Makefile	2009-05-10 11:50:48.000000000 -0700
++++ b/Makefile	2011-03-01 09:08:47.354663539 -0800
+@@ -222,7 +222,7 @@
+ ###### install
+ 
+ $(BINFILES) : all
+-	$(install) --mode a=rx $(notdir $@) $@
++	$(install) --mode 775 $(notdir $@) $@
+ 
+ $(MANFILES) : all
+ 	$(install) --mode a=r $(notdir $@) $@
+diff -aruN a/proc/module.mk b/proc/module.mk
+--- a/proc/module.mk	2004-09-23 06:10:42.000000000 -0700
++++ b/proc/module.mk	2011-03-01 09:06:01.843034588 -0800
+@@ -96,7 +96,7 @@
+ #################### install rules ###########################
+ 
+ $(lib)$(SOFILE) : proc/$(SONAME)
+-	$(install) --mode a=rx $< $@
++	$(install) --mode 775 $< $@
+ 
+ ifneq ($(SOLINK),$(SOFILE))
+ .PHONY: $(lib)$(SOLINK)
+diff -aruN a/ps/module.mk b/ps/module.mk
+--- a/ps/module.mk	2005-10-29 20:19:46.000000000 -0700
++++ b/ps/module.mk	2011-03-01 09:06:15.074510652 -0800
+@@ -33,7 +33,7 @@
+ 
+ 
+ $(bin)ps: ps/ps
+-	$(install) --mode a=rx $< $@
++	$(install) --mode 775 $< $@
+ 
+ $(man1)ps.1 : ps/ps.1
+ 	$(install) --mode a=r $< $@
diff --git a/procps.patches/procps-51.description b/procps.patches/procps-51.description
new file mode 100644
index 0000000..b2efd7f
--- /dev/null
+++ b/procps.patches/procps-51.description
@@ -0,0 +1 @@
+This patch fixes the stdlib name conflicts issue that happens for libc6-dev versions beyond 2.17.93, which was patched by https://gitorious.org/procps/procps/commit/24f1fbd9d051353dd8ebde048f1903d68834af74.patch . We couldn't apply that patch to our source directly, so it has been adapted.
diff --git a/procps.patches/procps-51.patch b/procps.patches/procps-51.patch
new file mode 100644
index 0000000..f6b5cc5
--- /dev/null
+++ b/procps.patches/procps-51.patch
@@ -0,0 +1,415 @@
+diff -Naur a/top.c b/top.c
+--- a/top.c	2007-05-28 09:04:00.000000000 -0700
++++ b/top.c	2014-09-04 13:24:59.862877761 -0700
+@@ -184,19 +184,19 @@
+          * 2 columns each.
+          */
+ 
+-SCB_NUMx(P_PID, XXXID)
+-SCB_NUMx(P_PPD, ppid)
+-SCB_STRx(P_URR, ruser)
+-SCB_NUMx(P_UID, euid)
+-SCB_STRx(P_URE, euser)
+-SCB_STRx(P_GRP, egroup)
+-SCB_NUMx(P_TTY, tty)
+-SCB_NUMx(P_PRI, priority)
+-SCB_NUMx(P_NCE, nice)
+-SCB_NUMx(P_CPN, processor)
+-SCB_NUM1(P_CPU, pcpu)
+-                                        // also serves P_TM2 !
+-static int sort_P_TME (const proc_t **P, const proc_t **Q)
++SCB_NUMx(EU_PID, XXXID)
++SCB_NUMx(EU_PPD, ppid)
++SCB_STRx(EU_URR, ruser)
++SCB_NUMx(EU_UID, euid)
++SCB_STRx(EU_URE, euser)
++SCB_STRx(EU_GRP, egroup)
++SCB_NUMx(EU_TTY, tty)
++SCB_NUMx(EU_PRI, priority)
++SCB_NUMx(EU_NCE, nice)
++SCB_NUMx(EU_CPN, processor)
++SCB_NUM1(EU_CPU, pcpu)
++                                        // also serves EU_TM2 !
++static int sort_EU_TME (const proc_t **P, const proc_t **Q)
+ {
+    if (Frame_ctimes) {
+       if ( ((*P)->cutime + (*P)->cstime + (*P)->utime + (*P)->stime)
+@@ -214,17 +214,17 @@
+    return SORT_eq;
+ }
+ 
+-SCB_NUM1(P_VRT, size)
+-SCB_NUM2(P_SWP, size, resident)
+-SCB_NUM1(P_RES, resident)               // also serves P_MEM !
+-SCB_NUM1(P_COD, trs)
+-SCB_NUM1(P_DAT, drs)
+-SCB_NUM1(P_SHR, share)
+-SCB_NUM1(P_FLT, maj_flt)
+-SCB_NUM1(P_DRT, dt)
+-SCB_NUMx(P_STA, state)
++SCB_NUM1(EU_VRT, size)
++SCB_NUM2(EU_SWP, size, resident)
++SCB_NUM1(EU_RES, resident)               // also serves EU_MEM !
++SCB_NUM1(EU_COD, trs)
++SCB_NUM1(EU_DAT, drs)
++SCB_NUM1(EU_SHR, share)
++SCB_NUM1(EU_FLT, maj_flt)
++SCB_NUM1(EU_DRT, dt)
++SCB_NUMx(EU_STA, state)
+ 
+-static int sort_P_CMD (const proc_t **P, const proc_t **Q)
++static int sort_EU_CMD (const proc_t **P, const proc_t **Q)
+ {
+    /* if a process doesn't have a cmdline, we'll consider it a kernel thread
+       -- since displayed tasks are given special treatment, we must too */
+@@ -238,8 +238,8 @@
+    return Frame_srtflg * strcmp((*Q)->cmd, (*P)->cmd);
+ }
+ 
+-SCB_NUM1(P_WCH, wchan)
+-SCB_NUM1(P_FLG, flags)
++SCB_NUM1(EU_WCH, wchan)
++SCB_NUM1(EU_FLG, flags)
+ 
+         /* ///////////////////////////////// special sort for prochlp() ! */
+ static int sort_HST_t (const HST_t *P, const HST_t *Q)
+@@ -562,7 +562,7 @@
+ 
+ // Show an error, but not right now.
+ // Due to the postponed opening of ksym, using open_psdb_message,
+-// if P_WCH had been selected and the program is restarted, the
++// if EU_WCH had been selected and the program is restarted, the
+ // message would otherwise be displayed prematurely.
+ static void msg_save (const char *fmts, ...) __attribute__((format(printf,1,2)));
+ static void msg_save (const char *fmts, ...)
+@@ -1213,7 +1213,7 @@
+ #define L_DEFAULT  PROC_FILLSTAT
+ 
+ // a temporary macro, soon to be undef'd...
+-#define SF(f) (QFP_t)sort_P_ ## f
++#define SF(f) (QFP_t)sort_EU_ ## f
+ 
+         /* These are our gosh darn 'Fields' !
+            They MUST be kept in sync with pflags !!
+@@ -1222,9 +1222,9 @@
+                  a cast when/if displayed provides minimal width protection. */
+ static FLD_t Fieldstab[] = {
+ /* .lflg anomolies:
+-      P_UID, L_NONE  - natural outgrowth of 'stat()' in readproc        (euid)
+-      P_CPU, L_stat  - never filled by libproc, but requires times      (pcpu)
+-      P_CMD, L_stat  - may yet require L_CMDLINE in reframewins  (cmd/cmdline)
++      EU_UID, L_NONE  - natural outgrowth of 'stat()' in readproc        (euid)
++      EU_CPU, L_stat  - never filled by libproc, but requires times      (pcpu)
++      EU_CMD, L_stat  - may yet require L_CMDLINE in reframewins  (cmd/cmdline)
+       L_EITHER       - must L_status, else 64-bit math, __udivdi3 on 32-bit !
+       keys   head           fmts     width   scale  sort   desc                     lflg
+      ------  -----------    -------  ------  -----  -----  ----------------------   -------- */
+@@ -1514,23 +1514,23 @@
+ 
+          case 'M':
+             c = 0; // for scoreboard
+-            rc->win[0].sortindx = P_MEM;
++            rc->win[0].sortindx = EU_MEM;
+             break;
+          case 'P':
+             c = 0; // for scoreboard
+-            rc->win[0].sortindx = P_CPU;
++            rc->win[0].sortindx = EU_CPU;
+             break;
+          case 'A':                      // supposed to be start_time
+             c = 0; // for scoreboard
+-            rc->win[0].sortindx = P_PID;
++            rc->win[0].sortindx = EU_PID;
+             break;
+          case 'T':
+             c = 0; // for scoreboard
+-            rc->win[0].sortindx = P_TM2;
++            rc->win[0].sortindx = EU_TM2;
+             break;
+          case 'N':
+             c = 0; // for scoreboard
+-            rc->win[0].sortindx = P_PID;
++            rc->win[0].sortindx = EU_PID;
+             break;
+ 
+          default:
+@@ -1626,19 +1626,19 @@
+ 
+    pcpu_max_value = 99.9;
+ 
+-   Fieldstab[P_CPN].head = " P";
+-   Fieldstab[P_CPN].fmts = " %1u";
++   Fieldstab[EU_CPN].head = " P";
++   Fieldstab[EU_CPN].fmts = " %1u";
+    if(smp_num_cpus>9){
+-      Fieldstab[P_CPN].head = "  P";
+-      Fieldstab[P_CPN].fmts = " %2u";
++      Fieldstab[EU_CPN].head = "  P";
++      Fieldstab[EU_CPN].fmts = " %2u";
+    }
+    if(smp_num_cpus>99){
+-      Fieldstab[P_CPN].head = "   P";
+-      Fieldstab[P_CPN].fmts = " %3u";
++      Fieldstab[EU_CPN].head = "   P";
++      Fieldstab[EU_CPN].fmts = " %3u";
+    }
+    if(smp_num_cpus>999){
+-      Fieldstab[P_CPN].head = "    P";
+-      Fieldstab[P_CPN].fmts = " %4u";
++      Fieldstab[EU_CPN].head = "    P";
++      Fieldstab[EU_CPN].fmts = " %4u";
+    }
+ 
+    {
+@@ -1646,10 +1646,10 @@
+       unsigned pid_digits = get_pid_digits();
+       if(pid_digits<4) pid_digits=4;
+       snprintf(pid_fmt, sizeof pid_fmt, " %%%uu", pid_digits);
+-      Fieldstab[P_PID].fmts = pid_fmt;
+-      Fieldstab[P_PID].head = "        PID" + 10 - pid_digits;
+-      Fieldstab[P_PPD].fmts = pid_fmt;
+-      Fieldstab[P_PPD].head = "       PPID" + 10 - pid_digits;
++      Fieldstab[EU_PID].fmts = pid_fmt;
++      Fieldstab[EU_PID].head = "        PID" + 10 - pid_digits;
++      Fieldstab[EU_PPD].fmts = pid_fmt;
++      Fieldstab[EU_PPD].head = "       PPID" + 10 - pid_digits;
+    }
+ }
+ 
+@@ -1786,7 +1786,7 @@
+    if(Rc.mode_irixps && smp_num_cpus>1){
+       // good for 100 CPUs per process
+       pcpu_max_value = 9999.0;
+-      Fieldstab[P_CPU].fmts = " %4.0f";
++      Fieldstab[EU_CPU].fmts = " %4.0f";
+    }
+ 
+    // lastly, establish the true runtime secure mode and delay time
+@@ -2135,13 +2135,13 @@
+          }
+ 
+          // establish the final maxpflgs and prepare to grow the command column
+-         // heading via maxcmdln - it may be a fib if P_CMD wasn't encountered,
++         // heading via maxcmdln - it may be a fib if EU_CMD wasn't encountered,
+          // but that's ok because it won't be displayed anyway
+          w->maxpflgs = i;
+-         w->maxcmdln = Screen_cols - (strlen(w->columnhdr) - strlen(Fieldstab[P_CMD].head));
++         w->maxcmdln = Screen_cols - (strlen(w->columnhdr) - strlen(Fieldstab[EU_CMD].head));
+ 
+          // finally, we can build the true run-time columns header, format the
+-         // command column heading, if P_CMD is really being displayed, and
++         // command column heading, if EU_CMD is really being displayed, and
+          // rebuild the all-important PROC_FILLxxx flags that will be used
+          // until/if we're we're called again
+          *(s = w->columnhdr) = '\0';
+@@ -2149,9 +2149,9 @@
+          for (i = 0; i < w->maxpflgs; i++) {
+             int advance = (i==0) && !Rc.mode_altscr;
+             h = Fieldstab[w->procflags[i]].head;
+-            if (P_WCH == w->procflags[i]) needpsdb = 1;
+-            if (P_CMD == w->procflags[i]) {
+-               s = scat(s, fmtmk(Fieldstab[P_CMD].fmts+advance, w->maxcmdln, w->maxcmdln, "COMMAND"/*h*/  ));
++            if (EU_WCH == w->procflags[i]) needpsdb = 1;
++            if (EU_CMD == w->procflags[i]) {
++               s = scat(s, fmtmk(Fieldstab[EU_CMD].fmts+advance, w->maxcmdln, w->maxcmdln, "COMMAND"/*h*/  ));
+                if (CHKw(w, Show_CMDLIN)) {
+                   Frames_libflags |= L_CMDLINE;
+ //                if (w->maxcmdln > Frames_maxcmdln) Frames_maxcmdln = w->maxcmdln;
+@@ -2629,10 +2629,10 @@
+          if(Rc.mode_irixps && smp_num_cpus>1){
+             // good for 100 CPUs per process
+             pcpu_max_value = 9999.0;
+-            Fieldstab[P_CPU].fmts = " %4.0f";
++            Fieldstab[EU_CPU].fmts = " %4.0f";
+          } else {
+             pcpu_max_value = 99.9;
+-            Fieldstab[P_CPU].fmts = " %#4.1f";
++            Fieldstab[EU_CPU].fmts = " %#4.1f";
+          }
+          break;
+ 
+@@ -2836,8 +2836,8 @@
+             const unsigned  xkey;
+             const FLG_t     sort;
+          } xtab[] = {
+-            { "Memory", 'M', P_MEM, }, { "Numerical", 'N', P_PID, },
+-            { "CPU",    'P', P_CPU, }, { "Time",      'T', P_TM2  }, };
++            { "Memory", 'M', EU_MEM, }, { "Numerical", 'N', EU_PID, },
++            { "CPU",    'P', EU_CPU, }, { "Time",      'T', EU_TM2  }, };
+          int i;
+          for (i = 0; i < MAXTBL(xtab); ++i)
+             if (c == xtab[i].xkey) {
+@@ -3063,7 +3063,7 @@
+       int advance = (x==0) && !Rc.mode_altscr;
+ 
+       switch (i) {
+-         case P_CMD:
++         case EU_CMD:
+          {  char tmp[ROWBUFSIZ];
+             unsigned flags;
+ 	    int maxcmd = q->maxcmdln;
+@@ -3073,25 +3073,25 @@
+             MKCOL(q->maxcmdln, q->maxcmdln, tmp);
+          }
+             break;
+-         case P_COD:
++         case EU_COD:
+             MKCOL(scale_num(PAGES_TO_KB(p->trs), w, s));
+             break;
+-         case P_CPN:
++         case EU_CPN:
+             MKCOL((unsigned)p->processor);
+             break;
+-         case P_CPU:
++         case EU_CPU:
+          {  float u = (float)p->pcpu * Frame_tscale;
+             if (u > pcpu_max_value) u = pcpu_max_value;
+             MKCOL(u);
+          }
+             break;
+-         case P_DAT:
++         case EU_DAT:
+             MKCOL(scale_num(PAGES_TO_KB(p->drs), w, s));
+             break;
+-         case P_DRT:
++         case EU_DRT:
+             MKCOL(scale_num((unsigned)p->dt, w, s));
+             break;
+-         case P_FLG:
++         case EU_FLG:
+          {  char tmp[TNYBUFSIZ];
+             snprintf(tmp, sizeof(tmp), f, (long)p->flags);
+             for (j = 0; tmp[j]; j++) if ('0' == tmp[j]) tmp[j] = '.';
+@@ -3099,70 +3099,70 @@
+             MKCOL("");
+          }
+             break;
+-         case P_FLT:
++         case EU_FLT:
+             MKCOL(scale_num(p->maj_flt, w, s));
+             break;
+-         case P_GRP:
++         case EU_GRP:
+             MKCOL(p->egroup);
+             break;
+-         case P_MEM:
++         case EU_MEM:
+             MKCOL((float)PAGES_TO_KB(p->resident) * 100 / kb_main_total);
+             break;
+-         case P_NCE:
++         case EU_NCE:
+             MKCOL((int)p->nice);
+             break;
+-         case P_PID:
++         case EU_PID:
+             MKCOL((unsigned)p->XXXID);
+             break;
+-         case P_PPD:
++         case EU_PPD:
+             MKCOL((unsigned)p->ppid);
+             break;
+-         case P_PRI:
++         case EU_PRI:
+             if (unlikely(-99 > p->priority) || unlikely(999 < p->priority)) {
+                f = "  RT";
+                MKCOL("");
+             } else
+                MKCOL((int)p->priority);
+             break;
+-         case P_RES:
++         case EU_RES:
+             MKCOL(scale_num(PAGES_TO_KB(p->resident), w, s));
+             break;
+-         case P_SHR:
++         case EU_SHR:
+             MKCOL(scale_num(PAGES_TO_KB(p->share), w, s));
+             break;
+-         case P_STA:
++         case EU_STA:
+             MKCOL(p->state);
+             break;
+-         case P_SWP:
++         case EU_SWP:
+             MKCOL(scale_num(PAGES_TO_KB(p->size - p->resident), w, s));
+             break;
+-         case P_TME:
+-         case P_TM2:
++         case EU_TME:
++         case EU_TM2:
+          {  TIC_t t = p->utime + p->stime;
+             if (CHKw(q, Show_CTIMES))
+                t += (p->cutime + p->cstime);
+             MKCOL(scale_tics(t, w));
+          }
+             break;
+-         case P_TTY:
++         case EU_TTY:
+          {  char tmp[TNYBUFSIZ];
+             dev_to_tty(tmp, (int)w, p->tty, p->XXXID, ABBREV_DEV);
+             MKCOL(tmp);
+          }
+             break;
+-         case P_UID:
++         case EU_UID:
+             MKCOL((unsigned)p->euid);
+             break;
+-         case P_URE:
++         case EU_URE:
+             MKCOL(p->euser);
+             break;
+-         case P_URR:
++         case EU_URR:
+             MKCOL(p->ruser);
+             break;
+-         case P_VRT:
++         case EU_VRT:
+             MKCOL(scale_num(PAGES_TO_KB(p->size), w, s));
+             break;
+-         case P_WCH:
++         case EU_WCH:
+             if (No_ksyms) {
+                f = " %08lx ";
+                MKCOL((long)p->wchan);
+diff -Naur a/top.h b/top.h
+--- a/top.h	2006-06-24 23:41:48.000000000 -0700
++++ b/top.h	2014-09-04 13:14:40.124239420 -0700
+@@ -245,12 +245,12 @@
+ 
+ // Flags for each possible field
+ enum pflag {
+-   P_PID, P_PPD, P_URR, P_UID, P_URE, P_GRP, P_TTY,
+-   P_PRI, P_NCE,
+-   P_CPN, P_CPU, P_TME, P_TM2,
+-   P_MEM, P_VRT, P_SWP, P_RES, P_COD, P_DAT, P_SHR,
+-   P_FLT, P_DRT,
+-   P_STA, P_CMD, P_WCH, P_FLG
++   EU_PID, EU_PPD, EU_URR, EU_UID, EU_URE, EU_GRP, EU_TTY,
++   EU_PRI, EU_NCE,
++   EU_CPN, EU_CPU, EU_TME, EU_TM2,
++   EU_MEM, EU_VRT, EU_SWP, EU_RES, EU_COD, EU_DAT, EU_SHR,
++   EU_FLT, EU_DRT,
++   EU_STA, EU_CMD, EU_WCH, EU_FLG
+ };
+ 
+ 
+@@ -362,16 +362,16 @@
+ // The default values for the local config file
+ #define DEF_RCFILE { \
+    0, 1, DEF_DELAY, 0, { \
+-   { P_CPU, DEF_WINFLGS, 0, \
++   { EU_CPU, DEF_WINFLGS, 0, \
+       COLOR_RED, COLOR_RED, COLOR_YELLOW, COLOR_RED, \
+       "Def", DEF_FIELDS }, \
+-   { P_PID, DEF_WINFLGS, 0, \
++   { EU_PID, DEF_WINFLGS, 0, \
+       COLOR_CYAN, COLOR_CYAN, COLOR_WHITE, COLOR_CYAN, \
+       "Job", JOB_FIELDS }, \
+-   { P_MEM, DEF_WINFLGS, 0, \
++   { EU_MEM, DEF_WINFLGS, 0, \
+       COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLUE, COLOR_MAGENTA, \
+       "Mem", MEM_FIELDS }, \
+-   { P_URE, DEF_WINFLGS, 0, \
++   { EU_URE, DEF_WINFLGS, 0, \
+       COLOR_YELLOW, COLOR_YELLOW, COLOR_GREEN, COLOR_YELLOW, \
+       "Usr", USR_FIELDS } \
+    } }
diff --git a/procps.patches/procps-52.description b/procps.patches/procps-52.description
new file mode 100644
index 0000000..309973e
--- /dev/null
+++ b/procps.patches/procps-52.description
@@ -0,0 +1 @@
+This patch suppress a warning which is caused by a software bug. We should try to fix the bug after F1 build.
diff --git a/procps.patches/procps-52.patch b/procps.patches/procps-52.patch
new file mode 100644
index 0000000..98aa386
--- /dev/null
+++ b/procps.patches/procps-52.patch
@@ -0,0 +1,14 @@
+diff -aruN a/proc/sysinfo.c b/proc/sysinfo.c
+--- a/proc/sysinfo.c	2008-03-24 12:33:43.000000000 +0800
++++ b/proc/sysinfo.c	2014-11-12 17:25:46.302687988 +0800
+@@ -169,7 +169,9 @@
+     /* If 32-bit or big-endian (not Alpha or ia64), assume HZ is 100. */
+     Hertz = (sizeof(long)==sizeof(int) || htons(999)==999) ? 100UL : 1024UL;
+ #endif
+-    fprintf(stderr, "Unknown HZ value! (%d) Assume %Ld.\n", h, Hertz);
++    // There's a bug that causes this warning. We just comment it out
++    // for F1 build.
++    //fprintf(stderr, "Unknown HZ value! (%d) Assume %Ld.\n", h, Hertz);
+   }
+ }
+ 
diff --git a/procps.patches/procps-53.description b/procps.patches/procps-53.description
new file mode 100644
index 0000000..684a38e
--- /dev/null
+++ b/procps.patches/procps-53.description
@@ -0,0 +1,2 @@
+Fix for build error when using make 4.1.
+http://lists.gnu.org/archive/html/ltib/2011-06/msg00043.html
diff --git a/procps.patches/procps-53.patch b/procps.patches/procps-53.patch
new file mode 100644
index 0000000..b2b743a
--- /dev/null
+++ b/procps.patches/procps-53.patch
@@ -0,0 +1,12 @@
+diff -Naur a/Makefile b/Makefile
+--- a/Makefile	2015-03-07 10:58:01.112684003 -0800
++++ b/Makefile	2015-03-07 10:59:07.093374104 -0800
+@@ -174,7 +174,7 @@
+ # want this rule first, use := on ALL, and ALL not filled in yet
+ all: do_all
+ 
+--include */module.mk
++-include proc/module.mk ps/module.mk
+ 
+ do_all:    $(ALL)
+ 
diff --git a/procps.tar.gz b/procps.tar.gz
new file mode 100644
index 0000000..18db26d
--- /dev/null
+++ b/procps.tar.gz
Binary files differ
diff --git a/procps.url b/procps.url
new file mode 100644
index 0000000..080480f
--- /dev/null
+++ b/procps.url
@@ -0,0 +1 @@
+http://procps.sourceforge.net/procps-3.2.8.tar.gz
diff --git a/procps.version b/procps.version
new file mode 100644
index 0000000..f092941
--- /dev/null
+++ b/procps.version
@@ -0,0 +1 @@
+3.2.8
