diff --git a/Makefile b/Makefile
index 12bae936b5e20f2bee96b924287a4bbb7bcabf3d..9c17230b655139e6c8834997e0346e9a78584d2a 100644
--- a/Makefile
+++ b/Makefile
@@ -62,7 +62,6 @@ POSTINSTALL     ?= /usr/bin/install_name_tool
 # Note: Overriding CC or CXX with ?= doesn't work, since they're "defined".
 FORCE_ARCH      ?=
 ARCHFLAGS       ?=
-LIPO            ?= lipo
 DEBUG           ?=
 OPT             ?= -Os
 XCFLAGS         ?= $(DEBUG) $(OPT) -Wall -Wno-deprecated-declarations
@@ -71,7 +70,6 @@ DLIBCFLAGS      ?= -fPIC
 SLIBCFLAGS      ?=
 XCXXFLAGS       ?= $(DEBUG) $(OPT) -Wall
 ALLCXXFLAGS     := $(ARCHFLAGS) $(XCXXFLAGS) $(CXXFLAGS)
-LDX             ?= /usr/bin/ld
 LDFLAGS         ?= $(DEBUG)
 ALLLDFLAGS      := $(ARCHFLAGS) $(LDFLAGS)
 TEST_ARGS       ?=
@@ -89,8 +87,6 @@ INSTALL_MAN      = install -c -m 444
 RM               = rm -f
 RMDIR            = sh -c 'for d; do test ! -d "$$d" || rmdir -p "$$d"; done' rmdir
 
-PLATFORM        ?= $(shell $(UNAME) -r | $(SED) -ne 's/\([0-9][0-9]*\)\..*/\1/p')
-
 SRCDIR           = src
 SRCINCDIR        = include
 # Use VAR := $(shell CMD) instead of VAR != CMD to support old make versions
