#!/bin/bash # # Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code 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 # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # # Create a bundle in the current directory, containing what's needed to run # the 'dot' program from the graphviz suite by the OpenJDK build. set -eux mydir="$(cd -- $(dirname ${BASH_SOURCE[0]}) && pwd)" me="${mydir}/$(basename ${BASH_SOURCE[0]})" EXPAT_VERSION="2.6.0" EXPAT_URL="https://github.com/libexpat/libexpat/releases/download/R_${EXPAT_VERSION//./_}/expat-${EXPAT_VERSION}.tar.gz" EXPAT_SHA256="a13447b9aa67d7c860783fdf6820f33ebdea996900d6d8bbc50a628f55f099f7" GRAPHVIZ_VERSION="9.0.0" GRAPHVIZ_URL="https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/${GRAPHVIZ_VERSION}/graphviz-${GRAPHVIZ_VERSION}.tar.xz" GRAPHVIZ_SHA256="6c9afda06a732af7658c2619ee713d2545818c3ff19b7b8fd48effcd06d57bf6" uname_s="$(uname -s)" case ${uname_s} in Linux) bundle_os="linux" shacmd="sha256sum --strict --check -" lib_path_var="LD_LIBRARY_PATH" ;; Darwin) bundle_os="macosx" shacmd="shasum -a 256 --strict --check -" lib_path_var="DYLD_LIBRARY_PATH" ;; *) echo "Unknown OS: ${uname_s}" exit 1 ;; esac uname_m="$(uname -m)" case ${uname_m} in aarch64|arm64) bundle_cpu="aarch64" ;; x86_64) bundle_cpu="x64" ;; esac bundle_platform="${bundle_os}_${bundle_cpu}" build_dir="${mydir}/../../build/graphviz" download_dir="${build_dir}/download" install_dir="${build_dir}/result/graphviz-${bundle_platform}-${GRAPHVIZ_VERSION}" bundle_file="${install_dir}.tar.gz" expat_dir="${build_dir}/expat" expat_src_dir="${expat_dir}/src" graphviz_dir="${build_dir}/graphviz" graphviz_src_dir="${graphviz_dir}/src" graphviz_doc_dir="${install_dir}/doc" mkdir -p "${build_dir}" cd "${build_dir}" download_and_unpack() { local url="$1" local sha256="$2" local file="$3" local dir="$4" mkdir -p "$(dirname "${file}")" if [ ! -f "${file}" ]; then curl -L -o "${file}" "${url}" fi echo "${sha256} ${file}" | ${shacmd} if [ ! -d "${dir}" ]; then mkdir -p "${dir}" tar --extract --file "${file}" --directory "${dir}" --strip-components 1 fi } download_and_unpack "${EXPAT_URL}" "${EXPAT_SHA256}" "${download_dir}/expat.tar.gz" "${expat_src_dir}" download_and_unpack "${GRAPHVIZ_URL}" "${GRAPHVIZ_SHA256}" "${download_dir}/graphviz.tar.gz" "${graphviz_src_dir}" ( cd "${expat_src_dir}" ./configure --prefix="${install_dir}" make -j install ) ( cd "${graphviz_src_dir}" ./configure --prefix="${install_dir}" EXPAT_CFLAGS="-I${install_dir}/include" EXPAT_LIBS="-L${install_dir}/lib -lexpat" make -j install ) cat > "${install_dir}/dot" << EOF #!/bin/bash # Get an absolute path to this script this_script_dir="\$(dirname \$0)" this_script_dir="\$(cd \${this_script_dir} > /dev/null && pwd)" export ${lib_path_var}="\${this_script_dir}/lib:\${this_script_dir}/lib/graphviz" exec "\${this_script_dir}/bin/dot" "\$@" EOF chmod +x "${install_dir}/dot" # create config file "${install_dir}/dot" -c cp "${me}" "${install_dir}" tar --create --gzip --file "${bundle_file}" -C "${install_dir}" .