Radix cross Linux

Radix Linux distribution for embedded systems.

637 Commits   4 Branches   3 Tags
author: Andrey V.Kosteltsev <kx@radix.pro> 2016-10-29 14:28:26 +0000 committer: Andrey V.Kosteltsev <kx@radix.pro> 2016-10-29 14:28:26 +0000 commit: fa3dfbc92d3f2dcfd58285081404f0465df79da9 parent: 9290482ca8fab8ab6762f8e93aa6ffc56fd3ab4b
Commit Summary:
GNU make-4.2.1, automake-1.15
Diffstat:
10 files changed, 454 insertions, 3 deletions
diff --git a/dev/autoconf-archive/2014.02.28/Makefile b/dev/autoconf-archive/2014.02.28/Makefile
index 048d970f4..9d0fdb736 100644
--- a/dev/autoconf-archive/2014.02.28/Makefile
+++ b/dev/autoconf-archive/2014.02.28/Makefile
@@ -25,7 +25,7 @@ SOURCE_REQUIRES    = sources/GNU/autoconf-archive
 
 REQUIRES           = app/bash/4.3
 REQUIRES          += dev/m4/1.4.17
-REQUIRES          += dev/automake/1.12.6
+REQUIRES          += dev/automake/1.15
 
 # ======= __END_OF_REQUIRES__ =======
 