@@ -202,128 +198,11 @@ TIGERMAN1S      := $(wildcard $(TIGERSRCDIR)/*.1)
 TOOLDIR          = tools
 ARCHTOOL         = $(TOOLDIR)/binarchs.sh
 
-define splitandfilterandmergemultiarch
-	output='$(1)' && \
-	lipo='$(2)' && \
-	rm='$(3)' && \
-	cp='$(4)' && \
-	ld='$(5)' && \
-	grep='$(6)' && \
-	platform='$(7)' && \
-	force_arch='$(8)' && \
-	objectlist="$${output}".* && \
-	archlist='' && \
-	fatness='' && \
-	for object in $${objectlist}; do \
-		if [ -z "$${force_arch}" ]; then \
-			archlist_new="$$($${lipo} -archs "$${object}")"; \
-		else \
-			archlist_new="$${force_arch}"; \
-		fi && \
-		if [ -n "$${archlist}" ] && [ "$${archlist}" != "$${archlist_new}" ]; then \
-			printf 'Old/previous architecture list "%s" does not match new one "%s", this is unsupported.\n' "$${archlist}" "$${archlist_new}" >&2 && \
-			exit '1'; \
-		else \
-			archlist="$${archlist_new}"; \
-		fi && \
-		( $${lipo} -info "$${object}" | grep -qs '^Non-fat file:' ); \
-		fatness_new="$${?}" && \
-		if [ -n "$${fatness}" ] && [ "$${fatness}" != "$${fatness_new}" ]; then \
-			printf 'Old/previous fatness value "%d" does not match new one "%d", this is unsupported.\n' "$${fatness}" "$${fatness_new}" >&2 && \
-			exit '2'; \
-		else \
-			fatness="$${fatness_new}"; \
-		fi && \
-		if [ -n "$${force_arch}" ] && [ '0' -ne "$${fatness}" ]; then \
-			printf 'Architecture forced to "%s", but object file "%s" is a multi-architecture (fat) object file, this is unsupported.\n' "$${force_arch}" "$${object}" >&2 && \
-			exit '3'; \
-		fi && \
-		$$(: 'Check for unknown architectures.') && \
-		for arch in $${archlist}; do \
-			case "$${arch}" in \
-				(unknown*) \
-					printf 'Unknown architecture "%s" encountered, this is unsupported.\n' "$${arch}" >&2 && \
-					exit '4'; \
-					;; \
-				(*) \
-					;; \
-			esac && \
-			if [ '0' -eq "$${fatness}" ]; then \
-				$${cp} "$${object}" "$${object}.$${arch}" && \
-				$$(: 'A non-fat file cannot have more than one architecture, but breaking out sounds weird.'); \
-			else \
-				$${lipo} "$${object}" -thin "$${arch}" -output "$${object}.$${arch}"; \
-			fi; \
-		done && \
-		$${rm} "$${object}"; \
-	done && \
-	$$(: '... and use ld to merge each variant into a single-architecture object file ...') && \
-	for arch in $${archlist}; do \
-		$$(: 'Filter out variants not applicable to certain architectures.') && \
-		$$(: 'For instance, the x86_64 architecture is fully UNIX2003-compliant and thus does not have $$UNIX2003-compat functons.') && \
-		$$(: 'On the contrary, the i386 architecture has only $$UNIX2003-compat functions for the $$INODE64 feature set.') && \
-		$$(: '10.4 is so old that it does not even have the $$INODE64 feature.') && \
-		case "$${arch}" in \
-			('x86_64'|'ppc64') \
-				if [ '9' -gt "$${platform}" ]; then \
-					$${ld} -r "$${output}.inode32.$${arch}" -o "$${output}.$${arch}"; \
-				else \
-					$${ld} -r "$${output}.inode32.$${arch}" "$${output}.inode64.$${arch}" -o "$${output}.$${arch}"; \
-				fi; \
-				;; \
-			('i386'|'ppc'|'ppc7400') \
-				if [ '9' -gt "$${platform}" ]; then \
-					$${ld} -r "$${output}.inode32.$${arch}" "$${output}.inode32unix2003.$${arch}" -o "$${output}.$${arch}"; \
-				else \
-					$${ld} -r "$${output}.inode32.$${arch}" "$${output}.inode32unix2003.$${arch}" "$${output}.inode64unix2003.$${arch}" -o "$${output}.$${arch}"; \
-				fi; \
-				;; \
-			(*) \
-				$${ld} -r "$${output}.inode32.$${arch}" "$${output}.inode32unix2003.$${arch}" "$${output}.inode64.$${arch}" "$${output}.inode64unix2003.$${arch}" -o "$${output}.$${arch}"; \
-				;; \
-		esac; \
-	done && \
-	$$(: '... build list of single-architecture merged object files ...') && \
-	objectarchlist='' && \
-	for arch in $${archlist}; do \
-		objectarchlist="$${objectarchlist} $${output}.$${arch}"; \
-	done && \
-	if [ '0' -eq "$${fatness}" ]; then \
-		$$(: 'Thin files can just be copied directly, assuming that the list will only contain one element.') && \
-		$${cp} $${objectarchlist} "$${output}"; \
-	else \
-		$$(: '... and eventually use lipo to merge them all together!') && \
-		$${lipo} $${objectarchlist} -create -output "$${output}"; \
-	fi
-endef
-
 all: dlib slib syslib
 dlib: $(BUILDDLIBPATH)
 slib: $(BUILDSLIBPATH)
 syslib: $(BUILDSYSLIBPATH)
 
-# Special rules for special implementations.
-# For instance, functions using struct stat need to be implemented multiple
-# times with different stat structs - a 32-bit-inode based one and a 64-bit-
-# inode-based one.
-$(MULTIDLIBOBJS): %$(DLIBOBJEXT): %.c $(ALLHEADERS)
-	# Generate possibly multi-architecture object files ...
-	$(CC) -c -I$(SRCINCDIR) $(ALLCFLAGS) $(DLIBCFLAGS) -D__DARWIN_UNIX03=0 -D__DARWIN_64_BIT_INO_T=0 -D__DARWIN_ONLY_64_BIT_INO_T=0 $< -o $@.inode32
-	$(CC) -c -I$(SRCINCDIR) $(ALLCFLAGS) $(DLIBCFLAGS) -D__DARWIN_UNIX03=1 -D__DARWIN_ONLY_UNIX_CONFORMANCE=0 -D__DARWIN_64_BIT_INO_T=0 -D__DARWIN_ONLY_64_BIT_INO_T=0 $< -o $@.inode32unix2003
-	$(CC) -c -I$(SRCINCDIR) $(ALLCFLAGS) $(DLIBCFLAGS) -D__DARWIN_UNIX03=1 -D__DARWIN_ONLY_UNIX_CONFORMANCE=1 -D__DARWIN_64_BIT_INO_T=1 -D__DARWIN_ONLY_64_BIT_INO_T=0 $< -o $@.inode64
-	$(CC) -c -I$(SRCINCDIR) $(ALLCFLAGS) $(DLIBCFLAGS) -D__DARWIN_UNIX03=1 -D__DARWIN_ONLY_UNIX_CONFORMANCE=0 -D__DARWIN_64_BIT_INO_T=1 -D__DARWIN_ONLY_64_BIT_INO_T=0 $< -o $@.inode64unix2003
-	# ... and split them up, because ld can only generate single-architecture files ...
-	$(call splitandfilterandmergemultiarch,$@,$(LIPO),$(RM),$(CP),$(LDX),$(GREP),$(PLATFORM),$(FORCE_ARCH))
-
-$(MULTISLIBOBJS): %$(SLIBOBJEXT): %.c $(ALLHEADERS)
-	# Generate possibly multi-architecture object files ...
-	$(CC) -c -I$(SRCINCDIR) $(ALLCFLAGS) $(SLIBCFLAGS) -D__DARWIN_UNIX03=0 -D__DARWIN_64_BIT_INO_T=0 -D__DARWIN_ONLY_64_BIT_INO_T=0 $< -o $@.inode32
-	$(CC) -c -I$(SRCINCDIR) $(ALLCFLAGS) $(SLIBCFLAGS) -D__DARWIN_UNIX03=1 -D__DARWIN_ONLY_UNIX_CONFORMANCE=0 -D__DARWIN_64_BIT_INO_T=0 -D__DARWIN_ONLY_64_BIT_INO_T=0 $< -o $@.inode32unix2003
-	$(CC) -c -I$(SRCINCDIR) $(ALLCFLAGS) $(SLIBCFLAGS) -D__DARWIN_UNIX03=1 -D__DARWIN_ONLY_UNIX_CONFORMANCE=1 -D__DARWIN_64_BIT_INO_T=1 -D__DARWIN_ONLY_64_BIT_INO_T=0 $< -o $@.inode64
-	$(CC) -c -I$(SRCINCDIR) $(ALLCFLAGS) $(SLIBCFLAGS) -D__DARWIN_UNIX03=1 -D__DARWIN_ONLY_UNIX_CONFORMANCE=0 -D__DARWIN_64_BIT_INO_T=1 -D__DARWIN_ONLY_64_BIT_INO_T=0 $< -o $@.inode64unix2003
-	# ... and split them up, because ld can only generate single-architecture files ...
-	$(call splitandfilterandmergemultiarch,$@,$(LIPO),$(RM),$(CP),$(LDX),$(GREP),$(PLATFORM),$(FORCE_ARCH))
-
 # Generously marking all header files as potential dependencies
 $(DLIBOBJS): %$(DLIBOBJEXT): %.c $(ALLHEADERS)
 	$(CC) -c -I$(SRCINCDIR) $(ALLCFLAGS) $(DLIBCFLAGS) $< -o $@