Skip to content
This repository was archived by the owner on Nov 24, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 38 additions & 10 deletions build/functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,44 @@
#
# shellcheck shell=ash

if ! type -p realpath; then
# by default, macOS does not have realpath
realpath() {
ls "$(
cd "$(dirname "$0")"
pwd -P # -P resolves symlinks
)/$(basename "$0")"
}
export -f realpath
fi;
# macOS's version of realpath does not resolve symlinks, so we add a function
# for it.
get_realpath() {
Comment thread
zrhoffman marked this conversation as resolved.
local bin
local found=''
first_realpath="$(type -P realpath)"
for bin in $(type -aP grealpath realpath | uniq); do
if "$bin" -e . >/dev/null 2>&1; then
found=y
break
fi
done
if [[ -n "$found" ]]; then
if [[ "$first_realpath" == "$bin" ]]; then
# Default realpath works.
return
fi
realpath_path="$bin"
# by default, macOS does not have realpath
eval "$(<<FUNCTION cat
realpath() {
"$realpath_path" "\$@"
}
FUNCTION
)"
export -f realpath
else
cat <<'MESSAGE'
GNU realpath is required to build Apache Traffic Control if your
realpath binary does not support the -e flag, as is the case on BSD-like
operating systems like macOS. Install it by running the following
command:
brew install coreutils
MESSAGE
exit 1
fi
}
get_realpath

if { ! stat -c%u . >/dev/null && stat -f%u .; } >/dev/null 2>&1; then
#BSD stat uses -f as its formatting flag instead of -c
Expand Down
4 changes: 2 additions & 2 deletions docs/source/development/building.rst
Original file line number Diff line number Diff line change
Expand Up @@ -168,8 +168,8 @@ Install the Dependencies
+---------------------------------+---------------------+----------------------------+------------------------+---------------------------+---------------------------+--------------------------+----------+------------------------------+--------------------------+
| OS/Package Manager | Common dependencies | :ref:`dev-traffic-monitor` | :ref:`dev-traffic-ops` | :ref:`dev-traffic-portal` | :ref:`dev-traffic-router` | :ref:`dev-traffic-stats` | Grove | Grove TC Config (grovetccfg) | :ref:`Docs <docs-guide>` |
+=================================+=====================+============================+========================+===========================+===========================+==========================+==========+==============================+==========================+
| macOS\ [#mac-jdk]_ | - rpm | - go | - go | - npm | - maven | - go | - go | - go | - python3 |
| (homebrew_) | | | | - grunt-cli | | | | | |
| macOS\ [#mac-jdk]_ | - coreutils | - go | - go | - npm | - maven | - go | - go | - go | - python3 |
| (homebrew_) | - rpm | | | - grunt-cli | | | | | |
+---------------------------------+---------------------+----------------------------+------------------------+---------------------------+---------------------------+--------------------------+----------+------------------------------+--------------------------+
| Rocky\ Linux\ [#rocky-go]_, | - git | | | - epel-release | - java-11-openjdk | | | | - python3-devel |
| Red Hat, | - rpm-build | | | - npm | - maven | | | | - gcc |
Expand Down
39 changes: 39 additions & 0 deletions pkg
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,45 @@
# See the License for the specific language governing permissions and
# limitations under the License.

# macOS's version of realpath does not resolve symlinks, so we add a function
# for it.
get_realpath() {
local bin
local found=''
first_realpath="$(type -P realpath)"
for bin in $(type -aP grealpath realpath | uniq); do
if "$bin" -e . >/dev/null 2>&1; then
found=y
break
fi
done
if [[ -n "$found" ]]; then
if [[ "$first_realpath" == "$bin" ]]; then
# Default realpath works.
return
fi
realpath_path="$bin"
# by default, macOS does not have realpath
eval "$(<<FUNCTION cat
realpath() {
"$realpath_path" "\$@"
}
FUNCTION
)"
export -f realpath
else
cat <<'MESSAGE'
GNU realpath is required to build Apache Traffic Control if your
realpath binary does not support the -e flag, as is the case on BSD-like
operating systems like macOS. Install it by running the following
command:
brew install coreutils
MESSAGE
exit 1
fi
}
get_realpath

# Files are relative to this script directory.
SELF="${BASH_SOURCE[0]}"
cd "$( dirname "${BASH_SOURCE[0]}" )"
Expand Down