From abfbb09856383a16b5843a7b83c33b9dc09307a7 Mon Sep 17 00:00:00 2001 From: sunerok Date: Sun, 15 Dec 2024 11:27:06 -0500 Subject: [PATCH] macos14 updates/new internal homebrew deps area --- .github/workflows/check-commit.yml | 16 ++-- depends/homebrew-formulas/boost176.rb | 101 ++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 depends/homebrew-formulas/boost176.rb diff --git a/.github/workflows/check-commit.yml b/.github/workflows/check-commit.yml index 5eaa8cfb..aedebb95 100644 --- a/.github/workflows/check-commit.yml +++ b/.github/workflows/check-commit.yml @@ -14,10 +14,13 @@ jobs: run: | # A workaround for "The `brew link` step did not complete successfully" error. brew install --quiet python@3 || brew link --overwrite python@3 - brew install --quiet automake berkeley-db@4 boost@1.76 miniupnpc qt@5 gperf qrencode librsvg && curl -L https://raw.githubusercontent.com/vergecurrency/protobuf261/master/protobuf261.rb > protobuf261.rb && brew install protobuf261.rb + brew install --quiet automake berkeley-db@4 miniupnpc qt@5 gperf qrencode librsvg && curl -L https://raw.githubusercontent.com/vergecurrency/protobuf261/master/protobuf261.rb > protobuf261.rb && brew install protobuf261.rb + - name: Brew install boost from our homebrew deps + run: curl -L https://raw.githubusercontent.com/vergecurrency/verge/master/depends/homebrew-formulas/boost176.rb > boost176.rb && brew install boost176.rb + - name: Brew link dependencies - run: brew link boost@1.76 + run: brew link qt@5 berkeley-db@4 boost176 - name: which clang/xcode run: clang --version @@ -56,10 +59,13 @@ jobs: run: | # A workaround for "The `brew link` step did not complete successfully" error. brew install --quiet python@3 || brew link --overwrite python@3 - brew install --quiet automake autoconf berkeley-db@4 boost@1.76 pkg-config miniupnpc zeromq libtool qt@5 gperf qrencode librsvg && curl -L https://raw.githubusercontent.com/vergecurrency/protobuf261/master/protobuf261.rb > protobuf261.rb && brew install protobuf261.rb - + brew install --quiet automake autoconf berkeley-db@4 pkg-config miniupnpc zeromq libtool qt@5 gperf qrencode librsvg && curl -L https://raw.githubusercontent.com/vergecurrency/protobuf261/master/protobuf261.rb > protobuf261.rb && brew install protobuf261.rb + + - name: Brew install boost from our homebrew deps + run: curl -L https://raw.githubusercontent.com/vergecurrency/verge/master/depends/homebrew-formulas/boost176.rb > boost176.rb && brew install boost176.rb + - name: Brew link dependencies - run: brew link boost@1.76 + run: brew link boost176 qt@5 berkeley-db@4 - name: which clang/xcode run: clang --version diff --git a/depends/homebrew-formulas/boost176.rb b/depends/homebrew-formulas/boost176.rb new file mode 100644 index 00000000..753cb99f --- /dev/null +++ b/depends/homebrew-formulas/boost176.rb @@ -0,0 +1,101 @@ +class Boost176 < Formula + desc "Collection of portable C++ source libraries" + homepage "https://www.boost.org/" + url "https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.bz2" + sha256 "f0397ba6e982c4450f27bf32a2a83292aba035b827a5623a14636ea583318c41" + license "BSL-1.0" + revision 6 + + keg_only :versioned_formula + + depends_on "icu4c@74" + + uses_from_macos "bzip2" + uses_from_macos "zlib" + + # Backport fixes for newer Clang + patch :p2 do + url "https://github.com/boostorg/numeric_conversion/commit/50a1eae942effb0a9b90724323ef8f2a67e7984a.patch?full_index=1" + sha256 "d96761257f7efc2edc8414f1a2522fc07a3d7d56bb55a51d14af9abd39e389c8" + end + patch :p2 do + url "https://github.com/boostorg/mpl/commit/b37b709cbdb6b2c285fb808dab985aa005786351.patch?full_index=1" + sha256 "b8013ad3e6b63698158319f5efc2fe1558a00c1d2e32193086f741e774acc3e4" + end + + def install + # Force boost to compile with the desired compiler + open("user-config.jam", "a") do |file| + if OS.mac? + file.write "using darwin : : #{ENV.cxx} ;\n" + else + file.write "using gcc : : #{ENV.cxx} ;\n" + end + end + + # libdir should be set by --prefix but isn't + icu4c_prefix = Formula["icu4c@74"].opt_prefix + bootstrap_args = %W[ + --prefix=#{prefix} + --libdir=#{lib} + --with-icu=#{icu4c_prefix} + ] + + # Handle libraries that will not be built. + without_libraries = ["python", "mpi"] + + # Boost.Log cannot be built using Apple GCC at the moment. Disabled + # on such systems. + without_libraries << "log" if ENV.compiler == :gcc + + bootstrap_args << "--without-libraries=#{without_libraries.join(",")}" + + # layout should be synchronized with boost-python and boost-mpi + args = %W[ + --prefix=#{prefix} + --libdir=#{lib} + -d2 + -j#{ENV.make_jobs} + --layout=tagged-1.66 + --user-config=user-config.jam + -sNO_LZMA=1 + -sNO_ZSTD=1 + install + threading=multi,single + link=shared,static + ] + + # Boost is using "clang++ -x c" to select C compiler which breaks C++14 + # handling using ENV.cxx14. Using "cxxflags" and "linkflags" still works. + args << "cxxflags=-std=c++14" + args << "cxxflags=-stdlib=libc++" << "linkflags=-stdlib=libc++" if ENV.compiler == :clang + + system "./bootstrap.sh", *bootstrap_args + system "./b2", "headers" + system "./b2", *args + end + + test do + (testpath/"test.cpp").write <<~CPP + #include + #include + #include + #include + using namespace boost::algorithm; + using namespace std; + + int main() + { + string str("a,b"); + vector strVec; + split(strVec, str, is_any_of(",")); + assert(strVec.size()==2); + assert(strVec[0]=="a"); + assert(strVec[1]=="b"); + return 0; + } + CPP + system ENV.cxx, "-I#{Formula["boost@1.76"].opt_include}", "test.cpp", "-std=c++14", "-o", "test" + system "./test" + end +end