├── .azure-pipelines ├── azure-pipelines-linux.yml ├── azure-pipelines-osx.yml └── azure-pipelines-win.yml ├── .ci_support ├── README ├── linux_64_.yaml ├── linux_aarch64_.yaml ├── linux_ppc64le_.yaml ├── migrations │ ├── icu75.yaml │ ├── numpy2.yaml │ └── python313.yaml ├── osx_64_.yaml ├── osx_arm64_.yaml └── win_64_.yaml ├── .circleci └── config.yml ├── .gitattributes ├── .github └── CODEOWNERS ├── .gitignore ├── .scripts ├── build_steps.sh ├── logging_utils.sh ├── run_docker_build.sh ├── run_osx_build.sh └── run_win_build.bat ├── LICENSE.txt ├── README.md ├── azure-pipelines.yml ├── build-locally.py ├── conda-forge.yml └── recipe ├── bld.bat ├── build-py.bat ├── build-py.sh ├── build.sh ├── install-lib.bat ├── install-lib.sh ├── install-py.bat ├── install-py.sh ├── meta.yaml ├── patches └── 0001-Add-default-value-for-cxx-and-cxxflags-options-for-t.patch ├── test ├── hello.z └── test_iostreams_zlib.cpp ├── test_lib.bat └── test_lib.sh /.azure-pipelines/azure-pipelines-linux.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: yaml -*- 4 | 5 | jobs: 6 | - job: linux 7 | pool: 8 | vmImage: ubuntu-latest 9 | strategy: 10 | matrix: 11 | linux_64_: 12 | CONFIG: linux_64_ 13 | UPLOAD_PACKAGES: 'True' 14 | DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 15 | linux_aarch64_: 16 | CONFIG: linux_aarch64_ 17 | UPLOAD_PACKAGES: 'True' 18 | DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 19 | linux_ppc64le_: 20 | CONFIG: linux_ppc64le_ 21 | UPLOAD_PACKAGES: 'True' 22 | DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 23 | timeoutInMinutes: 360 24 | variables: {} 25 | 26 | steps: 27 | # configure qemu binfmt-misc running. This allows us to run docker containers 28 | # embedded qemu-static 29 | - script: | 30 | docker run --rm --privileged multiarch/qemu-user-static:register --reset --credential yes 31 | ls /proc/sys/fs/binfmt_misc/ 32 | condition: not(startsWith(variables['CONFIG'], 'linux_64')) 33 | displayName: Configure binfmt_misc 34 | 35 | - script: | 36 | export CI=azure 37 | export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) 38 | export remote_url=$(Build.Repository.Uri) 39 | export sha=$(Build.SourceVersion) 40 | export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME 41 | export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) 42 | if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then 43 | export IS_PR_BUILD="True" 44 | else 45 | export IS_PR_BUILD="False" 46 | fi 47 | .scripts/run_docker_build.sh 48 | displayName: Run docker build 49 | env: 50 | BINSTAR_TOKEN: $(BINSTAR_TOKEN) 51 | FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) 52 | STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) -------------------------------------------------------------------------------- /.azure-pipelines/azure-pipelines-osx.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: yaml -*- 4 | 5 | jobs: 6 | - job: osx 7 | pool: 8 | vmImage: macOS-13 9 | strategy: 10 | matrix: 11 | osx_64_: 12 | CONFIG: osx_64_ 13 | UPLOAD_PACKAGES: 'True' 14 | osx_arm64_: 15 | CONFIG: osx_arm64_ 16 | UPLOAD_PACKAGES: 'True' 17 | timeoutInMinutes: 360 18 | variables: {} 19 | 20 | steps: 21 | # TODO: Fast finish on azure pipelines? 22 | - script: | 23 | export CI=azure 24 | export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) 25 | export remote_url=$(Build.Repository.Uri) 26 | export sha=$(Build.SourceVersion) 27 | export OSX_FORCE_SDK_DOWNLOAD="1" 28 | export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME 29 | export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) 30 | if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then 31 | export IS_PR_BUILD="True" 32 | else 33 | export IS_PR_BUILD="False" 34 | fi 35 | ./.scripts/run_osx_build.sh 36 | displayName: Run OSX build 37 | env: 38 | BINSTAR_TOKEN: $(BINSTAR_TOKEN) 39 | FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) 40 | STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) -------------------------------------------------------------------------------- /.azure-pipelines/azure-pipelines-win.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: yaml -*- 4 | 5 | jobs: 6 | - job: win 7 | pool: 8 | vmImage: windows-2022 9 | strategy: 10 | matrix: 11 | win_64_: 12 | CONFIG: win_64_ 13 | UPLOAD_PACKAGES: 'True' 14 | timeoutInMinutes: 360 15 | variables: 16 | CONDA_BLD_PATH: D:\\bld\\ 17 | MINIFORGE_HOME: D:\Miniforge 18 | UPLOAD_TEMP: D:\\tmp 19 | 20 | steps: 21 | 22 | - script: | 23 | call ".scripts\run_win_build.bat" 24 | displayName: Run Windows build 25 | env: 26 | MINIFORGE_HOME: $(MINIFORGE_HOME) 27 | CONDA_BLD_PATH: $(CONDA_BLD_PATH) 28 | PYTHONUNBUFFERED: 1 29 | CONFIG: $(CONFIG) 30 | CI: azure 31 | flow_run_id: azure_$(Build.BuildNumber).$(System.JobAttempt) 32 | remote_url: $(Build.Repository.Uri) 33 | sha: $(Build.SourceVersion) 34 | UPLOAD_PACKAGES: $(UPLOAD_PACKAGES) 35 | UPLOAD_TEMP: $(UPLOAD_TEMP) 36 | BINSTAR_TOKEN: $(BINSTAR_TOKEN) 37 | FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) 38 | STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) -------------------------------------------------------------------------------- /.ci_support/README: -------------------------------------------------------------------------------- 1 | This file is automatically generated by conda-smithy. If any 2 | particular build configuration is expected, but it is not found, 3 | please make sure all dependencies are satisfiable. To add/modify any 4 | matrix elements, you should create/change conda-smithy's input 5 | recipe/conda_build_config.yaml and re-render the recipe, rather than 6 | editing these files directly. 7 | -------------------------------------------------------------------------------- /.ci_support/linux_64_.yaml: -------------------------------------------------------------------------------- 1 | bzip2: 2 | - '1' 3 | c_stdlib: 4 | - sysroot 5 | c_stdlib_version: 6 | - '2.17' 7 | cdt_name: 8 | - conda 9 | channel_sources: 10 | - conda-forge 11 | channel_targets: 12 | - conda-forge main 13 | cxx_compiler: 14 | - gxx 15 | cxx_compiler_version: 16 | - '13' 17 | docker_image: 18 | - quay.io/condaforge/linux-anvil-x86_64:alma9 19 | icu: 20 | - '75' 21 | liblzma_devel: 22 | - '5' 23 | numpy: 24 | - '2.0' 25 | - '2.0' 26 | - '2.0' 27 | - '2' 28 | - '2.0' 29 | pin_run_as_build: 30 | python: 31 | min_pin: x.x 32 | max_pin: x.x 33 | python: 34 | - 3.10.* *_cpython 35 | - 3.11.* *_cpython 36 | - 3.12.* *_cpython 37 | - 3.13.* *_cp313 38 | - 3.9.* *_cpython 39 | python_impl: 40 | - cpython 41 | - cpython 42 | - cpython 43 | - cpython 44 | - cpython 45 | target_platform: 46 | - linux-64 47 | zip_keys: 48 | - - python 49 | - numpy 50 | - python_impl 51 | zlib: 52 | - '1' 53 | zstd: 54 | - '1.5' 55 | -------------------------------------------------------------------------------- /.ci_support/linux_aarch64_.yaml: -------------------------------------------------------------------------------- 1 | bzip2: 2 | - '1' 3 | c_stdlib: 4 | - sysroot 5 | c_stdlib_version: 6 | - '2.17' 7 | cdt_name: 8 | - conda 9 | channel_sources: 10 | - conda-forge 11 | channel_targets: 12 | - conda-forge main 13 | cxx_compiler: 14 | - gxx 15 | cxx_compiler_version: 16 | - '13' 17 | docker_image: 18 | - quay.io/condaforge/linux-anvil-x86_64:alma9 19 | icu: 20 | - '75' 21 | liblzma_devel: 22 | - '5' 23 | numpy: 24 | - '2.0' 25 | - '2.0' 26 | - '2.0' 27 | - '2' 28 | - '2.0' 29 | pin_run_as_build: 30 | python: 31 | min_pin: x.x 32 | max_pin: x.x 33 | python: 34 | - 3.10.* *_cpython 35 | - 3.11.* *_cpython 36 | - 3.12.* *_cpython 37 | - 3.13.* *_cp313 38 | - 3.9.* *_cpython 39 | python_impl: 40 | - cpython 41 | - cpython 42 | - cpython 43 | - cpython 44 | - cpython 45 | target_platform: 46 | - linux-aarch64 47 | zip_keys: 48 | - - python 49 | - numpy 50 | - python_impl 51 | zlib: 52 | - '1' 53 | zstd: 54 | - '1.5' 55 | -------------------------------------------------------------------------------- /.ci_support/linux_ppc64le_.yaml: -------------------------------------------------------------------------------- 1 | bzip2: 2 | - '1' 3 | c_stdlib: 4 | - sysroot 5 | c_stdlib_version: 6 | - '2.17' 7 | cdt_name: 8 | - conda 9 | channel_sources: 10 | - conda-forge 11 | channel_targets: 12 | - conda-forge main 13 | cxx_compiler: 14 | - gxx 15 | cxx_compiler_version: 16 | - '13' 17 | docker_image: 18 | - quay.io/condaforge/linux-anvil-x86_64:alma9 19 | icu: 20 | - '75' 21 | liblzma_devel: 22 | - '5' 23 | numpy: 24 | - '2.0' 25 | - '2.0' 26 | - '2.0' 27 | - '2' 28 | - '2.0' 29 | pin_run_as_build: 30 | python: 31 | min_pin: x.x 32 | max_pin: x.x 33 | python: 34 | - 3.10.* *_cpython 35 | - 3.11.* *_cpython 36 | - 3.12.* *_cpython 37 | - 3.13.* *_cp313 38 | - 3.9.* *_cpython 39 | python_impl: 40 | - cpython 41 | - cpython 42 | - cpython 43 | - cpython 44 | - cpython 45 | target_platform: 46 | - linux-ppc64le 47 | zip_keys: 48 | - - python 49 | - numpy 50 | - python_impl 51 | zlib: 52 | - '1' 53 | zstd: 54 | - '1.5' 55 | -------------------------------------------------------------------------------- /.ci_support/migrations/icu75.yaml: -------------------------------------------------------------------------------- 1 | __migrator: 2 | build_number: 1 3 | commit_message: Rebuild for icu 75 4 | kind: version 5 | migration_number: 1 6 | icu: 7 | - '75' 8 | migrator_ts: 1720864544.533804 9 | -------------------------------------------------------------------------------- /.ci_support/migrations/numpy2.yaml: -------------------------------------------------------------------------------- 1 | __migrator: 2 | build_number: 1 3 | kind: version 4 | commit_message: | 5 | Rebuild for numpy 2.0 6 | 7 | TL;DR: The way we build against numpy has changed as of numpy 2.0. This bot 8 | PR has updated the recipe to account for the changes (see below for details). 9 | The numpy 2.0 package itself is currently only available from a special release 10 | channel (`conda-forge/label/numpy_rc`) and will not be available on the main 11 | `conda-forge` channel until the release of numpy 2.0 GA. 12 | 13 | The biggest change is that we no longer need to use the oldest available numpy 14 | version at build time in order to support old numpy version at runtime - numpy 15 | will by default use a compatible ABI for the oldest still-supported numpy versions. 16 | 17 | Additionally, we no longer need to use `{{ pin_compatible("numpy") }}` as a 18 | run requirement - this has been handled for more than two years now by a 19 | run-export on the numpy package itself. The migrator will therefore remove 20 | any occurrences of this. 21 | 22 | However, by default, building against numpy 2.0 will assume that the package 23 | is compatible with numpy 2.0, which is not necessarily the case. You should 24 | check that the upstream package explicitly supports numpy 2.0, otherwise you 25 | need to add a `- numpy <2` run requirement until that happens (check numpy 26 | issue 26191 for an overview of the most important packages). 27 | 28 | Note that the numpy release candidate promises to be ABI-compatible with the 29 | final 2.0 release. This means that building against 2.0.0rc1 produces packages 30 | that can be published to our main channels. 31 | 32 | If you already want to use the numpy 2.0 release candidate yourself, you can do 33 | ``` 34 | conda config --add channels conda-forge/label/numpy_rc 35 | ``` 36 | or add this channel to your `.condarc` file directly. 37 | 38 | ### To-Dos: 39 | * [ ] Match run-requirements for numpy (i.e. check upstream `pyproject.toml` or however the project specifies numpy compatibility) 40 | * If upstream is not yet compatible with numpy 2.0, add `numpy <2` upper bound under `run:`. 41 | * If upstream is already compatible with numpy 2.0, nothing else should be necessary in most cases. 42 | * If upstream requires a minimum numpy version newer than 1.19, you can add `numpy >=x.y` under `run:`. 43 | * [ ] Remove any remaining occurrences of `{{ pin_compatible("numpy") }}` that the bot may have missed. 44 | 45 | PS. If the build does not compile anymore, this is almost certainly a sign that 46 | the upstream project is not yet ready for numpy 2.0; do not close this PR until 47 | a version compatible with numpy 2.0 has been released upstream and on this 48 | feedstock (in the meantime, you can keep the bot from reopening this PR in 49 | case of git conflicts by marking it as a draft). 50 | 51 | migration_number: 1 52 | ordering: 53 | # prefer channels including numpy_rc (otherwise smithy doesn't 54 | # know which of the two values should be taken on merge) 55 | channel_sources: 56 | - conda-forge 57 | - conda-forge/label/numpy_rc,conda-forge 58 | 59 | # needs to match length of zip {python, python_impl, numpy} 60 | # as it is in global CBC in order to override it 61 | numpy: 62 | - 1.22 # no py38 support for numpy 2.0 63 | - 2.0 64 | - 2.0 65 | - 2.0 66 | channel_sources: 67 | - conda-forge/label/numpy_rc,conda-forge 68 | migrator_ts: 1713572489.295986 69 | -------------------------------------------------------------------------------- /.ci_support/migrations/python313.yaml: -------------------------------------------------------------------------------- 1 | migrator_ts: 1724712607 2 | __migrator: 3 | commit_message: Rebuild for python 3.13 4 | migration_number: 1 5 | operation: key_add 6 | primary_key: python 7 | ordering: 8 | python: 9 | - 3.6.* *_cpython 10 | - 3.7.* *_cpython 11 | - 3.8.* *_cpython 12 | - 3.9.* *_cpython 13 | - 3.10.* *_cpython 14 | - 3.11.* *_cpython 15 | - 3.12.* *_cpython 16 | - 3.13.* *_cp313 # new entry 17 | - 3.6.* *_73_pypy 18 | - 3.7.* *_73_pypy 19 | - 3.8.* *_73_pypy 20 | - 3.9.* *_73_pypy 21 | paused: false 22 | longterm: true 23 | pr_limit: 20 24 | max_solver_attempts: 3 # this will make the bot retry "not solvable" stuff 12 times 25 | exclude: 26 | # this shouldn't attempt to modify the python feedstocks 27 | - python 28 | - pypy3.6 29 | - pypy-meta 30 | - cross-python 31 | - python_abi 32 | exclude_pinned_pkgs: false 33 | additional_zip_keys: 34 | - channel_sources 35 | 36 | python: 37 | - 3.13.* *_cp313 38 | channel_sources: 39 | - conda-forge/label/python_rc,conda-forge 40 | # additional entries to add for zip_keys 41 | numpy: 42 | - 2 43 | python_impl: 44 | - cpython 45 | -------------------------------------------------------------------------------- /.ci_support/osx_64_.yaml: -------------------------------------------------------------------------------- 1 | MACOSX_DEPLOYMENT_TARGET: 2 | - '10.13' 3 | MACOSX_SDK_VERSION: 4 | - '10.13' 5 | bzip2: 6 | - '1' 7 | c_stdlib: 8 | - macosx_deployment_target 9 | c_stdlib_version: 10 | - '10.13' 11 | channel_sources: 12 | - conda-forge 13 | channel_targets: 14 | - conda-forge main 15 | cxx_compiler: 16 | - clangxx 17 | cxx_compiler_version: 18 | - '18' 19 | icu: 20 | - '75' 21 | liblzma_devel: 22 | - '5' 23 | macos_machine: 24 | - x86_64-apple-darwin13.4.0 25 | numpy: 26 | - '2.0' 27 | - '2.0' 28 | - '2.0' 29 | - '2' 30 | - '2.0' 31 | pin_run_as_build: 32 | python: 33 | min_pin: x.x 34 | max_pin: x.x 35 | python: 36 | - 3.10.* *_cpython 37 | - 3.11.* *_cpython 38 | - 3.12.* *_cpython 39 | - 3.13.* *_cp313 40 | - 3.9.* *_cpython 41 | python_impl: 42 | - cpython 43 | - cpython 44 | - cpython 45 | - cpython 46 | - cpython 47 | target_platform: 48 | - osx-64 49 | zip_keys: 50 | - - python 51 | - numpy 52 | - python_impl 53 | zlib: 54 | - '1' 55 | zstd: 56 | - '1.5' 57 | -------------------------------------------------------------------------------- /.ci_support/osx_arm64_.yaml: -------------------------------------------------------------------------------- 1 | MACOSX_DEPLOYMENT_TARGET: 2 | - '11.0' 3 | MACOSX_SDK_VERSION: 4 | - '11.0' 5 | bzip2: 6 | - '1' 7 | c_stdlib: 8 | - macosx_deployment_target 9 | c_stdlib_version: 10 | - '11.0' 11 | channel_sources: 12 | - conda-forge 13 | channel_targets: 14 | - conda-forge main 15 | cxx_compiler: 16 | - clangxx 17 | cxx_compiler_version: 18 | - '18' 19 | icu: 20 | - '75' 21 | liblzma_devel: 22 | - '5' 23 | macos_machine: 24 | - arm64-apple-darwin20.0.0 25 | numpy: 26 | - '2.0' 27 | - '2.0' 28 | - '2.0' 29 | - '2' 30 | - '2.0' 31 | pin_run_as_build: 32 | python: 33 | min_pin: x.x 34 | max_pin: x.x 35 | python: 36 | - 3.10.* *_cpython 37 | - 3.11.* *_cpython 38 | - 3.12.* *_cpython 39 | - 3.13.* *_cp313 40 | - 3.9.* *_cpython 41 | python_impl: 42 | - cpython 43 | - cpython 44 | - cpython 45 | - cpython 46 | - cpython 47 | target_platform: 48 | - osx-arm64 49 | zip_keys: 50 | - - python 51 | - numpy 52 | - python_impl 53 | zlib: 54 | - '1' 55 | zstd: 56 | - '1.5' 57 | -------------------------------------------------------------------------------- /.ci_support/win_64_.yaml: -------------------------------------------------------------------------------- 1 | bzip2: 2 | - '1' 3 | c_stdlib: 4 | - vs 5 | channel_sources: 6 | - conda-forge 7 | channel_targets: 8 | - conda-forge main 9 | cxx_compiler: 10 | - vs2019 11 | libiconv: 12 | - '1' 13 | liblzma_devel: 14 | - '5' 15 | numpy: 16 | - '2.0' 17 | - '2.0' 18 | - '2.0' 19 | - '2' 20 | - '2.0' 21 | pin_run_as_build: 22 | python: 23 | min_pin: x.x 24 | max_pin: x.x 25 | python: 26 | - 3.10.* *_cpython 27 | - 3.11.* *_cpython 28 | - 3.12.* *_cpython 29 | - 3.13.* *_cp313 30 | - 3.9.* *_cpython 31 | python_impl: 32 | - cpython 33 | - cpython 34 | - cpython 35 | - cpython 36 | - cpython 37 | target_platform: 38 | - win-64 39 | zip_keys: 40 | - - python 41 | - numpy 42 | - python_impl 43 | zlib: 44 | - '1' 45 | zstd: 46 | - '1.5' 47 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: jinja-yaml -*- 4 | 5 | version: 2 6 | 7 | jobs: 8 | build: 9 | working_directory: ~/test 10 | machine: 11 | image: ubuntu-2004:current 12 | steps: 13 | - run: 14 | # The Circle-CI build should not be active, but if this is not true for some reason, do a fast finish. 15 | command: exit 0 16 | 17 | workflows: 18 | version: 2 19 | build_and_test: 20 | jobs: 21 | - build: 22 | filters: 23 | branches: 24 | ignore: 25 | - /.*/ 26 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.patch binary 4 | *.diff binary 5 | meta.yaml text eol=lf 6 | build.sh text eol=lf 7 | bld.bat text eol=crlf 8 | 9 | # github helper pieces to make some files not show up in diffs automatically 10 | .azure-pipelines/* linguist-generated=true 11 | .circleci/* linguist-generated=true 12 | .ci_support/README linguist-generated=true 13 | .drone/* linguist-generated=true 14 | .drone.yml linguist-generated=true 15 | .github/* linguist-generated=true 16 | .travis/* linguist-generated=true 17 | .appveyor.yml linguist-generated=true 18 | .gitattributes linguist-generated=true 19 | .gitignore linguist-generated=true 20 | .travis.yml linguist-generated=true 21 | .scripts/* linguist-generated=true 22 | .woodpecker.yml linguist-generated=true 23 | /LICENSE.txt linguist-generated=true 24 | /README.md linguist-generated=true 25 | azure-pipelines.yml linguist-generated=true 26 | build-locally.py linguist-generated=true 27 | shippable.yml linguist-generated=true 28 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @beckermr @ccordoba12 @h-vetinari @isuruf @jakirkham @jschueller @matthiasdiener @msarahan @ocefpaf @scopatz @xhochy -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # User content belongs under recipe/. 2 | # Feedstock configuration goes in `conda-forge.yml` 3 | # Everything else is managed by the conda-smithy rerender process. 4 | # Please do not modify 5 | 6 | # Ignore all files and folders in root 7 | * 8 | !/conda-forge.yml 9 | 10 | # Don't ignore any files/folders if the parent folder is 'un-ignored' 11 | # This also avoids warnings when adding an already-checked file with an ignored parent. 12 | !/**/ 13 | # Don't ignore any files/folders recursively in the following folders 14 | !/recipe/** 15 | !/.ci_support/** 16 | 17 | # Since we ignore files/folders recursively, any folders inside 18 | # build_artifacts gets ignored which trips some build systems. 19 | # To avoid that we 'un-ignore' all files/folders recursively 20 | # and only ignore the root build_artifacts folder. 21 | !/build_artifacts/** 22 | /build_artifacts 23 | 24 | *.pyc 25 | 26 | # Rattler-build's artifacts are in `output` when not specifying anything. 27 | /output 28 | # Pixi's configuration 29 | .pixi 30 | -------------------------------------------------------------------------------- /.scripts/build_steps.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # PLEASE NOTE: This script has been automatically generated by conda-smithy. Any changes here 4 | # will be lost next time ``conda smithy rerender`` is run. If you would like to make permanent 5 | # changes to this script, consider a proposal to conda-smithy so that other feedstocks can also 6 | # benefit from the improvement. 7 | 8 | # -*- mode: jinja-shell -*- 9 | 10 | set -xeuo pipefail 11 | export FEEDSTOCK_ROOT="${FEEDSTOCK_ROOT:-/home/conda/feedstock_root}" 12 | source ${FEEDSTOCK_ROOT}/.scripts/logging_utils.sh 13 | 14 | 15 | ( endgroup "Start Docker" ) 2> /dev/null 16 | 17 | ( startgroup "Configuring conda" ) 2> /dev/null 18 | 19 | export PYTHONUNBUFFERED=1 20 | export RECIPE_ROOT="${RECIPE_ROOT:-/home/conda/recipe_root}" 21 | export CI_SUPPORT="${FEEDSTOCK_ROOT}/.ci_support" 22 | export CONFIG_FILE="${CI_SUPPORT}/${CONFIG}.yaml" 23 | 24 | cat >~/.condarc < /opt/conda/conda-meta/history 36 | micromamba install --root-prefix ~/.conda --prefix /opt/conda \ 37 | --yes --override-channels --channel conda-forge --strict-channel-priority \ 38 | pip python=3.12 conda-build conda-forge-ci-setup=4 "conda-build>=24.1" 39 | export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1 40 | 41 | # set up the condarc 42 | setup_conda_rc "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" 43 | 44 | source run_conda_forge_build_setup 45 | 46 | 47 | 48 | # make the build number clobber 49 | make_build_number "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" 50 | 51 | if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]] && [[ "${HOST_PLATFORM}" != linux-* ]] && [[ "${BUILD_WITH_CONDA_DEBUG:-0}" != 1 ]]; then 52 | EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" 53 | fi 54 | 55 | 56 | ( endgroup "Configuring conda" ) 2> /dev/null 57 | 58 | if [[ -f "${FEEDSTOCK_ROOT}/LICENSE.txt" ]]; then 59 | cp "${FEEDSTOCK_ROOT}/LICENSE.txt" "${RECIPE_ROOT}/recipe-scripts-license.txt" 60 | fi 61 | 62 | if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then 63 | if [[ "x${BUILD_OUTPUT_ID:-}" != "x" ]]; then 64 | EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --output-id ${BUILD_OUTPUT_ID}" 65 | fi 66 | conda debug "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ 67 | ${EXTRA_CB_OPTIONS:-} \ 68 | --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" 69 | 70 | # Drop into an interactive shell 71 | /bin/bash 72 | else 73 | conda-build "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ 74 | --suppress-variables ${EXTRA_CB_OPTIONS:-} \ 75 | --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" \ 76 | --extra-meta flow_run_id="${flow_run_id:-}" remote_url="${remote_url:-}" sha="${sha:-}" 77 | ( startgroup "Inspecting artifacts" ) 2> /dev/null 78 | 79 | # inspect_artifacts was only added in conda-forge-ci-setup 4.9.4 80 | command -v inspect_artifacts >/dev/null 2>&1 && inspect_artifacts --recipe-dir "${RECIPE_ROOT}" -m "${CONFIG_FILE}" || echo "inspect_artifacts needs conda-forge-ci-setup >=4.9.4" 81 | 82 | ( endgroup "Inspecting artifacts" ) 2> /dev/null 83 | ( startgroup "Validating outputs" ) 2> /dev/null 84 | 85 | validate_recipe_outputs "${FEEDSTOCK_NAME}" 86 | 87 | ( endgroup "Validating outputs" ) 2> /dev/null 88 | 89 | ( startgroup "Uploading packages" ) 2> /dev/null 90 | 91 | if [[ "${UPLOAD_PACKAGES}" != "False" ]] && [[ "${IS_PR_BUILD}" == "False" ]]; then 92 | upload_package --validate --feedstock-name="${FEEDSTOCK_NAME}" "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" 93 | fi 94 | 95 | ( endgroup "Uploading packages" ) 2> /dev/null 96 | fi 97 | 98 | ( startgroup "Final checks" ) 2> /dev/null 99 | 100 | touch "${FEEDSTOCK_ROOT}/build_artifacts/conda-forge-build-done-${CONFIG}" -------------------------------------------------------------------------------- /.scripts/logging_utils.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Provide a unified interface for the different logging 4 | # utilities CI providers offer. If unavailable, provide 5 | # a compatible fallback (e.g. bare `echo xxxxxx`). 6 | 7 | function startgroup { 8 | # Start a foldable group of log lines 9 | # Pass a single argument, quoted 10 | case ${CI:-} in 11 | azure ) 12 | echo "##[group]$1";; 13 | travis ) 14 | echo "$1" 15 | echo -en 'travis_fold:start:'"${1// /}"'\r';; 16 | github_actions ) 17 | echo "::group::$1";; 18 | * ) 19 | echo "$1";; 20 | esac 21 | } 2> /dev/null 22 | 23 | function endgroup { 24 | # End a foldable group of log lines 25 | # Pass a single argument, quoted 26 | 27 | case ${CI:-} in 28 | azure ) 29 | echo "##[endgroup]";; 30 | travis ) 31 | echo -en 'travis_fold:end:'"${1// /}"'\r';; 32 | github_actions ) 33 | echo "::endgroup::";; 34 | esac 35 | } 2> /dev/null 36 | -------------------------------------------------------------------------------- /.scripts/run_docker_build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # PLEASE NOTE: This script has been automatically generated by conda-smithy. Any changes here 4 | # will be lost next time ``conda smithy rerender`` is run. If you would like to make permanent 5 | # changes to this script, consider a proposal to conda-smithy so that other feedstocks can also 6 | # benefit from the improvement. 7 | 8 | source .scripts/logging_utils.sh 9 | 10 | ( startgroup "Configure Docker" ) 2> /dev/null 11 | 12 | set -xeo pipefail 13 | 14 | THISDIR="$( cd "$( dirname "$0" )" >/dev/null && pwd )" 15 | PROVIDER_DIR="$(basename "$THISDIR")" 16 | 17 | FEEDSTOCK_ROOT="$( cd "$( dirname "$0" )/.." >/dev/null && pwd )" 18 | RECIPE_ROOT="${FEEDSTOCK_ROOT}/recipe" 19 | 20 | if [ -z ${FEEDSTOCK_NAME} ]; then 21 | export FEEDSTOCK_NAME=$(basename ${FEEDSTOCK_ROOT}) 22 | fi 23 | 24 | if [[ "${sha:-}" == "" ]]; then 25 | pushd "${FEEDSTOCK_ROOT}" 26 | sha=$(git rev-parse HEAD) 27 | popd 28 | fi 29 | 30 | docker info 31 | 32 | # In order for the conda-build process in the container to write to the mounted 33 | # volumes, we need to run with the same id as the host machine, which is 34 | # normally the owner of the mounted volumes, or at least has write permission 35 | export HOST_USER_ID=$(id -u) 36 | # Check if docker-machine is being used (normally on OSX) and get the uid from 37 | # the VM 38 | if hash docker-machine 2> /dev/null && docker-machine active > /dev/null; then 39 | export HOST_USER_ID=$(docker-machine ssh $(docker-machine active) id -u) 40 | fi 41 | 42 | ARTIFACTS="$FEEDSTOCK_ROOT/build_artifacts" 43 | 44 | if [ -z "$CONFIG" ]; then 45 | set +x 46 | FILES=`ls .ci_support/linux_*` 47 | CONFIGS="" 48 | for file in $FILES; do 49 | CONFIGS="${CONFIGS}'${file:12:-5}' or "; 50 | done 51 | echo "Need to set CONFIG env variable. Value can be one of ${CONFIGS:0:-4}" 52 | exit 1 53 | fi 54 | 55 | if [ -z "${DOCKER_IMAGE}" ]; then 56 | SHYAML_INSTALLED="$(shyaml -h || echo NO)" 57 | if [ "${SHYAML_INSTALLED}" == "NO" ]; then 58 | echo "WARNING: DOCKER_IMAGE variable not set and shyaml not installed. Trying to parse with coreutils" 59 | DOCKER_IMAGE=$(cat .ci_support/${CONFIG}.yaml | grep '^docker_image:$' -A 1 | tail -n 1 | cut -b 3-) 60 | if [ "${DOCKER_IMAGE}" = "" ]; then 61 | echo "No docker_image entry found in ${CONFIG}. Falling back to quay.io/condaforge/linux-anvil-comp7" 62 | DOCKER_IMAGE="quay.io/condaforge/linux-anvil-comp7" 63 | fi 64 | else 65 | DOCKER_IMAGE="$(cat "${FEEDSTOCK_ROOT}/.ci_support/${CONFIG}.yaml" | shyaml get-value docker_image.0 quay.io/condaforge/linux-anvil-comp7 )" 66 | fi 67 | fi 68 | 69 | mkdir -p "$ARTIFACTS" 70 | DONE_CANARY="$ARTIFACTS/conda-forge-build-done-${CONFIG}" 71 | rm -f "$DONE_CANARY" 72 | 73 | # Allow people to specify extra default arguments to `docker run` (e.g. `--rm`) 74 | DOCKER_RUN_ARGS="${CONDA_FORGE_DOCKER_RUN_ARGS}" 75 | if [ -z "${CI}" ]; then 76 | DOCKER_RUN_ARGS="-it ${DOCKER_RUN_ARGS}" 77 | fi 78 | 79 | ( endgroup "Configure Docker" ) 2> /dev/null 80 | 81 | ( startgroup "Start Docker" ) 2> /dev/null 82 | 83 | export UPLOAD_PACKAGES="${UPLOAD_PACKAGES:-True}" 84 | export IS_PR_BUILD="${IS_PR_BUILD:-False}" 85 | docker pull "${DOCKER_IMAGE}" 86 | docker run ${DOCKER_RUN_ARGS} \ 87 | -v "${RECIPE_ROOT}":/home/conda/recipe_root:rw,z,delegated \ 88 | -v "${FEEDSTOCK_ROOT}":/home/conda/feedstock_root:rw,z,delegated \ 89 | -e CONFIG \ 90 | -e HOST_USER_ID \ 91 | -e UPLOAD_PACKAGES \ 92 | -e IS_PR_BUILD \ 93 | -e GIT_BRANCH \ 94 | -e UPLOAD_ON_BRANCH \ 95 | -e CI \ 96 | -e FEEDSTOCK_NAME \ 97 | -e CPU_COUNT \ 98 | -e BUILD_WITH_CONDA_DEBUG \ 99 | -e BUILD_OUTPUT_ID \ 100 | -e flow_run_id \ 101 | -e remote_url \ 102 | -e sha \ 103 | -e BINSTAR_TOKEN \ 104 | -e FEEDSTOCK_TOKEN \ 105 | -e STAGING_BINSTAR_TOKEN \ 106 | "${DOCKER_IMAGE}" \ 107 | bash \ 108 | "/home/conda/feedstock_root/${PROVIDER_DIR}/build_steps.sh" 109 | 110 | # verify that the end of the script was reached 111 | test -f "$DONE_CANARY" 112 | 113 | # This closes the last group opened in `build_steps.sh` 114 | ( endgroup "Final checks" ) 2> /dev/null -------------------------------------------------------------------------------- /.scripts/run_osx_build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # -*- mode: jinja-shell -*- 4 | 5 | source .scripts/logging_utils.sh 6 | 7 | set -xe 8 | 9 | MINIFORGE_HOME="${MINIFORGE_HOME:-${HOME}/miniforge3}" 10 | MINIFORGE_HOME="${MINIFORGE_HOME%/}" # remove trailing slash 11 | export CONDA_BLD_PATH="${CONDA_BLD_PATH:-${MINIFORGE_HOME}/conda-bld}" 12 | 13 | ( startgroup "Provisioning base env with micromamba" ) 2> /dev/null 14 | MICROMAMBA_VERSION="1.5.10-0" 15 | if [[ "$(uname -m)" == "arm64" ]]; then 16 | osx_arch="osx-arm64" 17 | else 18 | osx_arch="osx-64" 19 | fi 20 | MICROMAMBA_URL="https://github.com/mamba-org/micromamba-releases/releases/download/${MICROMAMBA_VERSION}/micromamba-${osx_arch}" 21 | MAMBA_ROOT_PREFIX="${MINIFORGE_HOME}-micromamba-$(date +%s)" 22 | echo "Downloading micromamba ${MICROMAMBA_VERSION}" 23 | micromamba_exe="$(mktemp -d)/micromamba" 24 | curl -L -o "${micromamba_exe}" "${MICROMAMBA_URL}" 25 | chmod +x "${micromamba_exe}" 26 | echo "Creating environment" 27 | "${micromamba_exe}" create --yes --root-prefix "${MAMBA_ROOT_PREFIX}" --prefix "${MINIFORGE_HOME}" \ 28 | --channel conda-forge \ 29 | pip python=3.12 conda-build conda-forge-ci-setup=4 "conda-build>=24.1" 30 | echo "Moving pkgs cache from ${MAMBA_ROOT_PREFIX} to ${MINIFORGE_HOME}" 31 | mv "${MAMBA_ROOT_PREFIX}/pkgs" "${MINIFORGE_HOME}" 32 | echo "Cleaning up micromamba" 33 | rm -rf "${MAMBA_ROOT_PREFIX}" "${micromamba_exe}" || true 34 | ( endgroup "Provisioning base env with micromamba" ) 2> /dev/null 35 | 36 | ( startgroup "Configuring conda" ) 2> /dev/null 37 | echo "Activating environment" 38 | source "${MINIFORGE_HOME}/etc/profile.d/conda.sh" 39 | conda activate base 40 | export CONDA_SOLVER="libmamba" 41 | export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1 42 | 43 | 44 | 45 | 46 | 47 | echo -e "\n\nSetting up the condarc and mangling the compiler." 48 | setup_conda_rc ./ ./recipe ./.ci_support/${CONFIG}.yaml 49 | 50 | if [[ "${CI:-}" != "" ]]; then 51 | mangle_compiler ./ ./recipe .ci_support/${CONFIG}.yaml 52 | fi 53 | 54 | if [[ "${CI:-}" != "" ]]; then 55 | echo -e "\n\nMangling homebrew in the CI to avoid conflicts." 56 | /usr/bin/sudo mangle_homebrew 57 | /usr/bin/sudo -k 58 | else 59 | echo -e "\n\nNot mangling homebrew as we are not running in CI" 60 | fi 61 | 62 | if [[ "${sha:-}" == "" ]]; then 63 | sha=$(git rev-parse HEAD) 64 | fi 65 | 66 | echo -e "\n\nRunning the build setup script." 67 | source run_conda_forge_build_setup 68 | 69 | 70 | 71 | ( endgroup "Configuring conda" ) 2> /dev/null 72 | 73 | echo -e "\n\nMaking the build clobber file" 74 | make_build_number ./ ./recipe ./.ci_support/${CONFIG}.yaml 75 | 76 | if [[ -f LICENSE.txt ]]; then 77 | cp LICENSE.txt "recipe/recipe-scripts-license.txt" 78 | fi 79 | 80 | if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then 81 | if [[ "x${BUILD_OUTPUT_ID:-}" != "x" ]]; then 82 | EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --output-id ${BUILD_OUTPUT_ID}" 83 | fi 84 | conda debug ./recipe -m ./.ci_support/${CONFIG}.yaml \ 85 | ${EXTRA_CB_OPTIONS:-} \ 86 | --clobber-file ./.ci_support/clobber_${CONFIG}.yaml 87 | 88 | # Drop into an interactive shell 89 | /bin/bash 90 | else 91 | 92 | if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]]; then 93 | EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" 94 | fi 95 | 96 | conda-build ./recipe -m ./.ci_support/${CONFIG}.yaml \ 97 | --suppress-variables ${EXTRA_CB_OPTIONS:-} \ 98 | --clobber-file ./.ci_support/clobber_${CONFIG}.yaml \ 99 | --extra-meta flow_run_id="$flow_run_id" remote_url="$remote_url" sha="$sha" 100 | 101 | ( startgroup "Inspecting artifacts" ) 2> /dev/null 102 | 103 | # inspect_artifacts was only added in conda-forge-ci-setup 4.9.4 104 | command -v inspect_artifacts >/dev/null 2>&1 && inspect_artifacts --recipe-dir ./recipe -m ./.ci_support/${CONFIG}.yaml || echo "inspect_artifacts needs conda-forge-ci-setup >=4.9.4" 105 | 106 | ( endgroup "Inspecting artifacts" ) 2> /dev/null 107 | ( startgroup "Validating outputs" ) 2> /dev/null 108 | 109 | validate_recipe_outputs "${FEEDSTOCK_NAME}" 110 | 111 | ( endgroup "Validating outputs" ) 2> /dev/null 112 | 113 | ( startgroup "Uploading packages" ) 2> /dev/null 114 | 115 | if [[ "${UPLOAD_PACKAGES}" != "False" ]] && [[ "${IS_PR_BUILD}" == "False" ]]; then 116 | upload_package --validate --feedstock-name="${FEEDSTOCK_NAME}" ./ ./recipe ./.ci_support/${CONFIG}.yaml 117 | fi 118 | 119 | ( endgroup "Uploading packages" ) 2> /dev/null 120 | fi -------------------------------------------------------------------------------- /.scripts/run_win_build.bat: -------------------------------------------------------------------------------- 1 | :: PLEASE NOTE: This script has been automatically generated by conda-smithy. Any changes here 2 | :: will be lost next time ``conda smithy rerender`` is run. If you would like to make permanent 3 | :: changes to this script, consider a proposal to conda-smithy so that other feedstocks can also 4 | :: benefit from the improvement. 5 | 6 | :: INPUTS (required environment variables) 7 | :: CONFIG: name of the .ci_support/*.yaml file for this job 8 | :: CI: azure, github_actions, or unset 9 | :: MINIFORGE_HOME: where to install the base conda environment 10 | :: UPLOAD_PACKAGES: true or false 11 | :: UPLOAD_ON_BRANCH: true or false 12 | 13 | setlocal enableextensions enabledelayedexpansion 14 | 15 | FOR %%A IN ("%~dp0.") DO SET "REPO_ROOT=%%~dpA" 16 | if "%MINIFORGE_HOME%"=="" set "MINIFORGE_HOME=%USERPROFILE%\Miniforge3" 17 | :: Remove trailing backslash, if present 18 | if "%MINIFORGE_HOME:~-1%"=="\" set "MINIFORGE_HOME=%MINIFORGE_HOME:~0,-1%" 19 | call :start_group "Provisioning base env with micromamba" 20 | set "MAMBA_ROOT_PREFIX=%MINIFORGE_HOME%-micromamba-%RANDOM%" 21 | set "MICROMAMBA_VERSION=1.5.10-0" 22 | set "MICROMAMBA_URL=https://github.com/mamba-org/micromamba-releases/releases/download/%MICROMAMBA_VERSION%/micromamba-win-64" 23 | set "MICROMAMBA_TMPDIR=%TMP%\micromamba-%RANDOM%" 24 | set "MICROMAMBA_EXE=%MICROMAMBA_TMPDIR%\micromamba.exe" 25 | 26 | echo Downloading micromamba %MICROMAMBA_VERSION% 27 | if not exist "%MICROMAMBA_TMPDIR%" mkdir "%MICROMAMBA_TMPDIR%" 28 | certutil -urlcache -split -f "%MICROMAMBA_URL%" "%MICROMAMBA_EXE%" 29 | if !errorlevel! neq 0 exit /b !errorlevel! 30 | 31 | echo Creating environment 32 | call "%MICROMAMBA_EXE%" create --yes --root-prefix "%MAMBA_ROOT_PREFIX%" --prefix "%MINIFORGE_HOME%" ^ 33 | --channel conda-forge ^ 34 | pip python=3.12 conda-build conda-forge-ci-setup=4 "conda-build>=24.1" 35 | if !errorlevel! neq 0 exit /b !errorlevel! 36 | echo Removing %MAMBA_ROOT_PREFIX% 37 | del /S /Q "%MAMBA_ROOT_PREFIX%" >nul 38 | del /S /Q "%MICROMAMBA_TMPDIR%" >nul 39 | call :end_group 40 | 41 | call :start_group "Configuring conda" 42 | 43 | :: Activate the base conda environment 44 | echo Activating environment 45 | call "%MINIFORGE_HOME%\Scripts\activate.bat" 46 | :: Configure the solver 47 | set "CONDA_SOLVER=libmamba" 48 | if !errorlevel! neq 0 exit /b !errorlevel! 49 | set "CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1" 50 | 51 | :: Set basic configuration 52 | echo Setting up configuration 53 | setup_conda_rc .\ ".\recipe" .\.ci_support\%CONFIG%.yaml 54 | if !errorlevel! neq 0 exit /b !errorlevel! 55 | echo Running build setup 56 | CALL run_conda_forge_build_setup 57 | 58 | 59 | if !errorlevel! neq 0 exit /b !errorlevel! 60 | 61 | if EXIST LICENSE.txt ( 62 | echo Copying feedstock license 63 | copy LICENSE.txt "recipe\\recipe-scripts-license.txt" 64 | ) 65 | if NOT [%HOST_PLATFORM%] == [%BUILD_PLATFORM%] ( 66 | if [%CROSSCOMPILING_EMULATOR%] == [] ( 67 | set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --no-test" 68 | ) 69 | ) 70 | 71 | if NOT [%flow_run_id%] == [] ( 72 | set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --extra-meta flow_run_id=%flow_run_id% remote_url=%remote_url% sha=%sha%" 73 | ) 74 | 75 | call :end_group 76 | 77 | :: Build the recipe 78 | echo Building recipe 79 | conda-build.exe "recipe" -m .ci_support\%CONFIG%.yaml --suppress-variables %EXTRA_CB_OPTIONS% 80 | if !errorlevel! neq 0 exit /b !errorlevel! 81 | 82 | call :start_group "Inspecting artifacts" 83 | :: inspect_artifacts was only added in conda-forge-ci-setup 4.9.4 84 | WHERE inspect_artifacts >nul 2>nul && inspect_artifacts --recipe-dir ".\recipe" -m .ci_support\%CONFIG%.yaml || echo "inspect_artifacts needs conda-forge-ci-setup >=4.9.4" 85 | call :end_group 86 | 87 | :: Prepare some environment variables for the upload step 88 | if /i "%CI%" == "github_actions" ( 89 | set "FEEDSTOCK_NAME=%GITHUB_REPOSITORY:*/=%" 90 | set "GIT_BRANCH=%GITHUB_REF:refs/heads/=%" 91 | if /i "%GITHUB_EVENT_NAME%" == "pull_request" ( 92 | set "IS_PR_BUILD=True" 93 | ) else ( 94 | set "IS_PR_BUILD=False" 95 | ) 96 | set "TEMP=%RUNNER_TEMP%" 97 | ) 98 | if /i "%CI%" == "azure" ( 99 | set "FEEDSTOCK_NAME=%BUILD_REPOSITORY_NAME:*/=%" 100 | set "GIT_BRANCH=%BUILD_SOURCEBRANCHNAME%" 101 | if /i "%BUILD_REASON%" == "PullRequest" ( 102 | set "IS_PR_BUILD=True" 103 | ) else ( 104 | set "IS_PR_BUILD=False" 105 | ) 106 | set "TEMP=%UPLOAD_TEMP%" 107 | ) 108 | 109 | :: Validate 110 | call :start_group "Validating outputs" 111 | validate_recipe_outputs "%FEEDSTOCK_NAME%" 112 | if !errorlevel! neq 0 exit /b !errorlevel! 113 | call :end_group 114 | 115 | if /i "%UPLOAD_PACKAGES%" == "true" ( 116 | if /i "%IS_PR_BUILD%" == "false" ( 117 | call :start_group "Uploading packages" 118 | if not exist "%TEMP%\" md "%TEMP%" 119 | set "TMP=%TEMP%" 120 | upload_package --validate --feedstock-name="%FEEDSTOCK_NAME%" .\ ".\recipe" .ci_support\%CONFIG%.yaml 121 | if !errorlevel! neq 0 exit /b !errorlevel! 122 | call :end_group 123 | ) 124 | ) 125 | 126 | exit 127 | 128 | :: Logging subroutines 129 | 130 | :start_group 131 | if /i "%CI%" == "github_actions" ( 132 | echo ::group::%~1 133 | exit /b 134 | ) 135 | if /i "%CI%" == "azure" ( 136 | echo ##[group]%~1 137 | exit /b 138 | ) 139 | echo %~1 140 | exit /b 141 | 142 | :end_group 143 | if /i "%CI%" == "github_actions" ( 144 | echo ::endgroup:: 145 | exit /b 146 | ) 147 | if /i "%CI%" == "azure" ( 148 | echo ##[endgroup] 149 | exit /b 150 | ) 151 | exit /b -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | BSD-3-Clause license 2 | Copyright (c) 2015-2022, conda-forge contributors 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 2. Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 3. Neither the name of the copyright holder nor the names of its 14 | contributors may be used to endorse or promote products derived from 15 | this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR 21 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 24 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 27 | DAMAGE. 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | About boost-feedstock 2 | ===================== 3 | 4 | Feedstock license: [BSD-3-Clause](https://github.com/conda-forge/boost-feedstock/blob/main/LICENSE.txt) 5 | 6 | Home: http://www.boost.org/ 7 | 8 | Package license: BSL-1.0 9 | 10 | Summary: Free peer-reviewed portable C++ source libraries. 11 | 12 | Development: https://github.com/boostorg/boost 13 | 14 | Documentation: https://www.boost.org/doc/ 15 | 16 | Current build status 17 | ==================== 18 | 19 | 20 | 21 | 22 | 23 | 24 | 80 | 81 |
Azure 25 |
26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 40 | 41 | 42 | 47 | 48 | 49 | 54 | 55 | 56 | 61 | 62 | 63 | 68 | 69 | 70 | 75 | 76 | 77 |
VariantStatus
linux_64 36 | 37 | variant 38 | 39 |
linux_aarch64 43 | 44 | variant 45 | 46 |
linux_ppc64le 50 | 51 | variant 52 | 53 |
osx_64 57 | 58 | variant 59 | 60 |
osx_arm64 64 | 65 | variant 66 | 67 |
win_64 71 | 72 | variant 73 | 74 |
78 |
79 |
82 | 83 | Current release info 84 | ==================== 85 | 86 | | Name | Downloads | Version | Platforms | 87 | | --- | --- | --- | --- | 88 | | [![Conda Recipe](https://img.shields.io/badge/recipe-libboost-green.svg)](https://anaconda.org/conda-forge/libboost) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/libboost.svg)](https://anaconda.org/conda-forge/libboost) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/libboost.svg)](https://anaconda.org/conda-forge/libboost) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/libboost.svg)](https://anaconda.org/conda-forge/libboost) | 89 | | [![Conda Recipe](https://img.shields.io/badge/recipe-libboost--devel-green.svg)](https://anaconda.org/conda-forge/libboost-devel) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/libboost-devel.svg)](https://anaconda.org/conda-forge/libboost-devel) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/libboost-devel.svg)](https://anaconda.org/conda-forge/libboost-devel) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/libboost-devel.svg)](https://anaconda.org/conda-forge/libboost-devel) | 90 | | [![Conda Recipe](https://img.shields.io/badge/recipe-libboost--headers-green.svg)](https://anaconda.org/conda-forge/libboost-headers) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/libboost-headers.svg)](https://anaconda.org/conda-forge/libboost-headers) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/libboost-headers.svg)](https://anaconda.org/conda-forge/libboost-headers) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/libboost-headers.svg)](https://anaconda.org/conda-forge/libboost-headers) | 91 | | [![Conda Recipe](https://img.shields.io/badge/recipe-libboost--python-green.svg)](https://anaconda.org/conda-forge/libboost-python) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/libboost-python.svg)](https://anaconda.org/conda-forge/libboost-python) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/libboost-python.svg)](https://anaconda.org/conda-forge/libboost-python) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/libboost-python.svg)](https://anaconda.org/conda-forge/libboost-python) | 92 | | [![Conda Recipe](https://img.shields.io/badge/recipe-libboost--python--devel-green.svg)](https://anaconda.org/conda-forge/libboost-python-devel) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/libboost-python-devel.svg)](https://anaconda.org/conda-forge/libboost-python-devel) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/libboost-python-devel.svg)](https://anaconda.org/conda-forge/libboost-python-devel) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/libboost-python-devel.svg)](https://anaconda.org/conda-forge/libboost-python-devel) | 93 | 94 | Installing boost 95 | ================ 96 | 97 | Installing `boost` from the `conda-forge` channel can be achieved by adding `conda-forge` to your channels with: 98 | 99 | ``` 100 | conda config --add channels conda-forge 101 | conda config --set channel_priority strict 102 | ``` 103 | 104 | Once the `conda-forge` channel has been enabled, `libboost, libboost-devel, libboost-headers, libboost-python, libboost-python-devel` can be installed with `conda`: 105 | 106 | ``` 107 | conda install libboost libboost-devel libboost-headers libboost-python libboost-python-devel 108 | ``` 109 | 110 | or with `mamba`: 111 | 112 | ``` 113 | mamba install libboost libboost-devel libboost-headers libboost-python libboost-python-devel 114 | ``` 115 | 116 | It is possible to list all of the versions of `libboost` available on your platform with `conda`: 117 | 118 | ``` 119 | conda search libboost --channel conda-forge 120 | ``` 121 | 122 | or with `mamba`: 123 | 124 | ``` 125 | mamba search libboost --channel conda-forge 126 | ``` 127 | 128 | Alternatively, `mamba repoquery` may provide more information: 129 | 130 | ``` 131 | # Search all versions available on your platform: 132 | mamba repoquery search libboost --channel conda-forge 133 | 134 | # List packages depending on `libboost`: 135 | mamba repoquery whoneeds libboost --channel conda-forge 136 | 137 | # List dependencies of `libboost`: 138 | mamba repoquery depends libboost --channel conda-forge 139 | ``` 140 | 141 | 142 | About conda-forge 143 | ================= 144 | 145 | [![Powered by 146 | NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org) 147 | 148 | conda-forge is a community-led conda channel of installable packages. 149 | In order to provide high-quality builds, the process has been automated into the 150 | conda-forge GitHub organization. The conda-forge organization contains one repository 151 | for each of the installable packages. Such a repository is known as a *feedstock*. 152 | 153 | A feedstock is made up of a conda recipe (the instructions on what and how to build 154 | the package) and the necessary configurations for automatic building using freely 155 | available continuous integration services. Thanks to the awesome service provided by 156 | [Azure](https://azure.microsoft.com/en-us/services/devops/), [GitHub](https://github.com/), 157 | [CircleCI](https://circleci.com/), [AppVeyor](https://www.appveyor.com/), 158 | [Drone](https://cloud.drone.io/welcome), and [TravisCI](https://travis-ci.com/) 159 | it is possible to build and upload installable packages to the 160 | [conda-forge](https://anaconda.org/conda-forge) [anaconda.org](https://anaconda.org/) 161 | channel for Linux, Windows and OSX respectively. 162 | 163 | To manage the continuous integration and simplify feedstock maintenance 164 | [conda-smithy](https://github.com/conda-forge/conda-smithy) has been developed. 165 | Using the ``conda-forge.yml`` within this repository, it is possible to re-render all of 166 | this feedstock's supporting files (e.g. the CI configuration files) with ``conda smithy rerender``. 167 | 168 | For more information please check the [conda-forge documentation](https://conda-forge.org/docs/). 169 | 170 | Terminology 171 | =========== 172 | 173 | **feedstock** - the conda recipe (raw material), supporting scripts and CI configuration. 174 | 175 | **conda-smithy** - the tool which helps orchestrate the feedstock. 176 | Its primary use is in the construction of the CI ``.yml`` files 177 | and simplify the management of *many* feedstocks. 178 | 179 | **conda-forge** - the place where the feedstock and smithy live and work to 180 | produce the finished article (built conda distributions) 181 | 182 | 183 | Updating boost-feedstock 184 | ======================== 185 | 186 | If you would like to improve the boost recipe or build a new 187 | package version, please fork this repository and submit a PR. Upon submission, 188 | your changes will be run on the appropriate platforms to give the reviewer an 189 | opportunity to confirm that the changes result in a successful build. Once 190 | merged, the recipe will be re-built and uploaded automatically to the 191 | `conda-forge` channel, whereupon the built conda packages will be available for 192 | everybody to install and use from the `conda-forge` channel. 193 | Note that all branches in the conda-forge/boost-feedstock are 194 | immediately built and any created packages are uploaded, so PRs should be based 195 | on branches in forks and branches in the main repository should only be used to 196 | build distinct package versions. 197 | 198 | In order to produce a uniquely identifiable distribution: 199 | * If the version of a package **is not** being increased, please add or increase 200 | the [``build/number``](https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#build-number-and-string). 201 | * If the version of a package **is** being increased, please remember to return 202 | the [``build/number``](https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#build-number-and-string) 203 | back to 0. 204 | 205 | Feedstock Maintainers 206 | ===================== 207 | 208 | * [@beckermr](https://github.com/beckermr/) 209 | * [@ccordoba12](https://github.com/ccordoba12/) 210 | * [@h-vetinari](https://github.com/h-vetinari/) 211 | * [@isuruf](https://github.com/isuruf/) 212 | * [@jakirkham](https://github.com/jakirkham/) 213 | * [@jschueller](https://github.com/jschueller/) 214 | * [@matthiasdiener](https://github.com/matthiasdiener/) 215 | * [@msarahan](https://github.com/msarahan/) 216 | * [@ocefpaf](https://github.com/ocefpaf/) 217 | * [@scopatz](https://github.com/scopatz/) 218 | * [@xhochy](https://github.com/xhochy/) 219 | 220 | -------------------------------------------------------------------------------- /azure-pipelines.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: yaml -*- 4 | 5 | stages: 6 | - stage: Check 7 | jobs: 8 | - job: Skip 9 | pool: 10 | vmImage: 'ubuntu-22.04' 11 | variables: 12 | DECODE_PERCENTS: 'false' 13 | RET: 'true' 14 | steps: 15 | - checkout: self 16 | fetchDepth: '2' 17 | - bash: | 18 | git_log=`git log --max-count=1 --skip=1 --pretty=format:"%B" | tr "\n" " "` 19 | echo "##vso[task.setvariable variable=log]$git_log" 20 | displayName: Obtain commit message 21 | - bash: echo "##vso[task.setvariable variable=RET]false" 22 | condition: and(eq(variables['Build.Reason'], 'PullRequest'), or(contains(variables.log, '[skip azp]'), contains(variables.log, '[azp skip]'), contains(variables.log, '[skip ci]'), contains(variables.log, '[ci skip]'))) 23 | displayName: Skip build? 24 | - bash: echo "##vso[task.setvariable variable=start_main;isOutput=true]$RET" 25 | name: result 26 | displayName: Export result 27 | - stage: Build 28 | condition: and(succeeded(), eq(dependencies.Check.outputs['Skip.result.start_main'], 'true')) 29 | dependsOn: Check 30 | jobs: 31 | - template: ./.azure-pipelines/azure-pipelines-linux.yml 32 | - template: ./.azure-pipelines/azure-pipelines-osx.yml 33 | - template: ./.azure-pipelines/azure-pipelines-win.yml -------------------------------------------------------------------------------- /build-locally.py: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | """exec" "python3" "$0" "$@" #""" # fmt: off # fmt: on 3 | # 4 | # This file has been generated by conda-smithy in order to build the recipe 5 | # locally. 6 | # 7 | # The line above this comment is a bash / sh / zsh guard 8 | # to stop people from running it with the wrong interpreter 9 | import glob 10 | import os 11 | import platform 12 | import subprocess 13 | import sys 14 | from argparse import ArgumentParser 15 | 16 | 17 | def setup_environment(ns): 18 | os.environ["CONFIG"] = ns.config 19 | os.environ["UPLOAD_PACKAGES"] = "False" 20 | os.environ["IS_PR_BUILD"] = "True" 21 | if ns.debug: 22 | os.environ["BUILD_WITH_CONDA_DEBUG"] = "1" 23 | if ns.output_id: 24 | os.environ["BUILD_OUTPUT_ID"] = ns.output_id 25 | if "MINIFORGE_HOME" not in os.environ: 26 | os.environ["MINIFORGE_HOME"] = os.path.join( 27 | os.path.dirname(__file__), "miniforge3" 28 | ) 29 | 30 | # The default cache location might not be writable using docker on macOS. 31 | if ns.config.startswith("linux") and platform.system() == "Darwin": 32 | os.environ["CONDA_FORGE_DOCKER_RUN_ARGS"] = ( 33 | os.environ.get("CONDA_FORGE_DOCKER_RUN_ARGS", "") 34 | + " -e RATTLER_CACHE_DIR=/tmp/rattler_cache" 35 | ) 36 | 37 | 38 | def run_docker_build(ns): 39 | script = ".scripts/run_docker_build.sh" 40 | subprocess.check_call([script]) 41 | 42 | 43 | def run_osx_build(ns): 44 | script = ".scripts/run_osx_build.sh" 45 | subprocess.check_call([script]) 46 | 47 | 48 | def run_win_build(ns): 49 | script = ".scripts/run_win_build.bat" 50 | subprocess.check_call(["cmd", "/D", "/Q", "/C", f"CALL {script}"]) 51 | 52 | 53 | def verify_config(ns): 54 | choices_filter = ns.filter or "*" 55 | valid_configs = { 56 | os.path.basename(f)[:-5] 57 | for f in glob.glob(f".ci_support/{choices_filter}.yaml") 58 | } 59 | if choices_filter != "*": 60 | print(f"filtering for '{choices_filter}.yaml' configs") 61 | print(f"valid configs are {valid_configs}") 62 | if ns.config in valid_configs: 63 | print("Using " + ns.config + " configuration") 64 | return 65 | elif len(valid_configs) == 1: 66 | ns.config = valid_configs.pop() 67 | print("Found " + ns.config + " configuration") 68 | elif ns.config is None: 69 | print("config not selected, please choose from the following:\n") 70 | selections = list(enumerate(sorted(valid_configs), 1)) 71 | for i, c in selections: 72 | print(f"{i}. {c}") 73 | try: 74 | s = input("\n> ") 75 | except KeyboardInterrupt: 76 | print("\nno option selected, bye!", file=sys.stderr) 77 | sys.exit(1) 78 | idx = int(s) - 1 79 | ns.config = selections[idx][1] 80 | print(f"selected {ns.config}") 81 | else: 82 | raise ValueError("config " + ns.config + " is not valid") 83 | if ( 84 | ns.config.startswith("osx") 85 | and platform.system() == "Darwin" 86 | and not os.environ.get("OSX_SDK_DIR") 87 | ): 88 | raise RuntimeError( 89 | "Need OSX_SDK_DIR env variable set. Run 'export OSX_SDK_DIR=$PWD/SDKs' " 90 | "to download the SDK automatically to '$PWD/SDKs/MacOSX.sdk'. " 91 | "Note: OSX_SDK_DIR must be set to an absolute path. " 92 | "Setting this variable implies agreement to the licensing terms of the SDK by Apple." 93 | ) 94 | 95 | 96 | def main(args=None): 97 | p = ArgumentParser("build-locally") 98 | p.add_argument("config", default=None, nargs="?") 99 | p.add_argument( 100 | "--filter", 101 | default=None, 102 | help="Glob string to filter which build choices are presented in interactive mode.", 103 | ) 104 | p.add_argument( 105 | "--debug", 106 | action="store_true", 107 | help="Setup debug environment using `conda debug`", 108 | ) 109 | p.add_argument( 110 | "--output-id", help="If running debug, specify the output to setup." 111 | ) 112 | 113 | ns = p.parse_args(args=args) 114 | verify_config(ns) 115 | setup_environment(ns) 116 | 117 | try: 118 | if ns.config.startswith("linux") or ( 119 | ns.config.startswith("osx") and platform.system() == "Linux" 120 | ): 121 | run_docker_build(ns) 122 | elif ns.config.startswith("osx"): 123 | run_osx_build(ns) 124 | elif ns.config.startswith("win"): 125 | run_win_build(ns) 126 | finally: 127 | recipe_license_file = os.path.join( 128 | "recipe", "recipe-scripts-license.txt" 129 | ) 130 | if os.path.exists(recipe_license_file): 131 | os.remove(recipe_license_file) 132 | 133 | 134 | if __name__ == "__main__": 135 | main() 136 | -------------------------------------------------------------------------------- /conda-forge.yml: -------------------------------------------------------------------------------- 1 | bot: 2 | abi_migration_branches: 3 | - v1.86.x 4 | - v1.84.x 5 | build_platform: 6 | linux_aarch64: linux_64 7 | linux_ppc64le: linux_64 8 | osx_arm64: osx_64 9 | conda_build: 10 | pkg_format: '2' 11 | conda_forge_output_validation: true 12 | github: 13 | branch_name: main 14 | tooling_branch_name: main 15 | provider: 16 | linux_aarch64: default 17 | linux_ppc64le: default 18 | win: azure 19 | test: native_and_emulated 20 | -------------------------------------------------------------------------------- /recipe/bld.bat: -------------------------------------------------------------------------------- 1 | @echo on 2 | 3 | :: Write python configuration, see https://github.com/boostorg/build/issues/194 4 | @echo using python > user-config.jam 5 | @echo : %PY_DUMMY_VER% >> user-config.jam 6 | @echo : %PYTHON:\=\\% >> user-config.jam 7 | @echo : %PREFIX:\=\\%\\include >> user-config.jam 8 | @echo : %PREFIX:\=\\%\\libs >> user-config.jam 9 | @echo ; >> user-config.jam 10 | xcopy /Y user-config.jam %USERPROFILE% 11 | 12 | :: Start with bootstrap 13 | call bootstrap.bat 14 | if %ERRORLEVEL% neq 0 exit 1 15 | 16 | :: bootstrap.bat turns off echo; turn it on again 17 | @echo on 18 | 19 | mkdir temp_prefix 20 | 21 | :: Build step 22 | .\b2 install ^ 23 | --prefix=temp_prefix ^ 24 | toolset=msvc-%VS_MAJOR%.0 ^ 25 | address-model=%ARCH% ^ 26 | variant=release ^ 27 | threading=multi ^ 28 | link=shared ^ 29 | cxxstd=20 ^ 30 | -s NO_COMPRESSION=0 ^ 31 | -s NO_ZLIB=0 ^ 32 | -s NO_BZIP2=0 ^ 33 | -s ZLIB_INCLUDE=%LIBRARY_INC% ^ 34 | -s ZLIB_LIBPATH=%LIBRARY_LIB% ^ 35 | -s ZLIB_BINARY=z ^ 36 | -s BZIP2_INCLUDE=%LIBRARY_INC% ^ 37 | -s BZIP2_LIBPATH=%LIBRARY_LIB% ^ 38 | -s BZIP2_BINARY=libbz2 ^ 39 | -s ZSTD_INCLUDE=%LIBRARY_INC% ^ 40 | -s ZSTD_LIBPATH=%LIBRARY_LIB% ^ 41 | -s ZSTD_BINARY=zstd ^ 42 | --layout=system ^ 43 | -j%CPU_COUNT% 44 | if %ERRORLEVEL% neq 0 exit 1 45 | 46 | :: Set BOOST_AUTO_LINK_NOMANGLE so that auto-linking uses system layout 47 | echo &echo. >> temp_prefix\include\boost\config\user.hpp 48 | echo #define BOOST_AUTO_LINK_NOMANGLE >> temp_prefix\include\boost\config\user.hpp 49 | 50 | :: we package the (python-version-independent) headers here, whereas the libs 51 | :: are done in build-py.sh (because we need to build per python version) 52 | del temp_prefix\lib\boost_python*.lib 53 | del temp_prefix\lib\boost_python*.dll 54 | del temp_prefix\lib\boost_numpy*.lib 55 | del temp_prefix\lib\boost_numpy*.dll 56 | rmdir /s /q temp_prefix\lib\cmake\boost_python-%PKG_VERSION% 57 | rmdir /s /q temp_prefix\lib\cmake\boost_numpy-%PKG_VERSION% 58 | 59 | set MAX_NUMBER_OF_MEMBERS=200 60 | erb boost\hana\detail\struct_macros.hpp.erb > temp_prefix\include\boost\hana\detail\struct_macros.hpp 61 | -------------------------------------------------------------------------------- /recipe/build-py.bat: -------------------------------------------------------------------------------- 1 | @echo on 2 | 3 | :: Write python configuration, see https://github.com/boostorg/build/issues/194 4 | @echo using python > user-config.jam 5 | @echo : %PY_VER% >> user-config.jam 6 | @echo : %PYTHON:\=\\% >> user-config.jam 7 | @echo : %PREFIX:\=\\%\\include >> user-config.jam 8 | @echo : %PREFIX:\=\\%\\libs >> user-config.jam 9 | @echo ; >> user-config.jam 10 | xcopy /Y user-config.jam %USERPROFILE% 11 | 12 | :: clean up directory from bld.bat and reuse b2 built there 13 | rmdir /s /q temp_prefix 14 | 15 | mkdir build-py 16 | 17 | :: Build step 18 | .\b2 install ^ 19 | --build-dir=build-py ^ 20 | --prefix=%LIBRARY_PREFIX% ^ 21 | toolset=msvc-%VS_MAJOR%.0 ^ 22 | address-model=%ARCH% ^ 23 | variant=release ^ 24 | threading=multi ^ 25 | link=shared ^ 26 | --layout=system ^ 27 | --with-python ^ 28 | -j%CPU_COUNT% 29 | if %ERRORLEVEL% neq 0 exit 1 30 | 31 | :: clean up between builds for different python versions/implementations 32 | rmdir /s /q build-py 33 | 34 | :: Move dll's to LIBRARY_BIN 35 | move %LIBRARY_LIB%\boost*.dll "%LIBRARY_BIN%" 36 | if %ERRORLEVEL% neq 0 exit 1 37 | 38 | :: remove CMake metadata from libboost-python; save it for libboost-python-dev 39 | :: needs to be done separately per python version & implementation 40 | mkdir %SRC_DIR%\cf_%PY_VER%_%python_impl%_cmake 41 | move %LIBRARY_LIB%\cmake\boost_python-%PKG_VERSION% %SRC_DIR%\cf_%PY_VER%_%python_impl%_cmake\ 42 | move %LIBRARY_LIB%\cmake\boost_numpy-%PKG_VERSION% %SRC_DIR%\cf_%PY_VER%_%python_impl%_cmake\ 43 | -------------------------------------------------------------------------------- /recipe/build-py.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | # work-around for https://github.com/bfgroup/b2/issues/405 5 | echo "using python" > user-config.jam 6 | echo ": $PY_VER" >> user-config.jam 7 | echo ": $PYTHON" >> user-config.jam 8 | echo ": $PREFIX/include/python$PY_VER" >> user-config.jam 9 | echo ": $PREFIX/lib" >> user-config.jam 10 | echo ";" >> user-config.jam 11 | # see https://www.boost.org/build/doc/html/bbv2/overview/configuration.html 12 | export BOOST_BUILD_PATH=$SRC_DIR 13 | 14 | # Hints: 15 | # http://boost.2283326.n4.nabble.com/how-to-build-boost-with-bzip2-in-non-standard-location-td2661155.html 16 | # http://www.gentoo.org/proj/en/base/amd64/howtos/?part=1&chap=3 17 | # http://www.boost.org/doc/libs/1_55_0/doc/html/bbv2/reference.html 18 | 19 | # Hints for OSX: 20 | # http://stackoverflow.com/questions/20108407/how-do-i-compile-boost-for-os-x-64b-platforms-with-stdlibc 21 | 22 | INCLUDE_PATH="${PREFIX}/include" 23 | LIBRARY_PATH="${PREFIX}/lib" 24 | 25 | # Always build PIC code for enable static linking into other shared libraries 26 | CXXFLAGS="${CXXFLAGS} -fPIC" 27 | # Ensure we always find the correct Python headers (needed for PyPy builds) 28 | CXXFLAGS="${CXXFLAGS} -isystem $(python -c 'import sysconfig; print(sysconfig.get_config_var("INCLUDEPY"))')" 29 | 30 | if [[ "${target_platform}" == osx* ]]; then 31 | TOOLSET=clang 32 | elif [[ "${target_platform}" == linux* ]]; then 33 | TOOLSET=gcc 34 | fi 35 | 36 | # http://www.boost.org/build/doc/html/bbv2/tasks/crosscompile.html 37 | cat < ${SRC_DIR}/tools/build/src/site-config.jam 38 | using ${TOOLSET} : : ${CXX} ; 39 | EOF 40 | 41 | LINKFLAGS="-L${LIBRARY_PATH}" 42 | 43 | ADDRESS_MODEL="${ARCH}" 44 | ARCHITECTURE=x86 45 | ABI="sysv" 46 | if [ "${ADDRESS_MODEL}" == "aarch64" ] || [ "${ADDRESS_MODEL}" == "arm64" ]; then 47 | ADDRESS_MODEL=64 48 | ARCHITECTURE=arm 49 | ABI="aapcs" 50 | elif [ "${ADDRESS_MODEL}" == "ppc64le" ]; then 51 | ADDRESS_MODEL=64 52 | ARCHITECTURE=power 53 | fi 54 | 55 | if [[ "$target_platform" == osx-* ]]; then 56 | BINARY_FORMAT="mach-o" 57 | elif [[ "$target_platform" == linux-* ]]; then 58 | BINARY_FORMAT="elf" 59 | fi 60 | 61 | # clean up directory from build.sh and reuse b2 built there 62 | rm -rf temp_prefix 63 | 64 | # $PREFIX/lib/cmake/boost_headers-$PKG_VERSION/boost_headers-config.cmake has 65 | # already been packaged (including the python headers!) into libboost-headers, 66 | # however the installation below will overwrite it with another (smaller) set 67 | # of metadata, causing a potentially corrupted package. Save the file in 68 | # question and restore it below. 69 | mkdir -p $SRC_DIR/cf_cmake 70 | mv $PREFIX/lib/cmake/boost_headers-$PKG_VERSION/boost_headers-config.cmake $SRC_DIR/cf_cmake/ 71 | 72 | mkdir build-py 73 | 74 | ./b2 -q \ 75 | --build-dir=build-py \ 76 | variant=release \ 77 | address-model="${ADDRESS_MODEL}" \ 78 | architecture="${ARCHITECTURE}" \ 79 | binary-format="${BINARY_FORMAT}" \ 80 | abi="${ABI}" \ 81 | debug-symbols=off \ 82 | threading=multi \ 83 | runtime-link=shared \ 84 | link=shared \ 85 | toolset=${TOOLSET} \ 86 | python="${PY_VER}" \ 87 | include="${INCLUDE_PATH}" \ 88 | cxxflags="${CXXFLAGS}" \ 89 | linkflags="${LINKFLAGS}" \ 90 | --layout=system \ 91 | --with-python \ 92 | -j"${CPU_COUNT}" \ 93 | install 2>&1 || (tee b2.log && exit 1) 94 | 95 | # clean up between builds for different python versions/implementations 96 | rm -rf build-py 97 | 98 | # see comment above; move, don't copy (avoids collisions between runs) 99 | mv $SRC_DIR/cf_cmake/boost_headers-config.cmake $PREFIX/lib/cmake/boost_headers-$PKG_VERSION/ 100 | 101 | # remove CMake metadata from libboost-python; save it for libboost-python-dev 102 | # needs to be done separately per python version & implementation 103 | mkdir -p $SRC_DIR/cf_${PY_VER}_${python_impl}_cmake 104 | mv $PREFIX/lib/cmake/boost_python-$PKG_VERSION $SRC_DIR/cf_${PY_VER}_${python_impl}_cmake/ 105 | mv $PREFIX/lib/cmake/boost_numpy-$PKG_VERSION $SRC_DIR/cf_${PY_VER}_${python_impl}_cmake/ 106 | -------------------------------------------------------------------------------- /recipe/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | # work-around for https://github.com/bfgroup/b2/issues/405 5 | echo "using python" > user-config.jam 6 | echo ": $PY_DUMMY_VER" >> user-config.jam 7 | echo ": $PYTHON" >> user-config.jam 8 | echo ": $PREFIX/include/python$PY_DUMMY_VER" >> user-config.jam 9 | echo ": $PREFIX/lib" >> user-config.jam 10 | echo ";" >> user-config.jam 11 | # see https://www.boost.org/build/doc/html/bbv2/overview/configuration.html 12 | export BOOST_BUILD_PATH=$SRC_DIR 13 | 14 | # Hints: 15 | # http://boost.2283326.n4.nabble.com/how-to-build-boost-with-bzip2-in-non-standard-location-td2661155.html 16 | # http://www.gentoo.org/proj/en/base/amd64/howtos/?part=1&chap=3 17 | # http://www.boost.org/doc/libs/1_55_0/doc/html/bbv2/reference.html 18 | 19 | # Hints for OSX: 20 | # http://stackoverflow.com/questions/20108407/how-do-i-compile-boost-for-os-x-64b-platforms-with-stdlibc 21 | 22 | INCLUDE_PATH="${PREFIX}/include" 23 | LIBRARY_PATH="${PREFIX}/lib" 24 | 25 | # Always build PIC code for enable static linking into other shared libraries 26 | CXXFLAGS="${CXXFLAGS} -fPIC" 27 | 28 | if [[ "${target_platform}" == osx* ]]; then 29 | TOOLSET=clang 30 | # see https://conda-forge.org/docs/maintainer/knowledge_base/#newer-c-features-with-old-sdk 31 | CXXFLAGS="${CXXFLAGS} -D_LIBCPP_DISABLE_AVAILABILITY" 32 | elif [[ "${target_platform}" == linux* ]]; then 33 | TOOLSET=gcc 34 | fi 35 | 36 | # http://www.boost.org/build/doc/html/bbv2/tasks/crosscompile.html 37 | cat < ${SRC_DIR}/tools/build/src/site-config.jam 38 | using ${TOOLSET} : : ${CXX} ; 39 | EOF 40 | 41 | LINKFLAGS="${LINKFLAGS} -L${LIBRARY_PATH}" 42 | 43 | CXXFLAGS="$(echo ${CXXFLAGS} | sed 's/ -march=[^ ]*//g' | sed 's/ -mcpu=[^ ]*//g' |sed 's/ -mtune=[^ ]*//g')" \ 44 | CFLAGS="$(echo ${CFLAGS} | sed 's/ -march=[^ ]*//g' | sed 's/ -mcpu=[^ ]*//g' |sed 's/ -mtune=[^ ]*//g')" \ 45 | CXX=${CXX_FOR_BUILD:-${CXX}} CC=${CC_FOR_BUILD:-${CC}} ./bootstrap.sh \ 46 | --prefix="${PREFIX}" \ 47 | --with-toolset=${TOOLSET} \ 48 | --with-icu="${PREFIX}" \ 49 | --with-python="${PYTHON}" \ 50 | --with-python-root="${PREFIX} : ${PREFIX}/include/python${PY_VER}" \ 51 | || (cat bootstrap.log && exit 1) 52 | 53 | ADDRESS_MODEL="${ARCH}" 54 | ARCHITECTURE=x86 55 | ABI="sysv" 56 | 57 | if [ "${ADDRESS_MODEL}" == "aarch64" ] || [ "${ADDRESS_MODEL}" == "arm64" ]; then 58 | ADDRESS_MODEL=64 59 | ARCHITECTURE=arm 60 | ABI="aapcs" 61 | elif [ "${ADDRESS_MODEL}" == "ppc64le" ]; then 62 | ADDRESS_MODEL=64 63 | ARCHITECTURE=power 64 | fi 65 | 66 | if [[ "$target_platform" == osx-* ]]; then 67 | BINARY_FORMAT="mach-o" 68 | elif [[ "$target_platform" == linux-* ]]; then 69 | BINARY_FORMAT="elf" 70 | fi 71 | 72 | mkdir temp_prefix 73 | 74 | ./b2 -q \ 75 | --prefix=./temp_prefix \ 76 | variant=release \ 77 | address-model="${ADDRESS_MODEL}" \ 78 | architecture="${ARCHITECTURE}" \ 79 | binary-format="${BINARY_FORMAT}" \ 80 | abi="${ABI}" \ 81 | debug-symbols=off \ 82 | threading=multi \ 83 | runtime-link=shared \ 84 | link=shared \ 85 | toolset=${TOOLSET} \ 86 | python="${PY_DUMMY_VER}" \ 87 | include="${INCLUDE_PATH}" \ 88 | cxxflags="${CXXFLAGS}" \ 89 | linkflags="${LINKFLAGS}" \ 90 | cxxstd=20 \ 91 | --layout=system \ 92 | -j"${CPU_COUNT}" \ 93 | install 94 | 95 | # we package the (python-version-independent) headers here, whereas the libs 96 | # are done in build-py.sh (because we need to build per python version) 97 | rm -f ./temp_prefix/lib/libboost_python* 98 | rm -f ./temp_prefix/lib/libboost_numpy* 99 | rm -rf ./temp_prefix/lib/cmake/boost_python* 100 | rm -rf ./temp_prefix/lib/cmake/boost_numpy* 101 | 102 | # Use a larger default for pre-generated headers. 103 | # This generates more macros for larger sizes. See 104 | # https://github.com/boostorg/hana/blob/boost-1.85.0/include/boost/hana/detail/struct_macros.hpp.erb 105 | # for more details. 106 | export MAX_NUMBER_OF_MEMBERS=200 107 | erb boost/hana/detail/struct_macros.hpp.erb > temp_prefix/include/boost/hana/detail/struct_macros.hpp 108 | -------------------------------------------------------------------------------- /recipe/install-lib.bat: -------------------------------------------------------------------------------- 1 | @echo on 2 | 3 | if [%PKG_NAME%] == [libboost-headers] ( 4 | REM for libboost-headers, only the headers 5 | robocopy temp_prefix\include %LIBRARY_INC% /E >nul 6 | REM robocopy leaves non-zero exit status as sign of success; clear it 7 | echo "robocopy done" 8 | ) else if [%PKG_NAME%] == [libboost] ( 9 | REM only the libraries (don't copy CMake metadata) 10 | move temp_prefix\lib\boost*.lib %LIBRARY_LIB% 11 | move temp_prefix\lib\libboost*.lib %LIBRARY_LIB% 12 | REM dll's go to LIBRARY_BIN 13 | move temp_prefix\lib\boost*.dll %LIBRARY_BIN% 14 | ) else ( 15 | REM everything else 16 | xcopy /E /Y temp_prefix\lib %LIBRARY_LIB% 17 | ) 18 | -------------------------------------------------------------------------------- /recipe/install-lib.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | if [[ "$PKG_NAME" == "libboost-headers" ]]; then 5 | # for libboost-headers, only the headers; 6 | cp -R temp_prefix/include/. $PREFIX/include 7 | elif [[ "$PKG_NAME" == "libboost" ]]; then 8 | # only the libraries (don't copy CMake metadata) 9 | cp -R temp_prefix/lib/libboost*${SHLIB_EXT}* $PREFIX/lib 10 | cp -R temp_prefix/lib/libboost*.a $PREFIX/lib 11 | else 12 | # everything else 13 | if [[ "$target_platform" == "osx-arm64" ]]; then 14 | # osx-arm64 is special, because we need to generate signatures 15 | # for the libraries, which only happens on first installation; 16 | # if we overwrite the libs with the unsigned artefacts, conda 17 | # gets confused/unhappy, see #178; 18 | # therefore, copy already installed (=signed) libs into temp_prefix 19 | # before installation (=copy to $PREFIX), overwriting the unsigned 20 | # ones, ensuring that there's only one bit-for-bit variant per lib. 21 | cp $PREFIX/lib/libboost*.dylib temp_prefix/lib 22 | fi 23 | cp -R temp_prefix/lib/. $PREFIX/lib 24 | fi 25 | -------------------------------------------------------------------------------- /recipe/install-py.bat: -------------------------------------------------------------------------------- 1 | @echo on 2 | 3 | :: see build-py.bat 4 | xcopy /E /Y %SRC_DIR%\cf_%PY_VER%_%python_impl%_cmake %LIBRARY_LIB%\cmake 5 | -------------------------------------------------------------------------------- /recipe/install-py.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | # see build-py.sh 5 | mv $SRC_DIR/cf_${PY_VER}_${python_impl}_cmake/* $PREFIX/lib/cmake 6 | -------------------------------------------------------------------------------- /recipe/meta.yaml: -------------------------------------------------------------------------------- 1 | {% set version = "1.88.0" %} 2 | 3 | {% set boost_libs = [ 4 | "atomic", "charconv", "chrono", "cobalt", "container", "context", "contract", "coroutine", 5 | "date_time", "filesystem", "graph", "iostreams", "locale", "log", "log_setup", 6 | "math_c99", "math_c99f", "math_tr1", "math_tr1f", "prg_exec_monitor", 7 | "program_options", "random", "regex", "serialization", "system", "thread", 8 | "timer", "type_erasure", "unit_test_framework", "wave", "wserialization" 9 | ] %} 10 | {% set boost_libs = boost_libs + ["math_c99l", "math_tr1l"] %} # [not ppc64le] 11 | {% set boost_libs_static_only = ["exception", "test_exec_monitor"] %} 12 | {% set boost_libs_py = ["python%s" % py, "numpy%s" % py] %} 13 | 14 | # we only need _a_ python version to build the headers for libboost-headers, 15 | # make it accessible in the build scripts via build/script_env below. 16 | {% set PY_DUMMY_VER = "3.10" %} 17 | {% set NP_DUMMY_VER = "2.0" %} 18 | 19 | package: 20 | name: boost-split 21 | version: {{ version }} 22 | 23 | source: 24 | url: https://archives.boost.io/release/{{ version }}/source/boost_{{ version|replace(".", "_") }}.tar.bz2 25 | sha256: 46d9d2c06637b219270877c9e16155cbd015b6dc84349af064c088e9b5b12f7b 26 | patches: 27 | # ensure our compiler flags get used during bootstrapping 28 | - patches/0001-Add-default-value-for-cxx-and-cxxflags-options-for-t.patch 29 | 30 | build: 31 | number: 0 32 | script_env: 33 | - PY_DUMMY_VER={{ PY_DUMMY_VER }} 34 | - NP_DUMMY_VER={{ NP_DUMMY_VER }} 35 | 36 | requirements: 37 | build: 38 | - {{ compiler('cxx') }} 39 | - {{ stdlib('c') }} 40 | - cross-python_{{ target_platform }} # [build_platform != target_platform] 41 | - python {{ PY_DUMMY_VER }}.* *_cpython # [build_platform != target_platform] 42 | - numpy {{ NP_DUMMY_VER }}.* # [build_platform != target_platform] 43 | - ruby * 44 | host: 45 | - icu # [unix] 46 | - liblzma-devel # [unix] 47 | - bzip2 48 | - zlib 49 | - zstd 50 | # see above 51 | - python {{ PY_DUMMY_VER }}.* *_cpython 52 | - numpy {{ NP_DUMMY_VER }}.* 53 | 54 | outputs: 55 | - name: libboost-headers 56 | script: install-lib.sh # [unix] 57 | script: install-lib.bat # [win] 58 | requirements: 59 | # dummy build env to avoid EnvironmentLocationNotFound on win 60 | build: # [win] 61 | - cmake # [win] 62 | host: 63 | run_constrained: 64 | # avoid co-installation with old naming of package 65 | - boost-cpp <0.0a0 66 | test: 67 | commands: 68 | # presence of regular headers 69 | - test -d $PREFIX/include/boost # [unix] 70 | - if not exist %LIBRARY_INC%\boost exit 1 # [win] 71 | 72 | # presence of python headers (not dependent on python version) 73 | - test -f $PREFIX/include/boost/python.hpp # [unix] 74 | - test -f $PREFIX/include/boost/python/tuple.hpp # [unix] 75 | - if not exist %LIBRARY_INC%\boost\python.hpp exit 1 # [win] 76 | - if not exist %LIBRARY_INC%\boost\python\tuple.hpp exit 1 # [win] 77 | 78 | # absence of general CMake metadata 79 | - test ! -d $PREFIX/lib/cmake/Boost-{{ version }} # [unix] 80 | - if exist %LIBRARY_LIB%\cmake\Boost-{{ version }} exit 1 # [win] 81 | 82 | # absence of all libraries (shared & static) + CMake metadata 83 | {% for each_lib in boost_libs + boost_libs_static_only + boost_libs_py %} 84 | - test ! -f $PREFIX/lib/libboost_{{ each_lib }}.so # [linux] 85 | - test ! -f $PREFIX/lib/libboost_{{ each_lib }}.dylib # [osx] 86 | - test ! -f $PREFIX/lib/libboost_{{ each_lib }}.a # [unix] 87 | - if exist %LIBRARY_BIN%\boost_{{ each_lib }}.dll exit 1 # [win] 88 | - if exist %LIBRARY_LIB%\boost_{{ each_lib }}.lib exit 1 # [win] 89 | - if exist %LIBRARY_LIB%\libboost_{{ each_lib }}.lib exit 1 # [win] 90 | 91 | - test ! -d $PREFIX/lib/cmake/boost_{{ each_lib }}-{{ version }} # [unix] 92 | - if exist %LIBRARY_LIB%\cmake\boost_{{ each_lib }}-{{ version }} exit 1 # [win] 93 | {% endfor %} 94 | 95 | # libraries without the headers (for run-export) 96 | - name: libboost 97 | script: install-lib.sh # [unix] 98 | script: install-lib.bat # [win] 99 | requirements: 100 | build: 101 | # for strong run-exports 102 | - {{ compiler('cxx') }} 103 | - {{ stdlib('c') }} 104 | host: 105 | - icu # [unix] 106 | - libiconv # [win] 107 | - bzip2 108 | - liblzma-devel 109 | - zlib 110 | - zstd 111 | run_constrained: 112 | # avoid co-installation with old naming of package 113 | - boost-cpp <0.0a0 114 | # see https://www.boost.org/users/history/version_1_87_x.html 115 | - __win ==0|>=10 # [win] 116 | test: 117 | commands: 118 | # absence of headers 119 | - test ! -d $PREFIX/include/boost # [unix] 120 | - if exist %LIBRARY_INC%\boost exit 1 # [win] 121 | 122 | # absence of general CMake metadata 123 | - test ! -d $PREFIX/lib/cmake/Boost-{{ version }} # [unix] 124 | - if exist %LIBRARY_LIB%\cmake\Boost-{{ version }} exit 1 # [win] 125 | 126 | # library artefacts 127 | {% for each_lib in boost_libs + boost_libs_static_only + boost_libs_py %} 128 | 129 | # shared libraries 130 | {% if each_lib in boost_libs %} 131 | # default case: present 132 | - test -f $PREFIX/lib/libboost_{{ each_lib }}.so # [linux] 133 | - test -f $PREFIX/lib/libboost_{{ each_lib }}.dylib # [osx] 134 | - if not exist %LIBRARY_BIN%\boost_{{ each_lib }}.dll exit 1 # [win] 135 | - if not exist %LIBRARY_LIB%\boost_{{ each_lib }}.lib exit 1 # [win] 136 | {% else %} 137 | # absent for libs that are static-only & the python ones 138 | - test ! -f $PREFIX/lib/libboost_{{ each_lib }}.so # [linux] 139 | - test ! -f $PREFIX/lib/libboost_{{ each_lib }}.dylib # [osx] 140 | - if exist %LIBRARY_BIN%\boost_{{ each_lib }}.dll exit 1 # [win] 141 | - if exist %LIBRARY_LIB%\boost_{{ each_lib }}.lib exit 1 # [win] 142 | {% endif %} 143 | 144 | # static libraries 145 | {% if each_lib in boost_libs_static_only %} 146 | # present for those that are marked static-only above 147 | - test -f $PREFIX/lib/libboost_{{ each_lib }}.a # [unix] 148 | - if not exist %LIBRARY_LIB%\libboost_{{ each_lib }}.lib exit 1 # [win] 149 | {% else %} 150 | # absent for default libs & the python ones 151 | - test ! -f $PREFIX/lib/libboost_{{ each_lib }}.a # [unix] 152 | - if exist %LIBRARY_LIB%\libboost_{{ each_lib }}.lib exit 1 # [win] 153 | {% endif %} 154 | 155 | # absence of CMake metadata 156 | - test ! -d $PREFIX/lib/cmake/boost_{{ each_lib }}-{{ version }} # [unix] 157 | - if exist %LIBRARY_LIB%\cmake\boost_{{ each_lib }}-{{ version }} exit 1 # [win] 158 | {% endfor %} 159 | 160 | # libboost headers + libs + metadata 161 | - name: libboost-devel 162 | script: install-lib.sh # [unix] 163 | script: install-lib.bat # [win] 164 | build: 165 | run_exports: 166 | # run-export the output without the headers 167 | - {{ pin_subpackage("libboost", max_pin="x.x") }} 168 | requirements: 169 | host: 170 | - {{ pin_subpackage("libboost", exact=True) }} 171 | - {{ pin_subpackage("libboost-headers", exact=True) }} 172 | run: 173 | - {{ pin_subpackage("libboost", exact=True) }} 174 | - {{ pin_subpackage("libboost-headers", exact=True) }} 175 | run_constrained: 176 | # avoid co-installation with old naming of package 177 | - boost-cpp <0.0a0 178 | test: 179 | files: 180 | - test 181 | - test_lib.sh 182 | - test_lib.bat 183 | requires: 184 | - {{ compiler('cxx') }} # [build_platform == target_platform] 185 | commands: 186 | # presence of general CMake metadata 187 | - test -d $PREFIX/lib/cmake/Boost-{{ version }} # [unix] 188 | - if not exist %LIBRARY_LIB%\cmake\Boost-{{ version }} exit 1 # [win] 189 | 190 | {% for each_lib in boost_libs + boost_libs_static_only %} 191 | # presence of CMake metadata for regular libs 192 | - test -d $PREFIX/lib/cmake/boost_{{ each_lib }}-{{ version }} # [unix] 193 | - if not exist %LIBRARY_LIB%\cmake\boost_{{ each_lib }}-{{ version }} exit 1 # [win] 194 | {% endfor %} 195 | 196 | # absence of CMake metadata that belongs to libboost-python(-devel) 197 | - test ! -d $PREFIX/lib/cmake/boost_python-{{ version }} # [unix] 198 | - test ! -d $PREFIX/lib/cmake/boost_numpy-{{ version }} # [unix] 199 | - if exist %LIBRARY_LIB%\cmake\boost_python-{{ version }} exit 1 # [win] 200 | - if exist %LIBRARY_LIB%\cmake\boost_numpy-{{ version }} exit 1 # [win] 201 | 202 | # test compilation 203 | - ./test_lib.sh # [unix] 204 | - ./test_lib.bat # [win] 205 | 206 | # the python libraries (no headers) 207 | - name: libboost-python 208 | script: build-py.sh # [unix] 209 | script: build-py.bat # [win] 210 | requirements: 211 | build: 212 | - python # [build_platform != target_platform] 213 | - cross-python_{{ target_platform }} # [build_platform != target_platform] 214 | - numpy # [build_platform != target_platform] 215 | - {{ compiler('cxx') }} 216 | - {{ stdlib('c') }} 217 | host: 218 | # ensure python_impl gets picked up by smithy (by using it as a selector) and therefore 219 | # populated in the .ci_config/*.yaml files, for use in {build,install}-py.{sh,bat}. 220 | - python # [python_impl == "cpython"] 221 | - python # [python_impl == "pypy"] 222 | - numpy 223 | # keep this in host to ensure that the environment content snapshot before/after 224 | # installation doesn't consider the headers or CMake metadata part of this output 225 | - {{ pin_subpackage("libboost-devel", exact=True) }} 226 | run: 227 | - python 228 | run_constrained: 229 | # avoid co-installation with old naming of package 230 | - boost <0.0a0 231 | # avoid co-installation with Anaconda's naming of this output 232 | - py-boost <0.0a0 233 | test: 234 | commands: 235 | # absence of headers 236 | - test ! -d $PREFIX/include/boost # [unix] 237 | - if exist %LIBRARY_INC%\boost exit 1 # [win] 238 | 239 | # Verify libraries. 240 | {% for each_lib in boost_libs_py %} 241 | # presence of shared libs 242 | - test -f $PREFIX/lib/libboost_{{ each_lib }}.so # [linux] 243 | - test -f $PREFIX/lib/libboost_{{ each_lib }}.dylib # [osx] 244 | - if not exist %LIBRARY_BIN%\boost_{{ each_lib }}.dll exit 1 # [win] 245 | - if not exist %LIBRARY_LIB%\boost_{{ each_lib }}.lib exit 1 # [win] 246 | 247 | # absence of static libs 248 | - test ! -f $PREFIX/lib/libboost_{{ each_lib }}.a # [unix] 249 | - if exist %LIBRARY_LIB%\libboost_{{ each_lib }}.lib exit 1 # [win] 250 | {% endfor %} 251 | 252 | # absence of CMake metadata 253 | - test ! -d $PREFIX/lib/cmake/boost_python-{{ version }} # [unix] 254 | - test ! -d $PREFIX/lib/cmake/boost_numpy-{{ version }} # [unix] 255 | - if exist %LIBRARY_LIB%\cmake\boost_python-{{ version }} exit 1 # [win] 256 | - if exist %LIBRARY_LIB%\cmake\boost_numpy-{{ version }} exit 1 # [win] 257 | 258 | # python libs w/ headers 259 | - name: libboost-python-devel 260 | script: install-py.sh # [unix] 261 | script: install-py.bat # [win] 262 | build: 263 | run_exports: 264 | # run-export the output without the headers 265 | - {{ pin_subpackage("libboost-python", max_pin="x.x") }} 266 | requirements: 267 | # dummy build env to avoid EnvironmentLocationNotFound on win 268 | build: # [win] 269 | - cmake # [win] 270 | host: 271 | - python 272 | - numpy 273 | # as for libboost-python 274 | - {{ pin_subpackage("libboost-devel", exact=True) }} 275 | run: 276 | - python 277 | - {{ pin_subpackage("libboost-python", exact=True) }} 278 | - {{ pin_subpackage("libboost-devel", exact=True) }} 279 | run_constrained: 280 | # avoid co-installation with old naming of package 281 | - boost <0.0a0 282 | # avoid co-installation with Anaconda's naming of this output 283 | - py-boost <0.0a0 284 | test: 285 | commands: 286 | # presence of CMake metadata 287 | - test -d $PREFIX/lib/cmake/boost_python-{{ version }} # [unix] 288 | - test -d $PREFIX/lib/cmake/boost_numpy-{{ version }} # [unix] 289 | - if not exist %LIBRARY_LIB%\cmake\boost_python-{{ version }} exit 1 # [win] 290 | - if not exist %LIBRARY_LIB%\cmake\boost_numpy-{{ version }} exit 1 # [win] 291 | 292 | about: 293 | home: http://www.boost.org/ 294 | license: BSL-1.0 295 | license_file: LICENSE_1_0.txt 296 | summary: Free peer-reviewed portable C++ source libraries. 297 | dev_url: https://github.com/boostorg/boost 298 | doc_url: https://www.boost.org/doc/ 299 | 300 | extra: 301 | recipe-maintainers: 302 | - ccordoba12 303 | - jakirkham 304 | - msarahan 305 | - ocefpaf 306 | - jschueller 307 | - scopatz 308 | - isuruf 309 | - xhochy 310 | - beckermr 311 | - matthiasdiener 312 | - h-vetinari 313 | feedstock-name: boost 314 | -------------------------------------------------------------------------------- /recipe/patches/0001-Add-default-value-for-cxx-and-cxxflags-options-for-t.patch: -------------------------------------------------------------------------------- 1 | From 17d415e6df33c888ca7122ea614212ab2b07695f Mon Sep 17 00:00:00 2001 2 | From: Samuel Debionne 3 | Date: Fri, 30 Apr 2021 11:55:58 +0200 4 | Subject: [PATCH] Add default value for cxx and cxxflags options for the cxx 5 | 6 | --- 7 | bootstrap.sh | 2 +- 8 | 1 file changed, 1 insertion(+), 1 deletion(-) 9 | 10 | diff --git a/bootstrap.sh b/bootstrap.sh 11 | index 654801e21f..1c75a39f4b 100755 12 | --- a/bootstrap.sh 13 | +++ b/bootstrap.sh 14 | @@ -226,7 +226,7 @@ rm -f config.log 15 | if test "x$BJAM" = x; then 16 | $ECHO "Building B2 engine.." 17 | pwd=`pwd` 18 | - CXX= CXXFLAGS= "$my_dir/tools/build/src/engine/build.sh" ${TOOLSET} 19 | + "$my_dir/tools/build/src/engine/build.sh" ${TOOLSET} --cxx="$CXX" --cxxflags="$CXXFLAGS" 20 | if [ $? -ne 0 ]; then 21 | echo 22 | echo "Failed to build B2 build engine" 23 | -------------------------------------------------------------------------------- /recipe/test/hello.z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/conda-forge/boost-feedstock/dc1f2d89e060eba365d67be99761e78eb4392d07/recipe/test/hello.z -------------------------------------------------------------------------------- /recipe/test/test_iostreams_zlib.cpp: -------------------------------------------------------------------------------- 1 | // Ensure that boost::iostreams includes the zlib filter support 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | int main() 10 | { 11 | using namespace std; 12 | 13 | // hello.z can be generated from Python, e.g. 14 | // with open('hello.z', 'wb') as fh: fh.write(zlib.compress(text)) 15 | ifstream file("hello.z", ios_base::in | ios_base::binary); 16 | boost::iostreams::filtering_streambuf in; 17 | in.push(boost::iostreams::zlib_decompressor()); 18 | in.push(file); 19 | boost::iostreams::copy(in, cout); 20 | return 0; 21 | } 22 | -------------------------------------------------------------------------------- /recipe/test_lib.bat: -------------------------------------------------------------------------------- 1 | :: Test boost::iostreams zlib filter support 2 | @echo on 3 | 4 | cd test 5 | 6 | cl.exe /EHsc /MD /DBOOST_ALL_DYN_LINK /DBOOST_ZLIB_BINARY=kernel32 /I%PREFIX%\Library\include test_iostreams_zlib.cpp /link /libpath:%PREFIX%\Library\lib 7 | if %ERRORLEVEL% neq 0 exit 1 8 | 9 | test_iostreams_zlib.exe 10 | if %ERRORLEVEL% neq 0 exit 1 11 | -------------------------------------------------------------------------------- /recipe/test_lib.sh: -------------------------------------------------------------------------------- 1 | # Skip compile tests if we are cross-compiling 2 | 3 | set -xeou pipefail 4 | if [[ "${build_platform}" != "${target_platform}" ]]; then 5 | exit 0 6 | fi 7 | 8 | # Test boost::iostreams zlib filter support 9 | cd test 10 | ${CXX} -I$PREFIX/include -L$PREFIX/lib -Wl,-rpath,$PREFIX/lib test_iostreams_zlib.cpp -lboost_iostreams && ./a.out 11 | --------------------------------------------------------------------------------