mirror of
https://github.com/macports/macports-ports.git
synced 2026-07-12 18:20:25 -07:00
339 lines
12 KiB
Tcl
339 lines
12 KiB
Tcl
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
|
|
|
|
PortSystem 1.0
|
|
PortGroup github 1.0
|
|
PortGroup java 1.0
|
|
PortGroup legacysupport 1.1
|
|
|
|
legacysupport.use_static yes
|
|
legacysupport.newest_darwin_requires_legacy 13
|
|
|
|
epoch 1
|
|
|
|
# List of all bazel sub-ports ( now obsolete )
|
|
set bazel_subports {
|
|
bazel-6
|
|
}
|
|
|
|
set all_bazels ${bazel_subports}
|
|
lappend all_bazels bazel
|
|
|
|
# define ports and sub-ports
|
|
name bazel
|
|
foreach b ${bazel_subports} { subport $b {} }
|
|
|
|
# The oldest Xcode version to use default Xcode compiler
|
|
set bazel_min_xcode 9.0
|
|
|
|
# Extra args for bazel command
|
|
set extra_args "\
|
|
--noincompatible_fix_package_group_reporoot_syntax \
|
|
--noincompatible_validate_top_level_header_inclusions \
|
|
"
|
|
|
|
# Note bazel-3.{1,5,7} build on OSX10.11 but fail at runtime with
|
|
# dyld: lazy symbol binding failed: Symbol not found: _os_log_create
|
|
set min_darwin 16
|
|
|
|
if { ${name} eq ${subport} } {
|
|
|
|
# Main port
|
|
github.setup bazelbuild ${name} 8.5.1
|
|
revision 0
|
|
checksums rmd160 29ce79c82fcd0cdd20d3eb42620f71627c58bd6a \
|
|
sha256 bf66a1cbaaafec32e1e103d0e07343082f1f0f3f20ad4c6b66c4eda3f690ed4d \
|
|
size 232801456
|
|
|
|
set bazel_min_xcode 10.3
|
|
compiler.blacklist-append {clang < 1000}
|
|
compiler.blacklist-append {macports-clang-[5-9].0}
|
|
|
|
# Required java version.
|
|
java.version 21
|
|
# LTS JDK port to install if required java not found
|
|
java.fallback openjdk21
|
|
|
|
} elseif { "bazel-6" eq ${subport} } {
|
|
PortGroup obsolete 1.0
|
|
|
|
# Specific version for py-tensorflow - DO NOT CHANGE
|
|
github.setup bazelbuild ${name} 6.5.0
|
|
revision 1
|
|
|
|
# Remove this obsolete subport after: 2027-03-01
|
|
replaced_by bazel
|
|
}
|
|
|
|
# exclude pre-release versions
|
|
github.livecheck.regex {([0-9.]+)}
|
|
|
|
# Check OS support
|
|
if { ${os.platform} eq "darwin" && ${os.major} < ${min_darwin} } {
|
|
known_fail yes
|
|
# https://trac.macports.org/ticket/58518
|
|
pre-fetch {
|
|
ui_error "${subport} ${version} requires macOS 10.[expr ${min_darwin} - 4] (Darwin${min_darwin}) or newer"
|
|
return -code error "incompatible macOS version"
|
|
}
|
|
}
|
|
|
|
# JDK only needed at build time, but java PG sets lib dependency so
|
|
# declare no conflict to allow redistribution of binaries.
|
|
license_noconflict ${java.fallback}
|
|
|
|
github.tarball_from releases
|
|
|
|
categories devel
|
|
|
|
maintainers {tfmnet.com:mohamed.issa @missa-prime} \
|
|
{gmail.com:herby.gillot @herbygillot} \
|
|
openmaintainer
|
|
|
|
description A tool for automating builds and tests.
|
|
long_description {*}${description}
|
|
|
|
license Apache-2
|
|
|
|
distname ${distname}-dist
|
|
|
|
use_zip yes
|
|
extract.mkdir yes
|
|
|
|
use_configure no
|
|
|
|
patch.pre_args-replace -p0 -p1
|
|
|
|
# By default, the Xcode Locator is built as arm64/x86_64.
|
|
# For 10.15 and earlier, disable that behavior.
|
|
if {${os.platform} eq "darwin" && ${os.major} < 20} {
|
|
ui_info "Adding patch to disable dual arm64/x86_64"
|
|
patchfiles-append patch-tools-osx-build-arch.diff
|
|
}
|
|
|
|
# Even though bazel can build without Xcode, mark use Xcode for now since it fails to
|
|
# build with tracemode on latest master if both CLT and Xcode are available.
|
|
# Better solution is to respect MacPorts environment configure.developer_dir
|
|
use_xcode yes
|
|
|
|
compiler.cxx_standard 2011
|
|
|
|
# Always force the use of the un-versioned SDK
|
|
configure.sdk_version
|
|
|
|
configure.ccache no
|
|
|
|
# Use Python 3
|
|
set py3ver 3.13
|
|
|
|
depends_lib-append port:cctools
|
|
|
|
depends_build-append \
|
|
bin:zip:zip \
|
|
port:python[string map {. {}} ${py3ver}]
|
|
|
|
post-extract {
|
|
# Make dir with selected MP 'python2' and 'python3' and add to PATH during build below
|
|
file mkdir ${workpath}/bin
|
|
ln -s ${prefix}/bin/python${py3ver} ${workpath}/bin/python3
|
|
ln -s ${prefix}/bin/python${py3ver} ${workpath}/bin/python
|
|
}
|
|
|
|
if {${os.platform} eq "darwin" && ${os.major} < 16} {
|
|
# https://github.com/bazelbuild/bazel/issues/6188
|
|
depends_build-append port:unzip
|
|
}
|
|
|
|
proc bazel_get_ccache_dir {} {
|
|
global portdbpath
|
|
return [file join $portdbpath build .ccache]
|
|
}
|
|
|
|
proc bazel_wrap_dir {} {
|
|
global workpath
|
|
return ${workpath}/bazelwrap
|
|
}
|
|
|
|
post-patch {
|
|
if {[vercmp ${xcodeversion} 7.0] < 0} {
|
|
# Use hacked version that does not find anything.
|
|
# We use MacPorts compiler toolchain anyway so not a problem.
|
|
file copy -force ${filespath}/xcode_locator_fixes/Xcode6-xcode_locator.m ${worksrcpath}/tools/osx/xcode_locator.m
|
|
} elseif {[vercmp ${xcodeversion} 8.0] < 0} {
|
|
# Revert xcode-locator to an older version
|
|
# https://raw.githubusercontent.com/bazelbuild/bazel/7372c04d40d7ab45fa2649c8be002ee6909668d1/tools/osx/xcode_locator.m
|
|
file copy -force ${filespath}/xcode_locator_fixes/Xcode7-xcode_locator.m ${worksrcpath}/tools/osx/xcode_locator.m
|
|
} elseif {[vercmp ${xcodeversion} 9.0] < 0} {
|
|
# Revert xcode-locator to an older version
|
|
# From bazel 0.21.0
|
|
file copy -force ${filespath}/xcode_locator_fixes/Xcode8-xcode_locator.m ${worksrcpath}/tools/osx/xcode_locator.m
|
|
}
|
|
|
|
# Patch build files to enforce correct compiler
|
|
foreach f [ exec find ${worksrcpath}/ -name "configure" -or -name "configure.py" -or -name "compile.sh" -or -name "*.tpl" \
|
|
-or -name "*.bzl" -or -name "CROSSTOOL" -or -name "configure.py" -or -name "MOCK_CROSSTOOL" ] {
|
|
foreach cmd {ar nm strip libtool ld objdump} {
|
|
reinplace -q "s|/usr/bin/${cmd}|${prefix}/bin/${cmd}|g" ${f}
|
|
}
|
|
reinplace -q "s|/usr/bin/clang|${configure.cc}|g" ${f}
|
|
reinplace -q "s|\"clang\"|\"${configure.cc}\"|g" ${f}
|
|
reinplace -q "s| clang | ${configure.cc} |g" ${f}
|
|
reinplace -q "s|/usr/local/include|${prefix}/include|g" ${f}
|
|
reinplace -q "s|std=c++0x|std=c++11|g" ${f}
|
|
reinplace -q "s|std=c++1y|std=c++14|g" ${f}
|
|
reinplace -q "s|std=c++1z|std=c++17|g" ${f}
|
|
}
|
|
|
|
# Patch the wrapped clang code to use MP's compiler selection
|
|
set wrapdir [bazel_wrap_dir]
|
|
xinstall -m 0755 -d ${wrapdir}
|
|
foreach comp {cc cxx} {
|
|
set f [ open ${wrapdir}/${comp}_bazelwrap w 0755 ]
|
|
puts ${f} "#!/bin/bash"
|
|
puts ${f} "export CCACHE_DIR=[bazel_get_ccache_dir]"
|
|
set bzflags "\"\$\{\@\}\""
|
|
set bzcomp "[set configure.${comp}]"
|
|
if { [option configure.ccache] && [file exists ${prefix}/bin/ccache] } {
|
|
set bzcomp "${prefix}/bin/ccache ${bzcomp}"
|
|
}
|
|
if { ${os.major} <= [option legacysupport.newest_darwin_requires_legacy] } {
|
|
set bzflags "[legacysupport::get_cpp_flags] ${bzflags}"
|
|
}
|
|
puts ${f} "exec ${bzcomp} ${bzflags}"
|
|
close ${f}
|
|
}
|
|
foreach f [ exec find ${workpath}/ -name "wrapped_clang.cc" ] {
|
|
# Switch to selected compiler
|
|
reinplace -q "s|\"clang++\"|\"cxx_bazelwrap\"|g" ${f}
|
|
reinplace -q "s|\"clang\"|\"cc_bazelwrap\"|g" ${f}
|
|
# Bazel **really** doesn't want you changing stuff ;)
|
|
# https://stackoverflow.com/questions/47775668/bazel-how-to-skip-corrupt-installation-on-centos6
|
|
system "touch -m -t 210012120101 ${f}"
|
|
}
|
|
}
|
|
|
|
set wrapdir [bazel_wrap_dir]
|
|
|
|
build.env-append CC=${wrapdir}/cc_bazelwrap \
|
|
CXX=${wrapdir}/cxx_bazelwrap \
|
|
TMPDIR=${workpath}/tmp \
|
|
JAVA_HOME=${java.home} \
|
|
PATH=${wrapdir}:$env(PATH)
|
|
|
|
proc use_external_toolchain {} {
|
|
# global configure.compiler xcodeversion bazel_min_xcode os.major
|
|
# set is_mp_clang [ expr { [ string match macports-clang-* ${configure.compiler} ] } ]
|
|
# set xcode_not_ok [ expr { ${xcodeversion} eq "none" || [ vercmp ${xcodeversion} ${bazel_min_xcode} ] < 0 } ]
|
|
# set use_legacy_s [ expr ${os.major} <= [option legacysupport.newest_darwin_requires_legacy] ]
|
|
# return [ expr ${is_mp_clang} || ${xcode_not_ok} || ${use_legacy_s} ]
|
|
# Do not use above as seems to cause compilation failures. To be investigated.
|
|
# src/main/native/unix_jni_darwin.cc:22:10: fatal error: 'os/log.h' file not found
|
|
# #include <os/log.h>
|
|
return no
|
|
}
|
|
|
|
# Disable Xcode detection on older OSes, as we want the
|
|
# MP provided commandline utilities to be used instead.
|
|
if { [use_external_toolchain] } {
|
|
compiler.blacklist-append {clang}
|
|
set extra_args "--action_env=CC=${wrapdir}/cc --action_env=CXX=${wrapdir}/cxx ${extra_args}"
|
|
build.env-append "BAZEL_USE_CPP_ONLY_TOOLCHAIN=1"
|
|
configure.env-append "BAZEL_USE_CPP_ONLY_TOOLCHAIN=1"
|
|
}
|
|
|
|
if { ${extra_args} ne "" } {
|
|
build.env-append "EXTRA_BAZEL_ARGS=${extra_args}"
|
|
}
|
|
|
|
variant bash_completion {
|
|
depends_build-append bin:bash:bash
|
|
}
|
|
|
|
build {
|
|
|
|
# bazel cannot be built if gcc is 'port selected'
|
|
# https://trac.macports.org/ticket/58569
|
|
# Until it can be figured out how to stop bazel finding and using macports gcc
|
|
# just detect when this situation arises and error out...
|
|
if { [file exists ${prefix}/bin/gcc] } {
|
|
ui_error "${subport} cannot be built with 'port select gcc' active."
|
|
ui_error "Please run 'sudo port select gcc none' and try again."
|
|
ui_error "Once the build is complete, you can safely re-select your preferred gcc."
|
|
return -code error "build error"
|
|
}
|
|
|
|
# Build bazel
|
|
set bazel_cmd "PATH=${wrapdir}:${workpath}/bin:\$PATH JAVA_HOME=${java.home} VERBOSE=yes BAZEL_WRKDIR=${workpath} ./compile.sh"
|
|
# If using MP toolchain pass options to enforce this
|
|
if { [use_external_toolchain] } {
|
|
set bazel_cmd "BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 ${bazel_cmd}"
|
|
}
|
|
if { ${extra_args} ne "" } {
|
|
set bazel_cmd "EXTRA_BAZEL_ARGS='${extra_args}' ${bazel_cmd}"
|
|
}
|
|
system -W ${worksrcpath} "${bazel_cmd}"
|
|
|
|
# Put executable in main working folder
|
|
xinstall -m 0755 -W ${worksrcpath}/output ${name} ${worksrcpath}
|
|
|
|
# Include bash completion support ?
|
|
if { [variant_isset bash_completion]} {
|
|
|
|
# Get ready to build the bash completion script
|
|
file delete -force /var/tmp/_${name}_root
|
|
|
|
# Build the bash completion script
|
|
system -W ${worksrcpath} "./${name} --max_idle_secs=30 --output_user_root=${workpath} build -s //scripts:${name}-complete.bash"
|
|
|
|
}
|
|
}
|
|
|
|
# Installation prefix. Specific to each bazel version.
|
|
set myprefix ${prefix}/libexec/${subport}
|
|
|
|
destroot {
|
|
# Copy compiled binary
|
|
set bindir ${myprefix}/bin
|
|
xinstall -d ${destroot}${bindir}
|
|
xinstall -m 0755 -W ${worksrcpath}/output ${name} ${destroot}${bindir}/
|
|
# Copy bash and zsh completion scripts to designated area for on-demand usage
|
|
if { [variant_isset bash_completion]} {
|
|
set bcompldir ${myprefix}/share/bash-completion/completions
|
|
xinstall -d ${destroot}${bcompldir}
|
|
xinstall -m 0755 ${worksrcpath}/${name}-bin/scripts/${name}-complete.bash ${destroot}${bcompldir}/${name}
|
|
set zcompldir ${myprefix}/share/zsh/site-functions
|
|
xinstall -d ${destroot}${zcompldir}
|
|
xinstall -m 0755 ${worksrcpath}/scripts/zsh_completion/_${name} ${destroot}${zcompldir}
|
|
}
|
|
}
|
|
|
|
post-destroot {
|
|
# Mark documentation and source directories
|
|
set docdir ${myprefix}/share/doc
|
|
set srcdir ${myprefix}/src
|
|
set bindir ${myprefix}/bin
|
|
|
|
# Copy documentation files
|
|
xinstall -d ${destroot}${docdir}
|
|
xinstall -m 0644 -W ${worksrcpath} AUTHORS \
|
|
CHANGELOG.md \
|
|
CONTRIBUTING.md \
|
|
CONTRIBUTORS \
|
|
LICENSE \
|
|
README.md \
|
|
${destroot}${docdir}
|
|
|
|
# Copy source files
|
|
xinstall -d ${destroot}${srcdir}
|
|
file copy -force {*}[glob ${worksrcpath}/src/*] ${destroot}${srcdir}
|
|
|
|
# Link to binary in main prefix
|
|
ln -s ${bindir}/${name} ${destroot}${prefix}/bin/${subport}
|
|
}
|
|
|
|
notes "
|
|
See http://bazel.build/docs/getting-started.html to start a new project!
|
|
|
|
MacPorts bazel uses the compilers `cxx_bazelwrap` and `cc_bazelwrap`; set\
|
|
these in the project path prior to building. See, e.g. PG bazel-1.0.tcl.
|
|
"
|