diff --git a/.azure-pipelines/azure-pipelines-linux.yml b/.azure-pipelines/azure-pipelines-linux.yml index 2e0430f..5ae4cca 100755 --- a/.azure-pipelines/azure-pipelines-linux.yml +++ b/.azure-pipelines/azure-pipelines-linux.yml @@ -23,11 +23,6 @@ jobs: timeoutInMinutes: 360 steps: - - script: | - rm -rf /opt/ghc - df -h - displayName: Manage disk space - # configure qemu binfmt-misc running. This allows us to run docker containers # embedded qemu-static - script: | @@ -38,6 +33,9 @@ jobs: - script: | export CI=azure + export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) + export remote_url=$(Build.Repository.Uri) + export sha=$(Build.SourceVersion) export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then diff --git a/.azure-pipelines/azure-pipelines-osx.yml b/.azure-pipelines/azure-pipelines-osx.yml index 84d4f42..f3ff063 100755 --- a/.azure-pipelines/azure-pipelines-osx.yml +++ b/.azure-pipelines/azure-pipelines-osx.yml @@ -5,7 +5,7 @@ jobs: - job: osx pool: - vmImage: macOS-10.15 + vmImage: macOS-11 strategy: matrix: osx_64_: @@ -20,6 +20,9 @@ jobs: # TODO: Fast finish on azure pipelines? - script: | export CI=azure + export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) + export remote_url=$(Build.Repository.Uri) + export sha=$(Build.SourceVersion) export OSX_FORCE_SDK_DOWNLOAD="1" export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) diff --git a/.azure-pipelines/azure-pipelines-win.yml b/.azure-pipelines/azure-pipelines-win.yml index 88fd9c1..d609fcd 100755 --- a/.azure-pipelines/azure-pipelines-win.yml +++ b/.azure-pipelines/azure-pipelines-win.yml @@ -5,7 +5,7 @@ jobs: - job: win pool: - vmImage: windows-2019 + vmImage: windows-2022 strategy: matrix: win_64_: @@ -14,96 +14,39 @@ jobs: timeoutInMinutes: 360 variables: CONDA_BLD_PATH: D:\\bld\\ + UPLOAD_TEMP: D:\\tmp steps: - - script: | - choco install vcpython27 -fdv -y --debug - condition: contains(variables['CONFIG'], 'vs2008') - displayName: Install vcpython27.msi (if needed) - - # Cygwin's git breaks conda-build. (See https://github.com/conda-forge/conda-smithy-feedstock/pull/2.) - # - script: rmdir C:\cygwin /s /q - # continueOnError: true - - - powershell: | - Set-PSDebug -Trace 1 - - $batchcontent = @" - ECHO ON - SET vcpython=C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0 - - DIR "%vcpython%" - - CALL "%vcpython%\vcvarsall.bat" %* - "@ - - $batchDir = "C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\VC" - $batchPath = "$batchDir" + "\vcvarsall.bat" - New-Item -Path $batchPath -ItemType "file" -Force - - Set-Content -Value $batchcontent -Path $batchPath - - Get-ChildItem -Path $batchDir - - Get-ChildItem -Path ($batchDir + '\..') - condition: contains(variables['CONFIG'], 'vs2008') - displayName: Patch vs2008 (if needed) - - task: CondaEnvironment@1 + - task: PythonScript@0 + displayName: 'Download Miniforge' inputs: - packageSpecs: 'python=3.9 conda-build conda pip boa conda-forge-ci-setup=3' # Optional - installOptions: "-c conda-forge" - updateConda: true - displayName: Install conda-build and activate environment + scriptSource: inline + script: | + import urllib.request + url = 'https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Windows-x86_64.exe' + path = r"$(Build.ArtifactStagingDirectory)/Miniforge.exe" + urllib.request.urlretrieve(url, path) - - script: set PYTHONUNBUFFERED=1 - displayName: Set PYTHONUNBUFFERED - - # Configure the VM - - script: | - call activate base - setup_conda_rc .\ ".\recipe" .\.ci_support\%CONFIG%.yaml - displayName: conda-forge CI setup - - # Configure the VM. - script: | - set "CI=azure" - call activate base - run_conda_forge_build_setup - displayName: conda-forge build setup - + start /wait "" %BUILD_ARTIFACTSTAGINGDIRECTORY%\Miniforge.exe /InstallationType=JustMe /RegisterPython=0 /S /D=C:\Miniforge + displayName: Install Miniforge - # Special cased version setting some more things! - - script: | - call activate base - conda.exe build "recipe" -m .ci_support\%CONFIG%.yaml - displayName: Build recipe (vs2008) - env: - VS90COMNTOOLS: "C:\\Program Files (x86)\\Common Files\\Microsoft\\Visual C++ for Python\\9.0\\VC\\bin" - PYTHONUNBUFFERED: 1 - condition: contains(variables['CONFIG'], 'vs2008') + - powershell: Write-Host "##vso[task.prependpath]C:\Miniforge\Scripts" + displayName: Add conda to PATH - script: | - call activate base - conda.exe mambabuild "recipe" -m .ci_support\%CONFIG%.yaml --suppress-variables - displayName: Build recipe + call ".scripts\run_win_build.bat" + displayName: Run Windows build env: PYTHONUNBUFFERED: 1 - condition: not(contains(variables['CONFIG'], 'vs2008')) - - script: | - set "FEEDSTOCK_NAME=%BUILD_REPOSITORY_NAME:*/=%" - call activate base - validate_recipe_outputs "%FEEDSTOCK_NAME%" - displayName: Validate Recipe Outputs - - - script: | - set "GIT_BRANCH=%BUILD_SOURCEBRANCHNAME%" - set "FEEDSTOCK_NAME=%BUILD_REPOSITORY_NAME:*/=%" - call activate base - upload_package --validate --feedstock-name="%FEEDSTOCK_NAME%" .\ ".\recipe" .ci_support\%CONFIG%.yaml - displayName: Upload package - env: + CONFIG: $(CONFIG) + CI: azure + flow_run_id: azure_$(Build.BuildNumber).$(System.JobAttempt) + remote_url: $(Build.Repository.Uri) + sha: $(Build.SourceVersion) + UPLOAD_PACKAGES: $(UPLOAD_PACKAGES) + UPLOAD_TEMP: $(UPLOAD_TEMP) BINSTAR_TOKEN: $(BINSTAR_TOKEN) FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) - STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) - condition: and(succeeded(), not(eq(variables['UPLOAD_PACKAGES'], 'False')), not(eq(variables['Build.Reason'], 'PullRequest'))) \ No newline at end of file + STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) \ No newline at end of file diff --git a/.ci_support/linux_64_.yaml b/.ci_support/linux_64_.yaml index 2b25488..db62fed 100644 --- a/.ci_support/linux_64_.yaml +++ b/.ci_support/linux_64_.yaml @@ -1,7 +1,7 @@ c_compiler: - gcc c_compiler_version: -- '10' +- '12' cdt_name: - cos6 channel_sources: diff --git a/.ci_support/linux_aarch64_.yaml b/.ci_support/linux_aarch64_.yaml index 2724eed..53ec17d 100644 --- a/.ci_support/linux_aarch64_.yaml +++ b/.ci_support/linux_aarch64_.yaml @@ -3,7 +3,7 @@ BUILD: c_compiler: - gcc c_compiler_version: -- '10' +- '12' cdt_arch: - aarch64 cdt_name: diff --git a/.ci_support/linux_ppc64le_.yaml b/.ci_support/linux_ppc64le_.yaml index b348f97..35dea27 100644 --- a/.ci_support/linux_ppc64le_.yaml +++ b/.ci_support/linux_ppc64le_.yaml @@ -1,7 +1,7 @@ c_compiler: - gcc c_compiler_version: -- '10' +- '12' cdt_name: - cos7 channel_sources: diff --git a/.ci_support/osx_64_.yaml b/.ci_support/osx_64_.yaml index 0364444..d2e7321 100644 --- a/.ci_support/osx_64_.yaml +++ b/.ci_support/osx_64_.yaml @@ -1,9 +1,9 @@ MACOSX_DEPLOYMENT_TARGET: - '10.9' c_compiler: -- clang +- clang_bootstrap c_compiler_version: -- '13' +- '16' channel_sources: - conda-forge channel_targets: diff --git a/.ci_support/osx_arm64_.yaml b/.ci_support/osx_arm64_.yaml index 7683884..afa0fbe 100644 --- a/.ci_support/osx_arm64_.yaml +++ b/.ci_support/osx_arm64_.yaml @@ -1,9 +1,9 @@ MACOSX_DEPLOYMENT_TARGET: - '11.0' c_compiler: -- clang +- clang_bootstrap c_compiler_version: -- '13' +- '16' channel_sources: - conda-forge channel_targets: diff --git a/.ci_support/win_64_.yaml b/.ci_support/win_64_.yaml index 18da91b..afe7133 100644 --- a/.ci_support/win_64_.yaml +++ b/.ci_support/win_64_.yaml @@ -1,5 +1,5 @@ c_compiler: -- vs2017 +- vs2019 channel_sources: - conda-forge channel_targets: diff --git a/.circleci/config.yml b/.circleci/config.yml index 6ad461b..8b4ef2f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,13 +1,14 @@ # 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 -*- +# -*- mode: jinja-yaml -*- version: 2 jobs: build: working_directory: ~/test - machine: true + machine: + image: ubuntu-2004:current steps: - run: # The Circle-CI build should not be active, but if this is not true for some reason, do a fast finish. diff --git a/.scripts/build_steps.sh b/.scripts/build_steps.sh index c6b23e8..eba1dfd 100755 --- a/.scripts/build_steps.sh +++ b/.scripts/build_steps.sh @@ -24,15 +24,19 @@ export CONFIG_FILE="${CI_SUPPORT}/${CONFIG}.yaml" cat >~/.condarc < /dev/null +if [[ -f "${FEEDSTOCK_ROOT}/LICENSE.txt" ]]; then + cp "${FEEDSTOCK_ROOT}/LICENSE.txt" "${RECIPE_ROOT}/recipe-scripts-license.txt" +fi + +if [[ "${sha:-}" == "" ]]; then + pushd ${FEEDSTOCK_ROOT} + sha=$(git rev-parse HEAD) + popd +fi + 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}" @@ -62,7 +76,8 @@ if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then else conda mambabuild "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ --suppress-variables ${EXTRA_CB_OPTIONS:-} \ - --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" + --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" \ + --extra-meta flow_run_id="${flow_run_id:-}" remote_url="${remote_url:-}" sha="${sha:-}" ( startgroup "Validating outputs" ) 2> /dev/null validate_recipe_outputs "${FEEDSTOCK_NAME}" diff --git a/.scripts/logging_utils.sh b/.scripts/logging_utils.sh index 57bc95c..aff009f 100644 --- a/.scripts/logging_utils.sh +++ b/.scripts/logging_utils.sh @@ -12,7 +12,7 @@ function startgroup { echo "##[group]$1";; travis ) echo "$1" - echo -en 'travis_fold:start:'"${1// /}"'\\r';; + echo -en 'travis_fold:start:'"${1// /}"'\r';; github_actions ) echo "::group::$1";; * ) @@ -28,7 +28,7 @@ function endgroup { azure ) echo "##[endgroup]";; travis ) - echo -en 'travis_fold:end:'"${1// /}"'\\r';; + echo -en 'travis_fold:end:'"${1// /}"'\r';; github_actions ) echo "::endgroup::";; esac diff --git a/.scripts/run_docker_build.sh b/.scripts/run_docker_build.sh index 9236239..b70ef01 100755 --- a/.scripts/run_docker_build.sh +++ b/.scripts/run_docker_build.sh @@ -91,6 +91,9 @@ docker run ${DOCKER_RUN_ARGS} \ -e CPU_COUNT \ -e BUILD_WITH_CONDA_DEBUG \ -e BUILD_OUTPUT_ID \ + -e flow_run_id \ + -e remote_url \ + -e sha \ -e BINSTAR_TOKEN \ -e FEEDSTOCK_TOKEN \ -e STAGING_BINSTAR_TOKEN \ diff --git a/.scripts/run_osx_build.sh b/.scripts/run_osx_build.sh index 3d85505..9259eb9 100755 --- a/.scripts/run_osx_build.sh +++ b/.scripts/run_osx_build.sh @@ -22,12 +22,13 @@ bash $MINIFORGE_FILE -b -p ${MINIFORGE_HOME} source ${MINIFORGE_HOME}/etc/profile.d/conda.sh conda activate base +export CONDA_SOLVER="libmamba" +export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1 -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 +mamba install --update-specs --quiet --yes --channel conda-forge --strict-channel-priority \ + pip mamba conda-build boa conda-forge-ci-setup=4 +mamba update --update-specs --yes --quiet --channel conda-forge --strict-channel-priority \ + pip mamba conda-build boa conda-forge-ci-setup=4 @@ -46,6 +47,10 @@ else echo -e "\n\nNot mangling homebrew as we are not running in CI" fi +if [[ "${sha:-}" == "" ]]; then + sha=$(git rev-parse HEAD) +fi + echo -e "\n\nRunning the build setup script." source run_conda_forge_build_setup @@ -56,11 +61,10 @@ source run_conda_forge_build_setup echo -e "\n\nMaking the build clobber file" make_build_number ./ ./recipe ./.ci_support/${CONFIG}.yaml -if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]]; then - EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" +if [[ -f LICENSE.txt ]]; then + cp LICENSE.txt "recipe/recipe-scripts-license.txt" fi - 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}" @@ -72,9 +76,15 @@ if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then # Drop into an interactive shell /bin/bash else + + if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]]; then + EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" + fi + conda mambabuild ./recipe -m ./.ci_support/${CONFIG}.yaml \ --suppress-variables ${EXTRA_CB_OPTIONS:-} \ - --clobber-file ./.ci_support/clobber_${CONFIG}.yaml + --clobber-file ./.ci_support/clobber_${CONFIG}.yaml \ + --extra-meta flow_run_id="$flow_run_id" remote_url="$remote_url" sha="$sha" ( startgroup "Validating outputs" ) 2> /dev/null validate_recipe_outputs "${FEEDSTOCK_NAME}" diff --git a/.scripts/run_win_build.bat b/.scripts/run_win_build.bat new file mode 100755 index 0000000..48734de --- /dev/null +++ b/.scripts/run_win_build.bat @@ -0,0 +1,125 @@ +:: PLEASE NOTE: This script has been automatically generated by conda-smithy. Any changes here +:: will be lost next time ``conda smithy rerender`` is run. If you would like to make permanent +:: changes to this script, consider a proposal to conda-smithy so that other feedstocks can also +:: benefit from the improvement. + +:: Note: we assume a Miniforge installation is available + +:: INPUTS (required environment variables) +:: CONFIG: name of the .ci_support/*.yaml file for this job +:: CI: azure, github_actions, or unset +:: UPLOAD_PACKAGES: true or false +:: UPLOAD_ON_BRANCH: true or false + +setlocal enableextensions enabledelayedexpansion + +call :start_group "Configuring conda" + +:: Activate the base conda environment +call activate base +:: Configure the solver +set "CONDA_SOLVER=libmamba" +if !errorlevel! neq 0 exit /b !errorlevel! +set "CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1" + +:: Provision the necessary dependencies to build the recipe later +echo Installing dependencies +mamba.exe install "python=3.10" pip mamba conda-build boa conda-forge-ci-setup=4 -c conda-forge --strict-channel-priority --yes +if !errorlevel! neq 0 exit /b !errorlevel! + +:: Set basic configuration +echo Setting up configuration +setup_conda_rc .\ ".\recipe" .\.ci_support\%CONFIG%.yaml +if !errorlevel! neq 0 exit /b !errorlevel! +echo Running build setup +CALL run_conda_forge_build_setup + + +if !errorlevel! neq 0 exit /b !errorlevel! + +if EXIST LICENSE.txt ( + echo Copying feedstock license + copy LICENSE.txt "recipe\\recipe-scripts-license.txt" +) +if NOT [%HOST_PLATFORM%] == [%BUILD_PLATFORM%] ( + if [%CROSSCOMPILING_EMULATOR%] == [] ( + set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --no-test" + ) +) + +if NOT [%flow_run_id%] == [] ( + set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --extra-meta flow_run_id=%flow_run_id% remote_url=%remote_url% sha=%sha%" +) + +call :end_group + +:: Build the recipe +echo Building recipe +conda.exe mambabuild "recipe" -m .ci_support\%CONFIG%.yaml --suppress-variables %EXTRA_CB_OPTIONS% +if !errorlevel! neq 0 exit /b !errorlevel! + +:: Prepare some environment variables for the upload step +if /i "%CI%" == "github_actions" ( + set "FEEDSTOCK_NAME=%GITHUB_REPOSITORY:*/=%" + set "GIT_BRANCH=%GITHUB_REF:refs/heads/=%" + if /i "%GITHUB_EVENT_NAME%" == "pull_request" ( + set "IS_PR_BUILD=True" + ) else ( + set "IS_PR_BUILD=False" + ) + set "TEMP=%RUNNER_TEMP%" +) +if /i "%CI%" == "azure" ( + set "FEEDSTOCK_NAME=%BUILD_REPOSITORY_NAME:*/=%" + set "GIT_BRANCH=%BUILD_SOURCEBRANCHNAME%" + if /i "%BUILD_REASON%" == "PullRequest" ( + set "IS_PR_BUILD=True" + ) else ( + set "IS_PR_BUILD=False" + ) + set "TEMP=%UPLOAD_TEMP%" +) + +:: Validate +call :start_group "Validating outputs" +validate_recipe_outputs "%FEEDSTOCK_NAME%" +if !errorlevel! neq 0 exit /b !errorlevel! +call :end_group + +if /i "%UPLOAD_PACKAGES%" == "true" ( + if /i "%IS_PR_BUILD%" == "false" ( + call :start_group "Uploading packages" + if not exist "%TEMP%\" md "%TEMP%" + set "TMP=%TEMP%" + upload_package --validate --feedstock-name="%FEEDSTOCK_NAME%" .\ ".\recipe" .ci_support\%CONFIG%.yaml + if !errorlevel! neq 0 exit /b !errorlevel! + call :end_group + ) +) + +exit + +:: Logging subroutines + +:start_group +if /i "%CI%" == "github_actions" ( + echo ::group::%~1 + exit /b +) +if /i "%CI%" == "azure" ( + echo ##[group]%~1 + exit /b +) +echo %~1 +exit /b + +:end_group +if /i "%CI%" == "github_actions" ( + echo ::endgroup:: + exit /b +) +if /i "%CI%" == "azure" ( + echo ##[endgroup] + exit /b +) +exit /b \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt index 6ec1401..2ec51d7 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,13 +1,27 @@ -BSD 3-clause license +BSD-3-Clause license 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: +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff --git a/README.md b/README.md index 2769415..0010400 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,33 @@ +About libiconv-feedstock +======================== + +Feedstock license: [BSD-3-Clause](https://github.com/conda-forge/libiconv-feedstock/blob/main/LICENSE.txt) + + About libiconv -============== +-------------- Home: https://www.gnu.org/software/libiconv/ -Package license: GPL and LGPL +Package license: GPL-3.0-only AND LGPL-2.1-only -Feedstock license: [BSD-3-Clause](https://github.com/conda-forge/libiconv-feedstock/blob/main/LICENSE.txt) +Summary: Split feedstock providing iconv and libiconv for systems which don't have one (or that cannot convert from/to Unicode.) + +About libiconv +-------------- + +Home: https://www.gnu.org/software/libiconv/ + +Package license: LGPL-2.1-only + +Summary: Provides iconv for systems which don't have one (or that cannot convert from/to Unicode.) + +About iconv +----------- + +Home: https://www.gnu.org/software/libiconv/ + +Package license: GPL-3.0-only Summary: Provides iconv for systems which don't have one (or that cannot convert from/to Unicode.) @@ -30,42 +52,42 @@ Current build status linux_64 - variant + variant linux_aarch64 - variant + variant linux_ppc64le - variant + variant osx_64 - variant + variant osx_arm64 - variant + variant win_64 - variant + variant @@ -81,6 +103,7 @@ Current release info | Name | Downloads | Version | Platforms | | --- | --- | --- | --- | +| [![Conda Recipe](https://img.shields.io/badge/recipe-iconv-green.svg)](https://anaconda.org/conda-forge/iconv) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/iconv.svg)](https://anaconda.org/conda-forge/iconv) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/iconv.svg)](https://anaconda.org/conda-forge/iconv) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/iconv.svg)](https://anaconda.org/conda-forge/iconv) | | [![Conda Recipe](https://img.shields.io/badge/recipe-libiconv-green.svg)](https://anaconda.org/conda-forge/libiconv) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/libiconv.svg)](https://anaconda.org/conda-forge/libiconv) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/libiconv.svg)](https://anaconda.org/conda-forge/libiconv) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/libiconv.svg)](https://anaconda.org/conda-forge/libiconv) | Installing libiconv @@ -93,41 +116,41 @@ conda config --add channels conda-forge conda config --set channel_priority strict ``` -Once the `conda-forge` channel has been enabled, `libiconv` can be installed with `conda`: +Once the `conda-forge` channel has been enabled, `iconv, libiconv` can be installed with `conda`: ``` -conda install libiconv +conda install iconv libiconv ``` or with `mamba`: ``` -mamba install libiconv +mamba install iconv libiconv ``` -It is possible to list all of the versions of `libiconv` available on your platform with `conda`: +It is possible to list all of the versions of `iconv` available on your platform with `conda`: ``` -conda search libiconv --channel conda-forge +conda search iconv --channel conda-forge ``` or with `mamba`: ``` -mamba search libiconv --channel conda-forge +mamba search iconv --channel conda-forge ``` Alternatively, `mamba repoquery` may provide more information: ``` # Search all versions available on your platform: -mamba repoquery search libiconv --channel conda-forge +mamba repoquery search iconv --channel conda-forge -# List packages depending on `libiconv`: -mamba repoquery whoneeds libiconv --channel conda-forge +# List packages depending on `iconv`: +mamba repoquery whoneeds iconv --channel conda-forge -# List dependencies of `libiconv`: -mamba repoquery depends libiconv --channel conda-forge +# List dependencies of `iconv`: +mamba repoquery depends iconv --channel conda-forge ``` @@ -149,7 +172,7 @@ available continuous integration services. Thanks to the awesome service provide [CircleCI](https://circleci.com/), [AppVeyor](https://www.appveyor.com/), [Drone](https://cloud.drone.io/welcome), and [TravisCI](https://travis-ci.com/) it is possible to build and upload installable packages to the -[conda-forge](https://anaconda.org/conda-forge) [Anaconda-Cloud](https://anaconda.org/) +[conda-forge](https://anaconda.org/conda-forge) [anaconda.org](https://anaconda.org/) channel for Linux, Windows and OSX respectively. To manage the continuous integration and simplify feedstock maintenance diff --git a/build-locally.py b/build-locally.py index eec38a0..3f4b7a7 100755 --- a/build-locally.py +++ b/build-locally.py @@ -86,12 +86,19 @@ def main(args=None): verify_config(ns) setup_environment(ns) - if ns.config.startswith("linux") or ( - ns.config.startswith("osx") and platform.system() == "Linux" - ): - run_docker_build(ns) - elif ns.config.startswith("osx"): - run_osx_build(ns) + try: + if ns.config.startswith("linux") or ( + ns.config.startswith("osx") and platform.system() == "Linux" + ): + run_docker_build(ns) + elif ns.config.startswith("osx"): + run_osx_build(ns) + finally: + recipe_license_file = os.path.join( + "recipe", "recipe-scripts-license.txt" + ) + if os.path.exists(recipe_license_file): + os.remove(recipe_license_file) if __name__ == "__main__": diff --git a/recipe/bld.bat b/recipe/bld.bat index a055f6f..e0d6ab0 100644 --- a/recipe/bld.bat +++ b/recipe/bld.bat @@ -13,7 +13,3 @@ if errorlevel 1 exit 1 :: Test. ctest -C Release if errorlevel 1 exit 1 - -:: Install. -ninja install -if errorlevel 1 exit 1 diff --git a/recipe/build.sh b/recipe/build.sh index 3fe44b0..7a045ec 100644 --- a/recipe/build.sh +++ b/recipe/build.sh @@ -12,20 +12,5 @@ set -ex make -j${CPU_COUNT} ${VERBOSE_AT} if [[ "${CONDA_BUILD_CROSS_COMPILATION}" != "1" ]]; then -make check + make check fi -make install - -# TODO :: Only provide a static iconv executable for GNU/Linux. -# TODO :: glibc has iconv built-in. I am only providing it here -# TODO :: for legacy packages (and through gritted teeth). -if [[ ${HOST} =~ .*linux.* ]]; then - chmod 755 ${PREFIX}/lib/libiconv.so.2.6.1 - chmod 755 ${PREFIX}/lib/libcharset.so.1.0.0 - if [ -f ${PREFIX}/lib/preloadable_libiconv.so ]; then - chmod 755 ${PREFIX}/lib/preloadable_libiconv.so - fi -fi - -# remove libtool files -find $PREFIX -name '*.la' -delete diff --git a/recipe/conda_build_config.yaml b/recipe/conda_build_config.yaml new file mode 100644 index 0000000..c2aa860 --- /dev/null +++ b/recipe/conda_build_config.yaml @@ -0,0 +1,2 @@ +c_compiler: + - clang_bootstrap # [osx] \ No newline at end of file diff --git a/recipe/install.bat b/recipe/install.bat new file mode 100644 index 0000000..4fc347c --- /dev/null +++ b/recipe/install.bat @@ -0,0 +1,12 @@ +pushd build + +:: Install. +ninja install +if errorlevel 1 exit 1 + +if %PKG_NAME%==libiconv ( + if exist %LIBRARY_PREFIX%\bin\iconv.exe DEL %LIBRARY_PREFIX%\bin\iconv.exe +) else ( + :: relying on conda-build to deduplicate files + echo "Keeping all files, conda-build will deduplicate files" +) \ No newline at end of file diff --git a/recipe/install.sh b/recipe/install.sh new file mode 100755 index 0000000..7deead8 --- /dev/null +++ b/recipe/install.sh @@ -0,0 +1,25 @@ +make install + +# TODO :: Only provide a static iconv executable for GNU/Linux. +# TODO :: glibc has iconv built-in. I am only providing it here +# TODO :: for legacy packages (and through gritted teeth). +if [[ ${HOST} =~ .*linux.* ]]; then + chmod 755 ${PREFIX}/lib/libiconv.so.2.6.1 + chmod 755 ${PREFIX}/lib/libcharset.so.1.0.0 + if [ -f ${PREFIX}/lib/preloadable_libiconv.so ]; then + chmod 755 ${PREFIX}/lib/preloadable_libiconv.so + fi +fi + +# remove libtool files +find $PREFIX -name '*.la' -delete + +if [[ "${PKG_NAME}" == "libiconv" ]]; then + # remove iconv executable + rm $PREFIX/bin/iconv + rm -rf $PREFIX/share/man + rm -rf $PREFIX/share/doc +else + # relying on conda-build to deduplicate files + echo "Keeping all files, conda-build will deduplicate files" +fi \ No newline at end of file diff --git a/recipe/meta.yaml b/recipe/meta.yaml index c0dabc2..fe6b21d 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -1,7 +1,7 @@ {% set version = "1.17" %} package: - name: libiconv + name: libiconv-split version: {{ version }} source: @@ -14,32 +14,97 @@ source: - configure.cmake.patch # [win] build: - number: 0 - run_exports: - # Pretty good recently, let's trust them. - # https://abi-laboratory.pro/tracker/timeline/libiconv/ - - {{ pin_subpackage('libiconv') }} + number: 1 + requirements: build: - - libtool # [unix] + - libtool # [unix] - {{ compiler('c') }} - cmake # [win] - ninja # [win] - m2-patch # [win] - make # [unix] -test: - commands: - - iconv --help # [not win] +outputs: + - name: libiconv + script: install.sh # [not win] + script: install.bat # [win] + build: + run_exports: + # Pretty good recently, let's trust them. + # https://abi-laboratory.pro/tracker/timeline/libiconv/ + - {{ pin_subpackage('libiconv') }} + requirements: + build: + - libtool # [unix] + - {{ compiler('c') }} + - cmake # [win] + - ninja # [win] + - m2-patch # [win] + - make # [unix] + test: + requires: + - jq # [unix] + commands: + # Ensuring iconv executable is not present. + # Otherwise the included license is wrong and should be GPL-3.0-only. + - test ! -f ${PREFIX}/bin/iconv # [unix] + - if exist %LIBRARY_PREFIX%\bin\iconv.exe exit 1 # [win] + # Ensuring libiconv documentation and man pages is not present. + # Otherwise inlcuded license is wrong and should be GPL-3.0-only. + - test_man_files=$(jq '.files[] | select( . | startswith("share/man"))' $CONDA_PREFIX/conda-meta/{{ PKG_NAME }}-{{ PKG_VERSION }}-${PKG_BUILD_STRING}.json) # [unix] + - if [[ ${test_man_files} ]]; then echo "found GPL licensed files being packaged ${test_man_files}"; exit 1; fi # [unix] + - test_doc_files=$(jq '.files[] | select( . | startswith("share/doc"))' $CONDA_PREFIX/conda-meta/{{ PKG_NAME }}-{{ PKG_VERSION }}-${PKG_BUILD_STRING}.json) # [unix] + - if [[ ${test_doc_files} ]]; then echo "found GPL licensed files being packaged ${test_doc_files}"; exit 1; fi # [unix] + - if exist "%LIBRARY_PREFIX%\share\man\man3\iconv*" exit 1 # [win] + - if exist "%LIBRARY_PREFIX%\share\doc\iconv*" exit 1 # [win] + # Assert libraries are present + - test -f $CONDA_PREFIX/lib/libiconv${SHLIB_EXT} # [unix] + - test -f $CONDA_PREFIX/lib/libcharset${SHLIB_EXT} # [unix] + - if not exist %LIBRARY_PREFIX%\lib\iconv.lib exit 1 # [win] + - if not exist %LIBRARY_PREFIX%\lib\charset.lib exit 1 # [win] + - if not exist %LIBRARY_PREFIX%\bin\iconv.dll exit 1 # [win] + - if not exist %LIBRARY_PREFIX%\bin\charset.dll exit 1 # [win] + about: + home: https://www.gnu.org/software/libiconv/ + license: LGPL-2.1-only + license_file: COPYING.LIB + summary: Provides iconv for systems which don't have one (or that cannot convert from/to Unicode.) + - name: iconv + script: install.sh + # there is no executable available on windows, see + # https://github.com/conda-forge/libiconv-feedstock/pull/7#issuecomment-224392000 + build: + skip: True # [win] + requirements: + build: + - libtool + - {{ compiler('c') }} + - make + host: + - {{ pin_subpackage('libiconv', exact=True) }} + run: + - {{ pin_subpackage('libiconv', exact=True) }} + test: + commands: + - iconv --help + about: + home: https://www.gnu.org/software/libiconv/ + license: GPL-3.0-only + license_file: COPYING + summary: Provides iconv for systems which don't have one (or that cannot convert from/to Unicode.) about: home: https://www.gnu.org/software/libiconv/ - license: GPL and LGPL - license_file: COPYING - summary: Provides iconv for systems which don't have one (or that cannot convert from/to Unicode.) + license: GPL-3.0-only AND LGPL-2.1-only + license_file: + - COPYING + - COPYING.LIB + summary: Split feedstock providing iconv and libiconv for systems which don't have one (or that cannot convert from/to Unicode.) extra: + feedstock-name: libiconv recipe-maintainers: - ocefpaf - jakirkham