From a7d94f504fc3be80b741bc5cd50faa81aa7e6e8d Mon Sep 17 00:00:00 2001 From: Walter Doekes <walter+github@wjd.nu> Date: Tue, 28 Mar 2017 20:01:16 +0200 Subject: [PATCH] build: Fix deb build issues with fakeroot If DESTDIR is set, don't call ldconfig. Assume that DESTDIR is used to create a binary archive. The ldconfig call should be delegated to the archive postinst script. This fixes the case where fakeroot wraps 'make install' causing $EUID to be 0 even though it doesn't have permission to call ldconfig. The previous logic in configure.ac to detect and correct libdir has been removed as it was not completely accurate. CentOS 64-bit users should again specifiy --libdir=/usr/lib64 when configuring to prevent install to /usr/lib. Updated Makefile:check-old-libdir to check for orphans in lib64 when installing to lib as well as orphans in lib when installing to lib64. Updated Makefile and main/Makefile uninstall targets to remove the orphans using the new logic. ASTERISK-26705 Change-Id: I51739d4a03e60bff38be719b8d2ead0007afdd51 --- Makefile | 52 ++++++++++++++++++++++++++++++++++++++------------- configure | 22 ---------------------- configure.ac | 21 --------------------- main/Makefile | 2 +- 4 files changed, 40 insertions(+), 57 deletions(-) diff --git a/Makefile b/Makefile index 95a3d3da53..f29c07f680 100644 --- a/Makefile +++ b/Makefile @@ -606,26 +606,56 @@ oldmodcheck: ld-cache-update: ifneq ($(LDCONFIG),) +ifeq ($(DESTDIR),) # DESTDIR means binary archive creation; ldconfig should be run on postinst @if [ $${EUID} -eq 0 ] ; then \ - $(LDCONFIG) "$(DESTDIR)$(ASTLIBDIR)/" ; \ + $(LDCONFIG) "$(ASTLIBDIR)/" ; \ else \ echo " WARNING WARNING WARNING" ;\ echo "" ;\ echo " You cannot rebuild the system linker cache unless you are root. " ;\ - echo " You MUST do one of the follwing..." ;\ + echo " You MUST do one of the following..." ;\ echo " * Re-run 'make install' as root. " ;\ - echo " * Run 'ldconfig $(DESTDIR)$(ASTLIBDIR)' as root. " ;\ - echo " * Run asterisk with 'LD_LIBRARY_PATH=$(DESTDIR)$(ASTLIBDIR) asterisk' " ;\ + echo " * Run 'ldconfig $(ASTLIBDIR)' as root. " ;\ + echo " * Run asterisk with 'LD_LIBRARY_PATH=$(ASTLIBDIR) asterisk' " ;\ echo "" ;\ echo " WARNING WARNING WARNING" ;\ fi endif +endif -ifeq ($(and $(findstring 64,$(HOST_CPU)),$(findstring lib64,$(DESTDIR)$(ASTLIBDIR))),lib64) -_oldlibdir = $(subst lib64,lib,$(DESTDIR)$(ASTLIBDIR)) +export _oldlibdir = +export _oldmoddir = +ifeq ($(findstring 64,$(HOST_CPU)),64) + # Strip any trailing '/' so the dir and notdir functions work correctly + _current_libdir = $(patsubst %/,%,$(DESTDIR)$(ASTLIBDIR)) + + # Only process if the paths end in lib64 or lib. + # If we're installing to lib64, check lib for orphans. + # If we're installing to lib, check lib64 for orphans. + # Otherwise, leave _oldlibdir empty. + ifeq ($(notdir $(_current_libdir)),lib64) + _oldlibdir = $(dir $(_current_libdir))lib + else ifeq ($(notdir $(_current_libdir)),lib) + _oldlibdir = $(dir $(_current_libdir))lib64 + endif + + # Strip any trailing '/' so the dir and notdir functions work correctly + _current_moddir = $(patsubst %/,%,$(DESTDIR)$(ASTMODDIR)) + + # Only process if the paths contain /lib64/ or /lib/. + # If we're installing to lib64, check lib for orphans. + # If we're installing to lib, check lib64 for orphans. + # Otherwise, leave _oldmoddir empty. + ifeq ($(findstring /lib64/,$(_current_moddir)),/lib64/) + _oldmoddir = $(subst /lib64/,/lib/,$(_current_moddir)) + else ifeq ($(findstring /lib/,$(_current_moddir)),/lib/) + _oldmoddir = $(subst /lib/,/lib64/,$(_current_moddir)) + endif +endif check-old-libdir: - @oldfiles=`find "$(_oldlibdir)" -name libasterisk* -print -quit -o \( -path *asterisk/modules/* -a -name *.so \) -print -quit` ;\ + @test -n "$(_oldlibdir)" -a -d "$(_oldlibdir)" || exit 0 ;\ + oldfiles=`find "$(_oldlibdir)" -name libasterisk* -print -quit -o \( -path *asterisk/modules/* -a -name *.so \) -print -quit 2>/dev/null` ;\ if [ "x$$oldfiles" != "x" ] ; then \ echo " WARNING WARNING WARNING" ;\ echo "" ;\ @@ -647,10 +677,6 @@ check-old-libdir: echo "" ;\ echo " WARNING WARNING WARNING" ;\ fi -else -check-old-libdir: - -endif badshell: ifneq ($(filter ~%,$(DESTDIR)),) @@ -912,7 +938,7 @@ main-binuninstall: _uninstall: $(SUBDIRS_UNINSTALL) main-binuninstall rm -f "$(DESTDIR)$(ASTMODDIR)/"* - rm -f "$(subst lib64,lib,$(DESTDIR)$(ASTMODDIR))/"* + test -n "$(_oldmoddir)" -a -d "$(_oldmoddir)" && rm -f "$(_oldmoddir)/"* || : rm -f "$(DESTDIR)$(ASTSBINDIR)/astgenkey" rm -f "$(DESTDIR)$(ASTSBINDIR)/autosupport" rm -rf "$(DESTDIR)$(ASTHEADERDIR)" @@ -945,7 +971,7 @@ uninstall: _uninstall uninstall-all: _uninstall rm -rf "$(DESTDIR)$(ASTMODDIR)" - rm -rf "$(subst lib64,lib,$(DESTDIR)$(ASTMODDIR))" + test -n "$(_oldmoddir)" -a -d "$(_oldmoddir)" && rm -rf "$(_oldmoddir)" || : rm -rf "$(DESTDIR)$(ASTVARLIBDIR)" rm -rf "$(DESTDIR)$(ASTDATADIR)" rm -rf "$(DESTDIR)$(ASTSPOOLDIR)" diff --git a/configure b/configure index 15f127b12a..b27c94e7a9 100755 --- a/configure +++ b/configure @@ -4890,28 +4890,6 @@ if test ${prefix} = ${ac_default_prefix} || test ${prefix} = 'NONE'; then fi fi -# -# The following code for detecting lib64 was taken from Fedora's -# /usr/share/config.site with a modification to check that the -# /usr/lib64 directory actually exists. This prevents libdir from -# being set to /usr/lib64 on 64-bit systems that still use /usr/lib. -# -if test "$prefix" = /usr ||\ - { test "$prefix" = NONE && test "$ac_default_prefix" = /usr ; } -then - for i in x86_64 ppc64 s390x aarch64; do - if test $host_cpu = $i; then - if test "$libdir" = '${exec_prefix}/lib' &&\ - { test -d "${exec_prefix}/lib64" || test -d "${ac_default_prefix}/lib64" ; } ; then - libdir='${exec_prefix}/lib64' - { $as_echo "$as_me:${as_lineno-$LINENO}: Setting libdir=${libdir} " >&5 -$as_echo "$as_me: Setting libdir=${libdir} " >&6;} - fi - break - fi - done -fi - BUILD_PLATFORM=${build} BUILD_CPU=${build_cpu} BUILD_VENDOR=${build_vendor} diff --git a/configure.ac b/configure.ac index a57446f924..b0f04887a0 100644 --- a/configure.ac +++ b/configure.ac @@ -135,27 +135,6 @@ if test ${prefix} = ${ac_default_prefix} || test ${prefix} = 'NONE'; then fi fi -# -# The following code for detecting lib64 was taken from Fedora's -# /usr/share/config.site with a modification to check that the -# /usr/lib64 directory actually exists. This prevents libdir from -# being set to /usr/lib64 on 64-bit systems that still use /usr/lib. -# -if test "$prefix" = /usr ||\ - { test "$prefix" = NONE && test "$ac_default_prefix" = /usr ; } -then - for i in x86_64 ppc64 s390x aarch64; do - if test $host_cpu = $i; then - if test "$libdir" = '${exec_prefix}/lib' &&\ - { test -d "${exec_prefix}/lib64" || test -d "${ac_default_prefix}/lib64" ; } ; then - libdir='${exec_prefix}/lib64' - AC_MSG_NOTICE([ Setting libdir=${libdir} ]) - fi - break - fi - done -fi - BUILD_PLATFORM=${build} BUILD_CPU=${build_cpu} BUILD_VENDOR=${build_vendor} diff --git a/main/Makefile b/main/Makefile index cd553cb0dd..4fb6a01310 100644 --- a/main/Makefile +++ b/main/Makefile @@ -351,7 +351,7 @@ binuninstall: rm -f "$(DESTDIR)$(ASTSBINDIR)/$(MAIN_TGT)" rm -f "$(DESTDIR)$(ASTSBINDIR)/rasterisk" rm -f "$(DESTDIR)$(ASTLIBDIR)/libasterisk"* || : - rm -f "$(subst lib64,lib,$(DESTDIR)$(ASTLIBDIR))/libasterisk"* || : + test -n "$(_oldlibdir)" -a -d "$(_oldlibdir)" && rm -f "$(_oldlibdir)/libasterisk"* || : clean:: rm -f asterisk libasteriskssl.o -- GitLab