├── .appveyor.yml ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github ├── disabled │ ├── .DS_Store │ └── remove-old-artifacts.yml └── workflows │ ├── auto-retry.yml │ ├── build-android.yml │ ├── build-catos.yml │ ├── build-emscripten.yml │ ├── build-ios.yml │ ├── build-linux-cross.yml │ ├── build-linux-rpi.yml │ ├── build-linux64.yml │ ├── build-macos.yml │ ├── build-msys2.yml │ ├── build-tvos.yml │ ├── build-vs2019-x64.yml │ ├── build-vs2022-arm64.yml │ ├── build-vs2022-arm64ec.yml │ ├── build-vs2022-x64.yml │ ├── build-watchos.yml │ ├── build-xros.yml │ ├── clean-up-artifacts.yml │ └── clean-up-cache.yml ├── .gitignore ├── .travis.yml ├── LICENSE.md ├── README.md ├── apothecary.sh ├── apothecary ├── PROGRESS.md ├── README.md ├── apothecary ├── configure │ ├── android_configure.sh │ ├── ios_configure.sh │ ├── linux64_configure.sh │ ├── linuxaarch64_configure.sh │ ├── linuxarm64_configure.sh │ ├── linuxarmv6l_configure.sh │ ├── linuxarmv7l_configure.sh │ ├── linuxarmv8_configure.sh │ └── linuxjetson_configure.sh ├── doc │ ├── example_output.txt │ └── formula_template.sh ├── formulas │ ├── FreeImage │ │ ├── CMakeLists.txt │ │ └── FreeImage.sh │ ├── _depends │ │ ├── automake.sh │ │ └── pkg-config.sh │ ├── assimp.sh │ ├── boost │ │ ├── boost-1.74.0.patch │ │ ├── boost.sh │ │ ├── project-config-android_linux_armv7.jam │ │ ├── project-config-android_linux_x86.jam │ │ ├── project-config-emscripten.jam │ │ └── visualc.hpp.patch │ ├── brotli.sh │ ├── cairo │ │ ├── CMakeLists.txt │ │ ├── Configure_config.cmake │ │ ├── Configure_features.cmake │ │ ├── cairo.sh │ │ ├── cmake │ │ │ ├── FindFontconfig.cmake │ │ │ └── FindPixman.cmake │ │ ├── config.h.cmake │ │ ├── features.h.cmake │ │ └── src │ │ │ ├── CMakeLists.txt │ │ │ ├── cairo-wideint-type-private.h │ │ │ └── sources.cmake │ ├── curl │ │ ├── apple-patch.diff │ │ ├── config.sub │ │ └── curl.sh │ ├── fmod.sh │ ├── fmodex.sh │ ├── fmt │ │ ├── CMakeLists.txt │ │ └── fmt.sh │ ├── freetype │ │ ├── CMakeLists.txt │ │ └── freetype.sh │ ├── glew │ │ ├── CMakeLists.txt │ │ └── glew.sh │ ├── glfw.sh │ ├── glm │ │ └── glm.sh │ ├── gstreamer.sh │ ├── json.sh │ ├── kiss │ │ ├── CMakeLists.txt │ │ └── kiss.sh │ ├── libpng │ │ ├── CMakeLists.txt │ │ └── libpng.sh │ ├── libssh2.sh │ ├── libusb │ │ ├── CMakeLists.txt │ │ ├── config.h.in │ │ └── libusb.sh │ ├── libxml2 │ │ ├── CMakeLists.txt │ │ ├── config.h │ │ ├── glob.h │ │ └── libxml2.sh │ ├── metalangle │ │ ├── metalangle.sh │ │ └── metalangle │ │ │ ├── CMakeLists.txt │ │ │ ├── ios │ │ │ └── xcode │ │ │ │ ├── MGLKit │ │ │ │ ├── MGLKView.mm │ │ │ │ └── MGLKitPlatform.h │ │ │ │ ├── OpenGLES.xcodeproj │ │ │ │ ├── project.pbxproj │ │ │ │ ├── project.xcworkspace │ │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ │ └── xcshareddata │ │ │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ │ │ └── WorkspaceSettings.xcsettings │ │ │ │ └── xcuserdata │ │ │ │ │ ├── lironbar.xcuserdatad │ │ │ │ │ └── xcschemes │ │ │ │ │ │ └── xcschememanagement.plist │ │ │ │ │ └── one.xcuserdatad │ │ │ │ │ └── xcschemes │ │ │ │ │ └── xcschememanagement.plist │ │ │ │ └── generate_MetalAngle_xcframework.sh │ │ │ └── src │ │ │ └── libANGLE │ │ │ ├── Display.cpp │ │ │ └── renderer │ │ │ └── metal │ │ │ └── DisplayMtl.mm │ ├── opencv │ │ ├── ios_conversions.mm │ │ └── opencv.sh │ ├── openssl │ │ └── openssl.sh │ ├── pixman │ │ ├── CMakeLists.txt │ │ ├── cmake │ │ │ ├── PixmanConfig.cmake │ │ │ ├── arch_configure.cmake │ │ │ ├── arch_detect.cmake │ │ │ ├── cmake_package.cmake │ │ │ ├── config_configure.cmake │ │ │ └── config_source.cmake │ │ ├── pixman.sh │ │ └── pixman │ │ │ └── CMakeLists.txt │ ├── poco │ │ ├── Android │ │ ├── AppleTV │ │ ├── AppleTVSimulator │ │ ├── Linux │ │ ├── MinGWConfig64 │ │ ├── android.patch │ │ ├── buildwin.cmd │ │ ├── components │ │ └── poco.sh │ ├── portaudio.sh │ ├── pugixml.sh │ ├── rtAudio │ │ ├── CMakeLists.txt │ │ └── rtAudio.sh │ ├── shaderc.sh │ ├── svgtiny │ │ ├── CMakeLists.txt │ │ ├── Makefile │ │ ├── autogenerated_colors.c │ │ ├── expat.h │ │ ├── expat_external.h │ │ ├── libdompatch.diff │ │ ├── libparseutils.patch │ │ ├── libwapcaplet.h │ │ ├── make-aliases.pl │ │ └── svgtiny.sh │ ├── tess2 │ │ ├── CMakeLists.txt │ │ ├── Makefile │ │ ├── tess2.make │ │ ├── tess2.patch │ │ └── tess2.sh │ ├── uriparser │ │ ├── CMakeLists.txt │ │ └── uriparser.sh │ ├── utf8.sh │ ├── videoInput.sh │ └── zlib │ │ ├── CMakeLists.txt │ │ └── zlib.sh ├── legacy_tomes │ └── uri │ │ ├── uri-emscripten.patch │ │ ├── uri-remove-tests.patch │ │ ├── uri.sh │ │ └── uri_xcode_fix.patch ├── ostype.sh └── toolchains │ ├── android.toolchain.cmake │ ├── ios.toolchain.cmake │ ├── linux64.meson.ini │ ├── linux64.toolchain.cmake │ ├── linuxaarch64.toolchain.cmake │ ├── linuxarm64.meson.ini │ ├── linuxarm64.toolchain.cmake │ ├── linuxarmv6l.toolchain.cmake │ ├── linuxarmv7l.toolchain.cmake │ ├── linuxarmv8.toolchain.cmake │ ├── linuxjetson.toolchain.cmake │ ├── msys2.clangarm64.cmake │ └── windows.llvm.toolchain.cmake ├── docker ├── README.md ├── android │ └── Dockerfile ├── emscripten │ └── Dockerfile └── linux │ ├── Dockerfile │ ├── Dockerfile.gcc5 │ └── Dockerfile.gcc6 └── scripts ├── android ├── .gitkeep ├── build_android_arm64.sh ├── build_android_armv7.sh ├── build_android_x86.sh ├── build_android_x86_64.sh ├── install.sh └── setup.sh ├── artifact ├── artifact-clean.sh ├── artifact-dl.sh ├── artifact-ex.sh └── artifact.sh ├── build.sh ├── calculate_formulas.sh ├── catos ├── build_and_deploy_all.sh ├── build_catos_arm64.sh ├── build_catos_x86_64.sh ├── build_xcframework.sh ├── install.sh └── xcframework_all.sh ├── downloader.sh ├── emscripten ├── .emscripten ├── build_and_deploy_all.sh ├── build_emscripten.sh ├── build_emscripten_64.sh ├── install.sh ├── setup.sh └── setup_env_unix.sh ├── export_config.sh ├── format.sh ├── generate_installers.sh ├── githubactions-id_rsa.enc ├── id_rsa.enc ├── ios ├── .gitkeep ├── build_and_deploy_all.sh ├── build_ios_SIM_arm64.sh ├── build_ios_arm64.sh ├── build_ios_x86_64.sh ├── build_xcframework.sh ├── install.sh └── xcframework_all.sh ├── linux ├── .gitkeep ├── arm64 │ ├── build.sh │ └── setup.sh ├── build_and_deploy.sh ├── build_linux64.sh ├── compile_gcc5.sh ├── compile_gcc6.sh ├── install.sh ├── jetson │ ├── build.sh │ ├── install.sh │ ├── multistrap.conf │ └── setup.sh └── raspios │ ├── aarch64 │ ├── build.sh │ ├── install.sh │ ├── multistrap.conf │ └── setup.sh │ ├── armv6l │ ├── .gitkeep │ ├── build.sh │ ├── multistrap.conf │ └── setup.sh │ ├── armv7l │ ├── build.sh │ ├── multistrap.conf │ └── setup.sh │ ├── armv8l │ ├── build.sh │ └── setup.sh │ └── setup.sh ├── load.sh ├── macos ├── build_xcframework.sh ├── install.sh ├── xcframework-split.sh └── xcframework_all.sh ├── msys2 ├── .gitkeep ├── build_msys2.sh └── install_msys2.sh ├── osx ├── .gitkeep ├── build_and_deploy.sh ├── build_and_deploy_all.sh ├── build_osx_arm64.sh ├── build_osx_x86_64.sh ├── build_xcframework.sh ├── install.sh └── xcframework_all.sh ├── package-individual.sh ├── package.sh ├── package_libraries.sh ├── save.sh ├── secure.sh ├── simd.sh ├── ssh_config ├── summary.sh ├── tvOS ├── .gitkeep ├── build_and_deploy_all.sh ├── build_tvos_SIM_arm64.sh ├── build_tvos_arm64.sh ├── build_tvos_x86_64.sh ├── build_xcframework.sh ├── install.sh └── xcframework_all.sh ├── vs ├── .gitkeep ├── .vsconfig ├── build_and_deploy.sh ├── build_and_deploy_all.sh ├── build_and_deploy_all_CLANG.sh ├── build_and_deploy_all_MSVC_MD.sh ├── build_and_deploy_all_MSVC_MT.sh ├── build_vs_32.sh ├── build_vs_64.sh ├── build_vs_arm64.sh ├── build_vs_arm64ec.sh └── install.sh ├── watchos ├── build_and_deploy_all.sh ├── build_watchos_SIM_arm64.sh ├── build_watchos_arm64.sh ├── build_watchos_x86_64.sh ├── build_xcframework.sh ├── install.sh └── xcframework_all.sh └── xros ├── build_and_deploy_all.sh ├── build_xcframework.sh ├── build_xros_SIM_arm64.sh ├── build_xros_arm64.sh ├── build_xros_x86_64.sh ├── install.sh └── xcframework_all.sh /.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !scripts/ -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig https://editorconfig.org 2 | root = true 3 | 4 | # Default settings for all files 5 | [*] 6 | indent_style = tab 7 | indent_size = 4 8 | tab_width = 4 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.{js,py}] 13 | charset = utf-8 14 | 15 | [*.sh] 16 | indent_style = space 17 | indent_size = 4 18 | tab_width = 4 19 | insert_final_newline = true 20 | trim_trailing_whitespace = true 21 | 22 | [apothecary] 23 | indent_style = space 24 | indent_size = 4 25 | tab_width = 4 26 | insert_final_newline = true 27 | trim_trailing_whitespace = true 28 | 29 | # Override JSON 30 | [*.json] 31 | indent_style = space 32 | indent_size = 2 33 | tab_width = 2 34 | 35 | # Override YAML 36 | [*.yml] 37 | indent_style = space 38 | indent_size = 2 39 | tab_width = 2 40 | 41 | [*.html] 42 | indent_style = space 43 | indent_size = 2 44 | 45 | [*.js] 46 | indent_style = space 47 | indent_size = 2 48 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set default behavior for text files, normalize to native line endings 2 | * text=auto 3 | 4 | # Explicitly declare text files to normalize 5 | *.cpp text 6 | *.h text 7 | *.mm text 8 | 9 | # Files with CRLF line endings for Windows 10 | *.sln text eol=crlf 11 | *.vcxproj* text eol=crlf 12 | .appveyor.yml text eol=crlf 13 | *.bat text eol=crlf 14 | 15 | # Files with LF line endings for Unix-like systems 16 | *.sh text eol=lf 17 | apothecary/apothecary text eol=lf 18 | *.jam text eol=lf 19 | *.pkl text eol=lf 20 | *.pc text eol=lf 21 | *.patch text eol=lf 22 | *.cmake text eol=lf 23 | CMakeLists.txt text eol=lf 24 | Makefile text eol=lf 25 | 26 | # Binary files (no EOL normalization) 27 | *.png binary 28 | *.jpg binary 29 | 30 | # Exclude .patch files in apothecary from EOL normalization 31 | **/*.patch -text 32 | -------------------------------------------------------------------------------- /.github/disabled/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openframeworks/apothecary/fae96e615875a701d48dc29cf4a3be24bc472a07/.github/disabled/.DS_Store -------------------------------------------------------------------------------- /.github/disabled/remove-old-artifacts.yml: -------------------------------------------------------------------------------- 1 | name: Remove old artifacts 2 | 3 | on: 4 | schedule: 5 | # Every day at 1am 6 | - cron: '0 1 * * *' 7 | 8 | jobs: 9 | remove-old-artifacts: 10 | runs-on: ubuntu-latest 11 | timeout-minutes: 10 12 | 13 | steps: 14 | - name: Remove old artifacts 15 | uses: c-hive/gha-remove-artifacts@v1.4.0 16 | with: 17 | age: '1 month' # ' ', e.g. 5 days, 2 years, 90 seconds, parsed by Moment.js 18 | # Optional inputs 19 | # skip-tags: true 20 | # skip-recent: 5 -------------------------------------------------------------------------------- /.github/workflows/auto-retry.yml: -------------------------------------------------------------------------------- 1 | name: Cron Retry Failed Workflows 2 | 3 | on: 4 | schedule: 5 | - cron: '0 */5 * * *' 6 | workflow_dispatch: 7 | 8 | jobs: 9 | retry-failed: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Re-run failed workflow runs on the current branch 13 | uses: actions/github-script@v6 14 | if: github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding' || contains(github.ref, 'refs/tags/')) 15 | with: 16 | script: | 17 | // Remove 'refs/heads/' from the branch name 18 | const branch = process.env.GITHUB_REF.replace('refs/heads/', ''); 19 | console.log("Current branch:", branch); 20 | 21 | // List all workflow runs for the branch with 'failure' status 22 | const runsResponse = await github.rest.actions.listWorkflowRunsForRepo({ 23 | owner: context.repo.owner, 24 | repo: context.repo.repo, 25 | branch: branch, 26 | status: 'failure', 27 | per_page: 50 // Adjust as needed 28 | }); 29 | const failedRuns = runsResponse.data.workflow_runs; 30 | console.log(`Found ${failedRuns.length} failed workflow runs.`); 31 | 32 | if (failedRuns.length === 0) { 33 | console.log("No failed workflow runs found. Nothing to re-run."); 34 | return; 35 | } 36 | 37 | // Iterate over each failed workflow run and trigger a re-run using the API 38 | for (const run of failedRuns.slice(0, 5)) { // Limit to 5 runs 39 | console.log(`Re-running workflow run id: ${run.id} (${run.name})`); 40 | try { 41 | await github.rest.actions.reRunWorkflow({ 42 | owner: context.repo.owner, 43 | repo: context.repo.repo, 44 | run_id: run.id 45 | }); 46 | } catch (error) { 47 | console.error(`Failed to re-run run ${run.id}: ${error.message}`); 48 | } 49 | await new Promise(resolve => setTimeout(resolve, 1000)); // 1-second delay 50 | } 51 | -------------------------------------------------------------------------------- /.github/workflows/clean-up-cache.yml: -------------------------------------------------------------------------------- 1 | name: cleanup-caches 2 | on: 3 | push: 4 | paths-ignore: 5 | - '**/README.md' 6 | pull_request: 7 | paths-ignore: 8 | - '**/README.md' 9 | types: 10 | - closed 11 | 12 | concurrency: 13 | group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} 14 | cancel-in-progress: true 15 | 16 | env: 17 | GH_TOKEN: ${{ secrets.PAT_TOKEN || secrets.GITHUB_TOKEN }} 18 | 19 | jobs: 20 | cleanup: 21 | runs-on: ubuntu-latest 22 | steps: 23 | - name: Setup GitHub CLI 24 | env: 25 | GH_TOKEN: ${{ secrets.PAT_TOKEN || secrets.GITHUB_TOKEN }} 26 | run: | 27 | # Ensure the latest version of GitHub CLI is installed 28 | sudo apt-get update && sudo apt-get install -y gh 29 | # Install the actions-cache extension 30 | gh extension install actions/gh-actions-cache || echo "Extension already installed" 31 | 32 | - name: Check Token Permissions 33 | run: gh auth status 34 | env: 35 | GH_TOKEN: ${{ secrets.PAT_TOKEN || secrets.GITHUB_TOKEN }} 36 | 37 | # - name: Cleanup Caches 38 | # run: | 39 | # REPO=${{ github.repository }} 40 | # # Adjust branch reference if necessary 41 | # BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge" 42 | 43 | # echo "Fetching list of cache keys for branch: $BRANCH" 44 | # cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH --json key | jq -r '.[].key') 45 | 46 | # if [ -z "$cacheKeysForPR" ]; then 47 | # echo "No caches found for branch: $BRANCH" 48 | # exit 0 49 | # fi 50 | 51 | # echo "Deleting caches..." 52 | # for cacheKey in $cacheKeysForPR; do 53 | # echo "Deleting cache: $cacheKey" 54 | # gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm 55 | # done 56 | # echo "Cleanup completed." 57 | # env: 58 | # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 59 | 60 | # - name: Verify Remaining Caches 61 | # run: | 62 | # echo "Checking for remaining caches in branch: $BRANCH" 63 | # remainingCaches=$(gh actions-cache list -R ${{ github.repository }} -B $BRANCH --json key | jq -r '.[].key') 64 | 65 | # if [ -z "$remainingCaches" ]; then 66 | # echo "All caches successfully cleared." 67 | # else 68 | # echo "Remaining caches detected:" 69 | # echo "$remainingCaches" 70 | # exit 0 71 | # fi 72 | # env: 73 | # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 74 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /* 2 | !.gitignore 3 | !.gitattributes 4 | !.travis.yml 5 | !README.md 6 | !LICENSE.md 7 | !/apothecary 8 | !/scripts 9 | !/docker 10 | !/apothecary/**/* 11 | !/scripts/**/* 12 | /apothecary/build 13 | .DS_Store 14 | !.*.yml 15 | scripts/linuxarmv7l/archlinux 16 | scripts/linuxarmv7l/CROSS_BUILD_TOOLS/* 17 | !scripts/linuxarmv7l/CROSS_BUILD_TOOLS/build_cross_gcc.sh 18 | package.xml 19 | paths.make 20 | formula.log 21 | scripts/linuxarmv6l/rpi_toolchain 22 | scripts/linuxarmv6l/master.zip 23 | scripts/linuxarmv6l/firmware-master 24 | scripts/status.txt 25 | *.log 26 | *.xcuserstate 27 | -------------------------------------------------------------------------------- /apothecary.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # pipe commands to core apothecary 3 | APOTHE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | APOTHE_DIR="$(realpath "$APOTHE_DIR/apothecary")" 5 | APOTHE_SCRIPT="$(realpath "$APOTHE_DIR/apothecary")" 6 | echo "$(date): [apothecary do my Command: $@]" 7 | source "$APOTHE_SCRIPT" $@ 8 | EXIT_CODE=$? 9 | echo "$EXIT_CODE" 10 | exit ${EXIT_CODE} 11 | -------------------------------------------------------------------------------- /apothecary/configure/linuxjetson_configure.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 4 | cd $SCRIPT_DIR 5 | APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" 6 | cd $APOTHECARY_LEVEL 7 | 8 | CROSS_COMPILER="jetson" 9 | CROSS_SYSROOT="rootfs" 10 | CROSS_ARCH="aarch64" 11 | CROSSCOMPILE=${CROSSCOMPILE:-1} 12 | if [ "${CROSSCOMPILE}" -eq 0 ]; then 13 | export ROOTFS="/" 14 | export TOOLCHAIN_ROOT="/${CROSS_COMPILER}" 15 | else 16 | export ROOTFS="${APOTHECARY_LEVEL}/${CROSS_SYSROOT}" 17 | export TOOLCHAIN_ROOT="${APOTHECARY_LEVEL}/${CROSS_COMPILER}" 18 | fi 19 | export HOST_ARCH=$(uname -m) 20 | export HOST_PLATFORM=$(uname) 21 | export SYSROOT=${ROOTFS} 22 | export GCC_PREFIX="${CROSS_ARCH}-linux-gnu" 23 | export GCC_VERSION="1.0" 24 | 25 | if [[ "$HOST_ARCH" != "$CROSS_MARCH" ]]; then 26 | CROSSCOMPILE=1 27 | echo "Detected different host ($HOST_ARCH) and target ($CROSS_MARCH). Enabling cross-compilation." 28 | else 29 | CROSSCOMPILE=0 30 | echo "Native compilation detected. No cross-compilation needed." 31 | fi 32 | 33 | export CMAKE_LIBRARY_ARCHITECTURE=${GCC_PREFIX} 34 | export LIBRARY_PATH=${TOOLCHAIN_ROOT}/${GCC_PREFIX}/libc/usr/lib64:${TOOLCHAIN_ROOT}/${GCC_PREFIX}/libc/lib:${TOOLCHAIN_ROOT}/lib 35 | export LD_LIBRARY_PATH=${TOOLCHAIN_ROOT}/lib 36 | export PATH=$TOOLCHAIN_ROOT/bin:$LIBRARY_PATH:$PATH 37 | 38 | export CC="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-gcc" 39 | export CXX="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-g++" 40 | export CPP="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-cpp" 41 | export AR="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-ar" 42 | export AS="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-as" 43 | export RANLIB="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-ranlib" 44 | export FC="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-gfortran" 45 | export LD="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-ld" 46 | 47 | export GCCPATH="$TOOLCHAIN_ROOT/libexec/gcc/${GCC_PREFIX}/${GCC_VERSION}" 48 | export ARFLAGS="--plugin ${GCCPATH}/liblto_plugin.so" 49 | export RANLIBFLAGS="--plugin ${GCCPATH}/liblto_plugin.so" 50 | export CFLAGS="" 51 | export LDFLAGS="" 52 | export HOST="${GCC_PREFIX}" 53 | 54 | tools=("gcc" "g++" "cpp" "ar" "as" "ranlib" "gfortran" "ld") 55 | 56 | # Check each tool 57 | for tool in "${tools[@]}"; do 58 | filepath="${TOOLCHAIN_ROOT}/bin/${GCC_PREFIX}-${tool}" 59 | if [[ -f "$filepath" ]]; then 60 | echo "Found: $filepath" 61 | else 62 | echo "Missing: [$tool] - [$filepath]" 63 | fi 64 | done 65 | 66 | # Debugging output 67 | echo "--------------------" 68 | echo "openFrameworks apothecary Cross Compiler: $GCC_PREFIX" 69 | echo "Using GCC Version: $GCC_VERSION" 70 | echo "Library Path: $LIBRARY_PATH" 71 | echo "ROOTFS Path: $ROOTFS" 72 | echo "Toolchain ROOT: $TOOLCHAIN_ROOT" 73 | echo "CROSS_ARCH: $CROSS_ARCH" 74 | echo "HOST_ARCH: $HOST_ARCH" 75 | echo "HOST_PLATFORM: $HOST_PLATFORM" 76 | echo "GCC Path: $GCCPATH" 77 | echo "LDFLAGS : $LDFLAGS" 78 | echo "CFLAGS : $CFLAGS" 79 | echo "Path: [$PATH]" 80 | echo "--------------------" 81 | -------------------------------------------------------------------------------- /apothecary/doc/formula_template.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | # 3 | # Full Library Name 4 | # short description of what the lib does 5 | # http://librarywebsite.com 6 | # 7 | # notes on build system, reference links, etc 8 | 9 | # array of build types supported by this formula 10 | # you can delete this to implicitly support *all* types 11 | FORMULA_TYPES=("osx" "linux" "linux64" "vs" "msys2" "ios" "android") 12 | 13 | # define the version 14 | VER=#.#.# 15 | 16 | # tools for git use 17 | GIT_URL= 18 | GIT_TAG= 19 | 20 | # download the source code and unpack it into LIB_NAME 21 | function download() { 22 | echoWarning "TODO: download" # denote unfinished things using echoWarning 23 | } 24 | 25 | # prepare the build environment, executed inside the lib src dir 26 | function prepare() { 27 | : # noop 28 | } 29 | 30 | # executed inside the lib src dir 31 | function build() { 32 | echoWarning "TODO: $TYPE build" 33 | } 34 | 35 | # executed inside the lib src dir, first arg $1 is the dest libs dir root 36 | function copy() { 37 | echoWarning "TODO: copy" 38 | } 39 | 40 | # executed inside the lib src dir 41 | function clean() { 42 | echoWarning "TODO: clean" 43 | } 44 | -------------------------------------------------------------------------------- /apothecary/formulas/_depends/automake.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env /bash 2 | # 3 | # GNU Automake is a tool for automatically generating Makefile.in files compliant with the GNU Coding Standards. Automake requires the use of GNU Autoconf. 4 | # https://www.gnu.org/software/automake/ 5 | # requires PERL https://www.perl.org/get.html 6 | 7 | FORMULA_TYPES=("linuxarmv6l", "linuxarmv7l") 8 | FORMULA_DEPENDS=() 9 | 10 | # define the version 11 | VER=1.16.4 12 | BUILD_ID=1 13 | DEFINES="" 14 | 15 | # tools for git use 16 | GIT_URL=https://ftp.gnu.org/gnu/automake/automake 17 | GIT_TAG=v$VER 18 | 19 | # download the source code and unpack it into LIB_NAME 20 | function download() { 21 | pwd 22 | . "$DOWNLOADER_SCRIPT" 23 | downloader ${GIT_URL}-$VER.tar.gz 24 | tar -xf automake-$VER.tar.gz 25 | mv automake-$VER automake 26 | rm automake-$VER.tar.gz 27 | } 28 | 29 | # prepare the build environment, executed inside the lib src dir 30 | function prepare() { 31 | : #noop 32 | } 33 | 34 | # executed inside the lib src dir 35 | function build() { 36 | if [[ "$TYPE" == "linuxarmv6l" || "$TYPE" == "emscripten" ]]; then 37 | 38 | ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.16.3 39 | make 40 | make install 41 | fi 42 | } 43 | 44 | # executed inside the lib src dir, first arg $1 is the dest libs dir root 45 | function copy() { 46 | if [[ "$TYPE" == "linuxarmv6l" || "$TYPE" == "emscripten" ]]; then 47 | echo "copy that" 48 | fi 49 | } 50 | 51 | # executed inside the lib src dir 52 | function clean() { 53 | if [[ "$TYPE" == "linuxarmv6l" || "$TYPE" == "emscripten" ]]; then 54 | 55 | make uninstall 56 | make clean 57 | fi 58 | } 59 | 60 | function load() { 61 | . "$LOAD_SCRIPT" 62 | LOAD_RESULT=$(loadsave ${TYPE} "automake" ${ARCH} ${VER} "$LIBS_DIR_REAL/$1/lib/$TYPE/$PLATFORM" ${BUILD_ID}) 63 | PREBUILT=$(echo "$LOAD_RESULT" | tail -n 1) 64 | if [ "$PREBUILT" -eq 1 ]; then 65 | echo 1 66 | else 67 | echo 0 68 | fi 69 | } 70 | -------------------------------------------------------------------------------- /apothecary/formulas/_depends/pkg-config.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env /bash 2 | # 3 | # a helper tool used when compiling applications and libraries 4 | # http://www.freedesktop.org/wiki/Software/pkg-config/ 5 | 6 | # define the version 7 | VER=0.29.2 8 | BUILD_ID=1 9 | DEFINES="" 10 | 11 | # tools for git use 12 | GIT_URL=http://anongit.freedesktop.org/git/pkg-config.git 13 | GIT_TAG=pkg-config-$VER 14 | URL="https://pkgconfig.freedesktop.org/releases" 15 | 16 | FORMULA_TYPES=() 17 | 18 | # download the source code and unpack it into LIB_NAME 19 | function download() { 20 | curl -LO ${URL}/pkg-config-$VER.tar.gz 21 | tar -xf pkg-config-$VER.tar.gz 22 | # if [ "$CHECKSHA" != "$SHA1" ] ; then 23 | # echoError "ERROR! SHA did not Verify: [$CHECKSHA] SHA on Record:[$SHA1] - Developer has not updated SHA or Man in the Middle Attack" 24 | # else 25 | # echo "SHA for Download Verified Successfully: [$CHECKSHA] SHA on Record:[$SHA1]" 26 | # fi 27 | mv pkg-config-$VER pkg-config 28 | rm pkg-config-$VER.tar.gz 29 | } 30 | 31 | # prepare the build environment, executed inside the lib src dir 32 | function prepare() { 33 | # generate the configure script if it's not there 34 | if [ ! -f configure ]; then 35 | ./autogen.sh 36 | fi 37 | } 38 | 39 | # executed inside the lib src dir 40 | function build() { 41 | 42 | echo "build pkg-config" 43 | # setting empty flags so it ignores an existing pkg-config install 44 | # PKG-CONFIG does not need the typical architecture flags because 45 | # it is a tool and does not contribute static lib objects to the core 46 | ./configure --prefix=$BUILD_ROOT_DIR --with-internal-glib GLIB_CFLAGS="" GLIB_LIBS="" 47 | 48 | make -j${PARALLEL_MAKE} 49 | } 50 | 51 | # executed inside the lib src dir, first arg $1 is the dest libs dir root 52 | function copy() { 53 | 54 | # rm link if it exists as this can cause the install to fail 55 | if [ -f $BUILD_ROOT_DIR/bin/*-pkg-config ]; then 56 | rm $BUILD_ROOT_DIR/bin/*-pkg-config 57 | fi 58 | 59 | make install 60 | 61 | echo "copy/install pkg-config" 62 | } 63 | 64 | # executed inside the lib src dir 65 | function clean() { 66 | make uninstall 67 | make clean 68 | } 69 | 70 | function load() { 71 | . "$LOAD_SCRIPT" 72 | LOAD_RESULT=$(loadsave ${TYPE} "pkg-config" ${ARCH} ${VER} "$LIBS_DIR_REAL/$1/lib/$TYPE/$PLATFORM" ${BUILD_ID}) 73 | PREBUILT=$(echo "$LOAD_RESULT" | tail -n 1) 74 | if [ "$PREBUILT" -eq 1 ]; then 75 | echo 1 76 | else 77 | echo 0 78 | fi 79 | } 80 | -------------------------------------------------------------------------------- /apothecary/formulas/boost/project-config-android_linux_armv7.jam: -------------------------------------------------------------------------------- 1 | # Boost.Build Configuration 2 | # Automatically generated by bootstrap.sh 3 | 4 | import option ; 5 | import feature ; 6 | 7 | # Compiler configuration. This definition will be used unless 8 | # you already have defined some toolsets in your user-config.jam 9 | # file. 10 | if ! gcc in [ feature.values ] 11 | { 12 | using clang : arm : %{NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ ; 13 | } 14 | 15 | project : default-build clang ; 16 | 17 | # List of --with- and --without- 18 | # options. If left empty, all libraries will be built. 19 | # Options specified on the command line completely 20 | # override this variable. 21 | libraries = --with-filesystem ; 22 | 23 | # These settings are equivivalent to corresponding command-line 24 | # options. 25 | option.set prefix : /usr/local ; 26 | option.set exec-prefix : /usr/local ; 27 | option.set libdir : /usr/local/lib ; 28 | option.set includedir : /usr/local/include ; 29 | 30 | # Stop on first error 31 | option.set keep-going : false ; 32 | -------------------------------------------------------------------------------- /apothecary/formulas/boost/project-config-android_linux_x86.jam: -------------------------------------------------------------------------------- 1 | # Boost.Build Configuration 2 | # Automatically generated by bootstrap.sh 3 | 4 | import option ; 5 | import feature ; 6 | 7 | # Compiler configuration. This definition will be used unless 8 | # you already have defined some toolsets in your user-config.jam 9 | # file. 10 | if ! gcc in [ feature.values ] 11 | { 12 | using clang : intel : "%{NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++" ; 13 | } 14 | 15 | project : default-build gcc ; 16 | 17 | # List of --with- and --without- 18 | # options. If left empty, all libraries will be built. 19 | # Options specified on the command line completely 20 | # override this variable. 21 | libraries = --with-filesystem ; 22 | 23 | # These settings are equivivalent to corresponding command-line 24 | # options. 25 | option.set prefix : /usr/local ; 26 | option.set exec-prefix : /usr/local ; 27 | option.set libdir : /usr/local/lib ; 28 | option.set includedir : /usr/local/include ; 29 | 30 | # Stop on first error 31 | option.set keep-going : false ; 32 | -------------------------------------------------------------------------------- /apothecary/formulas/boost/project-config-emscripten.jam: -------------------------------------------------------------------------------- 1 | # Boost.Build Configuration 2 | # Automatically generated by bootstrap.sh 3 | 4 | import option ; 5 | import feature ; 6 | 7 | # Compiler configuration. This definition will be used unless 8 | # you already have defined some toolsets in your user-config.jam 9 | # file. 10 | if ! clang in [ feature.values ] 11 | { 12 | using clang : : "em++" ; 13 | } 14 | 15 | project : default-build clang ; 16 | 17 | # List of --with- and --without- 18 | # options. If left empty, all libraries will be built. 19 | # Options specified on the command line completely 20 | # override this variable. 21 | libraries = --with-filesystem ; 22 | 23 | # These settings are equivivalent to corresponding command-line 24 | # options. 25 | option.set prefix : /usr/local ; 26 | option.set exec-prefix : /usr/local ; 27 | option.set libdir : /usr/local/lib ; 28 | option.set includedir : /usr/local/include ; 29 | 30 | # Stop on first error 31 | option.set keep-going : false ; 32 | -------------------------------------------------------------------------------- /apothecary/formulas/boost/visualc.hpp.patch: -------------------------------------------------------------------------------- 1 | --- boost/config/compiler/visualc.hpp 2015-09-15 14:29:28.000000000 -0500 2 | +++ boost/config/compiler/visualc.hpp.new 2015-09-15 14:30:06.000000000 -0500 3 | @@ -320,7 +320,7 @@ 4 | 5 | // 6 | // last known and checked version is 19.10.25017 (VC++ 2017): 7 | -#if (_MSC_VER > 1910) 8 | +#if (_MSC_VER > 2000) 9 | # if defined(BOOST_ASSERT_CONFIG) 10 | # error "Unknown compiler version - please run the configure tests and report the results" 11 | # else 12 | -------------------------------------------------------------------------------- /apothecary/formulas/cairo/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0) 2 | project(cairo) 3 | 4 | set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") 5 | 6 | find_package(Pixman REQUIRED) 7 | find_package(PNG REQUIRED) 8 | find_package(ZLIB REQUIRED) 9 | find_package(Freetype) 10 | find_package(Threads) 11 | if (WIN32) 12 | find_package(Fontconfig) 13 | endif() 14 | 15 | 16 | include(Configure_config.cmake) 17 | include(Configure_features.cmake) 18 | include_directories(${CMAKE_BINARY_DIR}) 19 | 20 | if(CAIRO_HAS_PTHREAD) 21 | list(APPEND CAIRO_LIBS -lpthread) 22 | endif() 23 | 24 | if (WIN32) 25 | set(CAIRO_LIBS gdi32 msimg32 user32 winmm) 26 | endif() 27 | 28 | 29 | include_directories(${PIXMAN_INCLUDE_DIR} ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) 30 | list(APPEND CAIRO_LIBS ${PIXMAN_LIBRARY} ${PNG_LIBRARY} ${ZLIB_LIBRARY}) 31 | 32 | if(NOT NO_FONTCONFIG) 33 | if(FONTCONFIG_FOUND) 34 | list(APPEND CAIRO_LIBS ${FONTCONFIG_LIBRARY}) 35 | endif() 36 | else() 37 | set(FONTCONFIG_FOUND 0) 38 | endif() 39 | 40 | if(FREETYPE_FOUND) 41 | #find_package(BZip2) 42 | find_package(BrotliDec) 43 | include_directories(${FREETYPE_INCLUDE_DIRS}) 44 | include_directories(${BROTLIDEC_INCLUDE_DIRS}) 45 | #include_directories(${BZIP2_INCLUDE_DIR}) 46 | list(APPEND CAIRO_LIBS ${FREETYPE_LIBRARIES} ${BROTLIDEC_LIBRARIES}) 47 | # ${BZIP2_LIBRARIES} 48 | endif() 49 | 50 | # Use options to disable features 51 | if(NO_BUILD_GTK_DOC) 52 | add_definitions(-DCAIRO_NO_GTK_DOC) 53 | endif() 54 | 55 | if(NO_BUILD_TESTS) 56 | add_definitions(-DCAIRO_NO_TESTS) 57 | endif() 58 | 59 | if(NO_DEPENDENCY_TRACKING) 60 | add_definitions(-DCAIRO_NO_DEPENDENCY_TRACKING) 61 | endif() 62 | 63 | if(NO_XLIB) 64 | add_definitions(-DCAIRO_NO_XLIB) 65 | endif() 66 | 67 | if(NO_QT) 68 | add_definitions(-DCAIRO_NO_QT) 69 | endif() 70 | 71 | if(NO_QUARTZ_FONT) 72 | add_definitions(-DCAIRO_NO_QUARTZ_FONT) 73 | endif() 74 | 75 | if(NO_QUARTZ) 76 | add_definitions(-DCAIRO_NO_QUARTZ) 77 | endif() 78 | 79 | if(NO_QUARTZ_IMAGE) 80 | add_definitions(-DCAIRO_NO_QUARTZ_IMAGE) 81 | endif() 82 | 83 | include_directories(src) 84 | add_subdirectory(src) 85 | 86 | -------------------------------------------------------------------------------- /apothecary/formulas/cairo/Configure_features.cmake: -------------------------------------------------------------------------------- 1 | if(APPLE) 2 | set(CAIRO_HAS_QUARTZ_SURFACE 1) 3 | set(CAIRO_HAS_QUARTZ_FONT 1) 4 | set(CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1) 5 | endif() 6 | 7 | if(BEOS) 8 | set(CAIRO_HAS_BEOS_SURFACE 1) 9 | endif() 10 | 11 | if(OS2) 12 | set(CAIRO_HAS_OS2_SURFACE 1) 13 | endif() 14 | 15 | if(WIN32) 16 | set(CAIRO_HAS_WIN32_SURFACE 1) 17 | set(CAIRO_HAS_WIN32_FONT 1) 18 | set(CAIRO_WIN32_STATIC_BUILD 1) 19 | endif() 20 | 21 | if(COGL_FOUND) 22 | set(CAIRO_HAS_COGL_SURFACE 1) 23 | endif() 24 | 25 | if(DIRECTFB_FOUND) 26 | set(CAIRO_HAS_DIRECTFB_SURFACE 1) 27 | endif() 28 | 29 | if(LIBDRM_FOUND) 30 | set(CAIRO_HAS_DRM_SURFACE 1) 31 | endif() 32 | 33 | if(FREETYPE_FOUND) 34 | set(CAIRO_HAS_FT_FONT 1) 35 | endif() 36 | 37 | if(FONTCONFIG_FOUND) 38 | set(CAIRO_HAS_FC_FONT 1) 39 | endif() 40 | 41 | if(GLIB_FOUND) 42 | set(CAIRO_HAS_GOBJECT_FUNCTIONS 1) 43 | endif() 44 | 45 | if(LIBXML2_FOUND) 46 | set(CAIRO_HAS_XML_SURFACE 1) 47 | endif() 48 | 49 | if(MESA_FOUND) 50 | set(CAIRO_HAS_GALLIUM_SURFACE 1) 51 | endif() 52 | 53 | if(OPENGL_FOUND) 54 | set(CAIRO_HAS_GL_SURFACE 1) 55 | endif() 56 | 57 | if(PNG_FOUND) 58 | set(CAIRO_HAS_PNG_FUNCTIONS 1) 59 | endif() 60 | 61 | #if(QT_FOUND) 62 | # set(CAIRO_HAS_QT_SURFACE 1) 63 | #endif() 64 | 65 | if(X11_FOUND) 66 | set(CAIRO_HAS_XLIB_SURFACE 1) 67 | set(CAIRO_HAS_XLIB_XRENDER_SURFACE 1) 68 | set(CAIRO_HAS_XCB_SURFACE 1) 69 | set(CAIRO_HAS_XLIB_XCB_FUNCTIONS 1) 70 | set(CAIRO_HAS_XCB_SHM_FUNCTIONS 1) 71 | endif() 72 | 73 | if(ZLIB_FOUND) 74 | set(CAIRO_HAS_PS_SURFACE 1) 75 | set(CAIRO_HAS_PDF_SURFACE 1) 76 | endif() 77 | 78 | if(SKIA_FOUND) 79 | set(CAIRO_HAS_SKIA_SURFACE 1) 80 | endif() 81 | 82 | set(CAIRO_HAS_SVG_SURFACE 1) 83 | set(CAIRO_HAS_SCRIPT_SURFACE 1) 84 | set(CAIRO_HAS_INTERPRETER 1) 85 | 86 | 87 | set(CAIRO_HAS_GLESV2_SURFACE 0) 88 | set(CAIRO_HAS_VG_SURFACE 0) 89 | set(CAIRO_HAS_EGL_FUNCTIONS 0) 90 | set(CAIRO_HAS_GLX_FUNCTIONS 0) 91 | set(CAIRO_HAS_WGL_FUNCTIONS 0) 92 | set(CAIRO_HAS_TEST_SURFACES 0) 93 | set(CAIRO_HAS_TEE_SURFACE 0) 94 | set(CAIRO_HAS_IMAGE_SURFACE 1) 95 | 96 | set(CAIRO_HAS_PTHREAD 0) 97 | set(CAIRO_HAS_TRACE 0) 98 | set(CAIRO_HAS_SYMBOL_LOOKUP 0) 99 | set(CAIRO_HAS_PDF_SURFACE 1) 100 | 101 | configure_file(features.h.cmake ${CMAKE_BINARY_DIR}/cairo-features.h) 102 | configure_file(features.h.cmake ${CMAKE_BINARY_DIR}/src/cairo-features.h) -------------------------------------------------------------------------------- /apothecary/formulas/cairo/cmake/FindFontconfig.cmake: -------------------------------------------------------------------------------- 1 | # - Try to find FONTCONFIG 2 | # Once done this will define 3 | # 4 | # FONTCONFIG_ROOT_DIR - Set this variable to the root installation of FONTCONFIG 5 | # FONTCONFIG_FOUND - system has FONTCONFIG 6 | # FONTCONFIG_INCLUDE_DIRS - the FONTCONFIG include directory 7 | # FONTCONFIG_LIBRARIES - Link these to use FONTCONFIG 8 | # 9 | # Copyright (c) 2008 Joshua L. Blocher 10 | # Copyright (c) 2012 Dmitry Baryshnikov 11 | # Copyright (c) 2013 Michael Pavlyshko 12 | # 13 | # Distributed under the OSI-approved BSD License 14 | # 15 | 16 | if (NOT WIN32) 17 | find_package(PkgConfig) 18 | if (PKG_CONFIG_FOUND) 19 | pkg_check_modules(_FONTCONFIG fontconfig) 20 | endif (PKG_CONFIG_FOUND) 21 | endif (NOT WIN32) 22 | 23 | SET(_FONTCONFIG_ROOT_HINTS 24 | $ENV{FONTCONFIG} 25 | ${CMAKE_FIND_ROOT_PATH} 26 | ${FONTCONFIG_ROOT_DIR} 27 | ) 28 | 29 | SET(_FONTCONFIG_ROOT_PATHS 30 | $ENV{FONTCONFIG}/src 31 | /usr 32 | /usr/local 33 | ) 34 | 35 | SET(_FONTCONFIG_ROOT_HINTS_AND_PATHS 36 | HINTS ${_FONTCONFIG_ROOT_HINTS} 37 | PATHS ${_FONTCONFIG_ROOT_PATHS} 38 | ) 39 | 40 | FIND_PATH(FONTCONFIG_INCLUDE_DIR 41 | NAMES 42 | "fontconfig/fontconfig.h" 43 | HINTS 44 | ${_FONTCONFIG_INCLUDEDIR} 45 | ${_FONTCONFIG_ROOT_HINTS_AND_PATHS} 46 | PATH_SUFFIXES 47 | include 48 | ) 49 | 50 | 51 | FIND_LIBRARY(FONTCONFIG_LIBRARY 52 | NAMES 53 | fontconfig 54 | HINTS 55 | ${_FONTCONFIG_LIBDIR} 56 | ${_FONTCONFIG_ROOT_HINTS_AND_PATHS} 57 | PATH_SUFFIXES 58 | "lib" 59 | "local/lib" 60 | ) 61 | 62 | SET(FONTCONFIG_LIBRARIES 63 | ${FONTCONFIG_LIBRARY} 64 | ) 65 | 66 | SET(FONTCONFIG_INCLUDE_DIRS 67 | ${FONTCONFIG_INCLUDE_DIR} 68 | ) 69 | 70 | include(FindPackageHandleStandardArgs) 71 | find_package_handle_standard_args(Fontconfig 72 | REQUIRED_VARS FONTCONFIG_LIBRARIES FONTCONFIG_INCLUDE_DIRS 73 | FAIL_MESSAGE "Could NOT find Fontconfig, try to set the path to Fontconfig root folder in the system variable FONTCONFIG" 74 | ) 75 | 76 | 77 | MARK_AS_ADVANCED(FONTCONFIG_INCLUDE_DIR FONTCONFIG_INCLUDE_DIRS FONTCONFIG_LIBRARY FONTCONFIG_LIBRARIES) -------------------------------------------------------------------------------- /apothecary/formulas/cairo/cmake/FindPixman.cmake: -------------------------------------------------------------------------------- 1 | # - Try to find PIXMAN 2 | # Once done this will define 3 | # 4 | # PIXMAN_ROOT_DIR - Set this variable to the root installation of PIXMAN 5 | # PIXMAN_FOUND - system has PIXMAN 6 | # PIXMAN_INCLUDE_DIRS - the PIXMAN include directory 7 | # PIXMAN_LIBRARIES - Link these to use PIXMAN 8 | # 9 | # Copyright (c) 2008 Joshua L. Blocher 10 | # Copyright (c) 2011 Ralf Habacker, 11 | # Copyright (c) 2012 Dmitry Baryshnikov 12 | # Copyright (c) 2015 Mikhail Paulyshka 13 | # 14 | # Distributed under the OSI-approved BSD License 15 | # 16 | 17 | if (NOT WIN32) 18 | find_package(PkgConfig) 19 | if (PKG_CONFIG_FOUND) 20 | pkg_check_modules(_PIXMAN pixman) 21 | SET(PIXMAN_VERSION ${_PIXMAN_VERSION}) 22 | endif (PKG_CONFIG_FOUND) 23 | endif (NOT WIN32) 24 | 25 | SET(_PIXMAN_ROOT_HINTS 26 | $ENV{PIXMAN} 27 | ${CMAKE_FIND_ROOT_PATH} 28 | ${PIXMAN_ROOT_DIR} 29 | ${PIXMAN_ROOT} 30 | ${PIXMAN_INCLUDE_DIR} 31 | ) 32 | 33 | SET(_PIXMAN_ROOT_PATHS 34 | $ENV{PIXMAN}/src 35 | /usr 36 | /usr/local 37 | ) 38 | 39 | SET(_PIXMAN_ROOT_HINTS_AND_PATHS 40 | HINTS ${_PIXMAN_ROOT_HINTS} 41 | PATHS ${_PIXMAN_ROOT_PATHS} 42 | ) 43 | 44 | FIND_PATH(PIXMAN_INCLUDE_DIR 45 | NAMES 46 | "pixman.h" 47 | HINTS 48 | ${_PIXMAN_INCLUDEDIR} 49 | ${_PIXMAN_ROOT_HINTS_AND_PATHS} 50 | PATH_SUFFIXES 51 | include 52 | "include/pixman-1" 53 | ) 54 | 55 | FIND_LIBRARY(PIXMAN_LIBRARY 56 | NAMES 57 | pixman-1 58 | pixman-1d 59 | pixman-1_static 60 | pixman-1_staticd 61 | HINTS 62 | ${_PIXMAN_LIBDIR} 63 | ${_PIXMAN_ROOT_HINTS_AND_PATHS} 64 | PATH_SUFFIXES 65 | "lib" 66 | "local/lib" 67 | ) 68 | 69 | SET(PIXMAN_LIBRARIES 70 | ${PIXMAN_LIBRARY} 71 | ) 72 | 73 | SET(PIXMAN_INCLUDE_DIRS 74 | ${PIXMAN_INCLUDE_DIR} 75 | ) 76 | 77 | if (NOT PIXMAN_VERSION) 78 | if (EXISTS "${PIXMAN_INCLUDE_DIRS}/pixman-version.h") 79 | file(READ "${PIXMAN_INCLUDE_DIRS}/pixman-version.h" PIXMAN_VERSION_CONTENT) 80 | 81 | string(REGEX MATCH "#define +PIXMAN_VERSION_MAJOR +([0-9]+)" _dummy "${PIXMAN_VERSION_CONTENT}") 82 | set(PIXMAN_VERSION_MAJOR "${CMAKE_MATCH_1}") 83 | 84 | string(REGEX MATCH "#define +PIXMAN_VERSION_MINOR +([0-9]+)" _dummy "${PIXMAN_VERSION_CONTENT}") 85 | set(PIXMAN_VERSION_MINOR "${CMAKE_MATCH_1}") 86 | 87 | string(REGEX MATCH "#define +PIXMAN_VERSION_MICRO +([0-9]+)" _dummy "${PIXMAN_VERSION_CONTENT}") 88 | set(PIXMAN_VERSION_MICRO "${CMAKE_MATCH_1}") 89 | 90 | set(PIXMAN_VERSION "${PIXMAN_VERSION_MAJOR}.${PIXMAN_VERSION_MINOR}.${PIXMAN_VERSION_MICRO}") 91 | endif (EXISTS "${PIXMAN_INCLUDE_DIRS}/pixman-version.h") 92 | endif(NOT PIXMAN_VERSION) 93 | 94 | include(FindPackageHandleStandardArgs) 95 | find_package_handle_standard_args(Pixman 96 | REQUIRED_VARS PIXMAN_LIBRARIES PIXMAN_INCLUDE_DIRS 97 | VERSION_VAR PIXMAN_VERSION 98 | FAIL_MESSAGE "Could NOT find PIXMAN, try to set the path to PIXMAN root folder in the system variable PIXMAN" 99 | ) 100 | 101 | MARK_AS_ADVANCED(PIXMAN_CONFIG_INCLUDE_DIR PIXMAN_INCLUDE_DIR PIXMAN_INCLUDE_DIRS PIXMAN_LIBRARY PIXMAN_LIBRARIES) -------------------------------------------------------------------------------- /apothecary/formulas/cairo/features.h.cmake: -------------------------------------------------------------------------------- 1 | /* Generated by Makefile.win32.features-h. Do not edit. */ 2 | #ifndef CAIRO_FEATURES_H 3 | #define CAIRO_FEATURES_H 1 4 | 5 | #cmakedefine CAIRO_HAS_XLIB_SURFACE 1 6 | #cmakedefine CAIRO_HAS_XLIB_XRENDER_SURFACE 1 7 | #cmakedefine CAIRO_HAS_XCB_SURFACE 1 8 | #cmakedefine CAIRO_HAS_XLIB_XCB_FUNCTIONS 1 9 | #cmakedefine CAIRO_HAS_XCB_SHM_FUNCTIONS 1 10 | #cmakedefine CAIRO_HAS_QT_SURFACE 1 11 | #cmakedefine CAIRO_HAS_QUARTZ_SURFACE 1 12 | #cmakedefine CAIRO_HAS_QUARTZ_FONT 1 13 | #cmakedefine CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1 14 | #cmakedefine CAIRO_HAS_WIN32_SURFACE 1 15 | #cmakedefine CAIRO_HAS_WIN32_FONT 1 16 | #cmakedefine CAIRO_WIN32_STATIC_BUILD 1 17 | #cmakedefine CAIRO_HAS_SKIA_SURFACE 1 18 | #cmakedefine CAIRO_HAS_OS2_SURFACE 1 19 | #cmakedefine CAIRO_HAS_BEOS_SURFACE 1 20 | #cmakedefine CAIRO_HAS_DRM_SURFACE 1 21 | #cmakedefine CAIRO_HAS_GALLIUM_SURFACE 1 22 | #cmakedefine CAIRO_HAS_PNG_FUNCTIONS 1 23 | #cmakedefine CAIRO_HAS_GL_SURFACE 1 24 | #cmakedefine CAIRO_HAS_GLESV2_SURFACE 1 25 | #cmakedefine CAIRO_HAS_COGL_SURFACE 1 26 | #cmakedefine CAIRO_HAS_DIRECTFB_SURFACE 1 27 | #cmakedefine CAIRO_HAS_VG_SURFACE 1 28 | #cmakedefine CAIRO_HAS_EGL_FUNCTIONS 1 29 | #cmakedefine CAIRO_HAS_GLX_FUNCTIONS 1 30 | #cmakedefine CAIRO_HAS_WGL_FUNCTIONS 1 31 | #cmakedefine CAIRO_HAS_SCRIPT_SURFACE 1 32 | #cmakedefine CAIRO_HAS_FT_FONT 1 33 | #cmakedefine CAIRO_HAS_FC_FONT 1 34 | #cmakedefine CAIRO_HAS_PS_SURFACE 1 35 | #cmakedefine CAIRO_HAS_PDF_SURFACE 1 36 | #cmakedefine CAIRO_HAS_SVG_SURFACE 1 37 | #cmakedefine CAIRO_HAS_TEST_SURFACES 1 38 | #cmakedefine CAIRO_HAS_TEE_SURFACE 1 39 | #cmakedefine CAIRO_HAS_XML_SURFACE 1 40 | #cmakedefine CAIRO_HAS_PTHREAD 1 41 | #cmakedefine CAIRO_HAS_GOBJECT_FUNCTIONS 1 42 | #cmakedefine CAIRO_HAS_TRACE 1 43 | #cmakedefine CAIRO_HAS_INTERPRETER 1 44 | #cmakedefine CAIRO_HAS_SYMBOL_LOOKUP 1 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /apothecary/formulas/curl/apple-patch.diff: -------------------------------------------------------------------------------- 1 | From f2cc7ed01c98d6083f4df4e6914759c18cd061ed Mon Sep 17 00:00:00 2001 2 | From: Dan Rosser 3 | Date: Wed, 13 Nov 2024 00:46:50 +1100 4 | Subject: [PATCH] macOS fix for tool_paramhlp.c getpass 5 | 6 | --- 7 | src/tool_paramhlp.c | 10 ++++++++++ 8 | 1 file changed, 10 insertions(+) 9 | 10 | diff --git a/src/tool_paramhlp.c b/src/tool_paramhlp.c 11 | index d4024e134..da47456c9 100644 12 | --- a/src/tool_paramhlp.c 13 | +++ b/src/tool_paramhlp.c 14 | @@ -566,7 +566,17 @@ static CURLcode checkpasswd(const char *kind, /* for what purpose */ 15 | kind, *userpwd, i + 1); 16 | 17 | /* get password */ 18 | +#ifdef __APPLE__ 19 | + char *input = getpass(prompt); 20 | + if (input) { 21 | + strncpy(passwd, input, sizeof(passwd) - 1); 22 | + passwd[sizeof(passwd) - 1] = '\0'; // null termination 23 | + } else { 24 | + passwd[0] = '\0'; 25 | + } 26 | +#else 27 | getpass_r(prompt, passwd, sizeof(passwd)); 28 | +#endif 29 | if(osep) 30 | *osep = ';'; 31 | 32 | -- 33 | 2.46.0.windows.1 34 | 35 | -------------------------------------------------------------------------------- /apothecary/formulas/fmod.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # fmod 4 | # https://www.fmod.com 5 | # 6 | # This is not a build script, as fmod is linked as a dynamic library. 7 | # fmod is downloaded as a binary from the fmod.com website and copied 8 | # into the openFrameworks library directory. 9 | 10 | FORMULA_TYPES=() 11 | LEGACY_FORMULA_TYPES=("osx" "vs" "linux" "linux64") 12 | FORMULA_DEPENDS=() 13 | 14 | # define the version 15 | VER=44459 16 | BUILD_ID=1 17 | DEFINES="" 18 | 19 | # tools for git use 20 | GIT_URL= 21 | GIT_TAG= 22 | 23 | URL=http://openframeworks.cc/ci/fmod 24 | 25 | # download the source code and unpack it into LIB_NAME 26 | function download() { 27 | 28 | if [ "$TYPE" == "vs" ]; then 29 | PKG=fmod_${TYPE}${ARCH}.tar.bz2 30 | if [ "$ARCH" == "arm64" ] || [ "$ARCH" == "arm64ec" ] || [ "$ARCH" == "arm" ]; then 31 | mkdir fmod 32 | return 0 33 | fi 34 | else 35 | PKG=fmod_${TYPE}.tar.bz2 36 | fi 37 | . "$DOWNLOADER_SCRIPT" 38 | downloader "${URL}/${PKG}" 39 | tar xjf $PKG 40 | rm "${PKG}" 41 | } 42 | 43 | # prepare the build environment, executed inside the lib src dir 44 | function prepare() { 45 | : # noop 46 | # mount install 47 | } 48 | 49 | # executed inside the lib src dir 50 | function build() { 51 | 52 | if [ "$ARCH" == "arm64" ] || [ "$ARCH" == "arm64ec" ] || [ "$ARCH" == "arm" ]; then 53 | return 0 54 | fi 55 | 56 | if [ "$TYPE" == "osx" ]; then 57 | cd lib/osx 58 | install_name_tool -id @executable_path/../Frameworks/libfmod.dylib libfmod.dylib 59 | cd ../ 60 | fi 61 | 62 | } 63 | 64 | # executed inside the lib src dir, first arg $1 is the dest libs dir root 65 | function copy() { 66 | cp -r ../fmod/ $1/ 67 | 68 | if [ "$TYPE" == "osx" ]; then 69 | . "$SECURE_SCRIPT" 70 | secure $1/lib/$TYPE/libfmod.dylib fmod 71 | fi 72 | } 73 | 74 | # executed inside the lib src dir 75 | function clean() { 76 | : # noop 77 | } 78 | 79 | function load() { 80 | . "$LOAD_SCRIPT" 81 | LOAD_RESULT=$(loadsave ${TYPE} "fmod" ${ARCH} ${VER} "$LIBS_DIR_REAL/$1/lib/$TYPE" ${PLATFORM}) 82 | PREBUILT=$(echo "$LOAD_RESULT" | tail -n 1) 83 | if [ "$PREBUILT" -eq 1 ]; then 84 | echo 1 85 | else 86 | echo 0 87 | fi 88 | } 89 | -------------------------------------------------------------------------------- /apothecary/formulas/fmodex.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # FmodEX 4 | # http://www.portaudio.com/ 5 | # 6 | # This is not a build script, as fmodex is linked as a dynamic library. 7 | # FmodEX is downloaded as a binary from the fmod.org website and copied 8 | # into the openFrameworks library directory. 9 | 10 | FORMULA_TYPES=("msys2" "osx" "vs" "linux" "linux64") 11 | FORMULA_DEPENDS=() 12 | 13 | # define the version 14 | VER=44459 15 | BUILD_ID=1 16 | DEFINES="" 17 | 18 | # tools for git use 19 | GIT_URL= 20 | GIT_TAG= 21 | URL=http://openframeworks.cc/ci/fmodex/ 22 | 23 | # download the source code and unpack it into LIB_NAME 24 | function download() { 25 | #Nothing to do for mingw64 26 | if [ "$TYPE" == "msys2" ] && [ "$ARCH" == "64" ]; then 27 | mkdir fmodex 28 | return 29 | fi 30 | if [ "$ARCH" == "arm64" ] || [ "$ARCH" == "arm64ec" ] || [ "$ARCH" == "arm" ]; then 31 | PKG=fmodex_${TYPE}${ARCH}.tar.bz2 32 | mkdir fmodex 33 | return 0 34 | 35 | else 36 | PKG=fmodex_${TYPE}.tar.bz2 37 | fi 38 | . "$DOWNLOADER_SCRIPT" 39 | downloader "${URL}/${PKG}" 40 | tar xjf $PKG 41 | rm "${PKG}" 42 | } 43 | 44 | # prepare the build environment, executed inside the lib src dir 45 | function prepare() { 46 | : # noop 47 | # mount install 48 | } 49 | 50 | # executed inside the lib src dir 51 | function build() { 52 | 53 | if [ "$ARCH" == "arm64" ] || [ "$ARCH" == "arm64ec" ] || [ "$ARCH" == "arm" ]; then 54 | if [ "$ARCH" == "arm64" ] || [ "$ARCH" == "arm64ec" ]; then 55 | return 0 56 | fi 57 | fi 58 | 59 | if [ "$TYPE" == "osx" ]; then 60 | cd lib/osx 61 | install_name_tool -id "@executable_path/libfmodex.dylib" libfmodex.dylib 62 | cd ../ 63 | fi 64 | 65 | } 66 | 67 | # executed inside the lib src dir, first arg $1 is the dest libs dir root 68 | function copy() { 69 | cp -r ../fmodex/ $1/ 70 | } 71 | 72 | # executed inside the lib src dir 73 | function clean() { 74 | : # noop 75 | } 76 | -------------------------------------------------------------------------------- /apothecary/formulas/glm/glm.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # glm 4 | # OpenGL Mathematics 5 | # https://github.com/g-truc/glm 6 | # 7 | 8 | FORMULA_TYPES=("osx" "msys2" "linux" "vs" "ios" "watchos" "catos" "xros" "tvos" "android" "emscripten") 9 | FORMULA_DEPENDS=() 10 | 11 | # tools for git use 12 | GIT_URL=https://github.com/g-truc/glm 13 | #GIT_TAG=1.0.0.0 14 | GIT_TAG=master 15 | VER=1.0.1 16 | DEFINES="" 17 | 18 | # download the source code and unpack it into LIB_NAME 19 | function download() { 20 | git clone --branch $GIT_TAG --depth=1 $GIT_URL 21 | } 22 | 23 | # prepare the build environment, executed inside the lib src dir 24 | function prepare() { 25 | echo 26 | } 27 | 28 | # executed inside the lib src dir 29 | function build() { 30 | echo 31 | #nothing to do, header only lib 32 | # we should just build this 33 | } 34 | 35 | # executed inside the lib src dir, first arg $1 is the dest libs dir root 36 | function copy() { 37 | # headers 38 | mkdir -p $1/include 39 | cp -rv glm $1/include 40 | 41 | . "$SECURE_SCRIPT" 42 | secure "$1/include/glm/glm.hpp" "glm.pkl" "$VERSION" "$DEFINES" "$BUILD_ID" "$FORMULA_DEPENDS" 43 | 44 | # copy license file 45 | if [ -d "$1/license" ]; then 46 | rm -rf $1/license 47 | fi 48 | mkdir -p $1/license 49 | cp -v copying.txt $1/license/license.txt 50 | } 51 | 52 | # executed inside the lib src dir 53 | function clean() { 54 | echo 55 | # nothing to do 56 | } 57 | 58 | function load() { 59 | . "$LOAD_SCRIPT" 60 | LOAD_RESULT=$(loadsave ${TYPE} "glm" ${ARCH} ${VER} "$LIBS_DIR_REAL/utf8/include" ${PLATFORM}) 61 | PREBUILT=$(echo "$LOAD_RESULT" | tail -n 1) 62 | if [ "$PREBUILT" -eq 1 ]; then 63 | echo 1 64 | else 65 | echo 0 66 | fi 67 | } 68 | -------------------------------------------------------------------------------- /apothecary/formulas/json.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # json 4 | # JSON for Modern C++ http://nlohmann.github.io/json 5 | # https://github.com/nlohmann/json 6 | # 7 | 8 | FORMULA_TYPES=("osx" "msys2" "linux" "vs" "ios" "watchos" "catos" "xros" "tvos" "android" "emscripten") 9 | FORMULA_DEPENDS=() 10 | 11 | # define the version 12 | VER=3.11.3 13 | BUILD_ID=3 14 | DEFINES="" 15 | 16 | # tools for git use 17 | GIT_URL=https://github.com/nlohmann/json 18 | GIT_TAG=v$VER 19 | URL=${GIT_URL}/archive/refs/tags/v$VER.tar.gz 20 | 21 | # download the source code and unpack it into LIB_NAME 22 | function download() { 23 | . "$DOWNLOADER_SCRIPT" 24 | 25 | if [ "$PLATFORM" == "msys2" ] || [ "$PLATFORM" == "vs" ]; then 26 | mkdir json 27 | cd json 28 | downloader "${GIT_URL}/releases/download/v$VER/include.zip" 29 | unzip include.zip 30 | rm include.zip 31 | else 32 | downloader "${URL}" 33 | tar -xf "v${VER}.tar.gz" 34 | mv "json-${VER}" json 35 | rm v$VER.tar.gz 36 | fi 37 | } 38 | 39 | # prepare the build environment, executed inside the lib src dir 40 | function prepare() { 41 | echo 42 | # nothing to do 43 | } 44 | 45 | # executed inside the lib src dir 46 | function build() { 47 | echo 48 | # nothing to do 49 | } 50 | 51 | # executed inside the lib src dir, first arg $1 is the dest libs dir root 52 | function copy() { 53 | # headers 54 | mkdir -p $1/include/nlohmann 55 | cp -v single_include/nlohmann/json.hpp $1/include/nlohmann/json.hpp 56 | 57 | . "$SECURE_SCRIPT" 58 | 59 | secure "$1/include/nlohmann/json.hpp" "json.pkl" "$VERSION" "$DEFINES" "$BUILD_ID" "$FORMULA_DEPENDS" 60 | 61 | # copy license file 62 | if [ -d "$1/license" ]; then 63 | rm -rf $1/license 64 | fi 65 | mkdir -p $1/license 66 | cp -v LICENSE.MIT $1/license/ 67 | } 68 | 69 | # executed inside the lib src dir 70 | function clean() { 71 | if [ "$TYPE" == "linux" -o "$TYPE" == "linux64" ]; then 72 | rm -f *.hpp *:MIT 73 | fi 74 | } 75 | 76 | function load() { 77 | . "$LOAD_SCRIPT" 78 | LOAD_RESULT=$(loadsave ${TYPE} "json" ${ARCH} ${VER} "$LIBS_DIR_REAL/json/include/nlohmann" ${PLATFORM}) 79 | PREBUILT=$(echo "$LOAD_RESULT" | tail -n 1) 80 | if [ "$PREBUILT" -eq 1 ]; then 81 | echo 1 82 | else 83 | echo 0 84 | fi 85 | } 86 | -------------------------------------------------------------------------------- /apothecary/formulas/libssh2.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # libssh2 4 | 5 | # Define the version 6 | FORMULA_TYPES=() 7 | 8 | FORMULA_DEPENDS=("zlib" "openssl") 9 | 10 | VER=1.11.0-dev 11 | GIT_URL=https://github.com/libssh2/libssh2.git 12 | 13 | DEFINES="" 14 | BUILD_ID=1 15 | 16 | function download() { 17 | . "$DOWNLOADER_SCRIPT" 18 | FILE_NAME=libssh2 19 | 20 | if [ -d $FILE_NAME ]; then 21 | echo "Directory $FILE_NAME already exists. Pulling latest changes." 22 | cd $FILE_NAME 23 | git pull origin master 24 | cd .. 25 | else 26 | git clone --depth=1 --branch master $GIT_URL $FILE_NAME 27 | fi 28 | } 29 | 30 | function prepare() { 31 | apothecaryDependencies download 32 | echo "Preparation complete" 33 | } 34 | 35 | function build() { 36 | LIBS_ROOT=$(realpath $LIBS_DIR) 37 | 38 | mkdir -p "build_${TYPE}_${PLATFORM}" 39 | cd "build_${TYPE}_${PLATFORM}" 40 | 41 | cmake .. \ 42 | -DCMAKE_C_FLAGS="${DEFINES}" \ 43 | -DCMAKE_BUILD_TYPE=Release \ 44 | -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ 45 | -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ 46 | -DCMAKE_INSTALL_PREFIX=Release 47 | 48 | cmake --build . --config Release -j${PARALLEL_MAKE} --target install 49 | cd .. 50 | 51 | } 52 | 53 | function copy() { 54 | mkdir -p $1/include 55 | mkdir -p $1/lib/$TYPE 56 | mkdir -p $1/lib/$TYPE/$PLATFORM/ 57 | 58 | cp -v "build_${TYPE}_${PLATFORM}/Release/lib/libssh2.a" $1/lib/$TYPE/$PLATFORM/libssh2.a 59 | cp -Rv "build_${TYPE}_${PLATFORM}/Release/include" $1/ 60 | cp -v LICENSE $1/license/ 61 | } 62 | 63 | function clean() { 64 | if [ -d "build_${TYPE}_${PLATFORM}" ]; then 65 | rm -r build_${TYPE}_${PLATFORM} 66 | fi 67 | } 68 | 69 | function save() { 70 | . "$SAVE_SCRIPT" 71 | savestatus ${TYPE} "libssh2" ${ARCH} ${VER} true "${SAVE_FILE}" 72 | } 73 | 74 | function load() { 75 | . "$LOAD_SCRIPT" 76 | LOAD_RESULT=$(loadsave ${TYPE} "libssh2" ${ARCH} ${VER} "$LIBS_DIR_REAL/$1/lib/$TYPE/$PLATFORM" ${BUILD_ID}) 77 | PREBUILT=$(echo "$LOAD_RESULT" | tail -n 1) 78 | if [ "$PREBUILT" -eq 1 ]; then 79 | echo 1 80 | else 81 | echo 0 82 | fi 83 | } 84 | -------------------------------------------------------------------------------- /apothecary/formulas/libusb/config.h.in: -------------------------------------------------------------------------------- 1 | /* #define to the attribute for default visibility. */ 2 | #define DEFAULT_VISIBILITY @DEFAULT_VISIBILITY@ 3 | 4 | /* #define to 1 to start with debug message logging enabled. */ 5 | #cmakedefine ENABLE_DEBUG_LOGGING 1 6 | 7 | /* #define to 1 to enable message logging. */ 8 | #cmakedefine ENABLE_LOGGING 1 9 | 10 | /* #define to 1 if you have the header file. */ 11 | #cmakedefine HAVE_ASM_TYPES_H 12 | 13 | /* #define to 1 if you have the `clock_gettime' function. */ 14 | #cmakedefine HAVE_CLOCK_GETTIME 1 15 | 16 | /* #define to 1 if the system has eventfd functionality. */ 17 | #cmakedefine HAVE_EVENTFD 1 18 | 19 | /* #define to 1 if the system has the type `nfds_t'. */ 20 | #cmakedefine HAVE_NFDS_T 1 21 | 22 | /* #define to 1 if you have the `pipe2' function. */ 23 | #cmakedefine HAVE_PIPE2 1 24 | 25 | /* #define to 1 if you have the `pthread_condattr_setclock' function. */ 26 | #cmakedefine HAVE_PTHREAD_CONDATTR_SETCLOCK 1 27 | 28 | /* #define to 1 if you have the `pthread_setname_np' function. */ 29 | #cmakedefine HAVE_PTHREAD_SETNAME_NP 1 30 | 31 | /* #define to 1 if you have the `pthread_threadid_np' function. */ 32 | #cmakedefine HAVE_PTHREAD_THREADID_NP 1 33 | 34 | /* #define to 1 if you have the header file. */ 35 | #cmakedefine HAVE_STRING_H 1 36 | 37 | /* #define to 1 if the system has the type `struct timespec'. */ 38 | #cmakedefine HAVE_STRUCT_TIMESPEC 1 39 | 40 | /* #define to 1 if you have the `syslog' function. */ 41 | #cmakedefine HAVE_SYSLOG 1 42 | 43 | /* #define to 1 if you have the header file. */ 44 | #cmakedefine HAVE_SYS_TIME_H 1 45 | 46 | /* #define to 1 if the system has timerfd functionality. */ 47 | #cmakedefine HAVE_TIMERFD 1 48 | 49 | /* #define to 1 if compiling for a POSIX platform. */ 50 | #cmakedefine PLATFORM_POSIX 1 51 | 52 | /* #define to 1 if compiling for a Windows platform. */ 53 | #cmakedefine PLATFORM_WINDOWS 1 54 | 55 | 56 | #if defined(__GNUC__) 57 | #define PRINTF_FORMAT(a, b) __attribute__ ((format (__printf__, a, b))) 58 | #else 59 | #define PRINTF_FORMAT(a, b) 60 | #endif 61 | 62 | /* #define to 1 if you have the ANSI C header files. */ 63 | #cmakedefine STDC_HEADERS 1 64 | 65 | /* #define to 1 to output logging messages to the systemwide log. */ 66 | #cmakedefine USE_SYSTEM_LOGGING_FACILITY 67 | 68 | /* Enable GNU extensions. */ 69 | #cmakedefine _GNU_SOURCE 1 70 | 71 | /* Define to `__inline__' or `__inline' if that's what the C compiler 72 | calls it, or to nothing if 'inline' is not supported under any name. */ 73 | #ifndef __cplusplus 74 | /* #undef inline */ 75 | #endif 76 | -------------------------------------------------------------------------------- /apothecary/formulas/metalangle/metalangle/ios/xcode/MGLKit/MGLKitPlatform.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2020 Le Hoang Quyen. All rights reserved. 3 | // Use of this source code is governed by a BSD-style license that can be 4 | // found in the LICENSE file. 5 | // 6 | 7 | #ifndef MGLKitPlatform_h 8 | #define MGLKitPlatform_h 9 | 10 | #include 11 | 12 | #if TARGET_OS_IOS || TARGET_OS_MACCATALYST || TARGET_OS_TV || TARGET_OS_VISION 13 | # include 14 | 15 | @compatibility_alias MGLKNativeView UIView; 16 | @compatibility_alias MGLKNativeViewController UIViewController; 17 | 18 | # define MGLKApplicationWillResignActiveNotification UIApplicationWillResignActiveNotification 19 | # define MGLKApplicationDidBecomeActiveNotification UIApplicationDidBecomeActiveNotification 20 | 21 | #elif TARGET_OS_OSX 22 | # include 23 | 24 | @compatibility_alias MGLKNativeView NSView; 25 | @compatibility_alias MGLKNativeViewController NSViewController; 26 | 27 | # define MGLKApplicationWillResignActiveNotification NSApplicationWillResignActiveNotification 28 | # define MGLKApplicationDidBecomeActiveNotification NSApplicationDidBecomeActiveNotification 29 | #else 30 | # error "Unsupported platform" 31 | #endif 32 | 33 | #endif /* MGLKitPlatform_h */ 34 | -------------------------------------------------------------------------------- /apothecary/formulas/metalangle/metalangle/ios/xcode/OpenGLES.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /apothecary/formulas/metalangle/metalangle/ios/xcode/OpenGLES.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /apothecary/formulas/metalangle/metalangle/ios/xcode/OpenGLES.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /apothecary/formulas/opencv/ios_conversions.mm: -------------------------------------------------------------------------------- 1 | /*M/////////////////////////////////////////////////////////////////////////////////////// 2 | // 3 | // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 4 | // 5 | // By downloading, copying, installing or using the software you agree to this license. 6 | // If you do not agree to this license, do not download, install, 7 | // copy or use the software. 8 | // 9 | // 10 | // License Agreement 11 | // For Open Source Computer Vision Library 12 | // 13 | // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. 14 | // Copyright (C) 2009, Willow Garage Inc., all rights reserved. 15 | // Third party copyrights are property of their respective owners. 16 | // 17 | // Redistribution and use in source and binary forms, with or without modification, 18 | // are permitted provided that the following conditions are met: 19 | // 20 | // * Redistribution's of source code must retain the above copyright notice, 21 | // this list of conditions and the following disclaimer. 22 | // 23 | // * Redistribution's in binary form must reproduce the above copyright notice, 24 | // this list of conditions and the following disclaimer in the documentation 25 | // and/or other materials provided with the distribution. 26 | // 27 | // * The name of the copyright holders may not be used to endorse or promote products 28 | // derived from this software without specific prior written permission. 29 | // 30 | // This software is provided by the copyright holders and contributors "as is" and 31 | // any express or implied warranties, including, but not limited to, the implied 32 | // warranties of merchantability and fitness for a particular purpose are disclaimed. 33 | // In no event shall the Intel Corporation or contributors be liable for any direct, 34 | // indirect, incidental, special, exemplary, or consequential damages 35 | // (including, but not limited to, procurement of substitute goods or services; 36 | // loss of use, data, or profits; or business interruption) however caused 37 | // and on any theory of liability, whether in contract, strict liability, 38 | // or tort (including negligence or otherwise) arising in any way out of 39 | // the use of this software, even if advised of the possibility of such damage. 40 | // 41 | //M*/ 42 | 43 | #include 44 | 45 | #if TARGET_OS_IOS && !TARGET_OS_MACCATALYST 46 | 47 | #import 48 | #include "apple_conversions.h" 49 | 50 | CV_EXPORTS UIImage* MatToUIImage(const cv::Mat& image); 51 | CV_EXPORTS void UIImageToMat(const UIImage* image, cv::Mat& m, bool alphaExist); 52 | 53 | UIImage* MatToUIImage(const cv::Mat& image) { 54 | // Creating CGImage from cv::Mat 55 | CGImageRef imageRef = MatToCGImage(image); 56 | 57 | // Getting UIImage from CGImage 58 | UIImage *uiImage = [UIImage imageWithCGImage:imageRef]; 59 | CGImageRelease(imageRef); 60 | 61 | return uiImage; 62 | } 63 | 64 | void UIImageToMat(const UIImage* image, cv::Mat& m, bool alphaExist) { 65 | CGImageRef imageRef = image.CGImage; 66 | CGImageToMat(imageRef, m, alphaExist); 67 | } 68 | 69 | #endif 70 | -------------------------------------------------------------------------------- /apothecary/formulas/pixman/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(pixman) 2 | set(PACKAGE pixman) 3 | cmake_minimum_required(VERSION 2.8.8) 4 | 5 | # detect version (old) 6 | #file (READ configure.ac configure_ac) 7 | #string (REGEX REPLACE ".*pixman_major], ([0-9]+).*" "\\1" PIXMAN_VERSION_MAJOR ${configure_ac}) 8 | #string (REGEX REPLACE ".*pixman_minor], ([0-9]+).*" "\\1" PIXMAN_VERSION_MINOR ${configure_ac}) 9 | #string (REGEX REPLACE ".*pixman_micro], ([0-9]+).*" "\\1" PIXMAN_VERSION_MICRO ${configure_ac}) 10 | 11 | #set version 12 | set(PIXMAN_VERSION_MAJOR 0) 13 | set(PIXMAN_VERSION_MINOR 43) 14 | set(PIXMAN_VERSION_MICRO 4) 15 | set(PIXMAN_VERSION "${PIXMAN_VERSION_MAJOR}.${PIXMAN_VERSION_MINOR}.${PIXMAN_VERSION_MICRO}") 16 | 17 | if(NOT MSVC) 18 | option(BUILD_SHARED "build shared library" ON) 19 | endif() 20 | option(BUILD_STATIC "build static library" ON) 21 | if(BUILD_STATIC) 22 | option(BUILD_TESTS "build tests" OFF) 23 | endif() 24 | 25 | set(CMAKE_DEBUG_POSTFIX "d") 26 | 27 | #dependencies 28 | find_package(Threads) 29 | if(BUILD_TESTS) 30 | find_package(PNG) 31 | find_package(OpenMP) 32 | endif() 33 | 34 | #arch optimizations 35 | include(${CMAKE_SOURCE_DIR}/cmake/arch_detect.cmake) 36 | include(${CMAKE_SOURCE_DIR}/cmake/arch_configure.cmake) 37 | 38 | #config 39 | include(${CMAKE_SOURCE_DIR}/cmake/config_configure.cmake) 40 | 41 | include_directories(/opt/local/include) 42 | include_directories( 43 | ${CMAKE_BINARY_DIR}/pixman 44 | ${CMAKE_SOURCE_DIR}/pixman 45 | ${CMAKE_BINARY_DIR}/include/pixman 46 | ) 47 | 48 | if(MSVC) 49 | set(CMAKE_C_FLAGS "/wd4244 /wd4146 ${CMAKE_C_FLAGS}") 50 | endif() 51 | 52 | if(BUILD_SHARED OR BUILD_STATIC) 53 | add_subdirectory(pixman) 54 | endif() 55 | 56 | if(BUILD_TESTS) 57 | add_subdirectory(test) 58 | endif(BUILD_TESTS) 59 | 60 | include(${CMAKE_SOURCE_DIR}/cmake/cmake_package.cmake) -------------------------------------------------------------------------------- /apothecary/formulas/pixman/cmake/PixmanConfig.cmake: -------------------------------------------------------------------------------- 1 | include("${CMAKE_CURRENT_LIST_DIR}/PixmanTargets.cmake") -------------------------------------------------------------------------------- /apothecary/formulas/pixman/cmake/arch_configure.cmake: -------------------------------------------------------------------------------- 1 | target_architecture(ARCHITECTURE) 2 | #options for arch 3 | if(ARCHITECTURE STREQUAL "i386" OR ARCHITECTURE STREQUAL "x86_64") 4 | SET(X86 1) 5 | OPTION(X86_MMX "Enable MMX optimizations" OFF) 6 | OPTION(X86_SSE2 "Enable SSE2 optimizations" OFF) 7 | OPTION(X86_SSSE3 "Enable SSSE3 optimizations" OFF) 8 | elseif(ARCHITECTURE STREQUAL "arm" OR ARCHITECTURE STREQUAL "arm64" OR ARCHITECTURE STREQUAL "arm64e") 9 | SET(ARM 1) 10 | OPTION(ARM_IWMMXT "Enable IWMMXT compiler intrinsics" OFF) 11 | OPTION(ARM_NEON "Enable NEON optimizations" OFF) 12 | OPTION(ARM_SIMD "Enable SIMD optimizations" OFF) 13 | elseif(ARCHITECTURE STREQUAL "ppc" OR ARCHITECTURE STREQUAL "ppc64") 14 | SET(PPC 1) 15 | OPTION(PPC_VMX "Enable VMX optimizations" OFF) 16 | else() 17 | SET(MIPS 1) 18 | OPTION(MIPS_DSPR2 "Enable DSPR2 optimizations" OFF) 19 | OPTION(MIPS_LOONGSON_MMI "Enable Loongson Multimedia Instructions" OFF) 20 | endif(ARCHITECTURE STREQUAL "i386" OR ARCHITECTURE STREQUAL "x86_64") -------------------------------------------------------------------------------- /apothecary/formulas/pixman/cmake/cmake_package.cmake: -------------------------------------------------------------------------------- 1 | include(CMakePackageConfigHelpers) 2 | set(ConfigPackageLocation lib/cmake/pixman) 3 | 4 | write_basic_package_version_file( 5 | "${CMAKE_CURRENT_BINARY_DIR}/pixman/PixmanConfigVersion.cmake" 6 | VERSION 7 | ${PIXMAN_VERSION} 8 | COMPATIBILITY 9 | AnyNewerVersion 10 | ) 11 | 12 | export( 13 | EXPORT 14 | PixmanTargets 15 | FILE 16 | "${CMAKE_CURRENT_BINARY_DIR}/pixman/PixmanTargets.cmake" 17 | NAMESPACE 18 | Upstream:: 19 | ) 20 | 21 | configure_file(cmake/PixmanConfig.cmake 22 | "${CMAKE_CURRENT_BINARY_DIR}/pixman/PixmanConfig.cmake" 23 | COPYONLY 24 | ) 25 | 26 | install( 27 | EXPORT 28 | PixmanTargets 29 | FILE 30 | PixmanTargets.cmake 31 | NAMESPACE 32 | Upstream:: 33 | DESTINATION 34 | ${ConfigPackageLocation} 35 | ) 36 | 37 | install( 38 | FILES 39 | "${CMAKE_CURRENT_BINARY_DIR}/pixman/PixmanConfig.cmake" 40 | "${CMAKE_CURRENT_BINARY_DIR}/pixman/PixmanConfigVersion.cmake" 41 | DESTINATION 42 | ${ConfigPackageLocation} 43 | COMPONENT 44 | Devel 45 | ) -------------------------------------------------------------------------------- /apothecary/formulas/pixman/cmake/config_configure.cmake: -------------------------------------------------------------------------------- 1 | # Checking Headers and Functions for pixman 2 | add_definitions(-DHAVE_CONFIG_H) 3 | 4 | include( CheckIncludeFile ) 5 | include( CheckFunctionExists ) 6 | include( CheckLibraryExists ) 7 | include( CheckTypeSize) 8 | 9 | if(OPENMP_FOUND) 10 | set(USE_OPENMP 1) 11 | endif() 12 | 13 | if(PNG_FOUND) 14 | set(HAVE_LIBPNG 1) 15 | endif() 16 | 17 | if(CMAKE_USE_PTHREADS_INIT) 18 | set(HAVE_PTHREADS 1) 19 | endif() 20 | 21 | if(CMAKE_COMPILER_IS_GNUCC) 22 | set(HAVE_GCC_VECTOR_EXTENSIONS 1) 23 | endif() 24 | 25 | check_include_file( "dlfcn.h" HAVE_DLFCN_H ) 26 | check_include_file( "fenv.h" HAVE_FENV_H ) 27 | check_include_file( "inttypes.h" HAVE_INTTYPES_H ) 28 | check_include_file( "memory.h" HAVE_MEMORY_H ) 29 | check_include_file( "stdint.h" HAVE_STDINT_H ) 30 | check_include_file( "stdlib.h" HAVE_STDLIB_H ) 31 | check_include_file( "strings.h" HAVE_STRINGS_H ) 32 | check_include_file( "string.h" HAVE_STRING_H ) 33 | check_include_file( "sys/mman.h" HAVE_SYS_MMAN_H ) 34 | check_include_file( "sys/stat.h" HAVE_SYS_STAT_H ) 35 | check_include_file( "sys/types.h" HAVE_SYS_TYPES_H ) 36 | check_include_file( "unistd.h" HAVE_UNISTD_H ) 37 | 38 | check_function_exists( __builtin_clz HAVE_BUILTIN_CLZ ) 39 | check_function_exists( alarm HAVE_ALARM ) 40 | check_function_exists( feenableexcept HAVE_FEENABLEEXCEPT ) 41 | check_function_exists( getisax HAVE_GETISAX ) 42 | check_function_exists( getpagesize HAVE_GETPAGESIZE ) 43 | check_function_exists( gettimeofday HAVE_GETTIMEOFDAY ) 44 | check_function_exists( mmap HAVE_MMAP ) 45 | check_function_exists( mprotect HAVE_MPROTECT ) 46 | check_function_exists( posix_memalign HAVE_POSIX_MEMALIGN ) 47 | check_function_exists( sigaction HAVE_SIGACTION ) 48 | 49 | CHECK_TYPE_SIZE("long" SIZEOF_LONG) 50 | CHECK_TYPE_SIZE("__float128" SIZEOF___FLOAT128) 51 | if(SIZEOF___FLOAT128) 52 | set(HAVE_FLOAT128 1) 53 | endif() 54 | 55 | if (ARM_IWMMXT) 56 | set(USE_ARM_IWMMXT 1) 57 | endif (ARM_IWMMXT) 58 | if (ARM_NEON) 59 | set(USE_ARM_NEON 1) 60 | endif (ARM_NEON) 61 | if (ARM_SIMD) 62 | set(USE_ARM_SIMD 1) 63 | endif (ARM_SIMD) 64 | 65 | if (PPC_VMX) 66 | set(USE_VMX 1) 67 | endif (PPC_VMX) 68 | 69 | if (MIPS_LOONGSON_MMI) 70 | set(USE_LOONGSON_MMI 1) 71 | endif (MIPS_LOONGSON_MMI) 72 | if (MIPS_DSPR2) 73 | set(USE_MIPS_DSPR2 1) 74 | endif (MIPS_DSPR2) 75 | 76 | if (X86_MMX) 77 | set(USE_X86_MMX 1) 78 | if(CMAKE_COMPILER_IS_GNUCC) 79 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmmx") 80 | endif(CMAKE_COMPILER_IS_GNUCC) 81 | endif (X86_MMX) 82 | if (X86_SSE2) 83 | set(USE_SSE2 1) 84 | if(CMAKE_COMPILER_IS_GNUCC) 85 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2") 86 | endif(CMAKE_COMPILER_IS_GNUCC) 87 | endif (X86_SSE2) 88 | if (X86_SSSE3) 89 | set(USE_SSSE3 1) 90 | if(CMAKE_COMPILER_IS_GNUCC) 91 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse3 -mssse3") 92 | endif(CMAKE_COMPILER_IS_GNUCC) 93 | endif(X86_SSSE3) 94 | 95 | configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/config_source.cmake ${CMAKE_BINARY_DIR}/include/pixman/pixman-config.h ) 96 | configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/pixman/pixman-version.h.in ${CMAKE_BINARY_DIR}/include/pixman/pixman-version.h) -------------------------------------------------------------------------------- /apothecary/formulas/poco/Android: -------------------------------------------------------------------------------- 1 | # 2 | # $Id: //poco/1.4/build/config/Android#3 $ 3 | # 4 | # Android 5 | # 6 | # Make settings for Android NDK 7 | # 8 | 9 | # 10 | # General Settings 11 | # 12 | LINKMODE ?= STATIC 13 | ANDROID_ABI ?= armeabi 14 | POCO_TARGET_OSNAME = Android 15 | POCO_TARGET_OSARCH = $(ANDROID_ABI) 16 | 17 | ifeq ($(ANDROID_ABI),armeabi) 18 | TOOL = arm-linux-androideabi 19 | ARCHFLAGS = -mthumb 20 | else 21 | ifeq ($(ANDROID_ABI),armeabi-v7a) 22 | TOOL = arm-linux-androideabi 23 | ARCHFLAGS = -march=armv7-a -mfloat-abi=softfp -target armv7-none-linux-androideabi 24 | LINKFLAGS = -Wl,--fix-cortex-a8 -target armv7-none-linux-androideabi 25 | else 26 | ifeq ($(ANDROID_ABI),arm64-v8a) 27 | TOOL = aarch64-linux-android 28 | ARCHFLAGS = -target aarch64-linux-android 29 | LINKFLAGS = -target aarch64-linux-android 30 | else 31 | ifeq ($(ANDROID_ABI),x86) 32 | TOOL = i686-linux-android 33 | ARCHFLAGS = -march=i686 -msse3 -mstackrealign -mfpmath=sse -fno-stack-protector 34 | else 35 | $(error Invalid ABI specified in ANDROID_ABI) 36 | endif 37 | endif 38 | endif 39 | endif 40 | 41 | # 42 | # Define Tools 43 | # 44 | CC = clang 45 | CXX = clang++ 46 | LINK = $(CXX) 47 | STRIP = $(TOOL)-strip 48 | LIB = $(TOOL)-ar -cr 49 | RANLIB = $(TOOL)-ranlib 50 | SHLIB = $(CXX) -shared -Wl,-soname,$(notdir $@) -o $@ 51 | SHLIBLN = $(POCO_BASE)/build/script/shlibln 52 | DEP = $(POCO_BASE)/build/script/makedepend.gcc 53 | SHELL = sh 54 | RM = rm -rf 55 | CP = cp 56 | MKDIR = mkdir -p 57 | 58 | # 59 | # Extension for Shared Libraries 60 | # 61 | SHAREDLIBEXT = .so.$(target_version) 62 | SHAREDLIBLINKEXT = .so 63 | 64 | # 65 | # Compiler and Linker Flags 66 | # 67 | CFLAGS = $(ARCHFLAGS) -fpic -ffunction-sections -funwind-tables -fno-strict-aliasing 68 | CFLAGS32 = 69 | CFLAGS64 = 70 | CXXFLAGS = $(ARCHFLAGS) -fpic -ffunction-sections -funwind-tables -fno-strict-aliasing -frtti -fexceptions 71 | CXXFLAGS32 = 72 | CXXFLAGS64 = 73 | LINKFLAGS += 74 | LINKFLAGS32 = 75 | LINKFLAGS64 = 76 | STATICOPT_CC = 77 | STATICOPT_CXX = 78 | STATICOPT_LINK = -static 79 | SHAREDOPT_CC = 80 | SHAREDOPT_CXX = 81 | SHAREDOPT_LINK = -Wl,-rpath,$(LIBPATH) 82 | DEBUGOPT_CC = -g -D_DEBUG 83 | DEBUGOPT_CXX = -g -D_DEBUG 84 | DEBUGOPT_LINK = -g 85 | RELEASEOPT_CC = -O3 -DNDEBUG -fomit-frame-pointer 86 | RELEASEOPT_CXX = -O2 -DNDEBUG -fomit-frame-pointer 87 | RELEASEOPT_LINK = -O2 88 | 89 | # 90 | # System Specific Flags 91 | # 92 | SYSFLAGS = -DPOCO_ANDROID -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_WSTRING -DPOCO_NO_SHAREDMEMORY 93 | 94 | # 95 | # System Specific Libraries 96 | # 97 | SYSLIBS = -lc++_shared 98 | -------------------------------------------------------------------------------- /apothecary/formulas/poco/AppleTV: -------------------------------------------------------------------------------- 1 | # 2 | # $Id$ 3 | # 4 | # AppleTV 5 | # 6 | # Build settings for tvOS 9.0 and newer 7 | # 8 | 9 | # 10 | # General Settings 11 | # 12 | # tvOS does not allow dynamic linking to user libraries 13 | # 14 | LINKMODE ?= STATIC 15 | 16 | # 17 | # If the SDK is defined use it 18 | # Otherwise find the latest version installed 19 | # 20 | # TVOS_SDK_VERSION = 9.0 21 | 22 | # if TVOS_SDK_VERSION_MIN is defined use that 23 | # Otherwise use the version found. 24 | 25 | TVOS_SDK ?= AppleTVOS 26 | TVOS_SDK_ROOT ?= $(shell xcode-select -print-path)/Platforms/$(TVOS_SDK).platform/Developer/SDKs 27 | TVOS_SDK_ROOT_DIR = $(TVOS_SDK_ROOT)/$(TVOS_SDK) 28 | TVOS_SDK_BASE = $(shell ls -d $(TVOS_SDK_ROOT_DIR)$(TVOS_SDK_VERSION)*.sdk | tail -1) 29 | TVOS_SDK_VERSION_MIN ?= $(patsubst %.sdk,%,$(patsubst $(TVOS_SDK_ROOT_DIR)%,%,$(TVOS_SDK_BASE))) 30 | 31 | POCO_TARGET_OSNAME ?= $(TVOS_SDK) 32 | POCO_TARGET_OSARCH ?= arm64 33 | TOOL_PREFIX ?= $(shell xcode-select -print-path)/Platforms/$(TVOS_SDK).platform/Developer/usr/bin 34 | OSFLAGS ?= -arch $(POCO_TARGET_OSARCH) -isysroot $(TVOS_SDK_BASE) -mtvos-version-min=$(TVOS_SDK_VERSION_MIN) -fembed-bitcode 35 | 36 | # 37 | # Tools 38 | # 39 | # If GCC_VER is defined then use it. 40 | # Otherwise select the latest version 41 | # 42 | 43 | CC = $(shell xcrun -find clang) 44 | CXX = $(shell xcrun -find clang++) 45 | 46 | LINK = $(CXX) -bind_at_load 47 | LIB = libtool -static -o 48 | RANLIB = ranlib 49 | SHLIB = $(CXX) $(OSFLAGS) -dynamiclib -Wl,-install_name,$@ -o $@ 50 | DYLIB = $(CXX) $(OSFLAGS) -dynamic -bundle -read_only_relocs suppress -Wl,-bind_at_load -o $@ 51 | SHLIBLN = $(POCO_BASE)/build/script/shlibln 52 | STRIP = 53 | DEP = $(POCO_BASE)/build/script/makedepend.gcc 54 | SHELL = sh 55 | RM = rm -rf 56 | CP = cp 57 | MKDIR = mkdir -p 58 | 59 | # 60 | # Extension for Shared Libraries 61 | # 62 | SHAREDLIBEXT = .$(target_version).dylib 63 | SHAREDLIBLINKEXT = .dylib 64 | 65 | # 66 | # Compiler and Linker Flags 67 | # 68 | CFLAGS = $(OSFLAGS) 69 | CFLAGS32 = 70 | CFLAGS64 = 71 | CXXFLAGS = $(OSFLAGS) -std=c++14 -stdlib=libc++ -Wall -Wno-sign-compare 72 | CXXFLAGS32 = 73 | CXXFLAGS64 = 74 | LINKFLAGS = $(OSFLAGS) -std=c++14 -stdlib=libc++ 75 | LINKFLAGS32 = 76 | LINKFLAGS64 = 77 | STATICOPT_CC = 78 | STATICOPT_CXX = 79 | STATICOPT_LINK = 80 | SHAREDOPT_CC = -fPIC -fembed-bitcode 81 | SHAREDOPT_CXX = -fPIC -fembed-bitcode 82 | SHAREDOPT_LINK = 83 | DEBUGOPT_CC = -g -D_DEBUG=$(DEBUGLEVEL) 84 | DEBUGOPT_CXX = -g -D_DEBUG=$(DEBUGLEVEL) 85 | DEBUGOPT_LINK = 86 | RELEASEOPT_CC = -DNDEBUG -O2 87 | RELEASEOPT_CXX = -DNDEBUG -O 88 | RELEASEOPT_LINK = 89 | 90 | # 91 | # System Specific Flags 92 | # 93 | SYSFLAGS = -DPOCO_HAVE_IPv6 -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_STAT64 -DPOCO_NO_SHAREDLIBS -DPOCO_NO_NET_IFTYPES -DPOCO_NO_FORK_EXEC 94 | 95 | # 96 | # System Specific Libraries 97 | # 98 | SYSLIBS = -ldl -------------------------------------------------------------------------------- /apothecary/formulas/poco/AppleTVSimulator: -------------------------------------------------------------------------------- 1 | # 2 | # $Id$ 3 | # 4 | # AppleTVSimulator 5 | # 6 | # Build settings for tvOS 9.0 Simulator 7 | # 8 | 9 | TVOS_SDK = AppleTVSimulator 10 | POCO_TARGET_OSARCH = x86_64 11 | OSFLAGS = -arch $(POCO_TARGET_OSARCH) -arch arm64 -isysroot $(TVOS_SDK_BASE) -mtvos-simulator-version-min=$(TVOS_SDK_VERSION_MIN) -fembed-bitcode 12 | 13 | include $(POCO_BASE)/build/config/AppleTV -------------------------------------------------------------------------------- /apothecary/formulas/poco/Linux: -------------------------------------------------------------------------------- 1 | # 2 | # $Id: //poco/1.4/build/config/Linux#2 $ 3 | # 4 | # Linux 5 | # 6 | # Make settings for Linux 2.6/gcc 3.3 7 | # 8 | # 9 | 10 | # 11 | # General Settings 12 | # 13 | LINKMODE ?= SHARED 14 | 15 | # 16 | # Define Tools 17 | # 18 | CC ?= ${CROSS_COMPILE}gcc 19 | CXX ?= ${CROSS_COMPILE}g++ 20 | LINK ?= $(CXX) 21 | LIB ?= ${CROSS_COMPILE}ar -cr 22 | RANLIB ?= ${CROSS_COMPILE}ranlib 23 | SHLIB = $(CXX) -shared -Wl,-soname,$(notdir $@) -o $@ 24 | SHLIBLN = $(POCO_BASE)/build/script/shlibln 25 | STRIP ?= ${CROSS_COMPILE}strip 26 | DEP = $(POCO_BASE)/build/script/makedepend.gcc 27 | SHELL ?= sh 28 | RM ?= rm -rf 29 | CP ?= cp 30 | MKDIR ?= mkdir -p 31 | 32 | # 33 | # Extension for Shared Libraries 34 | # 35 | SHAREDLIBEXT = .so.$(target_version) 36 | SHAREDLIBLINKEXT = .so 37 | 38 | # 39 | # Compiler and Linker Flags 40 | # 41 | CFLAGS = -std=c99 42 | CFLAGS32 = 43 | CFLAGS64 = 44 | CXXFLAGS = -Wall -Wno-sign-compare 45 | CXXFLAGS32 = 46 | CXXFLAGS64 = 47 | LINKFLAGS = 48 | LINKFLAGS32 = 49 | LINKFLAGS64 = 50 | STATICOPT_CC = 51 | STATICOPT_CXX = 52 | STATICOPT_LINK = -static 53 | SHAREDOPT_CC = -fPIC 54 | SHAREDOPT_CXX = -fPIC 55 | SHAREDOPT_LINK = -Wl,-rpath,$(LIBPATH) 56 | DEBUGOPT_CC = -g -D_DEBUG 57 | DEBUGOPT_CXX = -g -D_DEBUG 58 | DEBUGOPT_LINK = -g 59 | RELEASEOPT_CC = -O2 -DNDEBUG 60 | RELEASEOPT_CXX = -O2 -DNDEBUG 61 | RELEASEOPT_LINK = -O2 62 | 63 | # 64 | # System Specific Flags 65 | # 66 | SYSFLAGS = -D_XOPEN_SOURCE=600 -D_REENTRANT -D_THREAD_SAFE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DPOCO_HAVE_FD_EPOLL 67 | 68 | # 69 | # System Specific Libraries 70 | # 71 | SYSLIBS = -lpthread -ldl -lrt 72 | -------------------------------------------------------------------------------- /apothecary/formulas/poco/MinGWConfig64: -------------------------------------------------------------------------------- 1 | # 2 | # $Id: //poco/1.4/build/config/MinGW#2 $ 3 | # 4 | # MinGW32 5 | # 6 | # Make settings for MinGW32 7 | # 8 | 9 | # 10 | # General Settings 11 | # 12 | LINKMODE = STATIC 13 | POCO_TARGET_OSNAME = MinGW 14 | POCO_TARGET_OSARCH = i686 15 | 16 | # 17 | # Define Tools 18 | # 19 | CC = /mingw32/bin/gcc 20 | CXX = /mingw32/bin/g++ 21 | LINK = $(CXX) 22 | LIB = /mingw32/bin/ar -cr 23 | RANLIB = ranlib 24 | SHLIB = $(CXX) -shared -o $@ -Wl,--out-implib=$(dir $@)$(subst cyg,lib,$(basename $(notdir $@))).a 25 | SHLIBLN = $(POCO_BASE)/build/script/shlibln 26 | STRIP = 27 | DEP = $(POCO_BASE)/build/script/makedepend.gcc 28 | SHELL = sh 29 | RM = rm -rf 30 | CP = cp 31 | MKDIR = mkdir -p 32 | 33 | # 34 | # Extension for Shared Libraries 35 | # 36 | SHAREDLIBEXT = .dll 37 | SHAREDLIBLINKEXT = .dll 38 | 39 | BINEXT = .exe 40 | 41 | # 42 | # Compiler and Linker Flags 43 | # 44 | CFLAGS = 45 | CFLAGS32 = 46 | CFLAGS64 = 47 | CXXFLAGS = 48 | CXXFLAGS32 = 49 | CXXFLAGS64 = 50 | LINKFLAGS = -Wl,--allow-multiple-definition 51 | LINKFLAGS32 = 52 | LINKFLAGS64 = 53 | STATICOPT_CC = 54 | STATICOPT_CXX = 55 | STATICOPT_LINK = -static 56 | SHAREDOPT_CC = 57 | SHAREDOPT_CXX = 58 | SHAREDOPT_LINK = -shared 59 | DEBUGOPT_CC = -g -D_DEBUG 60 | DEBUGOPT_CXX = -g -D_DEBUG 61 | DEBUGOPT_LINK = -g 62 | RELEASEOPT_CC = -O2 -DNDEBUG 63 | RELEASEOPT_CXX = -O2 -DNDEBUG 64 | RELEASEOPT_LINK = -O2 65 | 66 | # 67 | # System Specific Flags 68 | # 69 | SYSFLAGS = -D_WIN32 -DMINGW32 -DWINVER=0x501 -DPOCO_NO_FPENVIRONMENT -DPCRE_STATIC -DPOCO_THREAD_STACK_SIZE -DPOCO_STATIC -DPOCO_NO_AUTOMATIC_LIB_INIT -I/mingw32/include 70 | 71 | # 72 | # System Specific Libraries 73 | # 74 | SYSLIBS = -L/mingw64/lib -liphlpapi -lssl -lcrypto -lws2_32 75 | -------------------------------------------------------------------------------- /apothecary/formulas/poco/android.patch: -------------------------------------------------------------------------------- 1 | --- Foundation/src/Process_UNIX.cpp Aug 18 21:39:41 2014 2 | +++ Foundation/src/Process_UNIX.cpp Aug 18 21:39:51 2014 3 | @@ -200,7 +200,8 @@ 4 | if (outPipe) outPipe->close(Pipe::CLOSE_BOTH); 5 | if (errPipe) errPipe->close(Pipe::CLOSE_BOTH); 6 | // close all open file descriptors other than stdin, stdout, stderr 7 | - for (int i = 3; i < getdtablesize(); ++i) 8 | + struct rlimit r1; 9 | + for (int i = 3; i < getrlimit(RLIMIT_NOFILE, &r1); ++i) 10 | { 11 | close(i); 12 | } 13 | -------------------------------------------------------------------------------- /apothecary/formulas/poco/components: -------------------------------------------------------------------------------- 1 | Foundation 2 | XML 3 | Util 4 | Net 5 | Crypto 6 | NetSSL_OpenSSL 7 | Data 8 | Data/SQLite 9 | Zip 10 | PDF 11 | JSON 12 | -------------------------------------------------------------------------------- /apothecary/formulas/portaudio.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # PortAudio 4 | # Portable Cross-platform Audio I/O 5 | # http://www.portaudio.com/ 6 | # 7 | # build not currently needed on any platform 8 | 9 | FORMULA_TYPES=("") 10 | FORMULA_DEPENDS=() 11 | 12 | # define the version 13 | VER=stable_v19_20110326 14 | BUILD_ID=1 15 | DEFINES="" 16 | 17 | # tools for git use 18 | GIT_URL= 19 | GIT_TAG= 20 | 21 | # download the source code and unpack it into LIB_NAME 22 | function download() { 23 | curl -O http://www.portaudio.com/archives/pa_$VER.tgz 24 | tar -xf pa_$VER.tgz 25 | rm pa_$VER.tgz 26 | } 27 | 28 | # prepare the build environment, executed inside the lib src dir 29 | function prepare() { 30 | : # noop 31 | } 32 | 33 | # executed inside the lib src dir 34 | function build() { 35 | echo "build not needed for $TYPE" 36 | } 37 | 38 | # executed inside the lib src dir, first arg $1 is the dest libs dir root 39 | function copy() { 40 | 41 | # headers 42 | mkdir -p $1/include 43 | cp -Rv include/* $1/include 44 | 45 | # copy license file 46 | if [ -d "$1/license" ]; then 47 | rm -rf $1/license 48 | fi 49 | mkdir -p $1/license 50 | cp -v LICENSE.txt $1/license/ 51 | } 52 | 53 | # executed inside the lib src dir 54 | function clean() { 55 | : # noop 56 | } 57 | -------------------------------------------------------------------------------- /apothecary/formulas/svgtiny/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | project(svgtiny VERSION 0.1.8) 3 | 4 | set(COMPONENT_TYPE "lib-static") 5 | 6 | # Find libxml2 package 7 | if(NOT LIBXML2_INCLUDE_DIR OR NOT LIBXML2_LIBRARY) 8 | message(FATAL_ERROR "Please specify the LIBXML2_ROOT variable to the root directory of libxml2 installation.") 9 | endif() 10 | 11 | if(NOT LIBXML2_INCLUDE_DIR) 12 | # Try to get the value from the environment variable 13 | if(DEFINED ENV{LIBXML2_INCLUDE_DIR}) 14 | set(LIBXML2_INCLUDE_DIR $ENV{LIBXML2_INCLUDE_DIR}) 15 | else() 16 | message(FATAL_ERROR "LIBXML2_INCLUDE_DIR is not set and cannot be found in the environment variables.") 17 | endif() 18 | endif() 19 | 20 | get_filename_component(LIBXML2_INCLUDE_DIR ${LIBXML2_INCLUDE_DIR} ABSOLUTE) 21 | 22 | file(GLOB_RECURSE SRC_FILES 23 | src/*.c 24 | libdom/src/events/*.c 25 | libdom/src/core/*.c 26 | libdom/src/html/*.c 27 | libdom/src/utils/*.c 28 | libdom/bindings/xml/libxml_xmlparser.c 29 | libwapcaplet/src/*.c 30 | libparserutils/src/*.c 31 | libparserutils/src/charset/*.c 32 | libparserutils/src/charset/codecs/*.c 33 | libparserutils/src/charset/encodings/*.c 34 | libparserutils/src/input/*.c 35 | libparserutils/src/utils/*.c 36 | ) 37 | 38 | 39 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE -DWITHOUT_ICONV_FILTER") 40 | 41 | if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 2.0) 42 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") 43 | else() 44 | # __inline__ is a GCCism 45 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Dinline=__inline__") 46 | endif() 47 | 48 | # BeOS/Haiku/AmigaOS standard library headers create warnings 49 | if (NOT "${CMAKE_BUILD_TYPE}" MATCHES "i586-pc-haiku" AND NOT "${CMAKE_BUILD_TYPE}" MATCHES "amigaos") 50 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNFLAGS}") 51 | endif() 52 | 53 | 54 | include_directories( 55 | ${CMAKE_CURRENT_SOURCE_DIR}/include 56 | ${CMAKE_CURRENT_SOURCE_DIR}/src 57 | ${CMAKE_CURRENT_SOURCE_DIR}/libdom/include 58 | ${CMAKE_CURRENT_SOURCE_DIR}/libdom/src 59 | ${CMAKE_CURRENT_SOURCE_DIR}/libdom/bindings 60 | ${CMAKE_CURRENT_SOURCE_DIR}/libwapcaplet/include 61 | ${CMAKE_CURRENT_SOURCE_DIR}/libparserutils/include 62 | ${CMAKE_CURRENT_SOURCE_DIR}/libparserutils/src 63 | ) 64 | 65 | 66 | add_library(svgtiny STATIC ${SRC_FILES}) 67 | target_link_libraries(svgtiny dom wapcaplet expat m ${LIBXML2_LIBRARY}) 68 | target_include_directories(svgtiny PUBLIC ${LIBXML2_INCLUDE_DIR}) 69 | 70 | if(DO_XML_INSTALL) 71 | install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/libdom/bindings/xml/xmlerror.h ${CMAKE_CURRENT_SOURCE_DIR}/libdom/bindings/xml/xmlparser.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 72 | endif() 73 | 74 | 75 | install(TARGETS svgtiny DESTINATION ${CMAKE_INSTALL_LIBDIR}) 76 | install(FILES include/svgtiny.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 77 | install(FILES libsvgtiny.pc.in DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig RENAME libsvgtiny.pc) 78 | 79 | add_custom_target(clean-all 80 | COMMAND ${CMAKE_BUILD_TOOL} clean 81 | COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/clean-all.cmake 82 | ) 83 | -------------------------------------------------------------------------------- /apothecary/formulas/svgtiny/Makefile: -------------------------------------------------------------------------------- 1 | #!/bin/make 2 | # 3 | # Makefile for libsvgtiny 4 | # 5 | # Copyright 2009-2015 John-Mark Bell 6 | 7 | # Component settings 8 | COMPONENT := svgtiny 9 | COMPONENT_VERSION := 0.1.4 10 | # Default to a static library 11 | COMPONENT_TYPE ?= lib-static 12 | RANLIB ?= ranlib 13 | 14 | # Setup the tooling 15 | #PREFIX ?= /opt/netsurf 16 | #NSSHARED ?= $(PREFIX)/share/netsurf-buildsystem 17 | #include $(NSSHARED)/makefiles/Makefile.tools 18 | 19 | # Reevaluate when used, as BUILDDIR won't be defined yet 20 | TESTRUNNER = test/runtest.sh $(BUILDDIR) $(EXEEXT) 21 | 22 | # Toolchain flags 23 | WARNFLAGS := -Wall -W -Wundef -Wpointer-arith \ 24 | -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes \ 25 | -Wmissing-declarations -Wnested-externs 26 | # BeOS/Haiku/AmigaOS standard library headers create warnings 27 | ifneq ($(BUILD),i586-pc-haiku) 28 | ifneq ($(findstring amigaos,$(BUILD)),amigaos) 29 | WARNFLAGS := $(WARNFLAGS) 30 | endif 31 | endif 32 | 33 | CFLAGS := $(CFLAGS) $(CUSTOM_CFLAGS) -D_BSD_SOURCE -D_DEFAULT_SOURCE -DWITHOUT_ICONV_FILTER \ 34 | -fPIC \ 35 | -I$(CURDIR)/include/ -I$(CURDIR)/src \ 36 | $(WARNFLAGS) 37 | ifneq ($(GCCVER),2) 38 | CFLAGS := $(CFLAGS) -std=c99 39 | else 40 | # __inline__ is a GCCism 41 | CFLAGS := $(CFLAGS) -Dinline="__inline__" 42 | endif 43 | 44 | # libdom 45 | CFLAGS := $(CFLAGS) -Ilibdom/include -Ilibdom/src -Ilibdom/bindings -Ilibwapcaplet/include -Ilibparserutils/include -Ilibparserutils/src 46 | LDFLAGS := -ldom -lwapcaplet -lexpat -lm 47 | 48 | #include $(NSBUILD)/Makefile.top 49 | 50 | # Extra installation rules 51 | I := /$(INCLUDEDIR) 52 | INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):include/svgtiny.h 53 | INSTALL_ITEMS := $(INSTALL_ITEMS) /$(LIBDIR)/pkgconfig:lib$(COMPONENT).pc.in 54 | INSTALL_ITEMS := $(INSTALL_ITEMS) /$(LIBDIR):$(OUTPUT) 55 | 56 | SRC := $(wildcard src/*.c) 57 | SRC += $(wildcard libdom/src/*/*.c) 58 | SRC += libdom/bindings/xml/libxml_xmlparser.c 59 | SRC += $(wildcard libwapcaplet/src/*.c) 60 | SRC += $(wildcard libparserutils/src/*.c) 61 | SRC += $(wildcard libparserutils/src/*/*.c) 62 | SRC += $(wildcard libparserutils/src/*/*/*.c) 63 | OBJS := $(patsubst %.c,%.o,$(SRC)) 64 | 65 | all: libsvgtiny.a 66 | 67 | libsvgtiny.a: $(OBJS) 68 | $(AR) ruv "$@" $(OBJS) 69 | $(RANLIB) "$@" 70 | 71 | %.o: %.c 72 | $(CC) -c $< -o $@ -O2 $(CFLAGS) 73 | 74 | clean: 75 | rm -f $(OBJS) libsvgtiny.a 76 | -------------------------------------------------------------------------------- /apothecary/formulas/svgtiny/libparseutils.patch: -------------------------------------------------------------------------------- 1 | diff -Naru a/src/charset/codecs/codec_8859.c b/src/charset/codecs/codec_8859.c 2 | --- a/src/charset/codecs/codec_8859.c 2020-12-21 00:09:41 +0000 3 | +++ b/src/charset/codecs/codec_8859.c 2020-12-21 08:45:19 +0000 4 | @@ -40,6 +40,8 @@ 5 | { 0, "ISO-8859-16", SLEN("ISO-8859-16"), t16 } 6 | }; 7 | 8 | +#define N_ELEMENTS(array) sizeof(array)/sizeof(array[0]) 9 | + 10 | /** 11 | * ISO-8859-n charset codec 12 | */ 13 | diff -Naru a/src/charset/codecs/codec_ext8.c b/src/charset/codecs/codec_ext8.c 14 | --- a/src/charset/codecs/codec_ext8.c 2020-12-21 00:09:41 +0000 15 | +++ b/src/charset/codecs/codec_ext8.c 2020-12-21 08:45:24 +0000 16 | @@ -34,6 +34,8 @@ 17 | { 0, "Windows-1258", SLEN("Windows-1258"), w1258 }, 18 | }; 19 | 20 | +#define N_ELEMENTS(array) sizeof(array)/sizeof(array[0]) 21 | + 22 | /** 23 | * Windows charset codec 24 | */ 25 | -------------------------------------------------------------------------------- /apothecary/formulas/tess2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8) 2 | project(tess2) 3 | file(GLOB SRCS "Source/*.cpp" "Source/*.c") 4 | file(GLOB SRCS_INCL "Source/*.h" "Source/*.hpp") 5 | include_directories("Include") 6 | add_library(tess2 STATIC ${SRCS} ${SRCS_INCL}) 7 | 8 | # Specify where the library should be installed 9 | install(TARGETS tess2 10 | ARCHIVE DESTINATION lib 11 | LIBRARY DESTINATION lib 12 | RUNTIME DESTINATION bin) 13 | 14 | # Specify where the header files should be installed 15 | install(FILES ${SRCS_INCL} DESTINATION include) 16 | -------------------------------------------------------------------------------- /apothecary/formulas/tess2/Makefile: -------------------------------------------------------------------------------- 1 | # GNU Make solution makefile autogenerated by Premake 2 | # Type "make help" for usage help 3 | 4 | ifndef config 5 | config=debug 6 | endif 7 | export config 8 | 9 | PROJECTS := tess2 example 10 | 11 | .PHONY: all clean help $(PROJECTS) 12 | 13 | all: $(PROJECTS) 14 | 15 | tess2: 16 | @echo "==== Building tess2 ($(config)) ====" 17 | @${MAKE} --no-print-directory -C . -f tess2.make 18 | 19 | example: tess2 20 | @echo "==== Building example ($(config)) ====" 21 | @${MAKE} --no-print-directory -C . -f example.make 22 | 23 | clean: 24 | @${MAKE} --no-print-directory -C . -f tess2.make clean 25 | @${MAKE} --no-print-directory -C . -f example.make clean 26 | 27 | help: 28 | @echo "Usage: make [config=name] [target]" 29 | @echo "" 30 | @echo "CONFIGURATIONS:" 31 | @echo " debug" 32 | @echo " release" 33 | @echo " debug64" 34 | @echo " release64" 35 | @echo " debug32" 36 | @echo " release32" 37 | @echo "" 38 | @echo "TARGETS:" 39 | @echo " all (default)" 40 | @echo " clean" 41 | @echo " tess2" 42 | @echo " example" 43 | @echo "" 44 | @echo "For more information, see http://industriousone.com/premake/quick-start" 45 | -------------------------------------------------------------------------------- /apothecary/formulas/tess2/tess2.patch: -------------------------------------------------------------------------------- 1 | diff --git a/Include/tesselator.h b/Include/tesselator.h 2 | index c27541e..eafb0aa 100755 3 | --- a/Include/tesselator.h 4 | +++ b/Include/tesselator.h 5 | @@ -36,6 +36,10 @@ 6 | extern "C" { 7 | #endif 8 | 9 | +#if defined( __APPLE_CC__) 10 | + #include 11 | +#endif 12 | + 13 | // See OpenGL Red Book for description of the winding rules 14 | // http://www.glprogramming.com/red/chapter11.html 15 | enum TessWindingRule 16 | @@ -115,11 +119,15 @@ 17 | }; 18 | 19 | typedef float TESSreal; 20 | -typedef int TESSindex; 21 | +#if TARGET_OS_IPHONE || ANDROID || __ARMEL__ || EMSCRIPTEN 22 | + typedef unsigned short TESSindex; 23 | +#else 24 | + typedef unsigned int TESSindex; 25 | +#endif 26 | typedef struct TESStesselator TESStesselator; 27 | typedef struct TESSalloc TESSalloc; 28 | 29 | -#define TESS_UNDEF (~(TESSindex)0) 30 | +#define TESS_UNDEF ((TESSindex)~0) 31 | 32 | #define TESS_NOTUSED(v) do { (void)(1 ? (void)0 : ( (void)(v) ) ); } while(0) 33 | 34 | diff --git a/Source/tess.c b/Source/tess.c 35 | index 67c038f..93061bb 100755 36 | --- a/Source/tess.c 37 | +++ b/Source/tess.c 38 | @@ -976,7 +976,7 @@ int tessGetElementCount( TESStesselator *tess ) 39 | return tess->elementCount; 40 | } 41 | 42 | -const int* tessGetElements( TESStesselator *tess ) 43 | +const TESSindex* tessGetElements( TESStesselator *tess ) 44 | { 45 | return tess->elements; 46 | } 47 | -------------------------------------------------------------------------------- /apothecary/formulas/utf8.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # utf8cpp 4 | # 5 | # 6 | FORMULA_TYPES=("osx" "msys2" "linux" "vs" "ios" "watchos" "catos" "xros" "tvos" "android" "emscripten") 7 | FORMULA_DEPENDS=() 8 | 9 | # define the version 10 | VER=4.0.6 11 | VER_=4_0_6 12 | BUILD_ID=2 13 | DEFINES="" 14 | 15 | # tools for git use 16 | GIT_URL=https://github.com/nemtrif/utfcpp 17 | GIT_TAG=v$VER 18 | 19 | # download the source code and unpack it into LIB_NAME 20 | function download() { 21 | 22 | . "$DOWNLOADER_SCRIPT" 23 | if [ "$TYPE" == "vs" ]; then 24 | downloader ${GIT_URL}/archive/refs/tags/v${VER}.zip 25 | unzip -q v${VER}.zip 26 | mv utfcpp-${VER} utf8 27 | rm v${VER}.zip 28 | else 29 | downloader ${GIT_URL}//archive/refs/tags/v${VER}.tar.gz 30 | tar -xf v${VER}.tar.gz 31 | mv utfcpp-${VER} utf8 32 | rm -f v${VER}.tar.gz 33 | fi 34 | } 35 | 36 | # prepare the build environment, executed inside the lib src dir 37 | function prepare() { 38 | echo 39 | # nothing to do 40 | } 41 | 42 | # executed inside the lib src dir 43 | function build() { 44 | echo 45 | #nothing to do, header only lib 46 | } 47 | 48 | # executed inside the lib src dir, first arg $1 is the dest libs dir root 49 | function copy() { 50 | # headers 51 | mkdir -p $1/include 52 | cp -vr source/* $1/include 53 | 54 | . "$SECURE_SCRIPT" 55 | secure "$1/include/utf8.h" "glm.pkl" "$VERSION" "$DEFINES" "$BUILD_ID" "$FORMULA_DEPENDS" 56 | 57 | # copy license file 58 | if [ -d "$1/license" ]; then 59 | rm -rf $1/license 60 | fi 61 | mkdir -p $1/license 62 | cp -v LICENSE $1/license/ 63 | } 64 | 65 | # executed inside the lib src dir 66 | function clean() { 67 | echo 68 | #nothing to do header ony lib 69 | } 70 | 71 | function load() { 72 | . "$LOAD_SCRIPT" 73 | LOAD_RESULT=$(loadsave ${TYPE} "utf8" ${ARCH} ${VER} "$LIBS_DIR_REAL/utf8/include" ${BUILD_ID}) 74 | PREBUILT=$(echo "$LOAD_RESULT" | tail -n 1) 75 | if [ "$PREBUILT" -eq 1 ]; then 76 | echo 1 77 | else 78 | echo 0 79 | fi 80 | } 81 | -------------------------------------------------------------------------------- /apothecary/legacy_tomes/uri/uri-emscripten.patch: -------------------------------------------------------------------------------- 1 | diff --git a/CMakeLists.txt b/CMakeLists.txt 2 | index 8147d01..21b5a97 100644 3 | --- a/CMakeLists.txt 4 | +++ b/CMakeLists.txt 5 | @@ -7,16 +7,13 @@ 6 | cmake_minimum_required(VERSION 2.8) 7 | project(Uri) 8 | 9 | -find_package(Threads REQUIRED) 10 | - 11 | if(CPP-NETLIB_BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS) 12 | set(Boost_USE_STATIC_LIBS OFF) 13 | else() 14 | set(Boost_USE_STATIC_LIBS ON) 15 | endif() 16 | 17 | -set(Boost_USE_MULTITHREADED ON) 18 | -find_package(Boost 1.53 REQUIRED system filesystem) 19 | +set(Boost_USE_MULTITHREADED OFF) 20 | 21 | include_directories(${Uri_SOURCE_DIR}/src ${Boost_INCLUDE_DIRS}) 22 | 23 | @@ -50,13 +47,6 @@ endif(WIN32) 24 | 25 | add_subdirectory(src) 26 | 27 | -# Testing 28 | -if (CMAKE_PROJECT_NAME STREQUAL "Uri" OR CPP-NETLIB_BUILD_TESTS) 29 | - enable_testing() 30 | - find_package(GTest REQUIRED) 31 | - add_subdirectory(test) 32 | -endif() 33 | - 34 | # Documentation 35 | find_package(Doxygen) 36 | if (DOXYGEN_FOUND) 37 | -------------------------------------------------------------------------------- /apothecary/legacy_tomes/uri/uri-remove-tests.patch: -------------------------------------------------------------------------------- 1 | diff --git a/CMakeLists.txt b/CMakeLists.txt 2 | index 8147d01..8565d95 100644 3 | --- a/CMakeLists.txt 4 | +++ b/CMakeLists.txt 5 | @@ -50,13 +50,6 @@ endif(WIN32) 6 | 7 | add_subdirectory(src) 8 | 9 | -# Testing 10 | -if (CMAKE_PROJECT_NAME STREQUAL "Uri" OR CPP-NETLIB_BUILD_TESTS) 11 | - enable_testing() 12 | - find_package(GTest REQUIRED) 13 | - add_subdirectory(test) 14 | -endif() 15 | - 16 | # Documentation 17 | find_package(Doxygen) 18 | if (DOXYGEN_FOUND) 19 | -------------------------------------------------------------------------------- /apothecary/legacy_tomes/uri/uri_xcode_fix.patch: -------------------------------------------------------------------------------- 1 | diff --git a/src/detail/uri_parse.cpp b/src/detail/uri_parse.cpp 2 | index 54ec59c..708f35e 100644 3 | --- a/src/detail/uri_parse.cpp 4 | +++ b/src/detail/uri_parse.cpp 5 | @@ -81,9 +81,8 @@ namespace network { 6 | 7 | ipvfuture %= qi::lit('v') >> +qi::xdigit >> '.' >> 8 | +(unreserved | sub_delims | ':'); 9 | - 10 | - ipv6address %= qi::raw 11 | - [qi::repeat(6)[h16 >> ':'] >> ls32 | 12 | + 13 | + auto a = qi::repeat(6)[h16 >> ':'] >> ls32 | 14 | "::" >> qi::repeat(5)[h16 >> ':'] >> ls32 | 15 | -qi::raw[h16] >> "::" >> qi::repeat(4)[h16 >> ':'] >> ls32 | 16 | -qi::raw[h16] >> "::" >> qi::repeat(3)[h16 >> ':'] >> ls32 | 17 | @@ -96,20 +95,23 @@ namespace network { 18 | -qi::raw[qi::repeat(1)[(h16 >> ':')] >> h16] >> "::" >> 19 | qi::repeat(2)[h16 >> ':'] >> ls32 | 20 | -qi::raw[qi::repeat(1)[(h16 >> ':')] >> h16] >> "::" >> h16 >> 21 | - ':' >> ls32 | 22 | - -qi::raw[qi::repeat(1)[(h16 >> ':')] >> h16] >> "::" >> ls32 | 23 | + ':' >> ls32; 24 | + 25 | + auto b = -qi::raw[qi::repeat(1)[(h16 >> ':')] >> h16] >> "::" >> ls32 | 26 | -qi::raw[qi::repeat(1)[(h16 >> ':')] >> h16] >> "::" >> h16 | 27 | -qi::raw[qi::repeat(1)[(h16 >> ':')] >> h16] >> "::" | 28 | -qi::raw[qi::repeat(2)[(h16 >> ':')] >> h16] >> "::" >> 29 | qi::repeat(2)[h16 >> ':'] >> ls32 | 30 | -qi::raw[qi::repeat(2)[(h16 >> ':')] >> h16] >> "::" >> h16 >> 31 | - ':' >> ls32 | 32 | - -qi::raw[qi::repeat(2)[(h16 >> ':')] >> h16] >> "::" >> ls32 | 33 | + ':' >> ls32; 34 | + 35 | + auto c = -qi::raw[qi::repeat(2)[(h16 >> ':')] >> h16] >> "::" >> ls32 | 36 | -qi::raw[qi::repeat(2)[(h16 >> ':')] >> h16] >> "::" >> h16 | 37 | -qi::raw[qi::repeat(2)[(h16 >> ':')] >> h16] >> "::" | 38 | -qi::raw[qi::repeat(3)[(h16 >> ':')] >> h16] >> "::" >> h16 >> 39 | - ':' >> ls32 | 40 | - -qi::raw[qi::repeat(3)[(h16 >> ':')] >> h16] >> "::" >> ls32 | 41 | + ':' >> ls32; 42 | + 43 | + auto d = -qi::raw[qi::repeat(3)[(h16 >> ':')] >> h16] >> "::" >> ls32 | 44 | -qi::raw[qi::repeat(3)[(h16 >> ':')] >> h16] >> "::" >> h16 | 45 | -qi::raw[qi::repeat(3)[(h16 >> ':')] >> h16] >> "::" | 46 | -qi::raw[qi::repeat(4)[(h16 >> ':')] >> h16] >> "::" >> ls32 | 47 | @@ -117,8 +119,8 @@ namespace network { 48 | -qi::raw[qi::repeat(4)[(h16 >> ':')] >> h16] >> "::" | 49 | -qi::raw[qi::repeat(5)[(h16 >> ':')] >> h16] >> "::" >> h16 | 50 | -qi::raw[qi::repeat(5)[(h16 >> ':')] >> h16] >> "::" | 51 | - -qi::raw[qi::repeat(6)[(h16 >> ':')] >> h16] >> "::"]; 52 | - 53 | + -qi::raw[qi::repeat(6)[(h16 >> ':')] >> h16] >> "::"; 54 | + ipv6address %= qi::raw[ a | b | c | d ]; 55 | // ls32 = ( h16 ":" h16 ) / IPv4address 56 | ls32 %= (h16 >> ':' >> h16) | ipv4address; 57 | 58 | -------------------------------------------------------------------------------- /apothecary/ostype.sh: -------------------------------------------------------------------------------- 1 | # uses uname to get a more grained os type 2 | # from http://stackoverflow.com/questions/394230/detect-the-os-from-a-bash-script 3 | 4 | function lowercase() { 5 | echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/" 6 | } 7 | 8 | OS=$(lowercase $(uname)) 9 | DISTRO="" 10 | DEVICE="" 11 | 12 | if [ "$OS" == "darwin" ]; then 13 | OS="osx" 14 | elif [ "$OS" == "windowsnt" ]; then 15 | OS="vs" 16 | elif [ "${OS:0:5}" == "mingw" -o "$OS" == "msys_nt-6.3" ]; then 17 | OS="msys2" 18 | elif [ "$OS" == "linux" ]; then 19 | ARCH=$(uname -m) 20 | if [[ -f /etc/os-release ]]; then 21 | . /etc/os-release 22 | case "$ID" in 23 | ubuntu) 24 | export DISTRO="ubuntu" 25 | ;; 26 | raspbian) 27 | export DISTRO="raspios" 28 | ;; 29 | debian) 30 | if grep -q "Raspberry Pi" /proc/cpuinfo; then 31 | export DISTRO="raspios" 32 | else 33 | export DISTRO="debian" 34 | fi 35 | ;; 36 | *) 37 | export DISTRO="$ID" 38 | ;; 39 | esac 40 | fi 41 | if [[ "$DISTRO" == "raspios" ]]; then 42 | if [[ -f /proc/cpuinfo ]]; then 43 | REVISION=$(grep "^Revision" /proc/cpuinfo | awk '{print $3}') 44 | case "$REVISION" in 45 | a02082|a22082|a32082|a52082) 46 | export DEVICE="Raspberry Pi 3" 47 | ;; 48 | a03111|b03111|b03112|b03114) 49 | export DEVICE="Raspberry Pi 4" 50 | ;; 51 | b03140|c03140|d03140|c03145) 52 | export DEVICE="Raspberry Pi 5" 53 | ;; 54 | *) 55 | export DEVICE="Unknown Raspberry Pi Model" 56 | ;; 57 | esac 58 | echo "$DEVICE" 59 | else 60 | export DEVICE="Unknown (no /proc/cpuinfo)" 61 | fi 62 | else 63 | export DEVICE="Not a Raspberry Pi" 64 | fi 65 | fi 66 | 67 | echo "$OS ${DISTRO} ${DEVICE}" 68 | -------------------------------------------------------------------------------- /apothecary/toolchains/linux64.meson.ini: -------------------------------------------------------------------------------- 1 | [host_machine] 2 | system = 'linux' 3 | cpu_family = 'x86_64' 4 | cpu = 'x86_64' 5 | endian = 'little' 6 | 7 | [binaries] 8 | c = 'gcc-14' 9 | cpp = 'g++-14' 10 | ar = 'x86_64-linux-gnu-ar' 11 | strip = 'x86_64-linux-gnu-strip' 12 | pkgconfig = 'x86_64-linux-gnu-pkg-config' 13 | ld = 'x86_64-linux-gnu-ld' 14 | nm = 'x86_64-linux-gnu-nm' 15 | ranlib = 'x86_64-linux-gnu-ranlib' 16 | objcopy = 'x86_64-linux-gnu-objcopy' 17 | objdump = 'x86_64-linux-gnu-objdump' 18 | 19 | [properties] 20 | sys_root = '/' 21 | c_args = ['--sysroot=/', '-fPIC', '-O3', '-Wall', '-Wextra', '-march=x86-64', '-mtune=generic', '-Wl,-rpath-link,/', '-L/lib/', '-L/lib64/', '-L/lib/x86_64-linux-gnu'] 22 | cpp_args = ['--sysroot=/', '-fPIC', '-O3', '-Wall', '-Wextra', '-std=c++17', '-march=x86-64', '-mtune=generic', '-Wl,-rpath-link,/', '-L/lib/', '-L/lib64/', '-L/lib/x86_64-linux-gnu'] 23 | c_link_args = ['-fPIE', '-pie', '-Wl,-rpath-link,/', '-L/lib/', '-L/lib64/', '-L/lib/x86_64-linux-gnu' , '-lm' ] 24 | cpp_link_args = ['-fPIE', '-pie', '-Wl,-rpath-link,/', '-L/lib/', '-L/lib64/', '-L/lib/x86_64-linux-gnu' , '-lm' ] 25 | 26 | [build_options] 27 | c_std = 'c17' 28 | cpp_std = 'c++17' 29 | default_library = 'static' 30 | -------------------------------------------------------------------------------- /apothecary/toolchains/linuxarm64.meson.ini: -------------------------------------------------------------------------------- 1 | [host_machine] 2 | system = 'linux' 3 | cpu_family = 'native' 4 | cpu = 'aarch64' 5 | endian = 'little' 6 | 7 | [binaries] 8 | c = 'gcc' 9 | cpp = 'g++' 10 | ar = 'ar' 11 | strip = 'strip' 12 | pkg-config = 'pkg-config' 13 | ld = 'ld' 14 | nm = 'nm' 15 | ranlib = 'ranlib' 16 | objcopy = 'objcopy' 17 | objdump = 'objdump' 18 | 19 | [properties] 20 | sys_root = '/' 21 | c_args = ['--sysroot=/', '-I/usr/include', '-I/usr/include/aarch64-linux-gnu', '-fPIC', '-O3', '-Wall', '-Wextra', '-march=armv8-a+simd'] 22 | cpp_args = ['--sysroot=/', '-I/usr/include', '-I/usr/include/aarch64-linux-gnu', '-fPIC', '-O3', '-Wall', '-Wextra', '-std=c++17', '-march=armv8-a+simd'] 23 | c_link_args = ['-fPIE', '-pie', '-Wl,-rpath-link,/', '-L/usr/lib', '-L/lib', '-L/usr/lib/aarch64-linux-gnu', '-L/lib/aarch64-linux-gnu', '-lm'] 24 | cpp_link_args = ['-fPIE', '-pie', '-Wl,-rpath-link,/', '-L/usr/lib', '-L/lib', '-L/usr/lib/aarch64-linux-gnu', '-L/lib/aarch64-linux-gnu', '-lm'] 25 | 26 | [build_options] 27 | c_std = 'c17' 28 | cpp_std = 'c++17' 29 | default_library = 'static' 30 | -------------------------------------------------------------------------------- /apothecary/toolchains/windows.llvm.toolchain.cmake: -------------------------------------------------------------------------------- 1 | 2 | # Target System 3 | set(CMAKE_SYSTEM_NAME Windows) # We are targeting Windows 4 | #set(CMAKE_SYSTEM_PROCESSOR x86_64) # 64-bit system 5 | set(CMAKE_VERBOSE_MAKEFILE ON) 6 | 7 | # Detect Clang Version from Environment 8 | if(NOT DEFINED CLANG_VERSION) 9 | if(DEFINED ENV{CLANG_VERSION}) 10 | set(CLANG_VERSION $ENV{CLANG_VERSION}) 11 | else() 12 | set(CLANG_VERSION 18) # Default to Clang 18 13 | message(WARNING "CLANG_VERSION not specified. Defaulting to CLANG_VERSION=${CLANG_VERSION}") 14 | endif() 15 | endif() 16 | 17 | # Clang Path 18 | if(NOT DEFINED CLANG_PATH) 19 | if(DEFINED ENV{CLANG_PATH}) 20 | set(CLANG_PATH $ENV{CLANG_PATH}) 21 | else() 22 | # Default Clang Path for MSVC Toolchain 23 | set(CLANG_PATH "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin") 24 | endif() 25 | endif() 26 | 27 | # Define C and C++ Standards 28 | if(NOT DEFINED C_STANDARD) 29 | set(C_STANDARD 17 CACHE STRING "" FORCE) # Default to C17 30 | endif() 31 | if(NOT DEFINED CPP_STANDARD) 32 | set(CPP_STANDARD 17 CACHE STRING "" FORCE) # Default to C++17 33 | endif() 34 | 35 | set(CMAKE_C_STANDARD ${C_STANDARD} CACHE STRING "" FORCE) 36 | set(CMAKE_C_STANDARD_REQUIRED ON) 37 | set(CMAKE_CXX_STANDARD ${CPP_STANDARD} CACHE STRING "" FORCE) 38 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 39 | 40 | # Compiler and Linker Paths 41 | set(CMAKE_C_COMPILER "${CLANG_PATH}/clang-cl.exe") 42 | set(CMAKE_CXX_COMPILER "${CLANG_PATH}/clang-cl.exe") 43 | set(CMAKE_RC_COMPILER "rc") 44 | 45 | # Ensure correct system paths for MSVC headers/libs 46 | set(VS_INCLUDE_PATH "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.36.32532/include") 47 | set(VS_LIB_PATH "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.36.32532/lib/x64") 48 | 49 | set(WINDOWS_SDK_PATH "C:/Program Files (x86)/Windows Kits/10") 50 | set(WINDOWS_SDK_INCLUDE "${WINDOWS_SDK_PATH}/Include/10.0.22621.0") 51 | set(WINDOWS_SDK_LIB "${WINDOWS_SDK_PATH}/Lib/10.0.22621.0") 52 | 53 | include_directories(${VS_INCLUDE_PATH} ${WINDOWS_SDK_INCLUDE}/um ${WINDOWS_SDK_INCLUDE}/ucrt) 54 | link_directories(${VS_LIB_PATH} ${WINDOWS_SDK_LIB}/um/x64 ${WINDOWS_SDK_LIB}/ucrt/x64) 55 | 56 | # Clang Compiler and Linker Flags 57 | set(CMAKE_C_FLAGS "/O2 /EHsc /DUNICODE /D_UNICODE /Wno-error") 58 | set(CMAKE_CXX_FLAGS "/O2 /EHsc /DUNICODE /D_UNICODE /Wno-error -std:c++${CPP_STANDARD}") 59 | set(CMAKE_EXE_LINKER_FLAGS "/LTCG /OPT:REF /OPT:ICF") 60 | set(CMAKE_SHARED_LINKER_FLAGS "/DLL") 61 | 62 | # Validate Clang Installation 63 | message(STATUS "Using Clang Version: ${CLANG_VERSION}") 64 | message(STATUS "C Compiler: ${CMAKE_C_COMPILER}") 65 | message(STATUS "C++ Compiler: ${CMAKE_CXX_COMPILER}") 66 | 67 | # Check Compiler Existence 68 | if(NOT EXISTS ${CMAKE_C_COMPILER}) 69 | message(WARNING "C Compiler not found: ${CMAKE_C_COMPILER}") 70 | endif() 71 | if(NOT EXISTS ${CMAKE_CXX_COMPILER}) 72 | message(WARNING "C++ Compiler not found: ${CMAKE_CXX_COMPILER}") 73 | endif() 74 | -------------------------------------------------------------------------------- /docker/README.md: -------------------------------------------------------------------------------- 1 | To run docker locally, these docker images can be used to replicate the setup on Travis. Its usefull for testing the setup without waiting for travis to build. 2 | 3 | 4 | Build docker image from Dockverfile manually by running 5 | 6 | ``` 7 | docker build -t apothecary:linux -f docker/linux/Dockerfile . 8 | docker build -t apothecary:linux.gcc6 -f docker/linux/Dockerfile.gcc6 . 9 | docker build -t apothecary:linux.gcc5 -f docker/linux/Dockerfile.gcc5 . 10 | docker build -t apothecary:android -f docker/android/Dockerfile . 11 | docker build -t apothecary:emscripten -f docker/emscripten/Dockerfile . 12 | ``` 13 | 14 | Then run apothecary with something like this 15 | 16 | ``` 17 | docker run -v $(pwd):/apothecary apothecary:android ./apothecary/apothecary/apothecary -t android -a armv7 -j 6 update opencv 18 | ``` 19 | 20 | Or the entire build script using 21 | 22 | ``` 23 | docker run -v $(pwd):/apothecary -e "PARALLEL=12" apothecary:linux.gcc5 apothecary/scripts/build.sh 24 | 25 | docker run -v $(pwd):/apothecary -e "PARALLEL=12" -e"ARCH=x86" apothecary:android apothecary/scripts/build.sh 26 | 27 | docker run -v $(pwd):/apothecary -e "PARALLEL=12" apothecary:emscripten apothecary/scripts/build.sh 28 | ``` -------------------------------------------------------------------------------- /docker/android/Dockerfile: -------------------------------------------------------------------------------- 1 | # Based on https://docs.travis-ci.com/user/common-build-problems/#Troubleshooting-Locally-in-a-Docker-Image 2 | FROM travisci/ci-garnet:packer-1513287432-2ffda03 3 | 4 | ENV TRAVIS_BUILD_DIR /root 5 | ENV TARGET=android 6 | 7 | # Install more recent version of cmake 8 | RUN wget https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1.tar.gz 9 | RUN tar xf cmake-3.22.1.tar.gz 10 | RUN cd cmake-3.22.1; ./configure; make -j12; make install 11 | RUN cmake --version 12 | 13 | RUN sudo apt-get update -q 14 | RUN sudo apt-get install -y libboost-tools-dev gperf realpath 15 | 16 | 17 | # Run install.sh installing ndk 18 | ADD scripts/ /root/scripts/ 19 | RUN chmod +x $TRAVIS_BUILD_DIR/scripts/android/install.sh 20 | RUN cd $TRAVIS_BUILD_DIR; ./scripts/android/install.sh -------------------------------------------------------------------------------- /docker/emscripten/Dockerfile: -------------------------------------------------------------------------------- 1 | # Based on https://docs.travis-ci.com/user/common-build-problems/#Troubleshooting-Locally-in-a-Docker-Image 2 | FROM travisci/ci-garnet:packer-1513287432-2ffda03 3 | 4 | ENV TRAVIS_BUILD_DIR /root 5 | 6 | ENV TARGET emscripten 7 | 8 | # Copied from the build logs in travis 9 | RUN sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" 10 | RUN sudo -E apt-get -yq update 11 | RUN sudo -E apt-get -yq --no-install-suggests --no-install-recommends --force-yes install libstdc++6 gcc-4.9 realpath coreutils libboost-tools-dev gperf 12 | 13 | # Install cmake 3.9.2 (preinstalled on travis) 14 | RUN wget http://www.cmake.org/files/v3.9/cmake-3.9.2.tar.gz 15 | RUN tar xf cmake-3.9.2.tar.gz 16 | RUN cd cmake-3.9.2; ./configure; make -j12; make install 17 | RUN cmake --version 18 | 19 | # Run install.sh installing 20 | ADD scripts/ /root/scripts/ 21 | 22 | RUN chmod +x $TRAVIS_BUILD_DIR/scripts/emscripten/install.sh 23 | RUN cd $TRAVIS_BUILD_DIR; ./scripts/emscripten/install.sh 24 | 25 | -------------------------------------------------------------------------------- /docker/linux/Dockerfile: -------------------------------------------------------------------------------- 1 | # Based on https://docs.travis-ci.com/user/common-build-problems/#Troubleshooting-Locally-in-a-Docker-Image 2 | FROM travisci/ci-garnet:packer-1513287432-2ffda03 3 | 4 | ENV TRAVIS_BUILD_DIR /root 5 | 6 | ENV TARGET linux 7 | ENV OPT "" 8 | 9 | # Run install.sh installing 10 | ADD scripts/ /root/scripts/ 11 | 12 | RUN chmod +x $TRAVIS_BUILD_DIR/scripts/linux/install.sh 13 | RUN cd $TRAVIS_BUILD_DIR; ./scripts/linux/install.sh $OPT -------------------------------------------------------------------------------- /docker/linux/Dockerfile.gcc5: -------------------------------------------------------------------------------- 1 | # Based on https://docs.travis-ci.com/user/common-build-problems/#Troubleshooting-Locally-in-a-Docker-Image 2 | FROM travisci/ci-garnet:packer-1513287432-2ffda03 3 | 4 | ENV TRAVIS_BUILD_DIR /root 5 | 6 | ENV TARGET linux 7 | ENV OPT gcc5 8 | 9 | # Run install.sh installing 10 | ADD scripts/ /root/scripts/ 11 | 12 | RUN chmod +x $TRAVIS_BUILD_DIR/scripts/linux/install.sh 13 | RUN cd $TRAVIS_BUILD_DIR; ./scripts/linux/install.sh $OPT 14 | 15 | -------------------------------------------------------------------------------- /docker/linux/Dockerfile.gcc6: -------------------------------------------------------------------------------- 1 | # Based on https://docs.travis-ci.com/user/common-build-problems/#Troubleshooting-Locally-in-a-Docker-Image 2 | FROM travisci/ci-garnet:packer-1513287432-2ffda03 3 | 4 | ENV TRAVIS_BUILD_DIR /root 5 | 6 | ENV TARGET linux 7 | ENV COMPILER gcc6 8 | 9 | # Run install.sh installing 10 | ADD scripts/ /root/scripts/ 11 | 12 | RUN chmod +x $TRAVIS_BUILD_DIR/scripts/linux/install.sh 13 | RUN cd $TRAVIS_BUILD_DIR; ./scripts/linux/install.sh $OPT 14 | 15 | -------------------------------------------------------------------------------- /scripts/android/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openframeworks/apothecary/fae96e615875a701d48dc29cf4a3be24bc472a07/scripts/android/.gitkeep -------------------------------------------------------------------------------- /scripts/android/build_android_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=android 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/android/build_android_armv7.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=android 27 | export ARCH=armv7 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/android/build_android_x86.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=android 27 | export ARCH=x86 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/android/build_android_x86_64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=android 27 | export ARCH=x86_64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/android/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | APOTHECARY_PATH=$( 4 | cd $(dirname "$0") 5 | pwd -P 6 | )/../../apothecary 7 | 8 | sudo apt-get update 9 | sudo apt-get install -y aptitude build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev cmake unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils libtool dos2unix 10 | sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev ccache 11 | sudo aptitude install -y gperf 12 | -------------------------------------------------------------------------------- /scripts/android/setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | APOTHECARY_PATH=$( 4 | cd $(dirname "$0") 5 | pwd -P 6 | )/../../apothecary 7 | 8 | # Check for predefined Android environment variables 9 | 10 | if [ -n "$NDK" ]; then 11 | NDK_VERSION=${NDK} 12 | echo "Using ANDROID_NDK_VERSION: $NDK" 13 | fi 14 | 15 | if [ -n "$SDK" ]; then 16 | SDK_VERSION=${SDK} 17 | echo "Using ANDROID_SDK: $SDK" 18 | fi 19 | 20 | if [ -n "$ANDROID_NDK_ROOT" ]; then 21 | NDK_ROOT="$ANDROID_NDK_ROOT" 22 | echo "Using ANDROID_NDK_ROOT: $NDK_ROOT" 23 | elif [ -n "$ANDROID_NDK" ]; then 24 | NDK_ROOT="$ANDROID_NDK" 25 | echo "Using ANDROID_NDK: $NDK_ROOT" 26 | elif [ -n "$ANDROID_NDK_HOME" ]; then 27 | NDK_ROOT="$ANDROID_NDK_HOME" 28 | echo "Using ANDROID_NDK_HOME: $NDK_ROOT" 29 | elif [ -n "$ANDROID_NDK_LATEST_HOME" ]; then 30 | NDK_ROOT="$ANDROID_NDK_LATEST_HOME" 31 | echo "Using ANDROID_NDK_LATEST_HOME: $NDK_ROOT" 32 | else 33 | # Fallback to default NDK setup if no environment variables are found 34 | NDK_VERSION="r24" 35 | NDK_ROOT="$(realpath ~/)/android-ndk-${NDK_VERSION}/" 36 | echo "No Android NDK environment variables found. Falling back to default: $NDK_ROOT" 37 | 38 | # Check if the NDK directory exists and is non-empty 39 | if [ -d "${NDK_ROOT}" ] && [ "$(ls -A ${NDK_ROOT})" ]; then 40 | echo "Using cached NDK at $NDK_ROOT" 41 | ls -A "${NDK_ROOT}" 42 | else 43 | cd ~/ 44 | echo "Downloading NDK $NDK_VERSION" 45 | wget -q --no-check-certificate https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux.zip 46 | echo "Uncompressing NDK" 47 | unzip android-ndk-${NDK_VERSION}-linux.zip >/dev/null 2>&1 48 | rm android-ndk-${NDK_VERSION}-linux.zip 49 | echo "NDK installed at $NDK_ROOT" 50 | cd - 51 | fi 52 | echo "NDK_ROOT=${NDK_ROOT};" >"${APOTHECARY_PATH}/paths.make" 53 | fi 54 | -------------------------------------------------------------------------------- /scripts/artifact/artifact-clean.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | if [ -z "${NO_FORCE+x}" ]; then 7 | export FORCE="-f" 8 | else 9 | export FORCE="" 10 | fi 11 | 12 | # trap any script errors and exit 13 | # trap "trapError" ERR 14 | 15 | trapError() { 16 | echo 17 | echo " ^ Received error building $formula_name ^" 18 | cat "formula_${ARCH}.log" 19 | if [ "$formula_name" == "boost" ]; then 20 | cat $APOTHECARY_PATH/build/boost/bootstrap.log 21 | fi 22 | if [ -f $APOTHECARY_PATH/build/$formula_name/config.log ]; then 23 | tail -n1000 $APOTHECARY_PATH/build/$formula_name/config.log 24 | fi 25 | exit 1 26 | } 27 | 28 | 29 | run() { 30 | echo "$@" 31 | eval "$@" 32 | } 33 | 34 | run_bg() { 35 | trap "trapError" ERR 36 | 37 | echo "$@" 38 | eval "$@" >>"formula_${ARCH}.log" 2>&1 & 39 | apothecaryPID=$! 40 | echoDots $apothecaryPID 41 | wait $apothecaryPID 42 | 43 | echo "Tail of log for $formula_name" 44 | run "tail -n 10 formula_${ARCH}.log" 45 | } 46 | 47 | ROOT=$( 48 | cd $(dirname "$0") 49 | pwd -P 50 | )/../.. 51 | LOCAL_ROOT=$ROOT 52 | 53 | 54 | APOTHECARY_PATH=$ROOT/apothecary 55 | 56 | if [ -z "${OUTPUT_FOLDER+x}" ]; then 57 | export OUTPUT_FOLDER="$ROOT/out" 58 | fi 59 | #OUTPUT_FOLDER=$ROOT/out 60 | 61 | # VERBOSE=true 62 | 63 | if [ -z $TARGET ]; then 64 | echo "Environment variable TARGET not defined. Should be target os" 65 | exit 1 66 | fi 67 | 68 | echo "Running apothecary from $PWD" 69 | echo "Target: $TARGET" 70 | echo "Architecture: $ARCH" 71 | echo "Bundle: $BUNDLE" 72 | echo "Apothecary path: $APOTHECARY_PATH" 73 | echo "Output folder is: $OUTPUT_FOLDER" 74 | 75 | # Source the calculate_formulas.sh script to get the list of formulas 76 | source $LOCAL_ROOT/scripts/calculate_formulas.sh 77 | 78 | if [ -z "$FORMULAS" ]; then 79 | echo "No formulas to build" 80 | exit 0 81 | fi 82 | 83 | # Define the base directory where the library folders are located 84 | LIBRARY_BASE_DIR="$LOCAL_ROOT/libraries" 85 | 86 | # Create an associative array to keep track of the libraries to keep 87 | declare -A KEEP_LIBRARIES 88 | for formula in "${FORMULAS[@]}"; do 89 | formula_name="${formula%.*}" 90 | KEEP_LIBRARIES[$formula_name]=1 91 | done 92 | 93 | # Iterate over the folders in the library base directory 94 | for library_dir in "$OUTPUT_FOLDER"/*; do 95 | library_name=$(basename "$library_dir") 96 | 97 | # Check if the library name is not in the keep list 98 | if [ -z "${KEEP_LIBRARIES[$library_name]}" ]; then 99 | echo "Deleting library folder: $library_dir" 100 | rm -rf "$library_dir" 101 | else 102 | echo "Keeping library folder: $library_dir" 103 | fi 104 | done 105 | 106 | echo "" 107 | echo "" 108 | -------------------------------------------------------------------------------- /scripts/artifact/artifact-dl.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | if [ -z "${NO_FORCE+x}" ]; then 7 | export FORCE="-f" 8 | else 9 | export FORCE="" 10 | fi 11 | 12 | OWNER="openframeworks" 13 | REPO="apothecary" 14 | PER_PAGE=150 15 | OUTPUT_DIR="./out" 16 | 17 | TOKEN="$1" 18 | # Check if the argument is provided 19 | if [ -z "${TOKEN+x}" ]; then 20 | echo "No Github token argument provided. Required for Artifacts - even from public please pass in like ./scripts/artifact-dl.sh github_pat_1147" 21 | echo "https://github.com/settings/tokens?type=beta" 22 | exit 1 23 | else 24 | echo "Github token set!" 25 | fi 26 | 27 | # Ensure the output directory exists 28 | mkdir -p "${OUTPUT_DIR}" 29 | 30 | # Fetch the list of artifacts without a token 31 | ARTIFACTS=$(curl -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${OWNER}/${REPO}/actions/artifacts?per_page=${PER_PAGE}") 32 | 33 | echo "${ARTIFACTS}" | jq -r '.artifacts[] | "\(.id) \(.name)"' | while read -r id name; do 34 | echo "Attempting to download artifact ${name} with id ${id} with auth token..." 35 | DOWNLOAD_URL="https://api.github.com/repos/${OWNER}/${REPO}/actions/artifacts/${id}/zip" 36 | OUTPUT_FILE="${OUTPUT_DIR}/${name}.zip" 37 | 38 | if [[ -f "$OUTPUT_FILE" ]]; then 39 | echo "File ${name}.zip already exists in ${OUTPUT_DIR}. Skipping download." 40 | else 41 | curl -L -o "${OUTPUT_DIR}/${name}.zip" -H "Authorization: token ${TOKEN}" -H "Accept: application/vnd.github.v3+json" "${DOWNLOAD_URL}" 42 | 43 | echo "Attempted download of ${name} to ${OUTPUT_DIR}/${name}.zip" 44 | fi 45 | done 46 | 47 | echo "Attempt to download all artifacts with auth token complete." 48 | -------------------------------------------------------------------------------- /scripts/artifact/artifact-ex.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | if [ -z "${NO_FORCE+x}" ]; then 7 | export FORCE="-f" 8 | else 9 | export FORCE="" 10 | fi 11 | 12 | #!/bin/bash 13 | 14 | # Configuration 15 | mkdir -p out 16 | for zip in out/*.zip; do 17 | echo "Extracting $zip..." 18 | unzip -o "$zip" -d out/ 19 | done 20 | echo "Extraction complete." 21 | rm out/*.zip 22 | for tarball in out/*.tar.bz2; do 23 | echo "Extracting $tarball..." 24 | tar -xjf "$tarball" -C out/ 25 | done 26 | echo ".tar.bz2 extraction complete." 27 | rm -f out/*.tar.bz2 28 | -------------------------------------------------------------------------------- /scripts/catos/build_catos_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=catos 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/catos/build_catos_x86_64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=catos 27 | export ARCH=x86_64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/catos/build_xcframework.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=catos 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | source ${ROOT}./scripts/calculate_formulas.sh 36 | if [ -z "$FORMULAS" ]; then 37 | echo "No formulas to framework" 38 | exit 0 39 | fi 40 | 41 | for formula in "${FORMULAS[@]}"; do 42 | formula_name="${formula%.*}" 43 | ARGS="$FORCE -t$TARGET -d$OUTPUT_FOLDER -a$ARCH" 44 | #echo "./apothecary $ARGS framework $formula_name" 45 | eval "cd $APOTHECARY_PATH" 46 | echo "---------" 47 | eval "./apothecary $ARGS framework $formula_name" 48 | 49 | done 50 | echo "Apothecary openFrameworks Build XCFramework for $TARGET complete." 51 | echo "========================" 52 | -------------------------------------------------------------------------------- /scripts/catos/install.sh: -------------------------------------------------------------------------------- 1 | # Silent update to prevent long logs 2 | brew update >/dev/null 3 | 4 | brew install cmake coreutils boost-bcp autoconf automake libtool ccache brotli libtool wget bash shfmt 5 | # brew reinstall libtool 6 | # export PATH="/usr/local/opt/ccache/libexec:$PATH" 7 | 8 | set -e 9 | # capture failing exits in commands obscured behind a pipe 10 | set -o pipefail 11 | 12 | APOTH=$( 13 | cd $(dirname "$0") 14 | pwd -P 15 | )/../.. 16 | APOTHECARY_PATH=$APOTH/apothecary 17 | cd $APOTHECARY_PATH 18 | 19 | if [ "$TARGET" == "ios" ]; then 20 | if [ "$OPT2" == "1" ]; then 21 | echo "Install - 1" 22 | elif [ "$OPT2" == "2" ]; then 23 | echo "Install - 2" 24 | fi 25 | fi 26 | -------------------------------------------------------------------------------- /scripts/emscripten/.emscripten: -------------------------------------------------------------------------------- 1 | import os 2 | SPIDERMONKEY_ENGINE = '' 3 | NODE_JS = 'node' 4 | LLVM_ROOT='%HOME%/emscripten-sdk/clang/fastcomp/build_master_64/bin' 5 | EMSCRIPTEN_ROOT='%HOME%/emscripten-sdk/emscripten/master' 6 | EMSCRIPTEN_NATIVE_OPTIMIZER='%HOME%/emscripten-sdk/emscripten/master_64bit_optimizer/optimizer' 7 | V8_ENGINE = '' 8 | TEMP_DIR = '/tmp' 9 | COMPILER_ENGINE = NODE_JS 10 | JS_ENGINES = [NODE_JS] 11 | -------------------------------------------------------------------------------- /scripts/emscripten/build_emscripten.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=emscripten 27 | export PLATFORM=emscripten 28 | export ARCH=32 29 | export NO_FORCE=ON 30 | export PTHREADS_ENABLED=1 31 | 32 | echo "Target: $TARGET" 33 | echo "Architecture: $ARCH" 34 | echo "Bundle: $BUNDLE" 35 | echo "Apothecary path: $APOTHECARY_PATH" 36 | 37 | ${ROOT}./scripts/build.sh 38 | 39 | echo " Build Successful. Now Packaging ..." 40 | ${ROOT}./scripts/package.sh 41 | 42 | echo " Completed" 43 | -------------------------------------------------------------------------------- /scripts/emscripten/build_emscripten_64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=emscripten 27 | export PLATFORM=emscripten 28 | export ARCH=64 29 | export NO_FORCE=ON 30 | export PTHREADS_ENABLED=1 31 | export ALWAYS_BUILD=1 32 | 33 | echo "Target: $TARGET" 34 | echo "Architecture: $ARCH" 35 | echo "Bundle: $BUNDLE" 36 | echo "Apothecary path: $APOTHECARY_PATH" 37 | 38 | ${ROOT}./scripts/build.sh 39 | 40 | echo " Build Successful. Now Packaging ..." 41 | ${ROOT}./scripts/package.sh 42 | 43 | echo " Completed" 44 | -------------------------------------------------------------------------------- /scripts/emscripten/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [[ -n "$DOCKER" ]]; then 4 | echo "Running inside Docker: Installing dependencies in the emscripten container..." 5 | docker exec -i emscripten apt update && \ 6 | docker exec -i emscripten apt install -y \ 7 | coreutils libboost-tools-dev rsync gperf ccache build-essential \ 8 | autoconf automake pkgconf cmake libtool multistrap unzip dos2unix 9 | docker exec -i emscripten sh -c "echo \$PATH" 10 | else 11 | echo "Running natively: Installing dependencies on the host system..." 12 | sudo apt-get update && \ 13 | sudo apt-get install -y \ 14 | coreutils libboost-tools-dev rsync gperf ccache build-essential \ 15 | autoconf automake pkgconf cmake libtool multistrap unzip dos2unix 16 | fi 17 | -------------------------------------------------------------------------------- /scripts/emscripten/setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Default EMSDK path and version 4 | EMSDK=${EMSDK:-$HOME/emsdk} 5 | EMSDK_VERSION=${EMSDK_VERSION:-latest} # Default to 'latest' if unset 6 | SETUP_STATUS_FILE="$HOME/.emsdk_setup_status" 7 | 8 | check_emsdk() { 9 | if [ -d "$1/upstream/emscripten" ] && command -v emcc >/dev/null 2>&1; then 10 | local installed_version=$(emcc --version | head -n1 | cut -d' ' -f3) 11 | echo "Emscripten version: $installed_version" 12 | return 0 13 | else 14 | return 1 15 | fi 16 | } 17 | 18 | # Preserve EMSDK_VERSION before sourcing emsdk_env.sh 19 | export ORIGINAL_EMSDK_VERSION="$EMSDK_VERSION" 20 | 21 | if [ -f "$SETUP_STATUS_FILE" ]; then 22 | SAVED_VERSION=$(cat "$SETUP_STATUS_FILE") 23 | if [ "$SAVED_VERSION" = "$EMSDK_VERSION" ] && check_emsdk "$EMSDK"; then 24 | echo "=== EMSDK is already set up (Version: $SAVED_VERSION). Skipping installation. ===" 25 | source "$EMSDK/emsdk_env.sh" 26 | return 0 27 | else 28 | echo "=== EMSDK version mismatch or not properly installed. Reinstalling... ===" 29 | fi 30 | fi 31 | 32 | # Install or update Emscripten if needed 33 | if [ ! -d "$EMSDK" ]; then 34 | echo "===Emscripten SDK not found. Installing...===" 35 | git clone https://github.com/emscripten-core/emsdk.git "$EMSDK" 36 | cd "$EMSDK" 37 | else 38 | echo "===Updating Emscripten SDK...===" 39 | cd "$EMSDK" 40 | git pull 41 | fi 42 | 43 | ./emsdk install "$EMSDK_VERSION" 44 | ./emsdk activate "$EMSDK_VERSION" 45 | 46 | # Source the environment after installation/activation 47 | source "./emsdk_env.sh" 48 | 49 | # Restore EMSDK_VERSION after sourcing 50 | export EMSDK_VERSION="$ORIGINAL_EMSDK_VERSION" 51 | 52 | 53 | 54 | # Verify installation 55 | if check_emsdk "$EMSDK"; then 56 | echo "Emscripten SDK installed successfully." 57 | else 58 | echo "Error: Failed to verify Emscripten SDK after installation." 59 | exit 1 60 | fi 61 | 62 | echo "$EMSDK_VERSION" > "$SETUP_STATUS_FILE" 63 | 64 | # GitHub Actions environment setup 65 | if [ "${GITHUB_ACTIONS:-0}" = true ]; then 66 | echo "EMSDK=$EMSDK" >> "$GITHUB_ENV" 67 | echo "EMSCRIPTEN=$EMSDK/upstream/emscripten" >> "$GITHUB_ENV" 68 | fi 69 | 70 | # Add to shell config for permanent PATH (optional) 71 | if [ -f "$HOME/.bashrc" ]; then 72 | echo 'export PATH="'$EMSDK':'$EMSDK'/upstream/emscripten:$PATH"' >> "$HOME/.bashrc" 73 | elif [ -f "$HOME/.zshrc" ]; then 74 | echo 'export PATH="'$EMSDK':'$EMSDK'/upstream/emscripten:$PATH"' >> "$HOME/.zshrc" 75 | fi 76 | 77 | echo "Emscripten setup complete. Ready to build." 78 | -------------------------------------------------------------------------------- /scripts/emscripten/setup_env_unix.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VERSION="latest" 4 | 5 | # Check if EMSDK is set and valid 6 | if [[ -z "$EMSDK" || ! -d "$EMSDK/upstream/emscripten" ]]; then 7 | echo "🔹 Emscripten SDK not found or invalid. Installing the latest version..." 8 | cd $HOME 9 | if [ ! -d "emsdk" ]; then 10 | git clone https://github.com/emscripten-core/emsdk.git 11 | fi 12 | 13 | cd emsdk 14 | git pull 15 | 16 | echo "Installing/updating Python dependencies..." 17 | python3 -m pip install --upgrade pip setuptools virtualenv 18 | 19 | ./emsdk install "$VERSION" 20 | ./emsdk activate "$VERSION" --permanent 21 | 22 | echo "EMSDK=$HOME/emsdk" >> $HOME/.bashrc 23 | echo 'export PATH="$HOME/emsdk:$HOME/emsdk/upstream/emscripten:$PATH"' >> $HOME/.bashrc 24 | source $HOME/.bashrc 25 | else 26 | echo "Emscripten SDK found at $EMSDK. Updating to the latest version..." 27 | cd "$EMSDK" 28 | ./emsdk install "$VERSION" 29 | ./emsdk activate "$VERSION" --permanent 30 | fi 31 | 32 | source "$HOME/emsdk/emsdk_env.sh" 33 | echo "Emscripten version: $(emcc --version)" 34 | -------------------------------------------------------------------------------- /scripts/export_config.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | # # Script execution starts here 6 | # TARGET_DIR="$1" 7 | # PLATFORM="$2" 8 | # ARCH="$3" 9 | 10 | # Rewrite the paths 11 | # export_paths "$TARGET_DIR" "$PLATFORM" "$ARCH" 12 | 13 | # Function to rewrite paths in pkg-config and CMake files to be relative 14 | export_paths() { 15 | local TARGET_DIR="$1" 16 | local PLATFORM="$2" 17 | local ARCH="$3" 18 | 19 | # Ensure the directories exist 20 | if [ -d "$TARGET_DIR/lib/$PLATFORM/$ARCH" ]; then 21 | echo "Rewriting pkg-config files in $TARGET_DIR/lib/$PLATFORM/$ARCH/pkgconfig..." 22 | 23 | for PKG_FILE in "$TARGET_DIR/lib/$PLATFORM/$ARCH"/*.pc; do 24 | [ -f "$PKG_FILE" ] || continue 25 | sed -i.bak "s|^prefix=.*|prefix=../../../|" "$PKG_FILE" 26 | sed -i.bak "s|^exec_prefix=.*|exec_prefix=../../../|" "$PKG_FILE" 27 | sed -i.bak "s|^libdir=.*|libdir=../|" "$PKG_FILE" 28 | sed -i.bak "s|^includedir=.*|includedir=../../../include|" "$PKG_FILE" 29 | rm "${PKG_FILE}.bak" # Clean up backup file 30 | done 31 | fi 32 | 33 | # Rewriting paths in CMake files (if applicable) 34 | if [ -d "$TARGET_DIR/lib/$PLATFORM/$ARCH" ]; then 35 | echo "Rewriting CMake files in $TARGET_DIR/lib/$PLATFORM/$ARCH/cmake..." 36 | 37 | for CMAKE_FILE in "$TARGET_DIR/lib/$PLATFORM/$ARCH"/*.cmake; do 38 | [ -f "$CMAKE_FILE" ] || continue 39 | sed -i.bak "s|${TARGET_DIR}|../../../|" "$CMAKE_FILE" 40 | rm "${CMAKE_FILE}.bak" # Clean up backup file 41 | done 42 | fi 43 | 44 | echo "Paths have been successfully rewritten for $PLATFORM/$ARCH." 45 | } 46 | 47 | # Ensure arguments are provided 48 | if [ "$#" -lt 3 ]; then 49 | echo "Usage: $0 " 50 | exit 1 51 | fi 52 | -------------------------------------------------------------------------------- /scripts/format.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # set -x 3 | echo " Format Bash Scripts all nice" 4 | printHelp() { 5 | echo "Help" 6 | cat </dev/null; then 24 | # echo "shfmt is not installed. Please install shfmt to automatically format shell scripts." 25 | # # Uncomment the next line to abort if shfmt is not installed 26 | # return 1 27 | # fi 28 | 29 | if ! command -v dos2unix &>/dev/null; then 30 | echo "dos2unix is not installed. Please install shfmt to automatically format shell scripts." 31 | # Uncomment the next line to abort if shfmt is not installed 32 | return 1 33 | fi 34 | 35 | # Check if the directory exists 36 | if [ ! -d "$directory" ]; then 37 | echo "The specified directory does not exist: [$directory]" 38 | return 1 39 | fi 40 | 41 | echo "Formatting shell scripts in [$directory]... listing all with 755" 42 | find "$directory" -type f -name "*.sh" ! -perm 755 -exec ls -l {} \; 43 | echo "Listing shell scripts in [$directory] without +x ..." 44 | find "$directory" -type f -name "*.sh" ! -perm /a+x -exec ls -l {} \; 45 | 46 | sh_files=$(find "$directory" -type f -name "*.sh") 47 | if [ -z "$sh_files" ]; then 48 | echo "No .sh files found in [$directory.]" 49 | return 0 50 | fi 51 | 52 | echo "Found the following .sh files:" 53 | echo "$sh_files" 54 | 55 | # Iterate over the list of files 56 | for file in $sh_files; do 57 | echo " Processing: [$file]" 58 | if [ "$file" == "/format.sh" ]; then 59 | continue 60 | fi 61 | 62 | # temp_file=$(mktemp) 63 | 64 | shfmt -i 4 -ci -w "$file" 65 | 66 | # Safely expand tabs and format the script 67 | # expand -t 4 "$file" | shfmt -i 4 -ci -w - > "$temp_file" 68 | 69 | # # Replace the original file only if the operation was successful 70 | # if [ $? -eq 0 ]; then 71 | # mv "$temp_file" "$file" 72 | # else 73 | # echo "An error occurred. Original file remains unchanged." 74 | # rm -f "$temp_file" 75 | # fi 76 | 77 | # Format TAB to spaces 78 | # expand -t 4 "$file" | shfmt -i 4 -ci -w - > "$file" 79 | 80 | # Format Spaces to TAB 81 | # unexpand -t 4 "$file" | shfmt -i 4 -ci -w - > "$file" 82 | 83 | # Fix line endings with dos2unix 84 | dos2unix "$file" && echo "Converted to Unix line endings: [$file]" 85 | 86 | # Set permissions to 755 87 | chmod +x "$file" && echo "Set permissions to +x: [$file]" 88 | done 89 | 90 | # Stage the formatted .sh files with git add 91 | # Note: This will stage all .sh files in the directory, not just the ones modified by shfmt 92 | git add "$(realpath "$directory")"/*.sh 93 | 94 | echo "Shell scripts formatted and staged successfully." 95 | } 96 | 97 | format_scripts $1 98 | -------------------------------------------------------------------------------- /scripts/id_rsa.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openframeworks/apothecary/fae96e615875a701d48dc29cf4a3be24bc472a07/scripts/id_rsa.enc -------------------------------------------------------------------------------- /scripts/ios/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openframeworks/apothecary/fae96e615875a701d48dc29cf4a3be24bc472a07/scripts/ios/.gitkeep -------------------------------------------------------------------------------- /scripts/ios/build_ios_SIM_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=ios 27 | export ARCH=SIM_arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/ios/build_ios_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=ios 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/ios/build_ios_x86_64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=ios 27 | export ARCH=x86_64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/ios/build_xcframework.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=ios 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | export OUTPUT_FOLDER=$(realpath "$ROOT/out") 31 | 32 | echo "Target: $TARGET" 33 | echo "Architecture: $ARCH" 34 | echo "Bundle: $BUNDLE" 35 | echo "Apothecary path: $APOTHECARY_PATH" 36 | 37 | source ${ROOT}./scripts/calculate_formulas.sh 38 | if [ -z "$FORMULAS" ]; then 39 | echo "No formulas to framework" 40 | exit 0 41 | fi 42 | 43 | for formula in "${FORMULAS[@]}"; do 44 | formula_name="${formula%.*}" 45 | ARGS="$FORCE -t$TARGET -d$OUTPUT_FOLDER -a$ARCH" 46 | #echo "./apothecary $ARGS framework $formula_name" 47 | eval "cd $APOTHECARY_PATH" 48 | echo "---------[./apothecary $ARGS framework $formula_name] " 49 | eval "./apothecary $ARGS framework $formula_name" 50 | 51 | done 52 | echo "Apothecary openFrameworks Build XCFramework for $TARGET complete." 53 | echo "========================" 54 | -------------------------------------------------------------------------------- /scripts/ios/install.sh: -------------------------------------------------------------------------------- 1 | # Silent update to prevent long logs 2 | brew update >/dev/null 3 | 4 | brew install --formula cmake coreutils boost-bcp autoconf automake libtool ccache brotli libtool wget bash shfmt 5 | # brew reinstall libtool 6 | # export PATH="/usr/local/opt/ccache/libexec:$PATH" 7 | 8 | set -e 9 | # capture failing exits in commands obscured behind a pipe 10 | set -o pipefail 11 | 12 | APOTH=$( 13 | cd $(dirname "$0") 14 | pwd -P 15 | )/../.. 16 | APOTHECARY_PATH=$APOTH/apothecary 17 | cd $APOTHECARY_PATH 18 | 19 | if [ "$TARGET" == "ios" ]; then 20 | if [ "$OPT2" == "1" ]; then 21 | echo "Install - 1" 22 | elif [ "$OPT2" == "2" ]; then 23 | echo "Install - 2" 24 | fi 25 | fi 26 | -------------------------------------------------------------------------------- /scripts/linux/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openframeworks/apothecary/fae96e615875a701d48dc29cf4a3be24bc472a07/scripts/linux/.gitkeep -------------------------------------------------------------------------------- /scripts/linux/arm64/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 8 | cd $SCRIPT_DIR 9 | APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../../.." && pwd)" 10 | cd $APOTHECARY_LEVEL 11 | 12 | trapError() { 13 | echo 14 | echo " ^ Received error ^" 15 | cat formula.log 16 | exit 1 17 | } 18 | 19 | export ARCH=arm64 20 | export TYPE=linux 21 | 22 | echo "calculate formulas" 23 | $APOTHECARY_LEVEL/scripts/calculate_formulas.sh 24 | 25 | echo "building" 26 | $APOTHECARY_LEVEL/scripts/build.sh 27 | -------------------------------------------------------------------------------- /scripts/linux/build_linux64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=linux 27 | export ARCH=x86_64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/linux/compile_gcc5.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | exit 1 11 | } 12 | 13 | isRunning() { 14 | if [ “$(uname)” == “Linux” ]; then 15 | if [ -d /proc/$1 ]; then 16 | return 0 17 | else 18 | return 1 19 | fi 20 | else 21 | number=$(ps aux | sed -E "s/[^ ]* +([^ ]*).*/\1/g" | grep ^$1$ | wc -l) 22 | 23 | if [ $number -gt 0 ]; then 24 | return 0 25 | else 26 | return 1 27 | fi 28 | fi 29 | } 30 | 31 | echoDots() { 32 | while isRunning $1; do 33 | for i in $(seq 1 10); do 34 | echo -ne . 35 | if ! isRunning $1; then 36 | printf "\r" 37 | return 38 | fi 39 | sleep 2 40 | done 41 | printf "\r " 42 | printf "\r" 43 | done 44 | } 45 | 46 | sudo add-apt-repository -y -s ppa:dns/gnu 47 | sudo add-apt-repository -y -s ppa:ubuntu-toolchain-r/test 48 | sudo apt-get update -q 49 | 50 | sudo apt-get build-dep -y gcc-5 51 | g++ -v 52 | apt-get source -y gcc-5 53 | dpkg-source -x gcc-5_5.4.1-2ubuntu1~14.04.dsc 54 | #dpkg-source -x gcc-5_5.4.1-2ubuntu1~16.04.dsc 55 | cd gcc-5-5.4.1 56 | 57 | #tar -xf gcc-*.tar.xz 58 | #mv gcc-5.4.0 src 59 | #cd src && ./contrib/download_prerequisites 60 | #./configure --prefix=/usr/ \ 61 | #-v --with-pkgversion='Ubuntu 5.4.1-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo -with-arch-directory=amd64 --enable-multiarch --disable-werror --disable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu 62 | #make -j 4 && make install 63 | 64 | export LC_ALL=C 65 | export LC_MONETARY=C 66 | export LC_ADDRESS=C 67 | export LC_TELEPHONE=C 68 | export LC_NAME=C 69 | export LC_MEASUREMENT=C 70 | export LC_IDENTIFICATION=C 71 | export LC_PAPER=C 72 | export LANG=C 73 | 74 | sed -i "s/libstdcxx_abi = gcc4-compatible/libstdcxx_abi = new/g" debian/rules.defs 75 | debian/rules -j20 >>formula.log 2>&1 & 76 | apothecaryPID=$! 77 | echoDots $apothecaryPID 78 | wait $apothecaryPID 79 | ls *.deb 80 | cd .. 81 | ls *.deb 82 | -------------------------------------------------------------------------------- /scripts/linux/compile_gcc6.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | exit 1 11 | } 12 | 13 | isRunning() { 14 | if [ “$(uname)” == “Linux” ]; then 15 | if [ -d /proc/$1 ]; then 16 | return 0 17 | else 18 | return 1 19 | fi 20 | else 21 | number=$(ps aux | sed -E "s/[^ ]* +([^ ]*).*/\1/g" | grep ^$1$ | wc -l) 22 | 23 | if [ $number -gt 0 ]; then 24 | return 0 25 | else 26 | return 1 27 | fi 28 | fi 29 | } 30 | 31 | echoDots() { 32 | while isRunning $1; do 33 | for i in $(seq 1 10); do 34 | echo -ne . 35 | if ! isRunning $1; then 36 | printf "\r" 37 | return 38 | fi 39 | sleep 2 40 | done 41 | printf "\r " 42 | printf "\r" 43 | done 44 | } 45 | 46 | sudo add-apt-repository -y -s ppa:dns/gnu 47 | sudo add-apt-repository -y -s ppa:ubuntu-toolchain-r/test 48 | sudo apt-get update -q 49 | 50 | sudo apt-get build-dep -y gcc-5 51 | g++ -v 52 | apt-get source -y gcc-6 53 | dpkg-source -x gcc-6_6.2.0-3ubuntu11~14.04.dsc 54 | #dpkg-source -x gcc-5_5.4.1-2ubuntu1~16.04.dsc 55 | cd gcc-6-6.2.0 56 | 57 | #tar -xf gcc-*.tar.xz 58 | #mv gcc-5.4.0 src 59 | #cd src && ./contrib/download_prerequisites 60 | #./configure --prefix=/usr/ \ 61 | #-v --with-pkgversion='Ubuntu 5.4.1-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo -with-arch-directory=amd64 --enable-multiarch --disable-werror --disable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu 62 | #make -j 4 && make install 63 | 64 | export LC_ALL=C 65 | export LC_MONETARY=C 66 | export LC_ADDRESS=C 67 | export LC_TELEPHONE=C 68 | export LC_NAME=C 69 | export LC_MEASUREMENT=C 70 | export LC_IDENTIFICATION=C 71 | export LC_PAPER=C 72 | export LANG=C 73 | 74 | sed -i "s/libstdcxx_abi = gcc4-compatible/libstdcxx_abi = new/g" debian/rules.defs 75 | debian/rules -j20 >>formula.log 2>&1 & 76 | apothecaryPID=$! 77 | echoDots $apothecaryPID 78 | wait $apothecaryPID 79 | fakeroot debian/rules binary >>formula.log 2>&1 & 80 | apothecaryPID=$! 81 | echoDots $apothecaryPID 82 | wait $apothecaryPID 83 | -------------------------------------------------------------------------------- /scripts/linux/jetson/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 8 | cd $SCRIPT_DIR 9 | APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" 10 | cd $APOTHECARY_LEVEL 11 | 12 | trapError() { 13 | echo 14 | echo " ^ Received error ^" 15 | cat formula.log 16 | exit 1 17 | } 18 | export ARCH=jetson 19 | export TYPE=linux 20 | 21 | echo "calculate formulas" 22 | $APOTHECARY_LEVEL/scripts/calculate_formulas.sh 23 | 24 | echo "building" 25 | $APOTHECARY_LEVEL/scripts/build.sh 26 | -------------------------------------------------------------------------------- /scripts/linux/jetson/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 8 | cd $SCRIPT_DIR 9 | APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" 10 | cd $APOTHECARY_LEVEL 11 | 12 | trapError() { 13 | echo 14 | echo " ^ Received error ^" 15 | cat formula.log 16 | exit 1 17 | } 18 | 19 | sudo apt-get install -y aptitude build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev cmake unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils libtool dos2unix 20 | sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev ccache 21 | sudo aptitude install -y gperf 22 | echo "install depeneds formulas complete" 23 | -------------------------------------------------------------------------------- /scripts/linux/jetson/multistrap.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | arch=arm64 3 | directory=raspbian 4 | cleanup=true 5 | noauth=true 6 | unpack=true 7 | aptsources=Raspbian-Base OpenFrameworks 8 | debootstrap=Raspbian-Base OpenFrameworks 9 | 10 | 11 | [Raspbian-Base] 12 | packages=base-files dbus dpkg dropbear initscripts iputils-ping isc-dhcp-client kmod login locales lsb-base lsb-release makedev netbase net-tools sysvinit-utils sysv-rc libudev-dev 13 | source=http://deb.debian.org/debian 14 | keyring=debian-archive-keyring 15 | components=main contrib non-free rpi 16 | suite=bullseye 17 | 18 | [OpenFrameworks] 19 | packages=libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libopencv-dev libegl1-mesa-dev libglvnd-dev libgles2-mesa-dev libassimp-dev librtaudio-dev libboost-filesystem-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good liburiparser-dev libcurl4-openssl-dev libxml2-dev libpugixml-dev libpoco-dev libglfw3-dev libxrandr-dev libxinerama-dev libxcursor-dev freeglut3-dev libxi-dev 20 | source=http://deb.debian.org/debian 21 | keyring=debian-archive-keyring 22 | components=main contrib non-free rpi 23 | suite=bullseye 24 | -------------------------------------------------------------------------------- /scripts/linux/jetson/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | cat formula.log 11 | exit 1 12 | } 13 | 14 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 15 | cd $SCRIPT_DIR 16 | APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" 17 | cd $APOTHECARY_LEVEL 18 | 19 | CROSS_COMPILER=jetson 20 | CROSS_URL="https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v3.0/toolchain/aarch64--glibc--stable-2022.08-1.tar.bz2" 21 | CROSS_NAME=aarch64--glibc--stable-2022.08-1.tar.bz2 22 | CROSS_EXTRACT=aarch64--glibc--stable-2022.08-1 23 | 24 | wget "${CROSS_URL}" -O ${CROSS_NAME}.tar.gz && tar xf ${CROSS_NAME}.tar.gz && rm ${CROSS_NAME}.tar.gz && mv ${CROSS_EXTRACT} ${CROSS_COMPILER} 25 | 26 | echo "setup complete" 27 | -------------------------------------------------------------------------------- /scripts/linux/raspios/aarch64/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 4 | cd $SCRIPT_DIR 5 | ROOT=$( 6 | cd $(dirname "$0") 7 | pwd -P 8 | )/../../../../../ 9 | APOTHECARY_PATH=$ROOT/apothecary 10 | 11 | set -o pipefail 12 | # trap any script errors and exit 13 | trap "trapError" ERR 14 | 15 | trapError() { 16 | echo 17 | echo " ^ Received error ^" 18 | cat formula.log 19 | exit 1 20 | } 21 | 22 | echo $APOTHECARY_LEVEL 23 | cd $APOTHECARY_LEVEL 24 | 25 | # PATH=$RASP_CROSSCOMPILER/bin:$PATH 26 | # LD_LIBRARY_PATH=$RASP_CROSSCOMPILER/lib 27 | 28 | # export GCC_PREFIX=aarch64-linux-gnu 29 | # export GCC_VERSION="14.2.0" # UPDATE THIS AS NEEDED /libexec/gcc/aarch64-linux-gnu/*/ 30 | 31 | # export AR="${GCC_PREFIX}-gcc-ar" 32 | # export CC="${GCC_PREFIX}-gcc" 33 | # export CXX="${GCC_PREFIX}-g++" 34 | # export CPP="${GCC_PREFIX}-cpp" 35 | # export FC="${GCC_PREFIX}-gfortran" 36 | # export RANLIB="${GCC_PREFIX}-ranlib" 37 | # export LD="${GCC_PREFIX}-ld" 38 | 39 | # GCCPATH="$RASP/libexec/gcc/${GCC_PREFIX}/${GCC_VERSION}" 40 | # export ARFLAGS="--plugin $GCCPATH/liblto_plugin.so" 41 | # export RANLIBFLAGS="--plugin $GCCPATH/liblto_plugin.so" 42 | 43 | # export LIBC_USR=${RASP}/${GCC_PREFIX}/libc/usr/ 44 | # export CRT=${LIBC_USR}/lib64 45 | 46 | # sudo chmod +x SSymlinker 47 | # ./SSymlinker -s ${LIBC_USR}/include/asm -d /usr/include 48 | # ./SSymlinker -s ${LIBC_USR}/include/gnu -d /usr/include 49 | # ./SSymlinker -s ${LIBC_USR}/include/bits -d /usr/include 50 | # ./SSymlinker -s ${LIBC_USR}/include/sys -d /usr/include 51 | # # ./SSymlinker -s ${LIBC_USR}/include/sound -d /usr/include 52 | # ./SSymlinker -s ${LIBC_USR}/include/video -d /usr/include 53 | # ./SSymlinker -s ${LIBC_USR}/include -d /usr/include 54 | # ./SSymlinker -s ${CRT}/crtn.o -d /usr/lib64/crtn.o 55 | # ./SSymlinker -s ${CRT}/crt1.o -d /usr/lib64/crt1.o 56 | # ./SSymlinker -s ${CRT}/crti.o -d /usr/lib64/crti.o 57 | # ./SSymlinker -s ${LIBC_USR}/lib/crtn.o -d /usr/lib/crtn.o 58 | # ./SSymlinker -s ${LIBC_USR}/lib/crt1.o -d /usr/lib/crt1.o 59 | # ./SSymlinker -s ${LIBC_USR}/lib/crti.o -d /usr/lib/crti.o 60 | 61 | # echo 'export PATH=$PATH' >> .bashrc 62 | # echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH' >> .bashrc 63 | # source .bashrc 64 | 65 | #echo "ROOT dir " 66 | #ls -la $ROOT 67 | # 68 | #echo "RASP dir " 69 | #ls -la $RASP 70 | # 71 | #echo "GCCPATH IS " 72 | #echo $GCCPATH 73 | 74 | echo "calculate formulas" 75 | $APOTHECARY_LEVEL/scripts/calculate_formulas.sh 76 | 77 | echo "building" 78 | $APOTHECARY_LEVEL/scripts/build.sh 79 | 80 | echo "===build complete===" 81 | cd $SCRIPT_DIR 82 | -------------------------------------------------------------------------------- /scripts/linux/raspios/aarch64/multistrap.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | arch=arm64 3 | directory=raspbian 4 | cleanup=true 5 | noauth=true 6 | unpack=true 7 | aptsources=Raspbian-Base OpenFrameworks 8 | debootstrap=Raspbian-Base OpenFrameworks 9 | 10 | 11 | [Raspbian-Base] 12 | packages=base-files dbus dpkg dropbear initscripts iputils-ping isc-dhcp-client kmod login locales lsb-base lsb-release makedev netbase net-tools sysvinit-utils sysv-rc libudev-dev 13 | source=http://deb.debian.org/debian 14 | keyring=debian-archive-keyring 15 | components=main contrib non-free rpi 16 | suite=bullseye 17 | 18 | [OpenFrameworks] 19 | packages=libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libopencv-dev libegl1-mesa-dev libglvnd-dev libgles2-mesa-dev libassimp-dev librtaudio-dev libboost-filesystem-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good liburiparser-dev libcurl4-openssl-dev libxml2-dev libpugixml-dev libpoco-dev libglfw3-dev libxrandr-dev libxinerama-dev libxcursor-dev freeglut3-dev libxi-dev 20 | source=http://deb.debian.org/debian 21 | keyring=debian-archive-keyring 22 | components=main contrib non-free rpi 23 | suite=bullseye 24 | -------------------------------------------------------------------------------- /scripts/linux/raspios/aarch64/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | cat formula.log 11 | exit 1 12 | } 13 | 14 | if grep -q "Raspbian" /etc/os-release 2>/dev/null && [[ "$(uname -m)" == "aarch64" ]]; then 15 | NATIVE="true" 16 | echo "Detected Raspberry Pi OS (Raspbian) on arm64. Setting NATIVE=true" 17 | else 18 | NATIVE="false" 19 | fi 20 | 21 | CROSS_COMPILER=${CROSS_COMPILER:-raspbian} 22 | CROSS_SYSROOT=${CROSS_SYSROOT:-rpi_rootfs} 23 | CROSS_OS="${CROSS_OS:-bookworm}" 24 | CROSS_OS="${CROSS_OS,,}" 25 | 26 | if [ "$CROSS_OS" == "bookworm" ] && [ "$NATIVE" == "false" ]; then 27 | CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Cross-Compiler%20Toolchains/Bookworm/GCC%2014.2.0/cross-gcc-14.2.0-pi_64.tar.gz/download" 28 | CROSS_NAME="cross-gcc-14.2.0-pi_64" 29 | CROSS_EXTRACT="cross-pi-gcc-14.2.0-64" 30 | echo "Using Bookworm toolchain: $CROSS_NAME" 31 | elif [ "$CROSS_OS" == "bookworm" ] && [ "$NATIVE" == "true" ]; then 32 | CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Native-Compiler%20Toolchains/Bookworm/GCC%2014.2.0/native-gcc-14.2.0-pi_64.tar.gz/download" 33 | CROSS_NAME="native-gcc-14.2.0-pi_64" 34 | CROSS_EXTRACT="native-pi-gcc-14.2.0-64" 35 | echo "Using Native Bookworm toolchain: $CROSS_NAME" 36 | elif [ "$CROSS_OS" == "Bullseye" ]; then 37 | # CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Cross-Compiler%20Toolchains/Bullseye/GCC%2013.1.0/cross-gcc-13.1.0-pi_64.tar.gz/download" 38 | # CROSS_NAME="cross-gcc-13.1.0-pi_64" 39 | # CROSS_EXTRACT="cross-pi-gcc-13.1.0-64" 40 | # echo "Using Bullseye toolchain: $CROSS_NAME" 41 | echo "Unsupported CROSS_OS Bullseye value: [$CROSS_OS]" 42 | exit 1 43 | else 44 | echo "Unsupported CROSS_OS value: [$CROSS_OS]" 45 | exit 1 46 | fi 47 | wget "${CROSS_URL}" -O ${CROSS_NAME}.tar.gz && tar xf ${CROSS_NAME}.tar.gz && rm ${CROSS_NAME}.tar.gz && mv ${CROSS_EXTRACT} ${CROSS_COMPILER} 48 | 49 | 50 | if [ "$NATIVE" == "0" ]; then 51 | wget https://downloads.raspberrypi.com/raspios_lite_arm64/root.tar.xz 52 | mkdir -p rpi-arm64-rootfs 53 | sudo tar -xJpf raspios_lite_arm64/root.tar.xz -C rpi-arm64-rootfs 54 | fi 55 | 56 | echo "===setup complete===" 57 | cd $SCRIPT_DIR 58 | -------------------------------------------------------------------------------- /scripts/linux/raspios/armv6l/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openframeworks/apothecary/fae96e615875a701d48dc29cf4a3be24bc472a07/scripts/linux/raspios/armv6l/.gitkeep -------------------------------------------------------------------------------- /scripts/linux/raspios/armv6l/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | cat formula.log 11 | exit 1 12 | } 13 | 14 | export ARCH=armv6l 15 | export TYPE=linux 16 | 17 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 18 | cd $SCRIPT_DIR 19 | ROOT=$( 20 | cd $(dirname "$0") 21 | pwd -P 22 | )/../../../../../ 23 | APOTHECARY_PATH=$ROOT/apothecary 24 | 25 | # echo $ROOT 26 | # cd $ROOT 27 | # export RASP="$ROOT/raspbian" 28 | 29 | # PATH=$RASP/bin:$PATH 30 | 31 | # export GCC_PREFIX=arm-linux-gnueabihf 32 | # export GCC_VERSION="14.2.0" # UPDATE THIS AS NEEDED /libexec/gcc/arm-linux-gnueabihf/*/ 33 | 34 | # LD_LIBRARY_PATH=${RASP}/${GCC_PREFIX}/libc/usr/lib:${RASP}/${GCC_PREFIX}/libc/lib:${RASP}/lib 35 | 36 | # export AR="${GCC_PREFIX}-gcc-ar" 37 | # export CC="${GCC_PREFIX}-gcc" 38 | # export CXX="${GCC_PREFIX}-g++" 39 | # export CPP="${GCC_PREFIX}-cpp" 40 | # export FC="${GCC_PREFIX}-gfortran" 41 | # export RANLIB="${GCC_PREFIX}-ranlib" 42 | # export LD="${GCC_PREFIX}-ld" 43 | 44 | # GCCPATH="$RASP/libexec/gcc/${GCC_PREFIX}/${GCC_VERSION}" 45 | # export ARFLAGS="--plugin $GCCPATH/liblto_plugin.so" 46 | # export RANLIBFLAGS="--plugin $GCCPATH/liblto_plugin.so" 47 | 48 | # export LIBC_USR=${RASP}/${GCC_PREFIX}/libc/usr/ 49 | # export CRT=${LIBC_USR}/lib 50 | 51 | # sudo chmod +x SSymlinker 52 | # ./SSymlinker -s ${LIBC_USR}/include/asm -d /usr/include 53 | # ./SSymlinker -s ${LIBC_USR}/include/gnu -d /usr/include 54 | # ./SSymlinker -s ${LIBC_USR}/include/bits -d /usr/include 55 | # ./SSymlinker -s ${LIBC_USR}/include/sys -d /usr/include 56 | # ./SSymlinker -s ${LIBC_USR}/include/sound -d /usr/include 57 | # ./SSymlinker -s ${LIBC_USR}/include/video -d /usr/include 58 | # ./SSymlinker -s ${LIBC_USR}/include -d /usr/include 59 | # ./SSymlinker -s ${CRT}/crtn.o -d /usr/lib/crtn.o 60 | # ./SSymlinker -s ${CRT}/crt1.o -d /usr/lib/crt1.o 61 | # ./SSymlinker -s ${CRT}/crti.o -d /usr/lib/crti.o 62 | 63 | # ln -sf ${CRT}/crti.o /usr/lib/crti.o 64 | # ln -sf ${CRT}/crt1.o /usr/lib/crt1.o 65 | # ln -sf ${CRT}/crtn.o /usr/lib/crtn.o 66 | 67 | # echo 'export PATH=$PATH' >> .bashrc 68 | # echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH' >> .bashrc 69 | # source .bashrc 70 | 71 | #echo "ROOT dir " 72 | #ls -la $ROOT 73 | # 74 | #echo "RASP dir " 75 | #ls -la $RASP 76 | # 77 | #echo "GCCPATH IS " 78 | #echo $GCCPATH 79 | 80 | echo "calculate formulas" 81 | $APOTHECARY_LEVEL/scripts/calculate_formulas.sh 82 | 83 | echo "building" 84 | $APOTHECARY_LEVEL/scripts/build.sh 85 | 86 | echo "===build complete===" 87 | cd $SCRIPT_DIR 88 | -------------------------------------------------------------------------------- /scripts/linux/raspios/armv6l/multistrap.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | arch=armhf 3 | directory=raspbian 4 | cleanup=true 5 | noauth=true 6 | unpack=true 7 | aptsources=Raspbian-Base OpenFrameworks 8 | debootstrap=Raspbian-Base OpenFrameworks 9 | 10 | [Raspbian-Bare] 11 | packages=busybox busybox-syslogd udhcpc 12 | source=http://archive.raspbian.org/raspbian 13 | keyring=raspbian-archive-keyring 14 | components=main contrib non-free rpi 15 | suite=buster 16 | 17 | [Raspbian-Base] 18 | packages=base-files dbus dpkg dropbear initscripts iputils-ping isc-dhcp-client kmod login locales lsb-base lsb-release makedev netbase net-tools sysvinit-utils sysv-rc udev 19 | source=http://archive.raspbian.org/raspbian 20 | keyring=raspbian-archive-keyring 21 | components=main contrib non-free rpi 22 | suite=buster 23 | 24 | [OpenFrameworks] 25 | packages=libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libopencv-dev libegl1-mesa-dev libgles2-mesa-dev libassimp-dev librtaudio-dev libboost-filesystem-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good libxml2-dev 26 | source=http://archive.raspbian.org/raspbian 27 | keyring=raspbian-archive-keyring 28 | components=main contrib non-free rpi 29 | suite=buster 30 | -------------------------------------------------------------------------------- /scripts/linux/raspios/armv6l/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | cat formula.log 11 | exit 1 12 | } 13 | 14 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 15 | cd $SCRIPT_DIR 16 | ROOT=$( 17 | cd $(dirname "$0") 18 | pwd -P 19 | )/../../../../../ 20 | APOTHECARY_PATH=$ROOT/apothecary 21 | 22 | CROSS_COMPILER=${CROSS_COMPILER:-raspbian} 23 | CROSS_SYSROOT=${CROSS_SYSROOT:-rpi_rootfs} 24 | CROSS_OS="${CROSS_OS:-bookworm}" 25 | 26 | if grep -q "Raspbian" /etc/os-release 2>/dev/null && [[ "$(uname -m)" == "armv6l" ]]; then 27 | NATIVE="true" 28 | echo "Detected Raspberry Pi OS (Raspbian) on armv6l. Setting NATIVE=true" 29 | else 30 | NATIVE="false" 31 | fi 32 | 33 | if [ "$CROSS_OS" == "bookworm" ]; then 34 | CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bookworm/GCC%2014.2.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-14.2.0-pi_0-1.tar.gz/download" 35 | CROSS_NAME=cross-gcc-14.2.0-pi_0-1 36 | CROSS_EXTRACT=cross-pi-gcc-14.2.0-0 37 | elif [ "$CROSS_OS" == "Bullseye" ]; then 38 | # CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Cross-Compiler%20Toolchains/Bullseye/GCC%2013.1.0/cross-gcc-13.1.0-pi_64.tar.gz/download" 39 | # CROSS_NAME="cross-gcc-13.1.0-pi_64" 40 | # CROSS_EXTRACT="cross-pi-gcc-13.1.0-64" 41 | # echo "Using Bullseye toolchain: $CROSS_NAME" 42 | echo "Unsupported CROSS_OS value: $CROSS_OS" 43 | exit 1 44 | else 45 | echo "Unsupported CROSS_OS value: $CROSS_OS" 46 | exit 1 47 | fi 48 | 49 | wget "${CROSS_URL}" -O ${CROSS_NAME}.tar.gz && tar xf ${CROSS_NAME}.tar.gz && rm ${CROSS_NAME}.tar.gz && mv ${CROSS_EXTRACT} ${CROSS_COMPILER} 50 | 51 | git clone https://github.com/danoli3/rpi_rootfs.git 52 | cd $CROSS_SYSROOT 53 | 54 | sudo chmod +x ./build_rootfs.sh 55 | ./build_rootfs.sh download 56 | ./build_rootfs.sh create 57 | 58 | echo "setup complete" 59 | 60 | echo "setup complete" 61 | cd $SCRIPT_DIR 62 | -------------------------------------------------------------------------------- /scripts/linux/raspios/armv7l/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | cat formula.log 11 | exit 1 12 | } 13 | 14 | export ARCH=armv7l 15 | export TYPE=linux 16 | 17 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 18 | cd $SCRIPT_DIR 19 | ROOT=$( 20 | cd $(dirname "$0") 21 | pwd -P 22 | )/../../../../../ 23 | APOTHECARY_PATH=$ROOT/apothecary 24 | 25 | # export GCC_PREFIX=arm-linux-gnueabihf 26 | # export GCC_VERSION="14.2.0" # UPDATE THIS AS NEEDED /libexec/gcc/arm-linux-gnueabihf/*/ 27 | # LD_LIBRARY_PATH=${RASP}/${GCC_PREFIX}/libc/usr/lib:${RASP}/${GCC_PREFIX}/libc/lib:${RASP}/lib 28 | 29 | # export AR="${GCC_PREFIX}-gcc-ar" 30 | # export CC="${GCC_PREFIX}-gcc" 31 | # export CXX="${GCC_PREFIX}-g++" 32 | # export CPP="${GCC_PREFIX}-cpp" 33 | # export FC="${GCC_PREFIX}-gfortran" 34 | # export RANLIB="${GCC_PREFIX}-ranlib" 35 | # export LD="${GCC_PREFIX}-ld" 36 | 37 | # GCCPATH="$RASP/libexec/gcc/${GCC_PREFIX}/${GCC_VERSION}" 38 | # export ARFLAGS="--plugin $GCCPATH/liblto_plugin.so" 39 | # export RANLIBFLAGS="--plugin $GCCPATH/liblto_plugin.so" 40 | 41 | # export LIBC_USR=${RASP}/${GCC_PREFIX}/libc/usr/ 42 | # export CRT=${LIBC_USR}/lib 43 | 44 | # sudo chmod +x SSymlinker 45 | # ./SSymlinker -s ${LIBC_USR}/include/asm -d /usr/include 46 | # ./SSymlinker -s ${LIBC_USR}/include/gnu -d /usr/include 47 | # ./SSymlinker -s ${LIBC_USR}/include/bits -d /usr/include 48 | # ./SSymlinker -s ${LIBC_USR}/include/sys -d /usr/include 49 | # # ./SSymlinker -s ${LIBC_USR}/include/sound -d /usr/include 50 | # ./SSymlinker -s ${LIBC_USR}/include/video -d /usr/include 51 | # ./SSymlinker -s ${LIBC_USR}/include -d /usr/include 52 | # ./SSymlinker -s ${CRT}/crtn.o -d /usr/lib/crtn.o 53 | # ./SSymlinker -s ${CRT}/crt1.o -d /usr/lib/crt1.o 54 | # ./SSymlinker -s ${CRT}/crti.o -d /usr/lib/crti.o 55 | 56 | # echo 'export PATH=$PATH' >> .bashrc 57 | # echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH' >> .bashrc 58 | # source .bashrc 59 | 60 | #echo "ROOT dir " 61 | #ls -la $ROOT 62 | # 63 | #echo "RASP dir " 64 | #ls -la $RASP 65 | # 66 | #echo "GCCPATH IS " 67 | #echo $GCCPATH 68 | 69 | echo "calculate formulas" 70 | $APOTHECARY_LEVEL/scripts/calculate_formulas.sh 71 | 72 | echo "building" 73 | $APOTHECARY_LEVEL/scripts/build.sh 74 | 75 | echo "===build complete===" 76 | cd $SCRIPT_DIR 77 | -------------------------------------------------------------------------------- /scripts/linux/raspios/armv7l/multistrap.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | arch=armhf 3 | directory=raspbian 4 | cleanup=true 5 | noauth=true 6 | unpack=true 7 | aptsources=Raspbian-Base OpenFrameworks 8 | debootstrap=Raspbian-Base OpenFrameworks 9 | 10 | [Raspbian-Bare] 11 | packages=busybox busybox-syslogd udhcpc 12 | source=http://archive.raspbian.org/raspbian 13 | keyring=raspbian-archive-keyring 14 | components=main contrib non-free rpi 15 | suite=buster 16 | 17 | [Raspbian-Base] 18 | packages=base-files dbus dpkg dropbear initscripts iputils-ping isc-dhcp-client kmod login locales lsb-base lsb-release makedev netbase net-tools sysvinit-utils sysv-rc udev 19 | source=http://archive.raspbian.org/raspbian 20 | keyring=raspbian-archive-keyring 21 | components=main contrib non-free rpi 22 | suite=buster 23 | 24 | [OpenFrameworks] 25 | packages=libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libopencv-dev libegl1-mesa-dev libgles2-mesa-dev libassimp-dev librtaudio-dev libboost-filesystem-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good libxml2-dev 26 | source=http://archive.raspbian.org/raspbian 27 | keyring=raspbian-archive-keyring 28 | components=main contrib non-free rpi 29 | suite=buster 30 | -------------------------------------------------------------------------------- /scripts/linux/raspios/armv7l/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | cat formula.log 11 | exit 1 12 | } 13 | 14 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 15 | cd $SCRIPT_DIR 16 | ROOT=$( 17 | cd $(dirname "$0") 18 | pwd -P 19 | )/../../../../../ 20 | APOTHECARY_PATH=$ROOT/apothecary 21 | 22 | CROSS_COMPILER=${CROSS_COMPILER:-raspbian} 23 | CROSS_SYSROOT=${CROSS_SYSROOT:-rpi_rootfs} 24 | CROSS_OS="${CROSS_OS:-bookworm}" 25 | NATIVE="${NATIVE:-"false"}" 26 | 27 | if grep -q "Raspbian" /etc/os-release 2>/dev/null && [[ "$(uname -m)" == "armv7l" ]]; then 28 | NATIVE="true" 29 | echo "Detected Raspberry Pi OS (Raspbian) on armv7l. Setting NATIVE=true" 30 | else 31 | NATIVE="false" 32 | fi 33 | 34 | if [ "$CROSS_OS" == "bookworm" ] && [ "$NATIVE" == "0" ]; then 35 | CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2014.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204%2C%205/cross-gcc-14.2.0-pi_3%2B.tar.gz/download" 36 | CROSS_NAME="cross-gcc-14.2.0-pi_3+" 37 | CROSS_EXTRACT="cross-pi-gcc-14.2.0-2" 38 | if [ "$CROSS_OS" == "bookworm" ] && [ "$NATIVE" == "1" ]; then 39 | CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Native-Compiler%20Toolchains/Bookworm/GCC%2014.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204%2C%205/native-gcc-14.2.0-pi_3%2B.tar.gz/download" 40 | CROSS_NAME="native-gcc-14.2.0-pi_3%2B" 41 | CROSS_EXTRACT="cross-pi-gcc-14.2.0-2" 42 | elif [ "$CROSS_OS" == "Bullseye" ]; then 43 | # CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Cross-Compiler%20Toolchains/Bullseye/GCC%2013.1.0/cross-gcc-13.1.0-pi_64.tar.gz/download" 44 | # CROSS_NAME="cross-gcc-13.1.0-pi_64" 45 | # CROSS_EXTRACT="cross-pi-gcc-13.1.0-64" 46 | # echo "Using Bullseye toolchain: $CROSS_NAME" 47 | echo "Unsupported CROSS_OS value: $CROSS_OS" 48 | exit 1 49 | else 50 | echo "Unsupported CROSS_OS value: $CROSS_OS" 51 | exit 1 52 | fi 53 | 54 | wget "${CROSS_URL}" -O ${CROSS_NAME}.tar.gz && tar xf ${CROSS_NAME}.tar.gz && rm ${CROSS_NAME}.tar.gz && mv ${CROSS_EXTRACT} ${CROSS_COMPILER} 55 | 56 | 57 | if [ "$NATIVE" == "0" ]; then 58 | git clone https://github.com/danoli3/rpi_rootfs.git 59 | cd $CROSS_SYSROOT 60 | sudo chmod +x ./build_rootfs.sh 61 | ./build_rootfs.sh download 62 | ./build_rootfs.sh create 63 | fi 64 | 65 | echo "===setup complete===" 66 | cd $SCRIPT_DIR 67 | -------------------------------------------------------------------------------- /scripts/linux/raspios/armv8l/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | cat formula.log 11 | exit 1 12 | } 13 | 14 | export ARCH=armv7l 15 | export TYPE=linux 16 | 17 | SCRIPT_DIR=$( 18 | cd $(dirname "$0") 19 | pwd -P 20 | ) 21 | ROOT=$( 22 | cd $(dirname "$0") 23 | pwd -P 24 | )/../../../../ 25 | APOTHECARY_PATH=$ROOT/apothecary 26 | 27 | # export GCC_PREFIX=arm-linux-gnueabihf 28 | # export GCC_VERSION="14.2.0" # UPDATE THIS AS NEEDED /libexec/gcc/arm-linux-gnueabihf/*/ 29 | # LD_LIBRARY_PATH=${RASP}/${GCC_PREFIX}/libc/usr/lib:${RASP}/${GCC_PREFIX}/libc/lib:${RASP}/lib 30 | 31 | # export AR="${GCC_PREFIX}-gcc-ar" 32 | # export CC="${GCC_PREFIX}-gcc" 33 | # export CXX="${GCC_PREFIX}-g++" 34 | # export CPP="${GCC_PREFIX}-cpp" 35 | # export FC="${GCC_PREFIX}-gfortran" 36 | # export RANLIB="${GCC_PREFIX}-ranlib" 37 | # export LD="${GCC_PREFIX}-ld" 38 | 39 | # GCCPATH="$RASP/libexec/gcc/${GCC_PREFIX}/${GCC_VERSION}" 40 | # export ARFLAGS="--plugin $GCCPATH/liblto_plugin.so" 41 | # export RANLIBFLAGS="--plugin $GCCPATH/liblto_plugin.so" 42 | 43 | # export LIBC_USR=${RASP}/${GCC_PREFIX}/libc/usr/ 44 | # export CRT=${LIBC_USR}/lib 45 | 46 | # sudo chmod +x SSymlinker 47 | # ./SSymlinker -s ${LIBC_USR}/include/asm -d /usr/include 48 | # ./SSymlinker -s ${LIBC_USR}/include/gnu -d /usr/include 49 | # ./SSymlinker -s ${LIBC_USR}/include/bits -d /usr/include 50 | # ./SSymlinker -s ${LIBC_USR}/include/sys -d /usr/include 51 | # # ./SSymlinker -s ${LIBC_USR}/include/sound -d /usr/include 52 | # ./SSymlinker -s ${LIBC_USR}/include/video -d /usr/include 53 | # ./SSymlinker -s ${LIBC_USR}/include -d /usr/include 54 | # ./SSymlinker -s ${CRT}/crtn.o -d /usr/lib/crtn.o 55 | # ./SSymlinker -s ${CRT}/crt1.o -d /usr/lib/crt1.o 56 | # ./SSymlinker -s ${CRT}/crti.o -d /usr/lib/crti.o 57 | 58 | # echo 'export PATH=$PATH' >> .bashrc 59 | # echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH' >> .bashrc 60 | # source .bashrc 61 | 62 | #echo "ROOT dir " 63 | #ls -la $ROOT 64 | # 65 | #echo "RASP dir " 66 | #ls -la $RASP 67 | # 68 | #echo "GCCPATH IS " 69 | #echo $GCCPATH 70 | 71 | echo "calculate formulas" 72 | $APOTHECARY_LEVEL/scripts/calculate_formulas.sh 73 | 74 | echo "building" 75 | $APOTHECARY_LEVEL/scripts/build.sh 76 | 77 | echo "===build complete===" 78 | cd $SCRIPT_DIR 79 | -------------------------------------------------------------------------------- /scripts/linux/raspios/armv8l/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -o pipefail 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | cat formula.log 11 | exit 1 12 | } 13 | 14 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 15 | cd $SCRIPT_DIR 16 | ROOT=$( 17 | cd $(dirname "$0") 18 | pwd -P 19 | )/../../../../../ 20 | APOTHECARY_PATH=$ROOT/apothecary 21 | cd $APOTHECARY_LEVEL 22 | 23 | CROSS_COMPILER=${CROSS_COMPILER:-raspbian} 24 | CROSS_SYSROOT=${CROSS_SYSROOT:-rpi_rootfs} 25 | CROSS_OS="${CROSS_OS:-bookworm}" 26 | 27 | if grep -q "Raspbian" /etc/os-release 2>/dev/null && [[ "$(uname -m)" == "armv8l" ]]; then 28 | NATIVE="true" 29 | echo "Detected Raspberry Pi OS (Raspbian) on armv8l. Setting NATIVE=true" 30 | else 31 | NATIVE="false" 32 | fi 33 | 34 | if [ "$CROSS_OS" == "bookworm" ]; then 35 | CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2014.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204%2C%205/cross-gcc-14.2.0-pi_3%2B.tar.gz/download" 36 | CROSS_NAME=cross-gcc-14.2.0-pi_3+ 37 | CROSS_EXTRACT=cross-pi-gcc-14.2.0-2 38 | elif [ "$CROSS_OS" == "Bullseye" ]; then 39 | # CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Cross-Compiler%20Toolchains/Bullseye/GCC%2013.1.0/cross-gcc-13.1.0-pi_64.tar.gz/download" 40 | # CROSS_NAME="cross-gcc-13.1.0-pi_64" 41 | # CROSS_EXTRACT="cross-pi-gcc-13.1.0-64" 42 | # echo "Using Bullseye toolchain: $CROSS_NAME" 43 | echo "Unsupported CROSS_OS value: $CROSS_OS" 44 | exit 1 45 | else 46 | echo "Unsupported CROSS_OS value: $CROSS_OS" 47 | exit 1 48 | fi 49 | 50 | wget "${CROSS_URL}" -O ${CROSS_NAME}.tar.gz && tar xf ${CROSS_NAME}.tar.gz && rm ${CROSS_NAME}.tar.gz && mv ${CROSS_EXTRACT} ${CROSS_COMPILER} 51 | 52 | if [ "$NATIVE" == "0" ]; then 53 | git clone https://github.com/danoli3/rpi_rootfs.git 54 | cd $CROSS_SYSROOT 55 | 56 | sudo chmod +x ./build_rootfs.sh 57 | ./build_rootfs.sh download 58 | ./build_rootfs.sh create 59 | 60 | fi 61 | 62 | echo "===setup complete===" 63 | cd $SCRIPT_DIR 64 | 65 | -------------------------------------------------------------------------------- /scripts/load.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # usage 4 | # ."$SCRIPT_DIR/save.sh" 5 | # load "ios" "freeimage" "arm64" "true" "v9.1.0" "v9.1.0" 6 | #set +e 7 | 8 | function loadsave() { 9 | if [ -z "$2" ]; then 10 | echo "Load function not implemented - Param error" 11 | echo 0 12 | fi 13 | local LOCAL_SAVE_FILE="$5" 14 | #SAVE_FILE="$SCRIPT_DIR/build_status.txt" 15 | # Get the input parameters 16 | local device_target="$1" 17 | local source_target="$2" 18 | local arch="$3" 19 | local version="$4" 20 | local pkldir="$5" 21 | local buildInfo="$6" 22 | 23 | BINARY_SEC=${pkldir} 24 | #OUTPUT_LOCATION=$(dirname "$BINARY_SEC") 25 | FILENAME=$(basename "$BINARY_SEC/$2.pkl") 26 | FILENAME_WITHOUT_EXT="${FILENAME%.*}" 27 | OUTPUT_PKL_FILE="${BINARY_SEC:-.}/$FILENAME_WITHOUT_EXT.pkl" 28 | 29 | #echo " BINARY_SEC:[$BINARY_SEC] load file: [$OUTPUT_PKL_FILE] [0:$0 1:$1 2:$2 3:$3 4:$4]" 30 | #echo " FILENAME: [$FILENAME] [FILENAME_WITHOUT_EXT:$FILENAME_WITHOUT_EXT OUTPUT_PKL_FILE:$OUTPUT_PKL_FILE]" 31 | 32 | # if [[ ! -f "$LOCAL_SAVE_FILE" ]]; then 33 | # touch $LOCAL_SAVE_FILE 34 | # return 1 35 | # fi 36 | 37 | if [[ ! -d "$BINARY_SEC" ]]; then 38 | echo " Build confirmed for $1 [No cached $BINARY_SEC]" 39 | echo 0 40 | return 0 41 | fi 42 | 43 | if [[ ! -f "$OUTPUT_PKL_FILE" ]]; then 44 | echo " Build confirmed for $1 [No cached previous output PKL: $OUTPUT_PKL_FILE]" 45 | echo 0 46 | return 0 47 | fi 48 | 49 | # Read and parse the .pkl file 50 | local buildTime=$(grep 'buildTime =' "$OUTPUT_PKL_FILE" | cut -d '"' -f 2) 51 | local fileVersion=$(grep 'version =' "$OUTPUT_PKL_FILE" | cut -d '"' -f 2) 52 | 53 | if grep -q 'buildNumber =' "$OUTPUT_PKL_FILE"; then 54 | local buildNumber=$(grep 'buildNumber =' "$OUTPUT_PKL_FILE" | cut -d '"' -f 2) 55 | else 56 | local buildNumber=1 57 | fi 58 | 59 | if [[ "$fileVersion" != "$version" ]]; then 60 | echo " Build confirmed. Previous build has Version mismatch: $fileVersion != $version" 61 | echo 0 62 | return 0 63 | fi 64 | 65 | if [[ "${buildNumber}" != "" && "${buildInfo}" != "${buildNumber}" ]]; then 66 | echo " Build confirmed. Previous build number has mismatch: $buildInfo != $buildNumber" 67 | echo 0 68 | return 0 69 | fi 70 | 71 | # Check if the entry needs to be rebuilt based on buildTime 72 | # local now=$(date -u +%s) 73 | # if [[ $(uname) == "Darwin" ]]; then 74 | # local saved=$(date -jf "%Y-%m-%dT%H:%M:%SZ" "$buildTime" +%s) 75 | # else 76 | # local saved=$(date -d "$buildTime" +%s) 77 | # fi 78 | # local diff=$(( (now - saved) / (60 * 60 * 24) )) 79 | 80 | # if [[ "$buildTime" == "false" || "$diff" -ge 90 ]]; then 81 | # echo " Build confirmed. Previous Build time is older than 90 days (${diff}) - Rebuilding" 82 | # echo 0 83 | # return 0 84 | # fi 85 | 86 | # Entry exists and doesn't need to be rebuilt 87 | # echo " Build skipped. $2 past output is all up to date. $version built at : $saved" 88 | echo 1 89 | return 0 90 | 91 | } 92 | -------------------------------------------------------------------------------- /scripts/macos/build_xcframework.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=macos 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | export XFRAMEWORKALL=TRUE 30 | 31 | echo "Target: $TARGET" 32 | echo "Architecture: $ARCH" 33 | echo "Bundle: $BUNDLE" 34 | echo "Apothecary path: $APOTHECARY_PATH" 35 | 36 | source ${ROOT}./scripts/calculate_formulas.sh 37 | if [ -z "$FORMULAS" ]; then 38 | echo "No formulas to framework" 39 | exit 0 40 | fi 41 | 42 | for formula in "${FORMULAS[@]}"; do 43 | formula_name="${formula%.*}" 44 | ARGS="$FORCE -t$TARGET -d$OUTPUT_FOLDER -a$ARCH" 45 | echo "[${formula_name}] ./apothecary $ARGS framework $formula_name" 46 | eval "cd $APOTHECARY_PATH" 47 | echo "---------" 48 | eval "./apothecary -x $ARGS framework $formula_name" 49 | done 50 | echo "Apothecary openFrameworks Build XCFramework for $TARGET complete." 51 | echo "========================" 52 | -------------------------------------------------------------------------------- /scripts/macos/install.sh: -------------------------------------------------------------------------------- 1 | # Silent update to prevent long logs 2 | brew update >/dev/null 3 | brew install --formula cmake coreutils autoconf automake ccache gtk-doc brotli libtool wget fontconfig bash jq 4 | 5 | # brew reinstall libtool 6 | 7 | ls -n /Applications/ | grep Xcode 8 | 9 | export PATH="/usr/local/opt/ccache/libexec:$PATH" 10 | -------------------------------------------------------------------------------- /scripts/macos/xcframework-split.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | if [ -z "${NO_FORCE+x}" ]; then 7 | export FORCE="-f" 8 | else 9 | export FORCE="" 10 | fi 11 | 12 | # trap any script errors and exit 13 | # trap "trapError" ERR 14 | 15 | trapError() { 16 | echo 17 | echo " ^ Received error building $formula_name ^" 18 | cat "formula_${ARCH}.log" 19 | if [ "$formula_name" == "boost" ]; then 20 | cat $APOTHECARY_PATH/build/boost/bootstrap.log 21 | fi 22 | if [ -f $APOTHECARY_PATH/build/$formula_name/config.log ]; then 23 | tail -n1000 $APOTHECARY_PATH/build/$formula_name/config.log 24 | fi 25 | exit 1 26 | } 27 | 28 | 29 | run() { 30 | echo "$@" 31 | eval "$@" 32 | } 33 | 34 | run_bg() { 35 | trap "trapError" ERR 36 | 37 | echo "$@" 38 | eval "$@" >>"formula_${ARCH}.log" 2>&1 & 39 | apothecaryPID=$! 40 | echoDots $apothecaryPID 41 | wait $apothecaryPID 42 | 43 | echo "Tail of log for $formula_name" 44 | run "tail -n 10 formula_${ARCH}.log" 45 | } 46 | 47 | ROOT=$( 48 | cd $(dirname "$0") 49 | pwd -P 50 | )/../.. 51 | LOCAL_ROOT=$ROOT 52 | 53 | 54 | APOTHECARY_PATH=$ROOT/apothecary 55 | 56 | if [ -z "${OUTPUT_FOLDER+x}" ]; then 57 | export OUTPUT_FOLDER="$ROOT/xout" 58 | fi 59 | 60 | if [ -z "$1" ]; then 61 | echo " TARGET: $1" 62 | else 63 | TARGET=$1 64 | fi 65 | 66 | if [ -z "$2" ]; then 67 | echo " Bundle: $2" 68 | else 69 | BUNDLE=$2 70 | fi 71 | 72 | #OUTPUT_FOLDER=$ROOT/out 73 | # VERBOSE=true 74 | 75 | if [ -z $TARGET ]; then 76 | echo "Environment variable TARGET not defined. Should be target os" 77 | exit 1 78 | fi 79 | 80 | echo "Running apothecary from $PWD" 81 | echo "Target: $TARGET" 82 | echo "Architecture: $ARCH" 83 | echo "Bundle: $BUNDLE" 84 | echo "Apothecary path: $APOTHECARY_PATH" 85 | echo "Output folder is: $OUTPUT_FOLDER" 86 | 87 | # Source the calculate_formulas.sh script to get the list of formulas 88 | source $LOCAL_ROOT/scripts/calculate_formulas.sh 89 | 90 | if [ -z "$FORMULAS" ]; then 91 | echo "No formulas to build" 92 | exit 0 93 | fi 94 | 95 | echo "Split Bundle Libs: $LIBRARY_DIR to $OUT_BUNDLE_DIR" 96 | 97 | # Define the base directory where the library folders are located 98 | LIBRARY_BASE_DIR="$LOCAL_ROOT/libraries" 99 | 100 | # Create an associative array to keep track of the libraries to keep 101 | declare -A KEEP_LIBRARIES 102 | for formula in "${FORMULAS[@]}"; do 103 | formula_name="${formula%.*}" 104 | KEEP_LIBRARIES[$formula_name]=1 105 | done 106 | 107 | OUT_BUNDLE_DIR="${OUTPUT_FOLDER}_$BUNDLE" 108 | mkdir -p "$OUT_BUNDLE_DIR" 109 | 110 | # Iterate over the folders in the library base directory 111 | for LIBRARY_DIR in "$OUTPUT_FOLDER"/*; do 112 | LIBRARY_NAME=$(basename "$LIBRARY_DIR") 113 | # Check if the library name is in the keep list 114 | if [ -n "${KEEP_LIBRARIES[$LIBRARY_NAME]}" ]; then 115 | echo "Moving library folder: [$LIBRARY_DIR] to [$OUT_BUNDLE_DIR]" 116 | mv "$LIBRARY_DIR" "$OUT_BUNDLE_DIR/" 117 | else 118 | echo "Keeping library folder: [$LIBRARY_DIR] in [$OUTPUT_FOLDER]" 119 | fi 120 | done 121 | 122 | echo "" 123 | echo "" 124 | -------------------------------------------------------------------------------- /scripts/msys2/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openframeworks/apothecary/fae96e615875a701d48dc29cf4a3be24bc472a07/scripts/msys2/.gitkeep -------------------------------------------------------------------------------- /scripts/msys2/build_msys2.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=msys2 27 | # export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/msys2/install_msys2.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # https://www.msys2.org 4 | # Update package database 5 | pacman -Syuu --noconfirm 6 | pacman -S --noconfirm base-devel unzip dos2unix git 7 | pacboy -S --noconfirm gcc cmake gperf libxml2 python3 zlib libpng fftw3 zlib wget2 curl 8 | 9 | # Additional 10 | pacboy -S --noconfirm mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja 11 | pacboy -S --noconfirm mingw-w64-x86_64-ffmpeg mingw-w64-x86_64-openssl mingw-w64-x86_64-wxWidgets 12 | pacboy -S --noconfirm mingw-w64-x86_64-boost mingw-w64-x86_64-curl mingw-w64-x86_64-git 13 | 14 | pacboy -S --noconfirm mingw-w64-clang-aarch64-clang mingw-w64-clang-aarch64-toolchain mingw-w64-clang-aarch64-cmake mingw-w64-clang-aarch64-ninja 15 | 16 | # Clean 17 | pacman -Scc --noconfirm 18 | echo "MSYS2 setup is complete. Please restart shell." 19 | -------------------------------------------------------------------------------- /scripts/osx/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openframeworks/apothecary/fae96e615875a701d48dc29cf4a3be24bc472a07/scripts/osx/.gitkeep -------------------------------------------------------------------------------- /scripts/osx/build_osx_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=osx 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/osx/build_osx_x86_64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=osx 27 | export ARCH=x86_64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/osx/build_xcframework.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=osx 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | source ${ROOT}./scripts/calculate_formulas.sh 36 | if [ -z "$FORMULAS" ]; then 37 | echo "No formulas to framework" 38 | exit 0 39 | fi 40 | 41 | for formula in "${FORMULAS[@]}"; do 42 | formula_name="${formula%.*}" 43 | ARGS="$FORCE -t$TARGET -d$OUTPUT_FOLDER -a$ARCH" 44 | #echo "./apothecary $ARGS framework $formula_name" 45 | eval "cd $APOTHECARY_PATH" 46 | echo "---------" 47 | eval "./apothecary $ARGS framework $formula_name" 48 | 49 | done 50 | echo "Apothecary openFrameworks Build XCFramework for $TARGET complete." 51 | echo "========================" 52 | -------------------------------------------------------------------------------- /scripts/osx/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Silent update to prevent long logs 3 | 4 | if ! which realpath >&/dev/null; then 5 | if ! which brew >&/dev/null; then 6 | msg="ERROR: This script requires brew. See https://brew.sh for installation instructions." 7 | echo "$(tput setaf 1)$msg$(tput sgr0)" >&2 8 | exit 1 9 | fi 10 | fi 11 | 12 | brew update >/dev/null 13 | brew install --formula cmake coreutils autoconf automake ccache gtk-doc brotli libtool wget fontconfig bash shfmt wget2 curl 14 | 15 | ls -n /Applications/ | grep Xcode 16 | 17 | export PATH="/usr/local/opt/ccache/libexec:$PATH" 18 | -------------------------------------------------------------------------------- /scripts/package_libraries.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | set -o pipefail 4 | 5 | TARGET=${TARGET:-""} 6 | ARCH=${ARCH:-""} 7 | OPT=${OPT:-""} 8 | 9 | ROOT=$( 10 | cd $(dirname "$0") 11 | pwd -P 12 | )/.. 13 | LOCAL_ROOT=$ROOT 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | if [ -z "${OUTPUT_FOLDER+x}" ]; then 17 | export OUTPUT_FOLDER="$ROOT/out" 18 | fi 19 | if [[ "$TARGET" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then 20 | export OUTPUT_FOLDER="$ROOT/xout" 21 | fi 22 | if [[ "$TARGET" =~ ^(macos)$ ]]; then 23 | export OUTPUT_FOLDER="$ROOT/xout_${BUNDLE}" 24 | fi 25 | 26 | if [ -z "$TARGET" ]; then 27 | echo "Error: TARGET not specified. Usage: $0 [opt]" 28 | exit 1 29 | fi 30 | trapError() { 31 | echo "Error occurred during packaging. Check logs." 32 | exit 1 33 | } 34 | trap "trapError" ERR 35 | 36 | package_library() { 37 | local LIB=$1 38 | local TARGET=$2 39 | local ARCH=$3 40 | local OPTS=$4 41 | 42 | echo "Packaging library: $LIB for target: $TARGET arch: $ARCH opts: $OPTS" 43 | 44 | if [ -n "$OPTS" ]; then 45 | package_name="openFrameworksLibs_${CUR_BRANCH}_${TARGET}_${ARCH}_${OPTS}" 46 | else 47 | package_name="openFrameworksLibs_${CUR_BRANCH}_${TARGET}_${ARCH}" 48 | fi 49 | 50 | local library_path="${LIB}" 51 | local TARBALL 52 | 53 | if [ ! -d "$library_path" ]; then 54 | echo "Error: Library directory '$library_path' does not exist." 55 | return 1 56 | fi 57 | 58 | # Determine the tarball or zip file name 59 | if [[ "$TARGET" == "msys2" ]]; then 60 | TARBALL="${OUTPUT_FOLDER}/${package_name}.zip" 61 | echo "Creating ZIP: $package_file_path" 62 | "C:\Program Files\7-Zip\7z.exe" a "$TARBALL" "$library_path" 63 | elif [ "$TARGET" == "emscripten" ]; then 64 | echo "TARBALL: [$TARBALL]" 65 | if [ "${EXIT_BEFORE}" == "1" ]; then 66 | exit 0 67 | fi 68 | sudo tar cjvf "$TARBALL" -C "$library_path" 69 | elif [[ "$TARGET" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then 70 | TARBALL="${OUTPUT_FOLDER}/${package_name}.tar.bz2" 71 | echo "Creating TAR.BZ2: $TARBALL" 72 | tar cjvf "$TARBALL" -C "$library_path" 73 | else 74 | TARBALL="${OUTPUT_FOLDER}/${package_name}.tar.gz" 75 | echo "Creating TAR.GZ: $TARBALL" 76 | tar czvf "$TARBALL" -C "$library_path" 77 | fi 78 | 79 | echo "Packaged Seperate: [$TARBALL]" 80 | } 81 | 82 | # Validate OUTPUT_FOLDER 83 | if [ ! -d "$OUTPUT_FOLDER" ]; then 84 | echo "Error: Output folder '$OUTPUT_FOLDER' does not exist." 85 | exit 1 86 | fi 87 | 88 | # Get list of libraries 89 | LIBRARIES=$(ls "$OUTPUT_FOLDER") 90 | cd $OUTPUT_FOLDER 91 | LIBS=$(ls $OUTPUT_FOLDER) 92 | LIBS=$(echo "$LIBS" | tr '\n' ' ') 93 | if [ -z "$LIBRARIES" ]; then 94 | echo "No libraries found to package." 95 | exit 0 96 | fi 97 | 98 | # Process each library 99 | echo "Libraries found: [$LIBS]" 100 | echo "Packaging with TARGET=$TARGET, ARCH=$ARCH, OPTS=$OPTS" 101 | 102 | for library in $LIBS; do 103 | package_library "$library" "$TARGET" "$ARCH" "$OPTS" 104 | done 105 | 106 | pwd 107 | find ./ -type f \( -name "*.zip" -o -name "*.tar.bz2" \) -exec echo {} \; 108 | 109 | echo "All libraries packaged successfully." 110 | cd ../ 111 | -------------------------------------------------------------------------------- /scripts/save.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # usage 4 | # ."$SCRIPT_DIR/save.sh" 5 | # save "ios" "freeimage" "arm64" "true" "v9.1.0" "v9.1.0" 6 | 7 | # Function to save build information to a text file 8 | function savestatus { 9 | 10 | if [ -z "$2" ]; then 11 | #echo "Save function not implemented - Param error" 12 | return 1 13 | fi 14 | # Check if the save file exists 15 | #SAVE_FILE="$SCRIPT_DIR/build_status.txt" 16 | LOCAL_SAVE_FILE="$6" 17 | #echoVerboe "save file: "${LOCAL_SAVE_FILE}" 0:$0 1:$1 2:$2 3:$3 4:$4 5:$5 6:$6" 18 | if [ ! -f "${LOCAL_SAVE_FILE}" ]; then 19 | touch "${LOCAL_SAVE_FILE}" 20 | echo "=======" >>"${LOCAL_SAVE_FILE}" 21 | fi 22 | 23 | # Get input parameters 24 | DEVICE_TARGET="$1" 25 | SOURCE_TARGET="$2" 26 | ARCH="$3" 27 | BUILT="$4" 28 | VERSION="$5" 29 | #TAG="$6" 30 | 31 | # Get current date and time 32 | BUILD_DATETIME=$(date +"%Y-%m-%d %H:%M:%S") 33 | 34 | # Create new or update existing entry in the text file 35 | # Only one unique entry for each device target, source target, and architecture 36 | # Format: DEVICE_TARGET|SOURCE_TARGET|ARCH|BUILT|VERSION|TAG|BUILD_DATETIME 37 | # if grep -q "$DEVICE_TARGET|$SOURCE_TARGET|$ARCH" "${LOCAL_SAVE_FILE}"; then 38 | # echo "$DEVICE_TARGET|$SOURCE_TARGET|$ARCH|$BUILT|$VERSION|$BUILD_DATETIME - ${LOCAL_SAVE_FILE}" 39 | 40 | # sed -i '' "s/^$DEVICE_TARGET|$SOURCE_TARGET|$ARCH|\(.*\)$/$DEVICE_TARGET|$SOURCE_TARGET|$ARCH|$BUILT|$VERSION|$BUILD_DATETIME/" "${LOCAL_SAVE_FILE}" 41 | # else 42 | # echo "$DEVICE_TARGET|$SOURCE_TARGET|$ARCH|$BUILT|$VERSION|$BUILD_DATETIME" >> "${LOCAL_SAVE_FILE}" 43 | # fi 44 | if grep -q "$DEVICE_TARGET;$SOURCE_TARGET;$ARCH;" "${LOCAL_SAVE_FILE}"; then 45 | echo "$DEVICE_TARGET|$SOURCE_TARGET|$ARCH|$BUILT|$VERSION|$BUILD_DATETIME - ${LOCAL_SAVE_FILE}" 46 | sed -i '' "s|^$DEVICE_TARGET|$SOURCE_TARGET|$ARCH|\(.*\)$|$DEVICE_TARGET|$SOURCE_TARGET|$ARCH|$BUILT|$VERSION|$BUILD_DATETIME|" "${LOCAL_SAVE_FILE}" 47 | else 48 | echo "$DEVICE_TARGET|$SOURCE_TARGET|$ARCH|$BUILT|$VERSION|$BUILD_DATETIME" >>"${LOCAL_SAVE_FILE}" 49 | fi 50 | } 51 | -------------------------------------------------------------------------------- /scripts/simd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # this is to search for instrinct code that may not be availble in arm devices and needs checking 4 | # pass a variable to this for another location 5 | 6 | # Default directory to search 7 | DEFAULT_SEARCH_DIR="../apothecary/apothecary/build" 8 | 9 | # use the first command-line argument is the search directory, or use the default 10 | SEARCH_DIR="${1:-$DEFAULT_SEARCH_DIR}" 11 | 12 | # file to save the results (optional) 13 | LOG_FILE="" 14 | 15 | # headers associated with SIMD / Instrintics 16 | SIMD_HEADERS=("xmmintrin.h" "emmintrin.h" "immintrin.h" "arm_neon.h" "arm64_neon.h") 17 | 18 | # Function to search for SIMD headers 19 | search_simd() { 20 | for header in "${SIMD_HEADERS[@]}"; do 21 | echo "Searching for $header in $SEARCH_DIR" 22 | if [ -n "$LOG_FILE" ]; then 23 | grep -rnw "$SEARCH_DIR" -e "#include.*$header" >>"$LOG_FILE" 24 | else 25 | grep -rnw "$SEARCH_DIR" -e "#include.*$header" 26 | fi 27 | done 28 | echo "Finished" 29 | } 30 | 31 | # Check for logging option 32 | if [ "$2" == "--log" ]; then 33 | LOG_FILE="simd_search_results.txt" 34 | echo "Logging results to $LOG_FILE" 35 | # Clear the log file 36 | >"$LOG_FILE" 37 | fi 38 | 39 | # Call the search function 40 | search_simd 41 | -------------------------------------------------------------------------------- /scripts/ssh_config: -------------------------------------------------------------------------------- 1 | Host ci.openframeworks.cc 2 | StrictHostKeyChecking no 3 | PasswordAuthentication no 4 | CheckHostIP no 5 | BatchMode yes 6 | 7 | 8 | -------------------------------------------------------------------------------- /scripts/tvOS/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openframeworks/apothecary/fae96e615875a701d48dc29cf4a3be24bc472a07/scripts/tvOS/.gitkeep -------------------------------------------------------------------------------- /scripts/tvOS/build_tvos_SIM_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=tvos 27 | export ARCH=SIM_arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/tvOS/build_tvos_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=tvos 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/tvOS/build_tvos_x86_64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=tvos 27 | export ARCH=x86_64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/tvOS/build_xcframework.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=tvos 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | source ${ROOT}./scripts/calculate_formulas.sh 36 | if [ -z "$FORMULAS" ]; then 37 | echo "No formulas to framework" 38 | exit 0 39 | fi 40 | 41 | for formula in "${FORMULAS[@]}"; do 42 | formula_name="${formula%.*}" 43 | ARGS="$FORCE -t$TARGET -d$OUTPUT_FOLDER -a$ARCH" 44 | #echo "./apothecary $ARGS framework $formula_name" 45 | eval "cd $APOTHECARY_PATH" 46 | echo "---------" 47 | eval "./apothecary $ARGS framework $formula_name" 48 | 49 | done 50 | echo "Apothecary openFrameworks Build XCFramework for $TARGET complete." 51 | echo "========================" 52 | -------------------------------------------------------------------------------- /scripts/tvOS/install.sh: -------------------------------------------------------------------------------- 1 | # Silent update to prevent long logs 2 | brew update >/dev/null 3 | 4 | brew install --formula cmake coreutils boost-bcp autoconf automake libtool ccache brotli libtool wget bash shfmt 5 | # brew reinstall libtool 6 | # export PATH="/usr/local/opt/ccache/libexec:$PATH" 7 | 8 | set -e 9 | # capture failing exits in commands obscured behind a pipe 10 | set -o pipefail 11 | 12 | APOTH=$( 13 | cd $(dirname "$0") 14 | pwd -P 15 | )/../.. 16 | APOTHECARY_PATH=$APOTH/apothecary 17 | cd $APOTHECARY_PATH 18 | 19 | if [ "$TARGET" == "tvos" ]; then 20 | if [ "$OPT2" == "1" ]; then 21 | echo "Install - 1" 22 | elif [ "$OPT2" == "2" ]; then 23 | echo "Install - 2" 24 | fi 25 | fi 26 | -------------------------------------------------------------------------------- /scripts/vs/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openframeworks/apothecary/fae96e615875a701d48dc29cf4a3be24bc472a07/scripts/vs/.gitkeep -------------------------------------------------------------------------------- /scripts/vs/build_and_deploy_all_CLANG.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Apothecary ROOT dir relative 4 | 5 | SCRIPT_DIR=$( 6 | cd $(dirname "$0") 7 | pwd -P 8 | ) 9 | ROOT=$( 10 | cd $(dirname "${SCRIPT_DIR}/../../../") 11 | pwd -P 12 | ) 13 | APOTHECARY_PATH=${ROOT}/apothecary 14 | 15 | # Set OF_ROOT directory 16 | if [ -z "${OF_ROOT+x}" ]; then 17 | export OF_ROOT=$( 18 | cd "$(dirname "$ROOT/../../../")" 19 | pwd -P 20 | ) 21 | fi 22 | 23 | # openFrameworks libs directory 24 | OF_LIBS=${OF_ROOT}/libs 25 | OF_ADDONS=${OF_ROOT}/addons 26 | 27 | if [ -z "${MULTITHREADED_TYPE+x}" ]; then # MD (MutliDynamic) # MT (Multi) 28 | MULTITHREADED_TYPE=MD 29 | fi 30 | 31 | if [ -z ${CALLING_CONVENTION+x} ]; then # Gz (__stdcall) # Gd (__cdecl) # Gr (__fastcall) # Gv ( __vectorcall ) 32 | CALLING_CONVENTION="Gz" #these changes effect how libraries are bound/loaded and called 33 | fi 34 | 35 | if [ -z "${VS_TYPE+x}" ]; then # Professional # Enterprise # Community 36 | export VS_TYPE=Community 37 | fi 38 | 39 | if [ -z "${VS_COMPILER+x}" ]; then # MSVC / # Clang LLVM 40 | export VS_COMPILER=LLVM 41 | fi 42 | 43 | if [ -z "${VS_HOST+x}" ]; then 44 | VS_HOST=amd64 45 | fi 46 | 47 | if [ -z "${PLATFORM+x}" ]; then 48 | PLATFORM=vs 49 | fi 50 | 51 | if [ -z "${OVERWRITE+x}" ]; then 52 | OVERWRITE=1 53 | fi 54 | 55 | # Set OUTPUT_FOLDER for the build 56 | export OUTPUT_FOLDER="${ROOT}/out" 57 | 58 | echo "Verify Locations:" 59 | echo "SCRIPT_DIR: $SCRIPT_DIR" 60 | echo "OF_LIBS: $OF_LIBS" 61 | echo "OF_ADDONS: $OF_ADDONS" 62 | echo "ROOT: $ROOT" 63 | echo "APOTHECARY_PATH: $APOTHECARY_PATH" 64 | echo "OUTPUT_FOLDER: $OUTPUT_FOLDER" 65 | 66 | ${SCRIPT_DIR}/build_and_deploy_all.sh 67 | -------------------------------------------------------------------------------- /scripts/vs/build_and_deploy_all_MSVC_MD.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Apothecary ROOT dir relative 4 | 5 | SCRIPT_DIR=$( 6 | cd $(dirname "$0") 7 | pwd -P 8 | ) 9 | ROOT=$( 10 | cd $(dirname "${SCRIPT_DIR}/../../../") 11 | pwd -P 12 | ) 13 | APOTHECARY_PATH=${ROOT}/apothecary 14 | 15 | # Set OF_ROOT directory 16 | if [ -z "${OF_ROOT+x}" ]; then 17 | export OF_ROOT=$( 18 | cd "$(dirname "$ROOT/../../../")" 19 | pwd -P 20 | ) 21 | fi 22 | 23 | # openFrameworks libs directory 24 | OF_LIBS=${OF_ROOT}/libs 25 | OF_ADDONS=${OF_ROOT}/addons 26 | 27 | if [ -z "${MULTITHREADED_TYPE+x}" ]; then # MD (MutliDynamic) # MT (Multi) 28 | MULTITHREADED_TYPE=MD 29 | fi 30 | 31 | if [ -z ${CALLING_CONVENTION+x} ]; then # Gz (__stdcall) # Gd (__cdecl) # Gr (__fastcall) # Gv ( __vectorcall ) 32 | CALLING_CONVENTION="Gz" #these changes effect how libraries are bound/loaded and called 33 | fi 34 | 35 | if [ -z "${VS_TYPE+x}" ]; then # Professional # Enterprise # Community 36 | VS_TYPE=Community 37 | fi 38 | 39 | if [ -z "${VS_COMPILER+x}" ]; then # MSVC / # Clang LLVM 40 | VS_COMPILER=MSVC 41 | fi 42 | 43 | if [ -z "${VS_HOST+x}" ]; then 44 | VS_HOST=amd64 45 | fi 46 | 47 | if [ -z "${PLATFORM+x}" ]; then 48 | PLATFORM=vs 49 | fi 50 | 51 | if [ -z "${OVERWRITE+x}" ]; then 52 | OVERWRITE=1 53 | fi 54 | 55 | if [ -z "${OVERWRITE+x}" ]; then 56 | OVERWRITE=1 57 | fi 58 | 59 | # Set OUTPUT_FOLDER for the build 60 | export OUTPUT_FOLDER="${ROOT}/out" 61 | 62 | echo "Verify Locations:" 63 | echo "SCRIPT_DIR: $SCRIPT_DIR" 64 | echo "OF_LIBS: $OF_LIBS" 65 | echo "OF_ADDONS: $OF_ADDONS" 66 | echo "ROOT: $ROOT" 67 | echo "APOTHECARY_PATH: $APOTHECARY_PATH" 68 | echo "OUTPUT_FOLDER: $OUTPUT_FOLDER" 69 | 70 | ${SCRIPT_DIR}/build_and_deploy_all.sh 71 | -------------------------------------------------------------------------------- /scripts/vs/build_and_deploy_all_MSVC_MT.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Apothecary ROOT dir relative 4 | 5 | SCRIPT_DIR=$( 6 | cd $(dirname "$0") 7 | pwd -P 8 | ) 9 | ROOT=$( 10 | cd $(dirname "${SCRIPT_DIR}/../../../") 11 | pwd -P 12 | ) 13 | APOTHECARY_PATH=${ROOT}/apothecary 14 | 15 | # Set OF_ROOT directory 16 | if [ -z "${OF_ROOT+x}" ]; then 17 | export OF_ROOT=$( 18 | cd "$(dirname "$ROOT/../../../")" 19 | pwd -P 20 | ) 21 | fi 22 | 23 | # openFrameworks libs directory 24 | OF_LIBS=${OF_ROOT}/libs 25 | OF_ADDONS=${OF_ROOT}/addons 26 | 27 | if [ -z "${MULTITHREADED_TYPE+x}" ]; then # MD (MutliDynamic) # MT (Multi) 28 | MULTITHREADED_TYPE=MT 29 | fi 30 | 31 | if [ -z ${CALLING_CONVENTION+x} ]; then # Gz (__stdcall) # Gd (__cdecl) # Gr (__fastcall) # Gv ( __vectorcall ) 32 | CALLING_CONVENTION="Gz" #these changes effect how libraries are bound/loaded and called 33 | fi 34 | 35 | if [ -z "${VS_TYPE+x}" ]; then # Professional # Enterprise # Community 36 | VS_TYPE=Community 37 | fi 38 | 39 | if [ -z "${VS_COMPILER+x}" ]; then # MSVC / # Clang LLVM 40 | VS_COMPILER=MSVC 41 | fi 42 | 43 | if [ -z "${VS_HOST+x}" ]; then 44 | VS_HOST=amd64 45 | fi 46 | 47 | if [ -z "${PLATFORM+x}" ]; then 48 | PLATFORM=vs 49 | fi 50 | 51 | if [ -z "${OVERWRITE+x}" ]; then 52 | OVERWRITE=1 53 | fi 54 | 55 | if [ -z "${OVERWRITE+x}" ]; then 56 | OVERWRITE=1 57 | fi 58 | 59 | # Set OUTPUT_FOLDER for the build 60 | export OUTPUT_FOLDER="${ROOT}/out" 61 | 62 | echo "Verify Locations:" 63 | echo "SCRIPT_DIR: $SCRIPT_DIR" 64 | echo "OF_LIBS: $OF_LIBS" 65 | echo "OF_ADDONS: $OF_ADDONS" 66 | echo "ROOT: $ROOT" 67 | echo "APOTHECARY_PATH: $APOTHECARY_PATH" 68 | echo "OUTPUT_FOLDER: $OUTPUT_FOLDER" 69 | 70 | ${SCRIPT_DIR}/build_and_deploy_all.sh 71 | -------------------------------------------------------------------------------- /scripts/vs/build_vs_32.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=vs 27 | export ARCH=32 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/vs/build_vs_64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=vs 27 | export ARCH=64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/vs/build_vs_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=vs 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/vs/build_vs_arm64ec.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=vs 27 | export ARCH=arm64ec 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/vs/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | # trap any script errors and exit 5 | trap "trapError" ERR 6 | 7 | trapError() { 8 | echo 9 | echo " ^ Received error ^" 10 | exit 1 11 | } 12 | 13 | isRunning() { 14 | if [ “$(uname)” == “Linux” ]; then 15 | if [ -d /proc/$1 ]; then 16 | return 0 17 | else 18 | return 1 19 | fi 20 | else 21 | number=$(ps aux | sed -E "s/[^ ]* +([^ ]*).*/\1/g" | grep ^$1$ | wc -l) 22 | 23 | if [ $number -gt 0 ]; then 24 | return 0 25 | else 26 | return 1 27 | fi 28 | fi 29 | } 30 | 31 | echoDots() { 32 | while isRunning $1; do 33 | for i in $(seq 1 10); do 34 | echo -ne . 35 | if ! isRunning $1; then 36 | printf "\r" 37 | return 38 | fi 39 | sleep 2 40 | done 41 | printf "\r " 42 | printf "\r" 43 | done 44 | } 45 | 46 | if command -v winget >/dev/null 2>&1; then 47 | winget install -e --id Microsoft.WindowsTerminal 48 | winget install Ninja-build.Ninja 49 | winget install jqlang.jq 50 | winget install --id Oracle.JDK.17 -e 51 | winget install Python.Python.3 52 | fi 53 | 54 | if [ "${GITHUB_ACTIONS:-0}" = 0 ]; then 55 | 56 | if command -v python >/dev/null 2>&1; then 57 | python -m ensurepip --upgrade 58 | echo "python is installed. Proceeding to install numpy..." 59 | python -m pip install numpy 60 | elif command -v python3 >/dev/null 2>&1; then 61 | python3 -m pip --version 2>/dev/null 62 | echo "python3 is installed. Proceeding to install numpy..." 63 | python3 -m pip install numpy 64 | else 65 | echo "python is not installed. Skipping numpy installation." 66 | fi 67 | 68 | fi 69 | -------------------------------------------------------------------------------- /scripts/watchos/build_watchos_SIM_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=watchos 27 | export ARCH=SIM_arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/watchos/build_watchos_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=watchos 27 | export ARCH=arm64_32 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/watchos/build_watchos_x86_64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=watchos 27 | export ARCH=x86_64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/watchos/build_xcframework.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=watchos 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | source ${ROOT}./scripts/calculate_formulas.sh 36 | if [ -z "$FORMULAS" ]; then 37 | echo "No formulas to framework" 38 | exit 0 39 | fi 40 | 41 | for formula in "${FORMULAS[@]}"; do 42 | formula_name="${formula%.*}" 43 | ARGS="$FORCE -t$TARGET -d$OUTPUT_FOLDER -a$ARCH" 44 | #echo "./apothecary $ARGS framework $formula_name" 45 | eval "cd $APOTHECARY_PATH" 46 | echo "---------" 47 | eval "./apothecary $ARGS framework $formula_name" 48 | 49 | done 50 | echo "Apothecary openFrameworks Build XCFramework for $TARGET complete." 51 | echo "========================" 52 | -------------------------------------------------------------------------------- /scripts/watchos/install.sh: -------------------------------------------------------------------------------- 1 | # Silent update to prevent long logs 2 | brew update >/dev/null 3 | 4 | brew install --formula cmake coreutils autoconf automake ccache gtk-doc brotli libtool wget fontconfig bash 5 | 6 | # brew reinstall libtool 7 | 8 | ls -n /Applications/ | grep Xcode 9 | 10 | export PATH="/usr/local/opt/ccache/libexec:$PATH" 11 | -------------------------------------------------------------------------------- /scripts/xros/build_xcframework.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=xros 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | source ${ROOT}./scripts/calculate_formulas.sh 36 | if [ -z "$FORMULAS" ]; then 37 | echo "No formulas to framework" 38 | exit 0 39 | fi 40 | 41 | for formula in "${FORMULAS[@]}"; do 42 | formula_name="${formula%.*}" 43 | ARGS="$FORCE -t$TARGET -d$OUTPUT_FOLDER -a$ARCH" 44 | #echo "./apothecary $ARGS framework $formula_name" 45 | eval "cd $APOTHECARY_PATH" 46 | echo "---------" 47 | eval "./apothecary $ARGS framework $formula_name" 48 | 49 | done 50 | echo "Apothecary openFrameworks Build XCFramework for $TARGET complete." 51 | echo "========================" 52 | -------------------------------------------------------------------------------- /scripts/xros/build_xros_SIM_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=xros 27 | export ARCH=SIM_arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/xros/build_xros_arm64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=xros 27 | export ARCH=arm64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/xros/build_xros_x86_64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | # capture failing exits in commands obscured behind a pipe 4 | set -o pipefail 5 | 6 | SCRIPT_DIR=$( 7 | cd $(dirname "$0") 8 | pwd -P 9 | ) 10 | ROOT=$( 11 | cd $(dirname "$0") 12 | pwd -P 13 | )/../../ 14 | APOTHECARY_PATH=$ROOT/apothecary 15 | 16 | BUNDLE_NO="$1" 17 | # Check if the argument is provided 18 | if [ -z "${BUNDLE_NO+x}" ]; then 19 | echo "No argument provided." 20 | export BUNDLE=1 21 | else 22 | echo "Argument 1: $BUNDLE_NO" 23 | export BUNDLE=$BUNDLE_NO 24 | fi 25 | 26 | export TARGET=xros 27 | export ARCH=x86_64 28 | export NO_FORCE=ON 29 | 30 | echo "Target: $TARGET" 31 | echo "Architecture: $ARCH" 32 | echo "Bundle: $BUNDLE" 33 | echo "Apothecary path: $APOTHECARY_PATH" 34 | 35 | ${ROOT}./scripts/build.sh 36 | -------------------------------------------------------------------------------- /scripts/xros/install.sh: -------------------------------------------------------------------------------- 1 | # Silent update to prevent long logs 2 | brew update >/dev/null 3 | 4 | brew install --formula cmake coreutils autoconf automake ccache gtk-doc brotli libtool wget fontconfig bash shfmt 5 | 6 | # brew reinstall libtool 7 | 8 | ls -n /Applications/ | grep Xcode 9 | 10 | export PATH="/usr/local/opt/ccache/libexec:$PATH" 11 | --------------------------------------------------------------------------------