From 117a38157537eeb59d73bf8a958363688fdf6383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Thu, 22 Sep 2022 11:34:02 +0200 Subject: [PATCH] Simplify resolving symlinks, remove native extension (#1428) --- .github/workflows/ci.yml | 6 +- README.md | 7 - libexec/rbenv | 34 +-- libexec/rbenv-hooks | 33 +-- libexec/rbenv-versions | 46 +-- src/Makefile.in | 27 +- src/bash.h | 31 -- src/configure | 46 +-- src/realpath.c | 43 --- src/shobj-conf | 594 --------------------------------------- test/hooks.bats | 10 +- test/run | 5 - test/test_helper.bash | 9 - 13 files changed, 27 insertions(+), 864 deletions(-) delete mode 100644 src/bash.h delete mode 100644 src/realpath.c delete mode 100755 src/shobj-conf diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f550c48c..a47efb1e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,15 +5,13 @@ jobs: build: runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: - native_ext: ['', '1'] - os: [ubuntu-latest, macOS-latest] + os: [ubuntu-latest, macos-latest] steps: - uses: actions/checkout@v2 - name: Install bats run: git clone --depth 1 https://github.com/sstephenson/bats.git - name: Run tests - env: - RBENV_NATIVE_EXT: ${{ matrix.native_ext }} run: PATH="./bats/bin:$PATH" test/run diff --git a/README.md b/README.md index 33c346f9..a407bb3f 100644 --- a/README.md +++ b/README.md @@ -197,13 +197,6 @@ a systemwide install. git clone https://github.com/rbenv/rbenv.git ~/.rbenv ``` - Optionally, try to compile dynamic bash extension to speed up rbenv. Don't - worry if it fails; rbenv will still work normally: - - ```sh - cd ~/.rbenv && src/configure && make -C src - ``` - 2. Add `~/.rbenv/bin` to your `$PATH` for access to the `rbenv` command-line utility. diff --git a/libexec/rbenv b/libexec/rbenv index 8a295e93..658a70b1 100755 --- a/libexec/rbenv +++ b/libexec/rbenv @@ -20,37 +20,6 @@ abort() { exit 1 } -if enable -f "${BASH_SOURCE%/*}"/../libexec/rbenv-realpath.dylib realpath 2>/dev/null; then - abs_dirname() { - local path - path="$(realpath "$1")" - echo "${path%/*}" - } -else - [ -z "$RBENV_NATIVE_EXT" ] || abort "failed to load \`realpath' builtin" - - READLINK=$(type -p greadlink readlink 2>/dev/null | head -n1) - [ -n "$READLINK" ] || abort "cannot find readlink - are you missing GNU coreutils?" - - resolve_link() { - $READLINK "$1" - } - - abs_dirname() { - local cwd="$PWD" - local path="$1" - - while [ -n "$path" ]; do - cd "${path%/*}" - local name="${path##*/}" - path="$(resolve_link "$name" || true)" - done - - pwd - cd "$cwd" - } -fi - if [ -z "${RBENV_ROOT}" ]; then RBENV_ROOT="${HOME}/.rbenv" else @@ -72,7 +41,8 @@ export RBENV_DIR shopt -s nullglob -bin_path="$(abs_dirname "$0")" +rbenv_bin="${BASH_SOURCE:-$0}" +bin_path="$(cd "${rbenv_bin%/*}"/../libexec && pwd -P)" for plugin_bin in "${RBENV_ROOT}/plugins/"*/bin; do PATH="${plugin_bin}:${PATH}" done diff --git a/libexec/rbenv-hooks b/libexec/rbenv-hooks index 2fa48e24..c3d9f630 100755 --- a/libexec/rbenv-hooks +++ b/libexec/rbenv-hooks @@ -21,43 +21,12 @@ if [ -z "$RBENV_COMMAND" ]; then exit 1 fi -if ! enable -f "${BASH_SOURCE%/*}"/rbenv-realpath.dylib realpath 2>/dev/null; then - if [ -n "$RBENV_NATIVE_EXT" ]; then - echo "rbenv: failed to load \`realpath' builtin" >&2 - exit 1 - fi -READLINK=$(type -p greadlink readlink 2>/dev/null | head -n1) -if [ -z "$READLINK" ]; then - echo "rbenv: cannot find readlink - are you missing GNU coreutils?" >&2 - exit 1 -fi - -resolve_link() { - $READLINK "$1" -} - -realpath() { - local cwd="$PWD" - local path="$1" - local name - - while [ -n "$path" ]; do - name="${path##*/}" - [ "$name" = "$path" ] || cd "${path%/*}" - path="$(resolve_link "$name" || true)" - done - - echo "${PWD}/$name" - cd "$cwd" -} -fi - IFS=: hook_paths=($RBENV_HOOK_PATH) shopt -s nullglob for path in "${hook_paths[@]}"; do for script in "$path/$RBENV_COMMAND"/*.bash; do - realpath "$script" + echo "$script" done done shopt -u nullglob diff --git a/libexec/rbenv-versions b/libexec/rbenv-versions index 9b7d7570..3e29a156 100755 --- a/libexec/rbenv-versions +++ b/libexec/rbenv-versions @@ -25,50 +25,24 @@ for arg; do esac done +canonicalize_dir() { + { cd "$1" && pwd -P + } 2>/dev/null || echo "$1" +} + versions_dir="${RBENV_ROOT}/versions" - -if ! enable -f "${BASH_SOURCE%/*}"/rbenv-realpath.dylib realpath 2>/dev/null; then - if [ -n "$RBENV_NATIVE_EXT" ]; then - echo "rbenv: failed to load \`realpath' builtin" >&2 - exit 1 - fi - - READLINK=$(type -p greadlink readlink 2>/dev/null | head -n1) - if [ -z "$READLINK" ]; then - echo "rbenv: cannot find readlink - are you missing GNU coreutils?" >&2 - exit 1 - fi - - resolve_link() { - $READLINK "$1" - } - - realpath() { - local cwd="$PWD" - local path="$1" - local name - - while [ -n "$path" ]; do - name="${path##*/}" - [ "$name" = "$path" ] || cd "${path%/*}" - path="$(resolve_link "$name" || true)" - done - - echo "${PWD}/$name" - cd "$cwd" - } -fi - -if [ -d "$versions_dir" ]; then - versions_dir="$(realpath "$versions_dir")" +if [ -n "$skip_aliases" ]; then + versions_dir="$(canonicalize_dir "$versions_dir")" fi list_versions() { + local path + local target shopt -s nullglob for path in "$versions_dir"/*; do if [ -d "$path" ]; then if [ -n "$skip_aliases" ] && [ -L "$path" ]; then - target="$(realpath "$path")" + target="$(canonicalize_dir "$path")" [ "${target%/*}" != "$versions_dir" ] || continue fi echo "${path##*/}" diff --git a/src/Makefile.in b/src/Makefile.in index b4b1825b..9f242d76 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,25 +1,8 @@ -CC = @CC@ - -CFLAGS = @CFLAGS@ -LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DEFS = @DEFS@ -LOCAL_DEFS = @LOCAL_DEFS@ - -CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(LOCAL_CFLAGS) $(CFLAGS) - -SHOBJ_CC = @SHOBJ_CC@ -SHOBJ_CFLAGS = @SHOBJ_CFLAGS@ -SHOBJ_LD = @SHOBJ_LD@ -SHOBJ_LDFLAGS = @SHOBJ_LDFLAGS@ -SHOBJ_XLDFLAGS = @SHOBJ_XLDFLAGS@ -SHOBJ_LIBS = @SHOBJ_LIBS@ -SHOBJ_STATUS = @SHOBJ_STATUS@ - -.c.o: - $(SHOBJ_CC) $(SHOBJ_CFLAGS) $(CCFLAGS) -c -o $@ $< - -../libexec/rbenv-realpath.dylib: realpath.o - $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ realpath.o $(SHOBJ_LIBS) +../libexec/rbenv-realpath.dylib: + @echo "Warning: this Makefile is obsolete and kept only for backwards compatibility." >&2 + @echo "You can remove the \`configure && make ...' step from your rbenv setup." >&2 clean: rm -f *.o ../libexec/*.dylib + +.PHONY: ../libexec/rbenv-realpath.dylib clean diff --git a/src/bash.h b/src/bash.h deleted file mode 100644 index 1b29fd05..00000000 --- a/src/bash.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef __BASH_H__ -#define __BASH_H__ - -#define EXECUTION_SUCCESS 0 -#define EXECUTION_FAILURE 1 -#define EX_USAGE 258 - -#define BUILTIN_ENABLED 1 - -typedef struct word_desc { - char *word; - int flags; -} WORD_DESC; - -typedef struct word_list { - struct word_list *next; - WORD_DESC *word; -} WORD_LIST; - -typedef int sh_builtin_func_t(WORD_LIST *); - -struct builtin { - char *name; - sh_builtin_func_t *function; - int flags; - char * const *long_doc; - const char *short_doc; - char *unused; -}; - -#endif diff --git a/src/configure b/src/configure index 54b33798..854d882e 100755 --- a/src/configure +++ b/src/configure @@ -1,49 +1,7 @@ #!/usr/bin/env bash +# Warning: this configure script is obsolete and kept only for backwards compatibility. set -e src_dir="${0%/*}" -if [ -z "$CC" ]; then - if type -p gcc >/dev/null; then - CC=gcc - else - echo "warning: gcc not found; using CC=cc" >&2 - CC=cc - fi -fi - -if ! type -p "$CC" >/dev/null; then - echo "aborted: compiler not found: $CC" >&2 - exit 1 -fi - -case "$(uname -s)" in -Darwin* ) - host_os="darwin$(uname -r)" - ;; -FreeBSD* ) - host_os="freebsd$(uname -r)" - ;; -OpenBSD* ) - host_os="openbsd$(uname -r)" - ;; -* ) - host_os="linux-gnu" -esac - -eval "$("$src_dir"/shobj-conf -C "$CC" -o "$host_os")" - -sed " - s#@CC@#${CC}# - s#@CFLAGS@#${CFLAGS}# - s#@LOCAL_CFLAGS@#${LOCAL_CFLAGS}# - s#@DEFS@#${DEFS}# - s#@LOCAL_DEFS@#${LOCAL_DEFS}# - s#@SHOBJ_CC@#${SHOBJ_CC}# - s#@SHOBJ_CFLAGS@#${SHOBJ_CFLAGS}# - s#@SHOBJ_LD@#${SHOBJ_LD}# - s#@SHOBJ_LDFLAGS@#${SHOBJ_LDFLAGS}# - s#@SHOBJ_XLDFLAGS@#${SHOBJ_XLDFLAGS}# - s#@SHOBJ_LIBS@#${SHOBJ_LIBS}# - s#@SHOBJ_STATUS@#${SHOBJ_STATUS}# -" "$src_dir"/Makefile.in > "$src_dir"/Makefile +cp "$src_dir"/Makefile.in "$src_dir"/Makefile diff --git a/src/realpath.c b/src/realpath.c deleted file mode 100644 index 6c0c9f3c..00000000 --- a/src/realpath.c +++ /dev/null @@ -1,43 +0,0 @@ -#include "bash.h" -#include -#include - -int realpath_builtin(list) -WORD_LIST *list; -{ - int es; - char *realbuf, *p; - - if (list == 0) { - // builtin_usage(); - return (EX_USAGE); - } - - for (es = EXECUTION_SUCCESS; list; list = list->next) { - p = list->word->word; - realbuf = realpath(p, NULL); - if (realbuf == NULL) { - es = EXECUTION_FAILURE; - // builtin_error("%s: cannot resolve: %s", p, strerror(errno)); - } else { - printf("%s\n", realbuf); - free(realbuf); - } - } - return es; -} - -char *realpath_doc[] = { - "Display each PATHNAME argument, resolving symbolic links. The exit status", - "is 0 if each PATHNAME was resolved; non-zero otherwise.", - (char *)NULL -}; - -struct builtin realpath_struct = { - "realpath", - realpath_builtin, - BUILTIN_ENABLED, - realpath_doc, - "realpath pathname [pathname...]", - 0 -}; diff --git a/src/shobj-conf b/src/shobj-conf deleted file mode 100755 index 1f64433d..00000000 --- a/src/shobj-conf +++ /dev/null @@ -1,594 +0,0 @@ -#! /bin/sh -# -# shobj-conf -- output a series of variable assignments to be substituted -# into a Makefile by configure which specify system-dependent -# information for creating shared objects that may be loaded -# into bash with `enable -f' -# -# usage: shobj-conf [-C compiler] -c host_cpu -o host_os -v host_vendor -# -# Chet Ramey -# chet@po.cwru.edu - -# Copyright (C) 1996-2014 Free Software Foundation, Inc. -# -# This file is part of GNU Bash, the Bourne Again SHell. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -# -# defaults -# -SHOBJ_STATUS=supported -SHLIB_STATUS=supported - -SHOBJ_CC=cc -SHOBJ_CFLAGS= -SHOBJ_LD= -SHOBJ_LDFLAGS= -SHOBJ_XLDFLAGS= -SHOBJ_LIBS= - -SHLIB_XLDFLAGS= -SHLIB_LIBS= - -SHLIB_DOT='.' -SHLIB_LIBPREF='lib' -SHLIB_LIBSUFF='so' - -SHLIB_LIBVERSION='$(SHLIB_LIBSUFF)' -SHLIB_DLLVERSION='$(SHLIB_MAJOR)' - -PROGNAME=`basename $0` -USAGE="$PROGNAME [-C compiler] -c host_cpu -o host_os -v host_vendor" - -while [ $# -gt 0 ]; do - case "$1" in - -C) shift; SHOBJ_CC="$1"; shift ;; - -c) shift; host_cpu="$1"; shift ;; - -o) shift; host_os="$1"; shift ;; - -v) shift; host_vendor="$1"; shift ;; - *) echo "$USAGE" >&2 ; exit 2;; - esac -done - -case "${host_os}-${SHOBJ_CC}-${host_vendor}" in -nsk-cc-tandem) - SHOBJ_CFLAGS=-Wglobalized - case `uname -m` in - NSR*) - SHOBJ_CFLAGS="${SHOBJ_CFLAGS} -Wcall_shared" # default on TNS/E, needed on TNS/R - SHOBJ_LD=/usr/bin/ld # for TNS/R - ;; - NSE*|NEO*) - SHOBJ_LD=/usr/bin/eld - ;; - esac - SHOBJ_LDFLAGS='-shared -bglobalized -unres_symbols ignore' - ;; - -sunos4*-*gcc*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD=/usr/bin/ld - SHOBJ_LDFLAGS='-assert pure-text' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' - ;; - -sunos4*) - SHOBJ_CFLAGS=-pic - SHOBJ_LD=/usr/bin/ld - SHOBJ_LDFLAGS='-assert pure-text' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' - ;; - -sunos5*-*gcc*|solaris2*-*gcc*) - SHOBJ_LD='${CC}' - ld_used=`gcc -print-prog-name=ld` - if ${ld_used} -V 2>&1 | grep GNU >/dev/null 2>&1; then - # This line works for the GNU ld - SHOBJ_LDFLAGS='-shared -Wl,-h,$@' - # http://sourceware.org/ml/binutils/2001-08/msg00361.html - SHOBJ_CFLAGS=-fPIC - else - # This line works for the Solaris linker in /usr/ccs/bin/ld - SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@' - SHOBJ_CFLAGS=-fpic - fi - -# SHLIB_XLDFLAGS='-R $(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -sunos5*|solaris2*) - SHOBJ_CFLAGS='-K pic' - SHOBJ_LD=/usr/ccs/bin/ld - SHOBJ_LDFLAGS='-G -dy -z text -i -h $@' - -# SHLIB_XLDFLAGS='-R $(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -# All versions of Linux (including Gentoo/FreeBSD) or the semi-mythical GNU Hurd. -linux*-*|gnu*-*|k*bsd*-gnu-*|freebsd*-gentoo) - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' - - SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' - ;; - -freebsd2*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD=ld - SHOBJ_LDFLAGS='-x -Bshareable' - - SHLIB_XLDFLAGS='-R$(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' - ;; - -# FreeBSD-3.x ELF -freebsd3*|freebsdaout*) - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' - - if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then - SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' - - SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - else - SHOBJ_LDFLAGS='-shared' - - SHLIB_XLDFLAGS='-R$(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' - fi - ;; - -# FreeBSD-4.x and later have only ELF -freebsd[4-9]*|freebsd1[0-9]*|freebsdelf*|dragonfly*) - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' - - SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' - SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -# Darwin/MacOS X -darwin*) - # Common definitions for all darwin/mac os x versions - SHOBJ_CFLAGS='-fno-common' - - SHOBJ_LD='${CC}' - - SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)' - SHLIB_LIBSUFF='dylib' - - # unused at this time - SHLIB_SONAME='$(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF)' - - case "${host_os}" in - # Darwin versions 1, 5, 6, 7 correspond to Mac OS X 10.0, 10.1, 10.2, - # and 10.3, respectively. - darwin[1-7].*) - SHOBJ_STATUS=unsupported - SHOBJ_LDFLAGS='-dynamic' - SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; - # Darwin 8 == Mac OS X 10.4; Mac OS X 10.N == Darwin N+4 - *) - case "${host_os}" in - darwin[89]*|darwin1[012]*) - SHOBJ_ARCHFLAGS='-arch_only `/usr/bin/arch`' - ;; - *) # Mac OS X 10.9 (Mavericks) and later - SHOBJ_ARCHFLAGS= - # for 32 and 64bit universal library - #SHOBJ_ARCHFLAGS='-arch i386 -arch x86_64' - #SHOBJ_CFLAGS=${SHOBJ_CFLAGS}' -arch i386 -arch x86_64' - ;; - esac - SHOBJ_LDFLAGS="-dynamiclib -dynamic -undefined dynamic_lookup ${SHOBJ_ARCHFLAGS}" - SHLIB_XLDFLAGS="-dynamiclib ${SHOBJ_ARCHFLAGS}"' -install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; - esac - - SHLIB_LIBS='-lncurses' # see if -lcurses works on MacOS X 10.1 - ;; - -openbsd*|netbsd*|mirbsd*) - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared' - - SHLIB_XLDFLAGS='-R$(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' - ;; - -bsdi2*) - SHOBJ_CC=shlicc2 - SHOBJ_CFLAGS= - SHOBJ_LD=ld - SHOBJ_LDFLAGS=-r - SHOBJ_LIBS=-lc_s.2.1.0 - - # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in - # the ass -- they require changing {/usr/lib,etc}/shlib.map on - # each system, and the library creation process is byzantine - SHLIB_STATUS=unsupported - ;; - -bsdi3*) - SHOBJ_CC=shlicc2 - SHOBJ_CFLAGS= - SHOBJ_LD=ld - SHOBJ_LDFLAGS=-r - SHOBJ_LIBS=-lc_s.3.0.0 - - # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in - # the ass -- they require changing {/usr/lib,etc}/shlib.map on - # each system, and the library creation process is byzantine - SHLIB_STATUS=unsupported - ;; - -bsdi4*) - # BSD/OS 4.x now supports ELF and SunOS-style dynamically-linked - # shared libraries. gcc 2.x is the standard compiler, and the - # `normal' gcc options should work as they do in Linux. - - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' - - SHLIB_XLDFLAGS='-Wl,-soname,`basename $@ $(SHLIB_MINOR)`' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' - ;; - -osf*-*gcc*) - # Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' - - SHLIB_XLDFLAGS='-rpath $(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -osf*) - SHOBJ_LD=ld - SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"' - - SHLIB_XLDFLAGS='-rpath $(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com - SHOBJ_CFLAGS=-fpic - SHOBJ_LD='ld' - SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' - SHOBJ_XLDFLAGS='-G' - - SHLIB_XLDFLAGS='-bM:SRE' - SHLIB_LIBS='-lcurses -lc' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -aix4.[2-9]*|aix[5-9].*) - SHOBJ_CFLAGS=-K - SHOBJ_LD='ld' - SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' - SHOBJ_XLDFLAGS='-G' - - SHLIB_XLDFLAGS='-bM:SRE' - SHLIB_LIBS='-lcurses -lc' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -# -# THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface -# -irix[56]*-*gcc*) - SHOBJ_CFLAGS='-fpic' - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' - - SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -irix[56]*) - SHOBJ_CFLAGS='-K PIC' - SHOBJ_LD=ld -# SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@' -# Change from David Kaelbling . If you have problems, -# remove the `-no_unresolved' - SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@' - - SHLIB_XLDFLAGS='-rpath $(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -hpux9*-*gcc*) - # must use gcc; the bundled cc cannot compile PIC code - SHOBJ_CFLAGS='-fpic' - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' - - SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' - SHLIB_LIBSUFF='sl' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -hpux9*) - SHOBJ_STATUS=unsupported - SHLIB_STATUS=unsupported - - # If you are using the HP ANSI C compiler, you can uncomment and use - # this code (I have not tested it) -# SHOBJ_STATUS=supported -# SHLIB_STATUS=supported -# -# SHOBJ_CFLAGS='+z' -# SHOBJ_LD='ld' -# SHOBJ_LDFLAGS='-b +s' -# -# SHLIB_XLDFLAGS='+b $(libdir)' -# SHLIB_LIBSUFF='sl' -# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - - ;; - -hpux10*-*gcc*) - # must use gcc; the bundled cc cannot compile PIC code - SHOBJ_CFLAGS='-fpic' - SHOBJ_LD='${CC}' - # if you have problems linking here, moving the `-Wl,+h,$@' from - # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work - SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' - - SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' - SHLIB_LIBSUFF='sl' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -hpux10*) - SHOBJ_STATUS=unsupported - SHLIB_STATUS=unsupported - - # If you are using the HP ANSI C compiler, you can uncomment and use - # this code (I have not tested it) -# SHOBJ_STATUS=supported -# SHLIB_STATUS=supported -# -# SHOBJ_CFLAGS='+z' -# SHOBJ_LD='ld' -# SHOBJ_LDFLAGS='-b +s +h $@' -# -# SHLIB_XLDFLAGS='+b $(libdir)' -# SHLIB_LIBSUFF='sl' -# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - - ;; - -hpux11*-*gcc*) - # must use gcc; the bundled cc cannot compile PIC code - SHOBJ_CFLAGS='-fpic' - SHOBJ_LD='${CC}' -# SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@' - SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s -Wl,+h,$@' - - SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' - SHLIB_LIBSUFF='sl' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -hpux11*) - SHOBJ_STATUS=unsupported - SHLIB_STATUS=unsupported - - # If you are using the HP ANSI C compiler, you can uncomment and use - # this code (I have not tested it) -# SHOBJ_STATUS=supported -# SHLIB_STATUS=supported -# -# SHOBJ_CFLAGS='+z' -# SHOBJ_LD='ld' -# SHOBJ_LDFLAGS='-b +s +h $@' -# -# SHLIB_XLDFLAGS='+b $(libdir)' -# SHLIB_LIBSUFF='sl' -# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - - ;; - -sysv4*-*gcc*) - SHOBJ_CFLAGS=-shared - SHOBJ_LDFLAGS='-shared -h $@' - SHOBJ_LD='${CC}' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -sysv4*) - SHOBJ_CFLAGS='-K PIC' - SHOBJ_LD=ld - SHOBJ_LDFLAGS='-dy -z text -G -h $@' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -sco3.2v5*-*gcc*) - SHOBJ_CFLAGS='-fpic' # DEFAULTS TO ELF - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -sco3.2v5*) - SHOBJ_CFLAGS='-K pic -b elf' - SHOBJ_LD=ld - SHOBJ_LDFLAGS='-G -b elf -dy -z text -h $@' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -sysv5uw7*-*gcc*) - SHOBJ_CFLAGS='-fpic' - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -sysv5uw7*) - SHOBJ_CFLAGS='-K PIC' - SHOBJ_LD=ld - SHOBJ_LDFLAGS='-G -dy -z text -h $@' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -sysv5UnixWare*-*gcc*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -sysv5UnixWare*) - SHOBJ_CFLAGS='-K PIC' - SHOBJ_LD=ld - SHOBJ_LDFLAGS='-G -dy -z text -h $@' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -sysv5OpenUNIX*-*gcc*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -sysv5OpenUNIX*) - SHOBJ_CFLAGS='-K PIC' - SHOBJ_LD=ld - SHOBJ_LDFLAGS='-G -dy -z text -h $@' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -dgux*-*gcc*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -dgux*) - SHOBJ_CFLAGS='-K pic' - SHOBJ_LD=ld - SHOBJ_LDFLAGS='-G -dy -h $@' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -msdos*) - SHOBJ_STATUS=unsupported - SHLIB_STATUS=unsupported - ;; - -cygwin*) - SHOBJ_LD='$(CC)' - SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' - SHLIB_LIBPREF='cyg' - SHLIB_LIBSUFF='dll' - SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' - SHLIB_LIBS='$(TERMCAP_LIB)' - - SHLIB_DOT= - # For official cygwin releases, DLLVERSION will be defined in the - # environment of configure, and will be incremented any time the API - # changes in a non-backwards compatible manner. Otherwise, it is just - # SHLIB_MAJOR. - if [ -n "$DLLVERSION" ] ; then - SHLIB_DLLVERSION="$DLLVERSION" - fi - ;; - -mingw*) - SHOBJ_LD='$(CC)' - SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' - SHLIB_LIBSUFF='dll' - SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' - SHLIB_LIBS='$(TERMCAP_LIB)' - - SHLIB_DOT= - # For official cygwin releases, DLLVERSION will be defined in the - # environment of configure, and will be incremented any time the API - # changes in a non-backwards compatible manner. Otherwise, it is just - # SHLIB_MAJOR. - if [ -n "$DLLVERSION" ] ; then - SHLIB_DLLVERSION="$DLLVERSION" - fi - ;; - -# -# Rely on correct gcc configuration for everything else -# -*-*gcc*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared' - - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' - ;; - -*) - SHOBJ_STATUS=unsupported - SHLIB_STATUS=unsupported - ;; - -esac - -echo SHOBJ_CC=\'"$SHOBJ_CC"\' -echo SHOBJ_CFLAGS=\'"$SHOBJ_CFLAGS"\' -echo SHOBJ_LD=\'"$SHOBJ_LD"\' -echo SHOBJ_LDFLAGS=\'"$SHOBJ_LDFLAGS"\' -echo SHOBJ_XLDFLAGS=\'"$SHOBJ_XLDFLAGS"\' -echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\' - -echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\' -echo SHLIB_LIBS=\'"$SHLIB_LIBS"\' - -echo SHLIB_DOT=\'"$SHLIB_DOT"\' - -echo SHLIB_LIBPREF=\'"$SHLIB_LIBPREF"\' -echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\' - -echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\' -echo SHLIB_DLLVERSION=\'"$SHLIB_DLLVERSION"\' - -echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\' -echo SHLIB_STATUS=\'"$SHLIB_STATUS"\' - -exit 0 diff --git a/test/hooks.bats b/test/hooks.bats index 9f056b37..5fcd85f5 100644 --- a/test/hooks.bats +++ b/test/hooks.bats @@ -43,16 +43,16 @@ ${RBENV_TEST_DIR}/etc/rbenv hooks/exec/ahoy.bash OUT } -@test "resolves relative paths" { +@test "does not canonicalize paths" { RBENV_HOOK_PATH="${RBENV_TEST_DIR}/rbenv.d" create_hook exec "hello.bash" mkdir -p "$HOME" RBENV_HOOK_PATH="${HOME}/../rbenv.d" run rbenv-hooks exec - assert_success "${RBENV_TEST_DIR}/rbenv.d/exec/hello.bash" + assert_success "${RBENV_TEST_DIR}/home/../rbenv.d/exec/hello.bash" } -@test "resolves symlinks" { +@test "does not resolve symlinks" { path="${RBENV_TEST_DIR}/rbenv.d" mkdir -p "${path}/exec" mkdir -p "$HOME" @@ -64,7 +64,7 @@ OUT RBENV_HOOK_PATH="$path" run rbenv-hooks exec assert_success assert_output </dev/null || echo "$RBENV_TEST_DIR")" - if enable -f "${BATS_TEST_DIRNAME}"/../libexec/rbenv-realpath.dylib realpath 2>/dev/null; then - export RBENV_TEST_DIR="$(realpath "$RBENV_TEST_DIR")" - else - if [ -n "$RBENV_NATIVE_EXT" ]; then - echo "rbenv: failed to load \`realpath' builtin" >&2 - exit 1 - fi - fi - export RBENV_ROOT="${RBENV_TEST_DIR}/root" export HOME="${RBENV_TEST_DIR}/home" export RBENV_HOOK_PATH="${RBENV_ROOT}/rbenv.d"