diff --git a/dev/automake/1.15/Makefile b/dev/automake/1.15/Makefile
new file mode 100644
index 000000000..9acde3e94
--- /dev/null
+++ b/dev/automake/1.15/Makefile
@@ -0,0 +1,187 @@
+
+COMPONENT_TARGETS  = $(HARDWARE_PC32)
+COMPONENT_TARGETS += $(HARDWARE_PC64)
+COMPONENT_TARGETS += $(HARDWARE_CB1X)
+COMPONENT_TARGETS += $(HARDWARE_CB2X)
+COMPONENT_TARGETS += $(HARDWARE_CB3X)
+COMPONENT_TARGETS += $(HARDWARE_FFRK3288)
+COMPONENT_TARGETS += $(HARDWARE_M201)
+COMPONENT_TARGETS += $(HARDWARE_MXQ)
+COMPONENT_TARGETS += $(HARDWARE_NIT6Q)
+COMPONENT_TARGETS += $(HARDWARE_OMAP5UEVM)
+COMPONENT_TARGETS += $(HARDWARE_DRA7XXEVM)
+COMPONENT_TARGETS += $(HARDWARE_CI20)
+COMPONENT_TARGETS += $(HARDWARE_BT1)
+
+
+NEED_ABS_PATH      = true
+COMPONENT_IS_3PP   = true
+
+
+include ../../../build-system/constants.mk
+
+
+SOURCE_REQUIRES    = sources/GNU/automake
+
+REQUIRES           = app/bash/4.3
+REQUIRES          += dev/perl/5.22.1
+REQUIRES          += dev/autoconf/2.69
+
+# ======= __END_OF_REQUIRES__ =======
+
+
+version            = 1.15
+short_version      = $(shell echo $(version) | cut -f1,2 -d .)
+tar_xz_archive     = $(SRC_PACKAGE_PATH)/GNU/automake/automake-$(version).tar.xz
+SRC_ARCHIVE        = $(tar_xz_archive)
+SRC_DIR            = $(TARGET_BUILD_DIR)/automake-$(version)
+src_dir_name       = automake-$(version)
+src_done           = $(TARGET_BUILD_DIR)/.source_done
+
+PATCHES = PATCHES
+
+build_dir          = $(TARGET_BUILD_DIR)/build
+build_target       = $(TARGET_BUILD_DIR)/.build_done
+install_target     = $(TARGET_BUILD_DIR)/.install_done
+
+
+####### Targets
+
+PKG_GROUP = dev
+
+#
+# *PKG_NAME & *PKG_VERSION shouldn't be a reference to value.
+#
+AUTOMAKE_PKG_NAME                = automake
+AUTOMAKE_PKG_VERSION             = 1.15
+AUTOMAKE_PKG_ARCH                = $(TOOLCHAIN)
+AUTOMAKE_PKG_DISTRO_NAME         = $(DISTRO_NAME)
+AUTOMAKE_PKG_DISTRO_VERSION      = $(DISTRO_VERSION)
+AUTOMAKE_PKG_GROUP               = $(PKG_GROUP)
+###                               |---handy-ruler-------------------------------|
+AUTOMAKE_PKG_SHORT_DESCRIPTION   = Makefile generator
+AUTOMAKE_PKG_URL                 = $(BUG_URL)
+AUTOMAKE_PKG_LICENSE             = GPLv2
+AUTOMAKE_PKG_DESCRIPTION_FILE    = $(TARGET_BUILD_DIR)/$(AUTOMAKE_PKG_NAME)-pkg-description
+AUTOMAKE_PKG_DESCRIPTION_FILE_IN = $(AUTOMAKE_PKG_NAME)-pkg-description.in
+AUTOMAKE_PKG_INSTALL_SCRIPT      = $(AUTOMAKE_PKG_NAME)-pkg-install.sh
+
+AUTOMAKE_PKG     = $(CURDIR)/$(TARGET_BUILD_DIR)/$(AUTOMAKE_PKG_NAME)-package
+
+pkg_basename     = $(AUTOMAKE_PKG_NAME)-$(AUTOMAKE_PKG_VERSION)-$(AUTOMAKE_PKG_ARCH)-$(AUTOMAKE_PKG_DISTRO_NAME)-$(AUTOMAKE_PKG_DISTRO_VERSION)
+
+pkg_archive      = $(TARGET_BUILD_DIR)/$(PKG_GROUP)/$(pkg_basename).$(pkg_arch_suffix)
+pkg_signature    = $(call sign-name,$(pkg_archive))
+pkg_description  = $(call desc-name,$(pkg_archive))
+products         = $(call pkg-files,$(pkg_archive))
+
+BUILD_TARGETS    = $(build_target)
+BUILD_TARGETS   += $(install_target)
+
+PRODUCT_TARGETS  = $(products)
+
+ROOTFS_TARGETS   = $(pkg_archive)
+
+
+include ../../../build-system/core.mk
+
+
+env_sysroot = DESTDIR=$(AUTOMAKE_PKG)
+
+
+extra_configure_switches  = --libdir=/lib$(LIBSUFFIX)
+extra_configure_switches += --docdir=/usr/share/doc/$(src_dir_name)
+extra_configure_switches += --infodir=/usr/share/info
+extra_configure_switches += --mandir=/usr/share/man
+
+
+####### Dependencies
+
+$(src_done): $(SRC_ARCHIVE) $(PATCHES_DEP)
+	$(UNPACK_SRC_ARCHIVE)
+	$(APPLY_PATCHES)
+	@touch $@
+
+$(build_target): $(src_done)
+	@mkdir -p $(build_dir)
+	@cd $(build_dir) && \
+	  $(BUILD_ENVIRONMENT) ../$(src_dir_name)/configure \
+	  --prefix=/usr               \
+	  --build=$(BUILD)            \
+	  --host=$(TARGET)            \
+	  $(extra_configure_switches)
+	@cd $(build_dir) && $(BUILD_ENVIRONMENT) $(MAKE)
+	@touch $@
+
+$(install_target): $(build_target)
+	@mkdir -p $(AUTOMAKE_PKG)
+	@cd $(build_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
+	@( cd $(AUTOMAKE_PKG)/usr/bin ; \
+	   rm -f aclocal ; \
+	   ln -sf aclocal-$(short_version) aclocal ; \
+	   rm -f automake ; \
+	   ln -sf automake-$(short_version) automake ; \
+	 )
+	@( cd $(AUTOMAKE_PKG)/usr/share/man/man1 ; \
+	   rm -f aclocal.1 ; \
+	   ln -sf aclocal-$(short_version).1 aclocal.1 ; \
+	   rm -f automake.1 ; \
+	   ln -sf automake-$(short_version).1 automake.1 ; \
+	 )
+	@mkdir -p $(AUTOMAKE_PKG)/usr/share/aclocal
+	@touch $(AUTOMAKE_PKG)/usr/share/aclocal
+	# ======= Install Documentation =======
+	@rm -f $(AUTOMAKE_PKG)/usr/share/info/dir
+	@gzip -9 $(AUTOMAKE_PKG)/usr/share/info/*
+	@if [ -d $(AUTOMAKE_PKG)/usr/share/man ]; then \
+	  ( cd $(AUTOMAKE_PKG)/usr/share/man ; \
+	    for manpagedir in `find . -type d -name "man*"` ; do \
+	      ( cd $$manpagedir ; \
+	        for eachpage in `find . -type l -maxdepth 1` ; do \
+	          ln -s `readlink $$eachpage`.gz $$eachpage.gz ; \
+	          rm $$eachpage ; \
+	        done ; \
+	        gzip -9 *.?  ; \
+	      ) \
+	    done \
+	  ) \
+	 fi
+	@mkdir -p $(AUTOMAKE_PKG)/usr/doc/$(src_dir_name)
+	@cp -a $(SRC_DIR)/AUTHORS $(SRC_DIR)/COPYING \
+	       $(AUTOMAKE_PKG)/usr/doc/$(src_dir_name)
+	@mkdir -p $(AUTOMAKE_PKG)/usr/share/doc/$(src_dir_name)
+	@( cd $(SRC_DIR) ; \
+	   cp -a AUTHORS COPYING HACKING INSTALL NEWS README THANKS \
+	         $(AUTOMAKE_PKG)/usr/share/doc/$(src_dir_name) \
+	 )
+	@( cd $(SRC_DIR) ; \
+	   if [ -r ChangeLog ]; then \
+	     DOCSDIR=`echo $(AUTOMAKE_PKG)/usr/share/doc/$(src_dir_name)` ; \
+	     cat ChangeLog | head -n 1000 > $$DOCSDIR/ChangeLog ; \
+	     touch -r ChangeLog $$DOCSDIR/ChangeLog ; \
+	   fi \
+	 )
+	# ======= Install the same to $(TARGET_DEST_DIR) =======
+	$(call install-into-devenv, $(AUTOMAKE_PKG))
+	@touch $@
+
+$(AUTOMAKE_PKG_DESCRIPTION_FILE): $(AUTOMAKE_PKG_DESCRIPTION_FILE_IN)
+	@cat $< | $(SED) -e "s/@VERSION@/$(version)/g" > $@
+
+$(pkg_signature)   : $(pkg_archive) ;
+$(pkg_description) : $(pkg_archive) ;
+
+$(pkg_archive): $(install_target) $(AUTOMAKE_PKG_DESCRIPTION_FILE) $(AUTOMAKE_PKG_INSTALL_SCRIPT)
+	@cp $(AUTOMAKE_PKG_DESCRIPTION_FILE) $(AUTOMAKE_PKG)/.DESCRIPTION
+	@cp $(AUTOMAKE_PKG_INSTALL_SCRIPT) $(AUTOMAKE_PKG)/.INSTALL
+	@$(BUILD_PKG_REQUIRES) $(AUTOMAKE_PKG)/.REQUIRES
+	@echo "pkgname=$(AUTOMAKE_PKG_NAME)"                            >  $(AUTOMAKE_PKG)/.PKGINFO ; \
+	 echo "pkgver=$(AUTOMAKE_PKG_VERSION)"                          >> $(AUTOMAKE_PKG)/.PKGINFO ; \
+	 echo "arch=$(AUTOMAKE_PKG_ARCH)"                               >> $(AUTOMAKE_PKG)/.PKGINFO ; \
+	 echo "distroname=$(AUTOMAKE_PKG_DISTRO_NAME)"                  >> $(AUTOMAKE_PKG)/.PKGINFO ; \
+	 echo "distrover=$(AUTOMAKE_PKG_DISTRO_VERSION)"                >> $(AUTOMAKE_PKG)/.PKGINFO ; \
+	 echo "group=$(AUTOMAKE_PKG_GROUP)"                             >> $(AUTOMAKE_PKG)/.PKGINFO ; \
+	 echo "short_description=\"$(AUTOMAKE_PKG_SHORT_DESCRIPTION)\"" >> $(AUTOMAKE_PKG)/.PKGINFO ; \
+	 echo "url=$(AUTOMAKE_PKG_URL)"                                 >> $(AUTOMAKE_PKG)/.PKGINFO ; \
+	 echo "license=$(AUTOMAKE_PKG_LICENSE)"                         >> $(AUTOMAKE_PKG)/.PKGINFO
+	@$(FAKEROOT) sh -c "cd $(AUTOMAKE_PKG) && chown -R root:root . && $(MAKE_PACKAGE) --linkadd yes .."
diff --git a/dev/automake/1.15/PATCHES b/dev/automake/1.15/PATCHES
new file mode 100644
index 000000000..f106e5dba
--- /dev/null
+++ b/dev/automake/1.15/PATCHES
@@ -0,0 +1,2 @@
+
+../../../sources/GNU/automake/patches/automake-1.15-perl.patch -p0
diff --git a/dev/automake/1.15/automake-pkg-description.in b/dev/automake/1.15/automake-pkg-description.in
new file mode 100644
index 000000000..80800c573
--- /dev/null
+++ b/dev/automake/1.15/automake-pkg-description.in
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.  Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in.  You must
+# make exactly 11 lines for the formatting to be correct.  It's also
+# customary to leave one space after the ':'.
+
+        |-----handy-ruler------------------------------------------------------|
+automake: automake @VERSION@ (a Makefile generator)
+automake:
+automake: This is Automake, a Makefile generator. It was inspired by the 4.4
+automake: BSD make and include files, but aims to be portable and to conform
+automake: to the GNU standards for Makefile variables and targets. Automake is
+automake: a Perl script. The input files are called Makefile.am. The output
+automake: files are called Makefile.in; they are intended for use with
+automake: Autoconf. Automake requires certain things to be done in your
+automake: configure.in. You must install the "m4" and "perl" packages to be
+automake: able to use automake.
+automake:
diff --git a/dev/automake/1.15/automake-pkg-install.sh b/dev/automake/1.15/automake-pkg-install.sh
new file mode 100755
index 000000000..61ebd0838
--- /dev/null
+++ b/dev/automake/1.15/automake-pkg-install.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+# Preserve new files
+install_file() {
+  NEW="$1"
+  OLD="`dirname $NEW`/`basename $NEW .new`"
+  # If there's no file by that name, mv it over:
+  if [ ! -r $OLD ]; then
+    mv $NEW $OLD
+  elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy
+    rm $NEW
+  fi
+  # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+
+# arg 1:  the new package version
+pre_install() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+post_install() {
+  #
+  # NOTE:
+  #   'install-info' can work using relative paths and we can make use build machine
+  #   utility during installation to the some partition and use target 'install-info'
+  #   during installation directly on the running target machine.
+  #
+  if [ -x /usr/bin/install-info ] ; then
+    install-info --info-dir=usr/share/info usr/share/info/automake.info.gz         2>/dev/null
+    install-info --info-dir=usr/share/info usr/share/info/automake-history.info.gz 2>/dev/null
+  elif ! grep "(automake)" usr/share/info/dir 1> /dev/null 2> /dev/null ; then
+  cat << EOF >> usr/share/info/dir
+
+Individual utilities
+* aclocal-invocation: (automake)aclocal Invocation.
+                                                Generating aclocal.m4.
+* automake-invocation: (automake)automake Invocation.
+                                                Generating Makefile.in.
+
+Software development
+* Automake: (automake).         Making GNU standards-compliant Makefiles.
+EOF
+  fi
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+pre_update() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+post_update() {
+  post_install
+}
+
+# arg 1:  the old package version
+pre_remove() {
+  if [ -x /usr/bin/install-info ] ; then
+    install-info --delete --info-file=usr/share/info/automake.info.gz         --dir-file=usr/share/info/dir 2> /dev/null || /bin/true
+    install-info --delete --info-file=usr/share/info/automake-history.info.gz --dir-file=usr/share/info/dir 2> /dev/null || /bin/true
+  fi
+}
+
+# arg 1:  the old package version
+post_remove() {
+  /bin/true
+}
+
+
+operation=$1
+shift
+
+$operation $*
diff --git a/dev/make/4.2.1/Makefile b/dev/make/4.2.1/Makefile
new file mode 100644
index 000000000..cdc329154
--- /dev/null
+++ b/dev/make/4.2.1/Makefile
@@ -0,0 +1,180 @@
+
+COMPONENT_TARGETS  = $(HARDWARE_PC32)
+COMPONENT_TARGETS += $(HARDWARE_PC64)
+COMPONENT_TARGETS += $(HARDWARE_CB1X)
+COMPONENT_TARGETS += $(HARDWARE_CB2X)
+COMPONENT_TARGETS += $(HARDWARE_CB3X)
+COMPONENT_TARGETS += $(HARDWARE_FFRK3288)
+COMPONENT_TARGETS += $(HARDWARE_M201)
+COMPONENT_TARGETS += $(HARDWARE_MXQ)
+COMPONENT_TARGETS += $(HARDWARE_NIT6Q)
+COMPONENT_TARGETS += $(HARDWARE_OMAP5UEVM)
+COMPONENT_TARGETS += $(HARDWARE_DRA7XXEVM)
+COMPONENT_TARGETS += $(HARDWARE_CI20)
+COMPONENT_TARGETS += $(HARDWARE_BT1)
+
+
+NEED_ABS_PATH      = true
+COMPONENT_IS_3PP   = true
+
+
+include ../../../build-system/constants.mk
+
+
+SOURCE_REQUIRES    = sources/GNU/make
+
+REQUIRES           = app/bash/4.3
+REQUIRES          += dev/guile/2.0.11
+
+# ======= __END_OF_REQUIRES__ =======
+
+
+version            = 4.2.1
+tar_bz2_archive    = $(SRC_PACKAGE_PATH)/GNU/make/make-$(version).tar.bz2
+SRC_ARCHIVE        = $(tar_bz2_archive)
+SRC_DIR            = $(TARGET_BUILD_DIR)/make-$(version)
+src_dir_name       = make-$(version)
+src_done           = $(TARGET_BUILD_DIR)/.source_done
+
+PATCHES = PATCHES
+
+build_dir          = $(TARGET_BUILD_DIR)/build
+build_target       = $(TARGET_BUILD_DIR)/.build_done
+install_target     = $(TARGET_BUILD_DIR)/.install_done
+
+
+####### Targets
+
+PKG_GROUP = dev
+
+#
+# *PKG_NAME & *PKG_VERSION shouldn't be a reference to value.
+#
+MAKE_PKG_NAME                = make
+MAKE_PKG_VERSION             = 4.2.1
+MAKE_PKG_ARCH                = $(TOOLCHAIN)
+MAKE_PKG_DISTRO_NAME         = $(DISTRO_NAME)
+MAKE_PKG_DISTRO_VERSION      = $(DISTRO_VERSION)
+MAKE_PKG_GROUP               = $(PKG_GROUP)
+###                           |---handy-ruler-------------------------------|
+MAKE_PKG_SHORT_DESCRIPTION   = GNU make utility
+MAKE_PKG_URL                 = $(BUG_URL)
+MAKE_PKG_LICENSE             = GPLv3
+MAKE_PKG_DESCRIPTION_FILE    = $(TARGET_BUILD_DIR)/$(MAKE_PKG_NAME)-pkg-description
+MAKE_PKG_DESCRIPTION_FILE_IN = $(MAKE_PKG_NAME)-pkg-description.in
+MAKE_PKG_INSTALL_SCRIPT      = $(MAKE_PKG_NAME)-pkg-install.sh
+
+MAKE_PKG         = $(CURDIR)/$(TARGET_BUILD_DIR)/$(MAKE_PKG_NAME)-package
+
+pkg_basename     = $(MAKE_PKG_NAME)-$(MAKE_PKG_VERSION)-$(MAKE_PKG_ARCH)-$(MAKE_PKG_DISTRO_NAME)-$(MAKE_PKG_DISTRO_VERSION)
+
+pkg_archive      = $(TARGET_BUILD_DIR)/$(PKG_GROUP)/$(pkg_basename).$(pkg_arch_suffix)
+pkg_signature    = $(call sign-name,$(pkg_archive))
+pkg_description  = $(call desc-name,$(pkg_archive))
+products         = $(call pkg-files,$(pkg_archive))
+
+BUILD_TARGETS    = $(build_target)
+BUILD_TARGETS   += $(install_target)
+
+PRODUCT_TARGETS  = $(products)
+
+ROOTFS_TARGETS   = $(pkg_archive)
+
+
+include ../../../build-system/core.mk
+
+
+env_sysroot = DESTDIR=$(MAKE_PKG)
+
+
+extra_configure_switches  = --libdir=/lib$(LIBSUFFIX)
+extra_configure_switches += --docdir=/usr/share/doc/$(src_dir_name)
+extra_configure_switches += --infodir=/usr/share/info
+extra_configure_switches += --mandir=/usr/share/man
+extra_configure_switches += --disable-dependency-tracking
+extra_configure_switches += --with-guile=yes
+
+
+####### Dependencies
+
+$(src_done): $(SRC_ARCHIVE) $(PATCHES_DEP)
+	$(UNPACK_SRC_ARCHIVE)
+	$(APPLY_PATCHES)
+	@touch $@
+
+$(build_target): $(src_done)
+	@mkdir -p $(build_dir)
+	@cd $(build_dir) && \
+	  $(BUILD_ENVIRONMENT) ../$(src_dir_name)/configure \
+	  --prefix=/usr               \
+	  --build=$(BUILD)            \
+	  --host=$(TARGET)            \
+	  $(extra_configure_switches)
+	@cd $(build_dir) && $(BUILD_ENVIRONMENT) $(MAKE)
+	@touch $@
+
+$(install_target): $(build_target)
+	@mkdir -p $(MAKE_PKG)
+	@cd $(build_dir) && $(BUILD_ENVIRONMENT) $(MAKE) -j1 install $(env_sysroot)
+	@( cd $(MAKE_PKG)/usr/bin ; \
+	   rm -f gmake ; \
+	   ln -sf make gmake ; \
+	 )
+	@rm -f $(MAKE_PKG)/usr/share/info/dir
+	@gzip -9 $(MAKE_PKG)/usr/share/info/*
+	@if [ -d $(MAKE_PKG)/usr/share/man ]; then \
+	  ( cd $(MAKE_PKG)/usr/share/man ; \
+	    for manpagedir in `find . -type d -name "man*"` ; do \
+	      ( cd $$manpagedir ; \
+	        for eachpage in `find . -type l -maxdepth 1` ; do \
+	          ln -s `readlink $$eachpage`.gz $$eachpage.gz ; \
+	          rm $$eachpage ; \
+	        done ; \
+	        gzip -9 *.?  ; \
+	      ) \
+	    done \
+	  ) \
+	 fi
+	@mkdir -p $(MAKE_PKG)/usr/doc/$(src_dir_name)
+	@cp -a $(SRC_DIR)/AUTHORS $(SRC_DIR)/COPYING \
+	       $(MAKE_PKG)/usr/doc/$(src_dir_name)
+	@mkdir -p $(MAKE_PKG)/usr/share/doc/$(src_dir_name)
+	@( cd $(SRC_DIR) ; \
+	   cp -a AUTHORS COPYING INSTALL NEWS README* \
+	         $(MAKE_PKG)/usr/share/doc/$(src_dir_name) \
+	 )
+	@( cd $(SRC_DIR) ; \
+	   if [ -r ChangeLog ]; then \
+	     DOCSDIR=`echo $(MAKE_PKG)/usr/share/doc/$(src_dir_name)` ; \
+	     cat ChangeLog | head -n 1000 > $$DOCSDIR/ChangeLog ; \
+	     touch -r ChangeLog $$DOCSDIR/ChangeLog ; \
+	   fi \
+	 )
+	# ======= Install the same to $(TARGET_DEST_DIR) =======
+	$(call install-into-devenv, $(MAKE_PKG))
+	# ======= Strip binaries =======
+	@( cd $(MAKE_PKG) ; \
+	   find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs $(STRIP) --strip-unneeded 2> /dev/null \
+	 )
+	@touch $@
+
+$(MAKE_PKG_DESCRIPTION_FILE): $(MAKE_PKG_DESCRIPTION_FILE_IN)
+	@cat $< | $(SED) -e "s/@VERSION@/$(version)/g" > $@
+
+$(pkg_signature)   : $(pkg_archive) ;
+$(pkg_description) : $(pkg_archive) ;
+
+$(pkg_archive): $(install_target) $(MAKE_PKG_DESCRIPTION_FILE) $(MAKE_PKG_INSTALL_SCRIPT)
+	@cp $(MAKE_PKG_DESCRIPTION_FILE) $(MAKE_PKG)/.DESCRIPTION
+	@cp $(MAKE_PKG_INSTALL_SCRIPT) $(MAKE_PKG)/.INSTALL
+	@$(BUILD_PKG_REQUIRES) $(MAKE_PKG)/.REQUIRES
+	@echo "pkgname=$(MAKE_PKG_NAME)"                            >  $(MAKE_PKG)/.PKGINFO ; \
+	 echo "pkgver=$(MAKE_PKG_VERSION)"                          >> $(MAKE_PKG)/.PKGINFO ; \
+	 echo "arch=$(MAKE_PKG_ARCH)"                               >> $(MAKE_PKG)/.PKGINFO ; \
+	 echo "distroname=$(MAKE_PKG_DISTRO_NAME)"                  >> $(MAKE_PKG)/.PKGINFO ; \
+	 echo "distrover=$(MAKE_PKG_DISTRO_VERSION)"                >> $(MAKE_PKG)/.PKGINFO ; \
+	 echo "group=$(MAKE_PKG_GROUP)"                             >> $(MAKE_PKG)/.PKGINFO ; \
+	 echo "short_description=\"$(MAKE_PKG_SHORT_DESCRIPTION)\"" >> $(MAKE_PKG)/.PKGINFO ; \
+	 echo "url=$(MAKE_PKG_URL)"                                 >> $(MAKE_PKG)/.PKGINFO ; \
+	 echo "license=$(MAKE_PKG_LICENSE)"                         >> $(MAKE_PKG)/.PKGINFO
+	@$(FAKEROOT) sh -c "cd $(MAKE_PKG) && chown -R root:root . && $(MAKE_PACKAGE) --linkadd yes .."
diff --git a/dev/make/4.2.1/PATCHES b/dev/make/4.2.1/PATCHES
new file mode 100644
index 000000000..e69de29bb
diff --git a/dev/make/4.2.1/make-pkg-description.in b/dev/make/4.2.1/make-pkg-description.in
new file mode 100644
index 000000000..950f7da13
--- /dev/null
+++ b/dev/make/4.2.1/make-pkg-description.in
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.  Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in.  You must
+# make exactly 11 lines for the formatting to be correct.  It's also
+# customary to leave one space after the ':'.
+
+    |-----handy-ruler------------------------------------------------------|
+make: make @VERSION@ (GNU make utility to maintain groups of programs)
+make:
+make: This is the GNU implementation of make, which was written by Richard
+make: Stallman and Roland McGrath. The purpose of the make utility is to
+make: determine automatically which pieces of a large program need to be
+make: recompiled, and issue the commands to recompile them.
+make:
+make: This is needed to compile just about any major C program, including
+make: the Linux kernel.
+make:
+make:
diff --git a/dev/make/4.2.1/make-pkg-install.sh b/dev/make/4.2.1/make-pkg-install.sh
new file mode 100755
index 000000000..3abfd69e6
--- /dev/null
+++ b/dev/make/4.2.1/make-pkg-install.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+# Preserve new files
+install_file() {
+  NEW="$1"
+  OLD="`dirname $NEW`/`basename $NEW .new`"
+  # If there's no file by that name, mv it over:
+  if [ ! -r $OLD ]; then
+    mv $NEW $OLD
+  elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy
+    rm $NEW
+  fi
+  # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+
+# arg 1:  the new package version
+pre_install() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+post_install() {
+  #
+  # NOTE:
+  #   'install-info' can work using relative paths and we can make use build machine
+  #   utility during installation to the some partition and use target 'install-info'
+  #   during installation directly on the running target machine.
+  #
+  if [ -x /usr/bin/install-info ] ; then
+    install-info --info-dir=usr/share/info usr/share/info/make.info.gz 2>/dev/null
+  elif ! grep "(make)" usr/share/info/dir 1> /dev/null 2> /dev/null ; then
+  cat << EOF >> usr/share/info/dir
+
+Software development
+* Make: (make).                 Remake files automatically.
+EOF
+  fi
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+pre_update() {
+  /bin/true
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+post_update() {
+  post_install
+}
+
+# arg 1:  the old package version
+pre_remove() {
+  if [ -x /usr/bin/install-info ] ; then
+    install-info --delete --info-file=usr/share/info/make.info.gz --dir-file=usr/share/info/dir 2> /dev/null || /bin/true
+  fi
+}
+
+# arg 1:  the old package version
+post_remove() {
+  /bin/true
+}
+
+
+operation=$1
+shift
+
+$operation $*
diff --git a/products/X11/Makefile b/products/X11/Makefile
index 20c391607..41c68ff60 100644
--- a/products/X11/Makefile
+++ b/products/X11/Makefile
@@ -565,7 +565,7 @@ ifeq ($(HARDWARE),$(HARDWARE_PC64))
 REQUIRES += dev/llvm/3.8.0-x86_32
 endif
 REQUIRES += dev/cmake/3.5.2
-REQUIRES += dev/make/4.0
+REQUIRES += dev/make/4.2.1
 REQUIRES += dev/autoconf-archive/2014.02.28
 REQUIRES += dev/pkg-config/0.28
 
diff --git a/products/base/Makefile b/products/base/Makefile
index 1d4f3f8b0..4b5468ed8 100644
--- a/products/base/Makefile
+++ b/products/base/Makefile
@@ -565,7 +565,7 @@ ifeq ($(HARDWARE),$(HARDWARE_PC64))
 REQUIRES += dev/llvm/3.8.0-x86_32
 endif
 REQUIRES += dev/cmake/3.5.2
-REQUIRES += dev/make/4.0
+REQUIRES += dev/make/4.2.1
 REQUIRES += dev/autoconf-archive/2014.02.28
 REQUIRES += dev/pkg-config/0.28