diff --git a/.azure-pipelines/azure-pipelines-osx.yml b/.azure-pipelines/azure-pipelines-osx.yml new file mode 100755 index 0000000..7c4c40e --- /dev/null +++ b/.azure-pipelines/azure-pipelines-osx.yml @@ -0,0 +1,39 @@ +# This file was generated automatically from conda-smithy. To update this configuration, +# update the conda-forge.yml and/or the recipe/meta.yaml. +# -*- mode: yaml -*- + +jobs: +- job: osx + pool: + vmImage: macOS-10.15 + strategy: + matrix: + osx_64_python3.7.____cpython: + CONFIG: osx_64_python3.7.____cpython + UPLOAD_PACKAGES: 'True' + osx_64_python3.8.____cpython: + CONFIG: osx_64_python3.8.____cpython + UPLOAD_PACKAGES: 'True' + osx_64_python3.9.____cpython: + CONFIG: osx_64_python3.9.____cpython + UPLOAD_PACKAGES: 'True' + timeoutInMinutes: 360 + + steps: + # TODO: Fast finish on azure pipelines? + - script: | + export CI=azure + export OSX_FORCE_SDK_DOWNLOAD="1" + export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME + export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) + if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then + export IS_PR_BUILD="True" + else + export IS_PR_BUILD="False" + fi + ./.scripts/run_osx_build.sh + displayName: Run OSX build + env: + BINSTAR_TOKEN: $(BINSTAR_TOKEN) + FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) + STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) \ No newline at end of file diff --git a/.ci_support/README b/.ci_support/README index e4e2dce..a47316b 100644 --- a/.ci_support/README +++ b/.ci_support/README @@ -1 +1,6 @@ -This file is automatically generated by conda-smithy. To change any matrix elements, you should change conda-smithy's input conda_build_config.yaml and re-render the recipe, rather than editing these files directly. \ No newline at end of file +This file is automatically generated by conda-smithy. If any +particular build configuration is expected, but it is not found, +please make sure all dependencies are satisfiable. To add/modify any +matrix elements, you should create/change conda-smithy's input +recipe/conda_build_config.yaml and re-render the recipe, rather than +editing these files directly. diff --git a/.ci_support/linux_64_python3.7.____cpython.yaml b/.ci_support/linux_64_python3.7.____cpython.yaml index b064973..712d90d 100644 --- a/.ci_support/linux_64_python3.7.____cpython.yaml +++ b/.ci_support/linux_64_python3.7.____cpython.yaml @@ -1,9 +1,9 @@ abseil_cpp: -- '20210324.2' +- '20211102.0' c_compiler: - gcc c_compiler_version: -- '9' +- '10' cdt_name: - cos6 channel_sources: @@ -21,7 +21,7 @@ coin_or_utils: cxx_compiler: - gxx cxx_compiler_version: -- '9' +- '10' docker_image: - quay.io/condaforge/linux-anvil-cos7-x86_64 libprotobuf: diff --git a/.ci_support/linux_64_python3.8.____cpython.yaml b/.ci_support/linux_64_python3.8.____cpython.yaml index 75d906a..f9f64e5 100644 --- a/.ci_support/linux_64_python3.8.____cpython.yaml +++ b/.ci_support/linux_64_python3.8.____cpython.yaml @@ -1,9 +1,9 @@ abseil_cpp: -- '20210324.2' +- '20211102.0' c_compiler: - gcc c_compiler_version: -- '9' +- '10' cdt_name: - cos6 channel_sources: @@ -21,7 +21,7 @@ coin_or_utils: cxx_compiler: - gxx cxx_compiler_version: -- '9' +- '10' docker_image: - quay.io/condaforge/linux-anvil-cos7-x86_64 libprotobuf: diff --git a/.ci_support/linux_64_python3.9.____cpython.yaml b/.ci_support/linux_64_python3.9.____cpython.yaml index f8c8bd2..dd478a4 100644 --- a/.ci_support/linux_64_python3.9.____cpython.yaml +++ b/.ci_support/linux_64_python3.9.____cpython.yaml @@ -1,9 +1,9 @@ abseil_cpp: -- '20210324.2' +- '20211102.0' c_compiler: - gcc c_compiler_version: -- '9' +- '10' cdt_name: - cos6 channel_sources: @@ -21,7 +21,7 @@ coin_or_utils: cxx_compiler: - gxx cxx_compiler_version: -- '9' +- '10' docker_image: - quay.io/condaforge/linux-anvil-cos7-x86_64 libprotobuf: diff --git a/.ci_support/migrations/abseil_cpp20211102.yaml b/.ci_support/migrations/abseil_cpp20211102.yaml new file mode 100644 index 0000000..d678b94 --- /dev/null +++ b/.ci_support/migrations/abseil_cpp20211102.yaml @@ -0,0 +1,8 @@ +migrator_ts: 1644918847 +__migrator: + kind: version + migration_number: 1 + bump_number: 1 + +abseil_cpp: + - '20211102.0' diff --git a/.ci_support/osx_64_python3.7.____cpython.yaml b/.ci_support/osx_64_python3.7.____cpython.yaml new file mode 100644 index 0000000..0eec1bb --- /dev/null +++ b/.ci_support/osx_64_python3.7.____cpython.yaml @@ -0,0 +1,45 @@ +MACOSX_DEPLOYMENT_TARGET: +- '10.15' +MACOSX_SDK_VERSION: +- '10.15' +abseil_cpp: +- '20211102.0' +c_compiler: +- clang +c_compiler_version: +- '12' +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +coin_or_cbc: +- '2.10' +coin_or_cgl: +- '0.60' +coin_or_osi: +- '0.108' +coin_or_utils: +- '2.11' +cxx_compiler: +- clangxx +cxx_compiler_version: +- '12' +libprotobuf: +- '3.19' +macos_machine: +- x86_64-apple-darwin13.4.0 +numpy: +- '1.18' +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.7.* *_cpython +target_platform: +- osx-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version +- - python + - numpy diff --git a/.ci_support/osx_64_python3.8.____cpython.yaml b/.ci_support/osx_64_python3.8.____cpython.yaml new file mode 100644 index 0000000..d90fc44 --- /dev/null +++ b/.ci_support/osx_64_python3.8.____cpython.yaml @@ -0,0 +1,45 @@ +MACOSX_DEPLOYMENT_TARGET: +- '10.15' +MACOSX_SDK_VERSION: +- '10.15' +abseil_cpp: +- '20211102.0' +c_compiler: +- clang +c_compiler_version: +- '12' +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +coin_or_cbc: +- '2.10' +coin_or_cgl: +- '0.60' +coin_or_osi: +- '0.108' +coin_or_utils: +- '2.11' +cxx_compiler: +- clangxx +cxx_compiler_version: +- '12' +libprotobuf: +- '3.19' +macos_machine: +- x86_64-apple-darwin13.4.0 +numpy: +- '1.18' +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.8.* *_cpython +target_platform: +- osx-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version +- - python + - numpy diff --git a/.ci_support/osx_64_python3.9.____cpython.yaml b/.ci_support/osx_64_python3.9.____cpython.yaml new file mode 100644 index 0000000..434295f --- /dev/null +++ b/.ci_support/osx_64_python3.9.____cpython.yaml @@ -0,0 +1,45 @@ +MACOSX_DEPLOYMENT_TARGET: +- '10.15' +MACOSX_SDK_VERSION: +- '10.15' +abseil_cpp: +- '20211102.0' +c_compiler: +- clang +c_compiler_version: +- '12' +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +coin_or_cbc: +- '2.10' +coin_or_cgl: +- '0.60' +coin_or_osi: +- '0.108' +coin_or_utils: +- '2.11' +cxx_compiler: +- clangxx +cxx_compiler_version: +- '12' +libprotobuf: +- '3.19' +macos_machine: +- x86_64-apple-darwin13.4.0 +numpy: +- '1.19' +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.9.* *_cpython +target_platform: +- osx-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version +- - python + - numpy diff --git a/.gitattributes b/.gitattributes index ce52713..7f32763 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9,6 +9,7 @@ bld.bat text eol=crlf # github helper pieces to make some files not show up in diffs automatically .azure-pipelines/* linguist-generated=true .circleci/* linguist-generated=true +.ci_support/README linguist-generated=true .drone/* linguist-generated=true .drone.yml linguist-generated=true .github/* linguist-generated=true diff --git a/.scripts/build_steps.sh b/.scripts/build_steps.sh index ff01283..d71d6ae 100755 --- a/.scripts/build_steps.sh +++ b/.scripts/build_steps.sh @@ -29,8 +29,10 @@ conda-build: CONDARC -mamba install --update-specs --yes --quiet "conda-forge-ci-setup=3" conda-build pip boa -c conda-forge -mamba update --update-specs --yes --quiet "conda-forge-ci-setup=3" conda-build pip boa -c conda-forge +mamba install --update-specs --yes --quiet --channel conda-forge \ + conda-build pip boa conda-forge-ci-setup=3 +mamba update --update-specs --yes --quiet --channel conda-forge \ + conda-build pip boa conda-forge-ci-setup=3 # set up the condarc setup_conda_rc "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" diff --git a/.scripts/run_docker_build.sh b/.scripts/run_docker_build.sh index 0c6515f..9236239 100755 --- a/.scripts/run_docker_build.sh +++ b/.scripts/run_docker_build.sh @@ -14,7 +14,7 @@ set -xeo pipefail THISDIR="$( cd "$( dirname "$0" )" >/dev/null && pwd )" PROVIDER_DIR="$(basename $THISDIR)" -FEEDSTOCK_ROOT=$(cd "$(dirname "$0")/.."; pwd;) +FEEDSTOCK_ROOT="$( cd "$( dirname "$0" )/.." >/dev/null && pwd )" RECIPE_ROOT="${FEEDSTOCK_ROOT}/recipe" if [ -z ${FEEDSTOCK_NAME} ]; then diff --git a/.scripts/run_osx_build.sh b/.scripts/run_osx_build.sh new file mode 100755 index 0000000..19843e0 --- /dev/null +++ b/.scripts/run_osx_build.sh @@ -0,0 +1,87 @@ +#!/usr/bin/env bash + +# -*- mode: jinja-shell -*- + +source .scripts/logging_utils.sh + +set -xe + +MINIFORGE_HOME=${MINIFORGE_HOME:-${HOME}/miniforge3} + +( startgroup "Installing a fresh version of Miniforge" ) 2> /dev/null + +MINIFORGE_URL="https://github.com/conda-forge/miniforge/releases/latest/download" +MINIFORGE_FILE="Mambaforge-MacOSX-$(uname -m).sh" +curl -L -O "${MINIFORGE_URL}/${MINIFORGE_FILE}" +rm -rf ${MINIFORGE_HOME} +bash $MINIFORGE_FILE -b -p ${MINIFORGE_HOME} + +( endgroup "Installing a fresh version of Miniforge" ) 2> /dev/null + +( startgroup "Configuring conda" ) 2> /dev/null + +source ${MINIFORGE_HOME}/etc/profile.d/conda.sh +conda activate base + +echo -e "\n\nInstalling ['conda-forge-ci-setup=3'] and conda-build." +mamba install --update-specs --quiet --yes --channel conda-forge \ + conda-build pip boa conda-forge-ci-setup=3 +mamba update --update-specs --yes --quiet --channel conda-forge \ + conda-build pip boa conda-forge-ci-setup=3 + + + +echo -e "\n\nSetting up the condarc and mangling the compiler." +setup_conda_rc ./ ./recipe ./.ci_support/${CONFIG}.yaml + +if [[ "${CI:-}" != "" ]]; then + mangle_compiler ./ ./recipe .ci_support/${CONFIG}.yaml +fi + +if [[ "${CI:-}" != "" ]]; then + echo -e "\n\nMangling homebrew in the CI to avoid conflicts." + /usr/bin/sudo mangle_homebrew + /usr/bin/sudo -k +else + echo -e "\n\nNot mangling homebrew as we are not running in CI" +fi + +echo -e "\n\nRunning the build setup script." +source run_conda_forge_build_setup + + + +( endgroup "Configuring conda" ) 2> /dev/null + +echo -e "\n\nMaking the build clobber file" +make_build_number ./ ./recipe ./.ci_support/${CONFIG}.yaml + + +if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then + if [[ "x${BUILD_OUTPUT_ID:-}" != "x" ]]; then + EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --output-id ${BUILD_OUTPUT_ID}" + fi + conda debug ./recipe -m ./.ci_support/${CONFIG}.yaml \ + ${EXTRA_CB_OPTIONS:-} \ + --clobber-file ./.ci_support/clobber_${CONFIG}.yaml + + # Drop into an interactive shell + /bin/bash +else + conda mambabuild ./recipe -m ./.ci_support/${CONFIG}.yaml \ + --suppress-variables ${EXTRA_CB_OPTIONS:-} \ + --clobber-file ./.ci_support/clobber_${CONFIG}.yaml + ( startgroup "Validating outputs" ) 2> /dev/null + + validate_recipe_outputs "${FEEDSTOCK_NAME}" + + ( endgroup "Validating outputs" ) 2> /dev/null + + ( startgroup "Uploading packages" ) 2> /dev/null + + if [[ "${UPLOAD_PACKAGES}" != "False" ]] && [[ "${IS_PR_BUILD}" == "False" ]]; then + upload_package --validate --feedstock-name="${FEEDSTOCK_NAME}" ./ ./recipe ./.ci_support/${CONFIG}.yaml + fi + + ( endgroup "Uploading packages" ) 2> /dev/null +fi \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt index ed3f451..6ec1401 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,5 +1,5 @@ BSD 3-clause license -Copyright (c) 2015-2021, conda-forge contributors +Copyright (c) 2015-2022, conda-forge contributors All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/README.md b/README.md index e375d62..31ad9a5 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,27 @@ Current build status variant + + osx_64_python3.7.____cpython + + + variant + + + + osx_64_python3.8.____cpython + + + variant + + + + osx_64_python3.9.____cpython + + + variant + + diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ad85a2c..33a441c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -3,4 +3,5 @@ # -*- mode: yaml -*- jobs: - - template: ./.azure-pipelines/azure-pipelines-linux.yml \ No newline at end of file + - template: ./.azure-pipelines/azure-pipelines-linux.yml + - template: ./.azure-pipelines/azure-pipelines-osx.yml \ No newline at end of file diff --git a/build-locally.py b/build-locally.py index 8b74348..eec38a0 100755 --- a/build-locally.py +++ b/build-locally.py @@ -22,10 +22,6 @@ def setup_environment(ns): os.environ["MINIFORGE_HOME"] = os.path.join( os.path.dirname(__file__), "miniforge3" ) - if "OSX_SDK_DIR" not in os.environ: - os.environ["OSX_SDK_DIR"] = os.path.join( - os.path.dirname(__file__), "SDKs" - ) def run_docker_build(ns): @@ -65,11 +61,12 @@ def verify_config(ns): raise ValueError( f"only Linux/macOS configs currently supported, got {ns.config}" ) - elif ns.config.startswith("osx") and platform.system() == "Darwin": + elif ns.config.startswith("osx"): if "OSX_SDK_DIR" not in os.environ: raise RuntimeError( - "Need OSX_SDK_DIR env variable set. Run 'export OSX_SDK_DIR=/opt'" - "to download the SDK automatically to '/opt/MacOSX.sdk'" + "Need OSX_SDK_DIR env variable set. Run 'export OSX_SDK_DIR=SDKs' " + "to download the SDK automatically to 'SDKs/MacOSX.sdk'. " + "Setting this variable implies agreement to the licensing terms of the SDK by Apple." ) diff --git a/recipe/build-cpp.sh b/recipe/build-cpp.sh index 8795ee5..612125f 100644 --- a/recipe/build-cpp.sh +++ b/recipe/build-cpp.sh @@ -9,6 +9,7 @@ cmake ${CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=$PREFIX \ -S. \ -Bbuild \ -DBUILD_SAMPLES=OFF \ - -DBUILD_EXAMPLES=OFF + -DBUILD_EXAMPLES=OFF \ + -DCMAKE_CXX_STANDARD=17 cmake --build build --target install -j${CPU_COUNT} diff --git a/recipe/build-python.sh b/recipe/build-python.sh index db11530..1625d1c 100644 --- a/recipe/build-python.sh +++ b/recipe/build-python.sh @@ -13,7 +13,8 @@ cmake ${CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=$PREFIX \ -DBUILD_PYTHON=ON \ -DFETCH_PYTHON_DEPS=OFF \ -DBUILD_TESTING=OFF \ - -DPython3_EXECUTABLE="$PYTHON" + -DPython3_EXECUTABLE="$PYTHON" \ + -DCMAKE_CXX_STANDARD=17 cmake --build build -j${CPU_COUNT} diff --git a/recipe/conda_build_config.yaml b/recipe/conda_build_config.yaml new file mode 100644 index 0000000..90ff7da --- /dev/null +++ b/recipe/conda_build_config.yaml @@ -0,0 +1,4 @@ +MACOSX_DEPLOYMENT_TARGET: # [osx and x86_64] + - "10.15" # [osx and x86_64] +MACOSX_SDK_VERSION: # [osx and x86_64] + - "10.15" # [osx and x86_64] diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 174fcc1..ee5a8db 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -19,8 +19,8 @@ source: # The meta package build: - number: 0 - skip: true # [not linux] + number: 1 + skip: true # [win] outputs: # The core package @@ -48,6 +48,8 @@ outputs: - coin-or-cbc # Source: https://github.com/google/or-tools/blob/stable/cmake/dependencies/CMakeLists.txt - python + run: + - __osx >={{ MACOSX_DEPLOYMENT_TARGET|default("10.9") }} # [osx and x86_64] run_constrained: - scip =7.0.1 @@ -115,6 +117,7 @@ outputs: - protobuf - python >=3.6 # Source: https://github.com/google/or-tools/blob/stable/ortools/python/setup.py.in#L44 + - __osx >={{ MACOSX_DEPLOYMENT_TARGET|default("10.9") }} # [osx and x86_64] run_constrained: - scip =7.0.1