diff --git a/.github/workflows/mac_release.yml b/.github/workflows/mac_release.yml index 28bf8321c84..bf1d0c015c4 100644 --- a/.github/workflows/mac_release.yml +++ b/.github/workflows/mac_release.yml @@ -4,6 +4,7 @@ on: push: tags: - '*' + workflow_dispatch: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -11,6 +12,7 @@ env: FC: gfortran-13 SDKROOT: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk Python_REQUIRED_VERSION: 3.12.2 + BUILD_DOCS: true # Installing MacTex takes like 15min, so you can speed things up by disabling it jobs: build_installer_artifact: @@ -39,6 +41,61 @@ jobs: steps: - uses: actions/checkout@v4 +# - name: Setup QtIFW 4.x +# uses: jmarrec/setup-qtifw@v1 +# with: +# qtifw-version: '4.6.1' + + - name: "Configure for codesigning" + run: | + set -x + cd $RUNNER_TEMP + mkdir codesigning && cd codesigning + # ----- Create certificate files from secrets base64 ----- + echo "${{ secrets.MACOS_DEVELOPER_ID_APPLICATION_CERTIFICATE_P12_BASE64 }}" | base64 --decode > certificate_application.p12 + echo "${{ secrets.MACOS_DEVELOPER_ID_INSTALLER_CERTIFICATE_P12_BASE64 }}" | base64 --decode > certificate_installer.p12 + + # ----- Configure Keychain ----- + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + security create-keychain -p "${{ secrets.MACOS_KEYCHAIN_PASSWORD }}" $KEYCHAIN_PATH + # Unlock it for 6 hours + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "${{ secrets.MACOS_KEYCHAIN_PASSWORD }}" $KEYCHAIN_PATH + + # ----- Import certificates on Keychain ----- + security import certificate_application.p12 -P '${{ secrets.MACOS_DEVELOPER_ID_APPLICATION_CERTIFICATE_P12_PASSWORD }}' -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security import certificate_installer.p12 -P '${{ secrets.MACOS_DEVELOPER_ID_INSTALLER_CERTIFICATE_P12_PASSWORD }}' -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH + security find-identity -vvvv $KEYCHAIN_PATH + + # Add needed intermediary certificates + aria2c https://www.apple.com/certificateauthority/AppleWWDRCAG2.cer + aria2c https://www.apple.com/certificateauthority/DeveloperIDG2CA.cer + security import AppleWWDRCAG2.cer -k $KEYCHAIN_PATH + security import DeveloperIDG2CA.cer -k $KEYCHAIN_PATH + security find-identity -vvvv $KEYCHAIN_PATH + security find-identity -v -p codesigning + + # Store AppConnect credentials + echo "${{ secrets.NOTARIZATION_API_KEY }}" > AppConnect_Developer_API_Key.p8 + xcrun notarytool store-credentials EnergyPlus \ + --key AppConnect_Developer_API_Key.p8 \ + --key-id ${{ secrets.NOTARIZATION_API_TEAM_ID }} \ + --issuer ${{ secrets.NOTARIZATION_API_ISSUER_ID }} \ + --keychain $KEYCHAIN_PATH + + cd .. && rm -Rf codesigning + + # Download my patched QtIFW + mkdir QtIFW && cd QtIFW + aria2c https://github.com/jmarrec/QtIFW-fixup/releases/download/v5.0.0-dev-with-fixup/QtIFW-5.0.0-${{ matrix.arch }}.zip + xattr -r -d com.apple.quarantine ./QtIFW-5.0.0-${{ matrix.arch }}.zip + unzip QtIFW-5.0.0-${{ matrix.arch }}.zip + rm -Rf ./*.zip + chmod +x * + ./installerbase --version + echo "$(pwd)" >> $GITHUB_PATH + - name: Remove python ${{ env.Python_REQUIRED_VERSION }} from the toolcache run: | ls $RUNNER_TOOL_CACHE/Python || true @@ -52,11 +109,6 @@ jobs: python-version: ${{ env.Python_REQUIRED_VERSION }} # check-latest: true # Force pick up the python I built instead of the (potential) toolcache one. I could also do `rm -Rf $RUNNER_TOOL_CACHE/Python/3.12.2` before this action - - name: Setup QtIFW 4.x - uses: jmarrec/setup-qtifw@v1 - with: - qtifw-version: '4.6.1' - - name: Install Python dependencies run: | python -m pip install --upgrade pip @@ -66,16 +118,22 @@ jobs: shell: bash run: | set -x - echo "Using brew to install mactex and adding it to PATH" brew update - brew install --cask mactex-no-gui - echo "/Library/TeX/texbin" >> $GITHUB_PATH + if [[ "$BUILD_DOCS" != "false" ]]; then + echo "Using brew to install mactex and adding it to PATH" + brew install --cask mactex-no-gui + echo "/Library/TeX/texbin" >> $GITHUB_PATH + echo "DOCUMENTATION_BUILD=BuildWithAll" >> $GITHUB_ENV + else + echo "DOCUMENTATION_BUILD=DoNotBuild" >> $GITHUB_ENV + fi # The MACOSX_DEPLOYMENT_TARGET environment variable sets the default value for the CMAKE_OSX_DEPLOYMENT_TARGET variable. # We use cmake commands to build some subprojects, so setting it globally echo MACOSX_DEPLOYMENT_TARGET=${{ matrix.macos_dev_target }} >> $GITHUB_ENV echo "Installing gcc@13 for gfortran support of -static-libquadmath" brew list gcc@13 || brew install gcc@13 which gfortran-13 || echo "FC=$(brew --prefix gcc@13)/bin/gfortran-13" >> $GITHUB_ENV + brew install ninja - name: Create Build Directory run: cmake -E make_directory ./build/ @@ -86,43 +144,99 @@ jobs: working-directory: ./build shell: bash run: | - cmake -DCMAKE_BUILD_TYPE:STRING=$BUILD_TYPE \ + cmake -G Ninja -DCMAKE_BUILD_TYPE:STRING=$BUILD_TYPE \ -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${{ matrix.macos_dev_target }} \ -DLINK_WITH_PYTHON:BOOL=ON -DPython_REQUIRED_VERSION:STRING=${{ steps.setup-python.outputs.python-version }} \ -DPython_ROOT_DIR:PATH=$RUNNER_TOOL_CACHE/Python/${{ steps.setup-python.outputs.python-version }}/${{ matrix.python-arch }}/ \ -DBUILD_FORTRAN:BOOL=ON -DBUILD_PACKAGE:BOOL=ON \ - -DDOCUMENTATION_BUILD:STRING="BuildWithAll" -DTEX_INTERACTION:STRING="batchmode" \ + -DDOCUMENTATION_BUILD:STRING=$DOCUMENTATION_BUILD -DTEX_INTERACTION:STRING="batchmode" \ -DENABLE_OPENMP:BOOL=OFF -DUSE_OpenMP:BOOL=OFF \ + -DCPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION:STRING="Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + -DCPACK_CODESIGNING_NOTARY_PROFILE_NAME:STRING=EnergyPlus \ ../ - name: Build Package working-directory: ./build shell: bash - run: cmake --build . --target package -j 3 - - - name: otool the exes and libs - shell: bash - working-directory: ./build run: | - set -x - cd _CPack_Packages/Darwin/TGZ/EnergyPlus*/ - otool -L ExpandObjects || true - otool -L ConvertInputFormat || true - otool -L energyplus || true - otool -L libenergyplusapi.dylib || true - otool -L PreProcess/IDFVersionUpdater/Transition-V23-1-0-to-V23-2-0 || true - otool -L PostProcess/ReadVarsESO || true - otool -L PostProcess/HVAC-Diagram || true + ninja package - name: Upload Tarball as artifact for testing uses: actions/upload-artifact@v4 with: - name: energyplus-${{ matrix.os }} + name: energyplus-${{ matrix.os }}.tar.gz path: build/EnergyPlus-*-${{ matrix.arch }}.tar.gz if-no-files-found: error retention-days: 7 overwrite: false + - name: Upload DMG as artifact for testing + uses: actions/upload-artifact@v4 + with: + name: energyplus-${{ matrix.os }}.dmg + path: build/EnergyPlus-*-${{ matrix.arch }}.dmg + if-no-files-found: error + retention-days: 7 + overwrite: false + + - name: Quick Test Package Signing and otool exes and libs + shell: bash + working-directory: ./build + run: | + begin_group() { echo -e "::group::\033[93m$1\033[0m"; } + + subheader() { echo -e "\033[95m---- $1\033[0m"; } + + exes=( + "energyplus" "libenergyplusapi.dylib" + "ExpandObjects" "ConvertInputFormat" + "PreProcess/IDFVersionUpdater/Transition-V23-1-0-to-V23-2-0" + "PostProcess/ReadVarsESO" "PostProcess/HVAC-Diagram" + ) + + TGZ_DIR=$(find _CPack_Packages/Darwin/TGZ -name "EnergyPlus*" -type d -maxdepth 1) + echo "TGZ_DIR=$TGZ_DIR" >> $GITHUB_ENV + echo "Checking TGZ dir at $TGZ_DIR" + + for rel_exe in "${exes[@]}"; do + exe="$TGZ_DIR/$rel_exe" + begin_group "Checking $exe" + subheader "otool" + otool -L "${exe}" || true + subheader "codesign" + siginfo=$(codesign --display -vv "${exe}" 2>&1) + if [[ $siginfo == *"K7JYVQJL7R"* ]]; then + echo -e "\033[92mSIGNATURE OK\033[0m" + echo "$siginfo" | grep Authority + else + echo -e "\033[91mSignature not ok for ${exe}\033[0m" + echo "::error::title=Signature not ok for ${exe}::$siginfo" + fi + echo "::endgroup::" + done + + - name: Full Test Package signing and otool for IFW and TGZ + working-directory: ./build + shell: bash + run: | + begin_group() { echo -e "::group::\033[93m$1\033[0m"; } + + begin_group "Full Check signature of _CPack_Packages for both IFW and TGZ and resolve otool libraries" + python ../scripts/dev/verify_signature.py --verbose --otool --otool-out-file otool_infos_cpack.json . + echo "::endgroup::" + + begin_group "Running a simulation with python" + ./$TGZ_DIR/energyplus --help + ./$TGZ_DIR/energyplus -w ./$TGZ_DIR/WeatherData/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw -d out ./$TGZ_DIR/ExampleFiles/PythonPluginCustomSchedule.idf + echo "::endgroup::" + + - name: Upload otool info as artifact + uses: actions/upload-artifact@v4 + with: + name: otool_infos_cpack_${{ matrix.os }}_${{ matrix.arch }} + path: build/otool*json + if-no-files-found: error + - name: Upload Tarball to release uses: svenstaro/upload-release-action@v2 with: @@ -153,39 +267,96 @@ jobs: include: - macos_dev_target: 12.1 os: macos-12 + arch: x86_64 python-arch: x64 test_key: mac12 - macos_dev_target: 13.0 os: macos-14 + arch: arm64 python-arch: arm64 test_key: mac13-arm64 steps: - - uses: actions/checkout@v4 # Still need E+ checked out to get testing scripts - with: - path: checkout - - - name: Set up Python ${{ env.Python_REQUIRED_VERSION }} - uses: actions/setup-python@v5 - id: setup-python - with: - python-version: ${{ env.Python_REQUIRED_VERSION }} - architecture: ${{ matrix.python-arch }} - - - name: Gather Test Package from Artifacts - uses: actions/download-artifact@v4 - with: - name: energyplus-${{ matrix.os }} - path: package - - - name: Check Contents - shell: bash - run: ls - - - name: Check Package contents - shell: bash - working-directory: package - run: ls - - - name: Run Package Tests - run: python checkout/scripts/package_tests/runner.py --verbose ${{ matrix.test_key }} package/ + - uses: actions/checkout@v4 # Still need E+ checked out to get testing scripts + with: + path: checkout + + - name: Set up Python ${{ env.Python_REQUIRED_VERSION }} + uses: actions/setup-python@v5 + id: setup-python + with: + python-version: ${{ env.Python_REQUIRED_VERSION }} + architecture: ${{ matrix.python-arch }} + + - name: Gather Test Package from Artifacts + uses: actions/download-artifact@v4 + with: + name: energyplus-${{ matrix.os }}.tar.gz + path: package + + - name: Check Contents + shell: bash + run: ls + + - name: Check Package contents + shell: bash + working-directory: package + run: ls + + - name: Run Package Tests + run: python checkout/scripts/package_tests/runner.py --verbose ${{ matrix.test_key }} package/ + + - name: Gather Dmg Package from Artifacts + uses: actions/download-artifact@v4 + with: + name: energyplus-${{ matrix.os }}.dmg + path: dmg + + - name: Test Dmg Install and Package signing + working-directory: ./dmg + shell: bash + run: | + begin_group() { echo -e "::group::\033[93m$1\033[0m"; } + + set -x + + dmg=$(ls EnergyPlus-*.dmg) + begin_group "Checking Signature of .dmg" + spctl --assess --type open --context context:primary-signature -vvvv $dmg + echo "::endgroup::" + + begin_group "Mounting Dmg, and checking signature of installer app" + mkdir temp_mount + hdiutil attach -mountpoint ./temp_mount/ $dmg + filename="${dmg%.*}" + spctl --assess --type open --context context:primary-signature -vvvv ./temp_mount/$filename.app + echo "::endgroup::" + + begin_group "Installing" + sudo ./temp_mount/$filename.app/Contents/MacOS/$filename --accept-licenses --default-answer --confirm-command --root $(pwd)/test_install install + hdiutil detach ./temp_mount/ + echo "::endgroup::" + + begin_group "Quick Check signature of inner executables and binaries" + codesign -dvvv ./test_install/energyplus + codesign -dvvv ./test_install/libenergyplusapi.dylib + codesign -dvvv ./test_install/libpython*.dylib + codesign -dvvv ./test_install/ConvertInputFormat + codesign -dvvv ./test_install/PostProcess/ReadVarsESO + echo "::endgroup::" + + begin_group "Full Check signature of installed DMG for all executables and resolve otool libraries" + python ../checkout/scripts/dev/verify_signature.py --otool --otool-out-file otool_info_dmg.json --verbose --install test_install + echo "::endgroup::" + + begin_group "Running a simulation with python" + ./test_install/energyplus --help + ./test_install/energyplus -w ./test_install/WeatherData/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw -d out ./test_install/ExampleFiles/PythonPluginCustomSchedule.idf + echo "::endgroup::" + + - name: Upload otool info as artifact + uses: actions/upload-artifact@v4 + with: + name: otool_info_dmg_${{ matrix.os }}_${{ matrix.arch }} + path: dmg/otool*json + if-no-files-found: error diff --git a/CMakeLists.txt b/CMakeLists.txt index 52eacc3ff70..b6cded6bc15 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,8 @@ endif() cmake_policy(SET CMP0048 NEW) # handling project_version_* variables +cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. + project(EnergyPlus) # Raise an error if attempting to compile on macOS older than 10.15 - it does not work diff --git a/bin/EP-Compare/Run-Mac/codesign.sh b/bin/EP-Compare/Run-Mac/codesign.sh new file mode 100755 index 00000000000..f6a7ca64746 --- /dev/null +++ b/bin/EP-Compare/Run-Mac/codesign.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +APP_NAME=EP-Compare +IDENTIFIER="org.nrel.EnergyPlus.$APP_NAME" + +function ep_codesign() { + codesign -vvvv -s "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + --force --timestamp \ + --prefix "$IDENTIFIER." \ + --options runtime \ + --entitlements entitlements.xml "$1" +} + +function ep_notarize() { + xcrun notarytool submit --keychain-profile "EnergyPlus" --wait "$1" +} + +ep_codesign "EP-Compare.app/Contents/Frameworks/RBAppearancePak.rbx_0.dylib" +ep_codesign "EP-Compare.app/Contents/Frameworks/TreeView.rbx_0.dylib" +ep_codesign "EP-Compare.app/Contents/Frameworks/#CoreClasses.rbx_5.dylib" +ep_codesign "EP-Compare.app/Contents/Frameworks/#CoreClasses.rbx_1.dylib" +ep_codesign "EP-Compare.app/Contents/Frameworks/#CoreClasses.rbx_0.dylib" +ep_codesign "EP-Compare.app/Contents/Frameworks/MBS REALbasic ChartDirector Plugin.rbx_0.dylib" + +ep_codesign "EP-Compare.app/Contents/MacOS/rbframework.dylib" +ep_codesign "EP-Compare.app/Contents/MacOS/EP-Compare" + +codesign -vvvv -s "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + --force --timestamp \ + --identifier "$IDENTIFIER" \ + --options runtime \ + --entitlements entitlements.xml \ + $APP_NAME.app + +zip -r ./$APP_NAME.zip ./$APP_NAME.app +ep_notarize ./$APP_NAME.zip +xcrun stapler staple ./$APP_NAME.app + +xcrun stapler validate ./$APP_NAME.app +spctl -vvvv --assess ./$APP_NAME.app +rm -Rf ./$APP_NAME.zip diff --git a/bin/EP-Compare/Run-Mac/entitlements.xml b/bin/EP-Compare/Run-Mac/entitlements.xml new file mode 100644 index 00000000000..6bc22e913b5 --- /dev/null +++ b/bin/EP-Compare/Run-Mac/entitlements.xml @@ -0,0 +1,14 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.disable-library-validation + + + diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/CodeResources b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/CodeResources new file mode 100644 index 00000000000..2180b96a55d Binary files /dev/null and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/CodeResources differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/Python.framework/Versions/2.7/Python b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/Python.framework/Versions/2.7/Python index 4df7722b234..dc35b558d33 100755 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/Python.framework/Versions/2.7/Python and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/Python.framework/Versions/2.7/Python differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/Python.framework/Versions/2.7/_CodeSignature/CodeResources b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/Python.framework/Versions/2.7/_CodeSignature/CodeResources new file mode 100644 index 00000000000..40a4feca3ff --- /dev/null +++ b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/Python.framework/Versions/2.7/_CodeSignature/CodeResources @@ -0,0 +1,143 @@ + + + + + files + + Resources/Info.plist + + 4eyNy1lWpxqceFLieYb4qx7KzTg= + + + files2 + + Resources/Info.plist + + hash + + 4eyNy1lWpxqceFLieYb4qx7KzTg= + + hash2 + + 0vbpK1I47TVLDP3SGdcSphUVPje0iwEfPD/2N83Dq3U= + + + include/python2.7/pyconfig.h + + hash + + XOiYVxQGwvkR55AU49t7job0Jbg= + + hash2 + + l+MTv3YTFn1G2Pu51b9xBnbs8R0Hfa6JSlJ5975Zcgw= + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libatk-1.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libatk-1.0.0.dylib index b31cf1963e4..07142706064 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libatk-1.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libatk-1.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libcairo.2.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libcairo.2.dylib index d46b1c0b229..b0c602258c2 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libcairo.2.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libcairo.2.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libcrypto.1.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libcrypto.1.0.0.dylib index 45d1e1b78e2..7ee0a3414d2 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libcrypto.1.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libcrypto.1.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libffi.6.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libffi.6.dylib index 9af534935af..5a0ba29318f 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libffi.6.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libffi.6.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libfontconfig.1.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libfontconfig.1.dylib index 4a62ce9f414..838fdaf1fd0 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libfontconfig.1.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libfontconfig.1.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libfreetype.6.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libfreetype.6.dylib index 09300eb4270..baaffa369f3 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libfreetype.6.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libfreetype.6.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgdk-quartz-2.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgdk-quartz-2.0.0.dylib index 3ba6b554987..a5619f3471e 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgdk-quartz-2.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgdk-quartz-2.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgdk_pixbuf-2.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgdk_pixbuf-2.0.0.dylib index eb373396838..78da67b7091 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgdk_pixbuf-2.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgdk_pixbuf-2.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgio-2.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgio-2.0.0.dylib index 817433c4a4c..508d9646949 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgio-2.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgio-2.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libglib-2.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libglib-2.0.0.dylib index 07a70f5e722..b518deb5bef 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libglib-2.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libglib-2.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgmodule-2.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgmodule-2.0.0.dylib index 88a06848377..1f6cecd0541 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgmodule-2.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgmodule-2.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgobject-2.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgobject-2.0.0.dylib index 6458c44863a..03b3e7a049f 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgobject-2.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgobject-2.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgthread-2.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgthread-2.0.0.dylib index 9f1feb82fe9..f438f2e7ab5 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgthread-2.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgthread-2.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgtk-quartz-2.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgtk-quartz-2.0.0.dylib index 943fee7ba53..f1648edbc1c 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgtk-quartz-2.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libgtk-quartz-2.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libharfbuzz.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libharfbuzz.0.dylib index 9951325a532..ecabaeb7b68 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libharfbuzz.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libharfbuzz.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libintl.8.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libintl.8.dylib index f92bb338fe1..7845f51f225 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libintl.8.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libintl.8.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpango-1.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpango-1.0.0.dylib index 0e83e752cad..c633b3a6102 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpango-1.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpango-1.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpangocairo-1.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpangocairo-1.0.0.dylib index 39d579e6ee6..4bf653db28f 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpangocairo-1.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpangocairo-1.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpangoft2-1.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpangoft2-1.0.0.dylib index ca47b704c60..e8d3607150a 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpangoft2-1.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpangoft2-1.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpixman-1.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpixman-1.0.dylib index 15cf0edf367..080e4906699 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpixman-1.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpixman-1.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpng16.16.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpng16.16.dylib index 4c26ea0c419..9149737bb31 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpng16.16.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpng16.16.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpyglib-2.0-python.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpyglib-2.0-python.0.dylib index 0f0ed8e06ab..e3948abad9d 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpyglib-2.0-python.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libpyglib-2.0-python.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libssl.1.0.0.dylib b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libssl.1.0.0.dylib index cd9810387ee..9f43ecfd053 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libssl.1.0.0.dylib and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Frameworks/libssl.1.0.0.dylib differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/MacOS/EP-Launch-Lite b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/MacOS/EP-Launch-Lite index 69e5dd0adef..490fcbf3169 100755 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/MacOS/EP-Launch-Lite and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/MacOS/EP-Launch-Lite differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/MacOS/python b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/MacOS/python index a0480755d2c..6205f17726b 100755 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/MacOS/python and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/MacOS/python differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/MacOS.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/MacOS.so index a0bc511063a..8c77c60ae3b 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/MacOS.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/MacOS.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/Nav.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/Nav.so index fdb5bc10b36..af4cac05b1f 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/Nav.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/Nav.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_AE.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_AE.so index ebdfdc600cd..2e1b3071593 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_AE.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_AE.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Ctl.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Ctl.so index 4b2a3baeb46..93ad8c1ba58 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Ctl.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Ctl.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Dlg.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Dlg.so index a9a587c9f76..082104865e0 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Dlg.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Dlg.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Evt.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Evt.so index cc1e0a39fa5..13795f111e2 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Evt.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Evt.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_File.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_File.so index 138565c6067..396053944bc 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_File.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_File.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Menu.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Menu.so index d1f7b971368..f64e9e48231 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Menu.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Menu.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Qd.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Qd.so index 696aadf1a0e..fdebb3aeebf 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Qd.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Qd.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Res.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Res.so index 9a1de41f93c..084ff8591a5 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Res.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Res.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Win.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Win.so index 769ad9c7b5b..6d0628d69b5 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Win.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_Win.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_cn.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_cn.so index f4662f1f9f3..5010b33a4ad 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_cn.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_cn.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_hk.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_hk.so index d98b916aae5..732b0d51ba0 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_hk.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_hk.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_iso2022.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_iso2022.so index e70a7d2cea7..92aa5dc1116 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_iso2022.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_iso2022.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_jp.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_jp.so index f35dc61c01e..4849ead7be8 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_jp.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_jp.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_kr.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_kr.so index 19abfdcdd20..40e17f72d19 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_kr.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_kr.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_tw.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_tw.so index 051a3525798..0940f94f6b2 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_tw.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_tw.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_collections.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_collections.so index aba276e6a38..a2cf3ffbcce 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_collections.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_collections.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_ctypes.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_ctypes.so index b84e4a791f3..a55cc2cbc55 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_ctypes.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_ctypes.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_functools.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_functools.so index 92c65b765ae..a0111b5dbe9 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_functools.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_functools.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_hashlib.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_hashlib.so index 6047d1e0972..5f8c4916fe5 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_hashlib.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_hashlib.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_heapq.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_heapq.so index 391660d83e5..8a3064f6cee 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_heapq.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_heapq.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so index 53d71087f17..abc442de8cb 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_json.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_json.so index 549e9660f74..19ffd29310a 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_json.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_json.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_locale.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_locale.so index 52267bc310c..b9998be7258 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_locale.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_locale.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_multibytecodec.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_multibytecodec.so index 1f6be52aba0..99882d89045 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_multibytecodec.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_multibytecodec.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_random.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_random.so index 8db8b5b3d98..9839946aefd 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_random.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_random.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_scproxy.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_scproxy.so index 42350e85345..657b5c903e5 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_scproxy.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_scproxy.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_socket.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_socket.so index 3d947b26ce2..27f82ed946f 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_socket.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_socket.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_ssl.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_ssl.so index d195fda590c..4001e52c061 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_ssl.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_ssl.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_struct.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_struct.so index 961c243824e..bafb21dcc04 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_struct.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/_struct.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/array.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/array.so index 1db66bac500..179c7d9ac3b 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/array.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/array.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/atk.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/atk.so index b535541e886..b5fcc68c705 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/atk.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/atk.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/binascii.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/binascii.so index e2eeb70a91b..46827e56fe9 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/binascii.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/binascii.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/bz2.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/bz2.so index 945ce5dcb6c..4b21f0666ad 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/bz2.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/bz2.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cPickle.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cPickle.so index 9272a690008..b52a181bd86 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cPickle.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cPickle.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cStringIO.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cStringIO.so index 1069a51653f..61c0f6268d3 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cStringIO.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cStringIO.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cairo/_cairo.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cairo/_cairo.so index 49563e7c754..7e34f850167 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cairo/_cairo.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/cairo/_cairo.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/datetime.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/datetime.so index 9d8f129a5da..92730b5d208 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/datetime.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/datetime.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/fcntl.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/fcntl.so index 3ad5dfa2459..c48ef38e178 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/fcntl.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/fcntl.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gestalt.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gestalt.so index eddbc5bca25..6a0ffd6179d 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gestalt.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gestalt.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gio/_gio.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gio/_gio.so index d1247a6d5ca..166684f7774 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gio/_gio.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gio/_gio.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gio/unix.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gio/unix.so index 3b54a370db1..06bebcae818 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gio/unix.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gio/unix.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/glib/_glib.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/glib/_glib.so index 79a1fbdb385..8734f910dac 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/glib/_glib.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/glib/_glib.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gobject/_gobject.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gobject/_gobject.so index 128b7749635..b2d3998725c 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gobject/_gobject.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gobject/_gobject.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/grp.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/grp.so index 81fd856e370..f4bb71f9634 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/grp.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/grp.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gtk/_gtk.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gtk/_gtk.so index aba7567ac16..c0a25767f85 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gtk/_gtk.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/gtk/_gtk.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/itertools.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/itertools.so index 82429454bb4..76f6ced0934 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/itertools.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/itertools.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/math.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/math.so index 5d08ccffdf5..837b58c8bad 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/math.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/math.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/operator.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/operator.so index ac0d935a100..57af5aaacb2 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/operator.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/operator.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pango.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pango.so index 5313abf4946..c075792be29 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pango.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pango.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pangocairo.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pangocairo.so index 2fdea0bf981..0b7c3fe86ec 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pangocairo.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pangocairo.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/parser.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/parser.so index 9287c419dea..32ea87d3855 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/parser.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/parser.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pyexpat.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pyexpat.so index 7288de248ff..3810dc12fc2 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pyexpat.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/pyexpat.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/resource.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/resource.so index b4a38c76d3d..b25c1aec6e9 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/resource.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/resource.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/select.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/select.so index 14d70ab5eb0..0712666711b 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/select.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/select.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/strop.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/strop.so index a1d75c0d64e..118d794db7e 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/strop.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/strop.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/termios.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/termios.so index 64dcb93ee88..95e37a16c38 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/termios.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/termios.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/time.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/time.so index a8376baa84d..de82d1bafe9 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/time.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/time.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/unicodedata.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/unicodedata.so index 5a9d19c77bd..a68c7df5b3f 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/unicodedata.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/unicodedata.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/zlib.so b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/zlib.so index 218863f778b..65ed3f7ea05 100644 Binary files a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/zlib.so and b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/Resources/lib/python2.7/lib-dynload/zlib.so differ diff --git a/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/_CodeSignature/CodeResources b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/_CodeSignature/CodeResources new file mode 100644 index 00000000000..aeab70c42bd --- /dev/null +++ b/bin/EP-Launch-Lite/EP-Launch-Lite.app/Contents/_CodeSignature/CodeResources @@ -0,0 +1,1367 @@ + + + + + files + + Resources/EP-Launch-Lite.py + + zizPb9bBaTknoaJ+LD71ppGoOsk= + + Resources/PythonApplet.icns + + 9zRqvdRORUNhZjC9sNbLi26ck94= + + Resources/__boot__.py + + U3iE2yv22iDpDHju//5dZiv3qw4= + + Resources/__error__.sh + + RSc80021ClpLWgRkypPREPTxHnE= + + Resources/include/python2.7/pyconfig.h + + XOiYVxQGwvkR55AU49t7job0Jbg= + + Resources/lib/python2.7/lib-dynload/MacOS.so + + H6+ZJLYC/qEbTrO7wYigr3Adf6c= + + Resources/lib/python2.7/lib-dynload/Nav.so + + JL7fcCid/YLpsETTq/g8BGOVbkc= + + Resources/lib/python2.7/lib-dynload/_AE.so + + z1Wht5NGaY48A8EXjeThaa+1McU= + + Resources/lib/python2.7/lib-dynload/_Ctl.so + + C1FJ+AHZbyC146IYI3RFYN4ybJE= + + Resources/lib/python2.7/lib-dynload/_Dlg.so + + I9B7kLUwDU5zAN4t3X4JjYgsWe0= + + Resources/lib/python2.7/lib-dynload/_Evt.so + + oNJGGemWc00HBJNRMjIiCpKXZ60= + + Resources/lib/python2.7/lib-dynload/_File.so + + nxj+yj1ySy3uSwPb7pHUbBkFhYA= + + Resources/lib/python2.7/lib-dynload/_Menu.so + + D6xl1uym36FKyjODTDDZYzrR4zU= + + Resources/lib/python2.7/lib-dynload/_Qd.so + + fmNp5ePC9x8m6WfqaiIF5v5OLS0= + + Resources/lib/python2.7/lib-dynload/_Res.so + + g86kF6dpgzUEnIrPppqKthi4jtI= + + Resources/lib/python2.7/lib-dynload/_Win.so + + jNEgXyHIgf4iFn8+8q4kHUjNpqY= + + Resources/lib/python2.7/lib-dynload/_codecs_cn.so + + zNQPJ2/zJRv7m3Cn+T392pwpk4w= + + Resources/lib/python2.7/lib-dynload/_codecs_hk.so + + 6BK2sGAYuQm4mF3H5KBENPZIUS0= + + Resources/lib/python2.7/lib-dynload/_codecs_iso2022.so + + kyxkHPAKOgJ0+kx+NClhGmwHKEY= + + Resources/lib/python2.7/lib-dynload/_codecs_jp.so + + zzZPo9yQAuG/aorio0WHTkPkbew= + + Resources/lib/python2.7/lib-dynload/_codecs_kr.so + + oIL2fEROn4Kn1QXti6AAy9endfY= + + Resources/lib/python2.7/lib-dynload/_codecs_tw.so + + vvQT66zgva4iAIez9Ymc51XwCRs= + + Resources/lib/python2.7/lib-dynload/_collections.so + + jrGLPZ+LUFdz7kHTE/Y8UPFPmpA= + + Resources/lib/python2.7/lib-dynload/_ctypes.so + + lo+ACjt62brRTCw6RwTE+Ez2l90= + + Resources/lib/python2.7/lib-dynload/_functools.so + + CGBa9Hp3JScRzLScXVmK9PbzzIk= + + Resources/lib/python2.7/lib-dynload/_hashlib.so + + i2AHbMYN5TvH6S/PwuLq3mc0nHs= + + Resources/lib/python2.7/lib-dynload/_heapq.so + + l5TR/z5hZEjTLLlTzLJuUmQ2O8g= + + Resources/lib/python2.7/lib-dynload/_io.so + + ISPcTCYxEsfMctt6sifUens24uw= + + Resources/lib/python2.7/lib-dynload/_json.so + + y6eY3+AE/fOBjmdUTv+6FZ00vqM= + + Resources/lib/python2.7/lib-dynload/_locale.so + + QOz+ekBZ5HZVyfnOdHyXTF5Gs48= + + Resources/lib/python2.7/lib-dynload/_multibytecodec.so + + Gc5W01jh6kMxQ7RDyOExSfIMQ+c= + + Resources/lib/python2.7/lib-dynload/_random.so + + 6xHF7kaBe7poG8iPzGZeE5QpVVg= + + Resources/lib/python2.7/lib-dynload/_scproxy.so + + MPcwam/Hbb/Xu/BRG+hZmZhyUWU= + + Resources/lib/python2.7/lib-dynload/_socket.so + + g6SpznJHPWMRCTNZq+GoY/Som0Q= + + Resources/lib/python2.7/lib-dynload/_ssl.so + + o4Io6IzDQDbuPi753CNJZh7z55Q= + + Resources/lib/python2.7/lib-dynload/_struct.so + + 8a+SxCCJV1jYEHmJsJciTSTKAi8= + + Resources/lib/python2.7/lib-dynload/array.so + + 2b4fl+ZJOCeaUDmJ4KMa5FOKzbI= + + Resources/lib/python2.7/lib-dynload/atk.so + + Ul2sq73yPpAHKstpoCg4/aoQdH4= + + Resources/lib/python2.7/lib-dynload/binascii.so + + vRKILfxTPkXHhhgK0IAc0gnasE0= + + Resources/lib/python2.7/lib-dynload/bz2.so + + 88gCP8eCp4owCz5eAFHiVK5jOg4= + + Resources/lib/python2.7/lib-dynload/cPickle.so + + rSAvkeMu+KtC/BGmC53O4lLwfKo= + + Resources/lib/python2.7/lib-dynload/cStringIO.so + + UzE+t5ihDlEsoTCbe3NGgCaDa78= + + Resources/lib/python2.7/lib-dynload/cairo/_cairo.so + + tucOv4Ae3Fd43JdwsL79xfNjMns= + + Resources/lib/python2.7/lib-dynload/datetime.so + + uimuyp0kk7uER+yYAbR/wtFj3ow= + + Resources/lib/python2.7/lib-dynload/fcntl.so + + KXGS1D1yoWVINbp7Y4WdVFbvNNY= + + Resources/lib/python2.7/lib-dynload/gestalt.so + + ADOrEBoPGVSUFUReXTHYFSGePFI= + + Resources/lib/python2.7/lib-dynload/gio/_gio.so + + cBQee4573Mq01al9o9swNRaperQ= + + Resources/lib/python2.7/lib-dynload/gio/unix.so + + 3fJnxylmDRp8yeNQhIX7FoLHVSU= + + Resources/lib/python2.7/lib-dynload/glib/_glib.so + + Ke4vnZz9t10yfeG9cuWpefeZFvQ= + + Resources/lib/python2.7/lib-dynload/gobject/_gobject.so + + isSG1WePvfiyAeJq6l14O6GWV6w= + + Resources/lib/python2.7/lib-dynload/grp.so + + WfWF5rBf8pbRBL6MDEvIDlIRI5I= + + Resources/lib/python2.7/lib-dynload/gtk/_gtk.so + + FU1a5sN9jGGPd27woHEf7+HrH2Q= + + Resources/lib/python2.7/lib-dynload/itertools.so + + Ok7h1Avl4RF0cV9ugiTn3UPk1iw= + + Resources/lib/python2.7/lib-dynload/math.so + + cMAdsxdY/XzDJlM4baoYi0TGheo= + + Resources/lib/python2.7/lib-dynload/operator.so + + v7nfyU3YRQNMgxu99IOTyZ0JjAU= + + Resources/lib/python2.7/lib-dynload/pango.so + + FDPeJs34SdbiijH4hrtRtjoHZMg= + + Resources/lib/python2.7/lib-dynload/pangocairo.so + + qqo4zvFBsEPxs8Excxni+u1o1b8= + + Resources/lib/python2.7/lib-dynload/parser.so + + M45EWM1MlhAVetPoM+YKpT3CAJ0= + + Resources/lib/python2.7/lib-dynload/pyexpat.so + + PLFJsrJJQwO1U3zYiIwd5VnOwCk= + + Resources/lib/python2.7/lib-dynload/resource.so + + 0Wcbdv3DQ0ZtlsFZN9iDC36eKCw= + + Resources/lib/python2.7/lib-dynload/select.so + + M0hJTgqPM+mg72y8+8Xdv7x3SoY= + + Resources/lib/python2.7/lib-dynload/strop.so + + /EZoZGDhSU4EMZMvtrSveTVBm84= + + Resources/lib/python2.7/lib-dynload/termios.so + + 3lxFhSI4k1JbLMFDE78T6/5GtNY= + + Resources/lib/python2.7/lib-dynload/time.so + + yMeLO1nTWizoB5deQaAPyMYH1I8= + + Resources/lib/python2.7/lib-dynload/unicodedata.so + + YHvGiHtEL8BmNx6zQ5jHVSVSZmk= + + Resources/lib/python2.7/lib-dynload/zlib.so + + F5eP6DJjF0fgvMvq3BhGPHJWKyY= + + Resources/lib/python2.7/site-packages.zip + + jC64WzVCHX0iRDs/U6cqOsC/J8w= + + Resources/site.pyc + + 4ZLT9jnFl7Y4mY/9ky6KxtRXpx4= + + + files2 + + Frameworks/Python.framework + + cdhash + + C16hoUymVud+KV4cZ3dMLhrpxrQ= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libatk-1.0.0.dylib + + cdhash + + dpOAMtIg4bUFxpNtpPNWhi0L/IM= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libcairo.2.dylib + + cdhash + + sU1vXh78iJgz5dPUpGRe/s+q2jQ= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libcrypto.1.0.0.dylib + + cdhash + + gOavU8KXc6CgempI0tAkFqpLpAs= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libffi.6.dylib + + cdhash + + yg+Mh9GTtgm+KaGjEksH1GBC8Wk= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libfontconfig.1.dylib + + cdhash + + ug8Xp42FH59AHdRdLi3M3OmS6Nw= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libfreetype.6.dylib + + cdhash + + i2gVRAgb5f3w76YN6/u5X0EjI1w= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libgdk-quartz-2.0.0.dylib + + cdhash + + HH5jm1/EwnK3/GLpDSGMy43nsSU= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libgdk_pixbuf-2.0.0.dylib + + cdhash + + nBqUz/rn579W3fRCZZjzhVZcIxw= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libgio-2.0.0.dylib + + cdhash + + RLk6aH18mT0AbsUio6gbovft6qU= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libglib-2.0.0.dylib + + cdhash + + bhXwNV75ahSyGkJw8drvJzt0W20= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libgmodule-2.0.0.dylib + + cdhash + + oqy9yHkE/gDuQnuAxdxRdI4T1T4= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libgobject-2.0.0.dylib + + cdhash + + ez4DMKI5Ty+5qlThyn+syinLokw= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libgthread-2.0.0.dylib + + cdhash + + pWiz9RCC3heM2sKV15FmrC2gW0Q= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libgtk-quartz-2.0.0.dylib + + cdhash + + 5rVwYZEpTVqGSqylo8UqD78T/Pw= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libharfbuzz.0.dylib + + cdhash + + BQtA2HANprb0BZgGLhT9vNiOnzA= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libintl.8.dylib + + cdhash + + uOFznIzXEcQMYH/5MpnhO0+c5qo= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libpango-1.0.0.dylib + + cdhash + + kyZg9qF5LE6Kkh8xjgnJaZdyG7c= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libpangocairo-1.0.0.dylib + + cdhash + + KEImMqdJT/25VZWGgn9fNputZZc= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libpangoft2-1.0.0.dylib + + cdhash + + irdk9nXQJswvvcRyBgAViJ5xSmg= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libpixman-1.0.dylib + + cdhash + + Bqn3CahXuA3LOFx6ZtosPSCj0R4= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libpng16.16.dylib + + cdhash + + OnXNLJSgG1oci0Wwi7srnQGpaxo= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libpyglib-2.0-python.0.dylib + + cdhash + + 0gebB2B7lMDD5KPB7k7yDjMk2t8= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libssl.1.0.0.dylib + + cdhash + + sz5nHghY/2SDYEFt0UjfYhcvNp4= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + MacOS/python + + cdhash + + PyauaoRM7vi9eeHO2Hen40/FVt8= + + requirement + identifier "org.nrel.EnergyPlus.EP-Launch-Lite" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Resources/EP-Launch-Lite.py + + hash + + zizPb9bBaTknoaJ+LD71ppGoOsk= + + hash2 + + KA02ij2hPfSuV5AKZCi2rqIhj0J9rAJ8TKqrRSs7P/0= + + + Resources/PythonApplet.icns + + hash + + 9zRqvdRORUNhZjC9sNbLi26ck94= + + hash2 + + eHksEElSftDQiDfMtwxo3rWW/gCukmOJdD1flXi1uxE= + + + Resources/__boot__.py + + hash + + U3iE2yv22iDpDHju//5dZiv3qw4= + + hash2 + + v9QQ5DU4xUzrMb4+LsrPEqYDSLhezRKvjq/lyiVm05c= + + + Resources/__error__.sh + + hash + + RSc80021ClpLWgRkypPREPTxHnE= + + hash2 + + W4ZTgQ/QGtxOut5n5GOaiHgZlUvzZyEHrEUkBSqL7fU= + + + Resources/include/python2.7/pyconfig.h + + hash + + XOiYVxQGwvkR55AU49t7job0Jbg= + + hash2 + + l+MTv3YTFn1G2Pu51b9xBnbs8R0Hfa6JSlJ5975Zcgw= + + + Resources/lib/python2.7/lib-dynload/MacOS.so + + hash + + H6+ZJLYC/qEbTrO7wYigr3Adf6c= + + hash2 + + fN9Gm3+1wWCG+GyQOtCWaqXnXJ9IbdnPv2eq0ur2a+c= + + + Resources/lib/python2.7/lib-dynload/Nav.so + + hash + + JL7fcCid/YLpsETTq/g8BGOVbkc= + + hash2 + + 8W6KJKGzOH8ZOURyRlgzUH+xfIrmYr12FoKDGxD47GM= + + + Resources/lib/python2.7/lib-dynload/_AE.so + + hash + + z1Wht5NGaY48A8EXjeThaa+1McU= + + hash2 + + hrUW87pLeo3Ikuj4JhQOWexL1l0+Nd7n9auKL1mAlHc= + + + Resources/lib/python2.7/lib-dynload/_Ctl.so + + hash + + C1FJ+AHZbyC146IYI3RFYN4ybJE= + + hash2 + + G931esgA5zKyYdoxfstizMxUocOftIJVTfRJJ73MvdE= + + + Resources/lib/python2.7/lib-dynload/_Dlg.so + + hash + + I9B7kLUwDU5zAN4t3X4JjYgsWe0= + + hash2 + + /7S7vbccgIJZanKbHXKhSNoOi8M5Y9wQuox+1qBv06M= + + + Resources/lib/python2.7/lib-dynload/_Evt.so + + hash + + oNJGGemWc00HBJNRMjIiCpKXZ60= + + hash2 + + A1H0GmqXdHQHoEBQkqsO+87zH1Hne2wfXBlHLmMwl9U= + + + Resources/lib/python2.7/lib-dynload/_File.so + + hash + + nxj+yj1ySy3uSwPb7pHUbBkFhYA= + + hash2 + + Ydln7wfzJnTIwcy54Uohcs3q7T3dTzf0eqCAppMT1SQ= + + + Resources/lib/python2.7/lib-dynload/_Menu.so + + hash + + D6xl1uym36FKyjODTDDZYzrR4zU= + + hash2 + + Y0dk0boGg365+CDjU7fn3Hfu9YMSaidaYdXKB28O28E= + + + Resources/lib/python2.7/lib-dynload/_Qd.so + + hash + + fmNp5ePC9x8m6WfqaiIF5v5OLS0= + + hash2 + + kO3eMQhxkJ6IXblIG4+uAR7pZEmb76A2cQ6K+c6AZO0= + + + Resources/lib/python2.7/lib-dynload/_Res.so + + hash + + g86kF6dpgzUEnIrPppqKthi4jtI= + + hash2 + + 0yoXDjh6y9t15JqOftBhQlUn9l38tHlD1LAs9zyDVqo= + + + Resources/lib/python2.7/lib-dynload/_Win.so + + hash + + jNEgXyHIgf4iFn8+8q4kHUjNpqY= + + hash2 + + CHazubdkG8/eU/mq/A0BGF4uNp2IuClJCMPO/QMjJOo= + + + Resources/lib/python2.7/lib-dynload/_codecs_cn.so + + hash + + zNQPJ2/zJRv7m3Cn+T392pwpk4w= + + hash2 + + nMjw3QUfHNfDo8GqLifARVKHLarsId9R9FwrUQOLzHY= + + + Resources/lib/python2.7/lib-dynload/_codecs_hk.so + + hash + + 6BK2sGAYuQm4mF3H5KBENPZIUS0= + + hash2 + + SbRmoURH8mM8Ca6t3Zb37GUjW1dbM8Llzs9TfLJ/f7k= + + + Resources/lib/python2.7/lib-dynload/_codecs_iso2022.so + + hash + + kyxkHPAKOgJ0+kx+NClhGmwHKEY= + + hash2 + + pWVvVX4UgdxWp03dWLucz5EwKQxeANXHLqZCVgHWr6o= + + + Resources/lib/python2.7/lib-dynload/_codecs_jp.so + + hash + + zzZPo9yQAuG/aorio0WHTkPkbew= + + hash2 + + OrYK2vsyu0YGWcgntjhhHC7R4gduSVPBDiFNiK68sYg= + + + Resources/lib/python2.7/lib-dynload/_codecs_kr.so + + hash + + oIL2fEROn4Kn1QXti6AAy9endfY= + + hash2 + + MLde8yUEhr1KCksgzbDoUBVWbKFMM2paHLCoz8i8W4U= + + + Resources/lib/python2.7/lib-dynload/_codecs_tw.so + + hash + + vvQT66zgva4iAIez9Ymc51XwCRs= + + hash2 + + fATu40pzay8PFuydtbqMvpZoYuQf0fi75AZP/Zh40S8= + + + Resources/lib/python2.7/lib-dynload/_collections.so + + hash + + jrGLPZ+LUFdz7kHTE/Y8UPFPmpA= + + hash2 + + vNCoKJbtGgZeOFUiJDZs2miq3WmhEuISZ6jl/YtTZzs= + + + Resources/lib/python2.7/lib-dynload/_ctypes.so + + hash + + lo+ACjt62brRTCw6RwTE+Ez2l90= + + hash2 + + /YSmGmGXEt3IZ+c/cj/1bwbqAk2SSEg3B2BS0Xl0H1U= + + + Resources/lib/python2.7/lib-dynload/_functools.so + + hash + + CGBa9Hp3JScRzLScXVmK9PbzzIk= + + hash2 + + eYD4kSLXTk3+4KC3jNiCLBLw8V1S4bl6DlefaAcidzY= + + + Resources/lib/python2.7/lib-dynload/_hashlib.so + + hash + + i2AHbMYN5TvH6S/PwuLq3mc0nHs= + + hash2 + + Wf4eRRSaKMg3+QgZY4JP24WJJMFxZXoDz8OEtjBtdqI= + + + Resources/lib/python2.7/lib-dynload/_heapq.so + + hash + + l5TR/z5hZEjTLLlTzLJuUmQ2O8g= + + hash2 + + eIXpglPyWNC0mlzRvg+5DeGg1R3d8A7cfHiZmP8HlCE= + + + Resources/lib/python2.7/lib-dynload/_io.so + + hash + + ISPcTCYxEsfMctt6sifUens24uw= + + hash2 + + Bo740iVVaePwdOVtInaJxviX+4fTGdZoKEwY6jMrAZE= + + + Resources/lib/python2.7/lib-dynload/_json.so + + hash + + y6eY3+AE/fOBjmdUTv+6FZ00vqM= + + hash2 + + 6RgV9h4dv1NDz+9u1JHV6OMKW9dZSpFo5RozST4P7xY= + + + Resources/lib/python2.7/lib-dynload/_locale.so + + hash + + QOz+ekBZ5HZVyfnOdHyXTF5Gs48= + + hash2 + + GLpLamLICNi0F+d6Z32uzWtPywOFSieuSB3Mhi/DnYk= + + + Resources/lib/python2.7/lib-dynload/_multibytecodec.so + + hash + + Gc5W01jh6kMxQ7RDyOExSfIMQ+c= + + hash2 + + LLtqwVMPlAP7UpfMGQs6V2VKddQ8T0ytGIDUVhJsitw= + + + Resources/lib/python2.7/lib-dynload/_random.so + + hash + + 6xHF7kaBe7poG8iPzGZeE5QpVVg= + + hash2 + + Wx/MfFxRZ0/mwhtuYdfV/yZ4uyDWRi6u6bohkLk3shw= + + + Resources/lib/python2.7/lib-dynload/_scproxy.so + + hash + + MPcwam/Hbb/Xu/BRG+hZmZhyUWU= + + hash2 + + XCaUCGaEa+w525CVoK0NY8VqbtRuUOlhemFZnSyiY1g= + + + Resources/lib/python2.7/lib-dynload/_socket.so + + hash + + g6SpznJHPWMRCTNZq+GoY/Som0Q= + + hash2 + + kPxsIYEaHU6Q/cOIfZ6t+w6O/VfNFYGNE06nAG7fJwY= + + + Resources/lib/python2.7/lib-dynload/_ssl.so + + hash + + o4Io6IzDQDbuPi753CNJZh7z55Q= + + hash2 + + pvKRNgaLUa5dDGUqabU9OXdv2zVTcrmBQvo1N7eodbk= + + + Resources/lib/python2.7/lib-dynload/_struct.so + + hash + + 8a+SxCCJV1jYEHmJsJciTSTKAi8= + + hash2 + + eiRJlCkw5a/FKQeaRbDV5ncy4MaxjuDVuCfLZcyxPdc= + + + Resources/lib/python2.7/lib-dynload/array.so + + hash + + 2b4fl+ZJOCeaUDmJ4KMa5FOKzbI= + + hash2 + + gytr1IuFD8OICDrSUpnX6yWUyDWrXt75g1IWEamYp3k= + + + Resources/lib/python2.7/lib-dynload/atk.so + + hash + + Ul2sq73yPpAHKstpoCg4/aoQdH4= + + hash2 + + ofrbjqOpUXwI8+dgzgglSaH6xGLjwGbCJYlQjVVNVcs= + + + Resources/lib/python2.7/lib-dynload/binascii.so + + hash + + vRKILfxTPkXHhhgK0IAc0gnasE0= + + hash2 + + cyN9GXI8xaFMhb/RyvB5Vkcp/spilFqbnIfobfNc4Y0= + + + Resources/lib/python2.7/lib-dynload/bz2.so + + hash + + 88gCP8eCp4owCz5eAFHiVK5jOg4= + + hash2 + + SQ+thnHlbPDGcLthBds/mEN7g3RWuMkXXkcsJ/zrbQE= + + + Resources/lib/python2.7/lib-dynload/cPickle.so + + hash + + rSAvkeMu+KtC/BGmC53O4lLwfKo= + + hash2 + + oj9i204KzR+jN5pnKEi31nqtsWrO0tD7qrGvi1UQBhA= + + + Resources/lib/python2.7/lib-dynload/cStringIO.so + + hash + + UzE+t5ihDlEsoTCbe3NGgCaDa78= + + hash2 + + VyuVQuDaoGTjJBzyYv5f9B3dxeXEptwUmZFtVxNUf8w= + + + Resources/lib/python2.7/lib-dynload/cairo/_cairo.so + + hash + + tucOv4Ae3Fd43JdwsL79xfNjMns= + + hash2 + + hGaT4o9ExJjjxo3zT4uJMkNbBOnwmgDLlSsb73/X6eo= + + + Resources/lib/python2.7/lib-dynload/datetime.so + + hash + + uimuyp0kk7uER+yYAbR/wtFj3ow= + + hash2 + + qSCp5d6DEf/P3skdi6GDhb9y+JKB8xEg3kIk0BuGJIk= + + + Resources/lib/python2.7/lib-dynload/fcntl.so + + hash + + KXGS1D1yoWVINbp7Y4WdVFbvNNY= + + hash2 + + rgt7c/Zf0lADQpImgRWtzN1CZjsUn0KeFpXmerIhbH0= + + + Resources/lib/python2.7/lib-dynload/gestalt.so + + hash + + ADOrEBoPGVSUFUReXTHYFSGePFI= + + hash2 + + zo7WF5go7g5Kzw7U47+lSwSXt6kh3l59uYNQYGPMzvo= + + + Resources/lib/python2.7/lib-dynload/gio/_gio.so + + hash + + cBQee4573Mq01al9o9swNRaperQ= + + hash2 + + gWnqQpxHbGI1bKm3OP8+LqWK7u2urFGqixOIioBn7t4= + + + Resources/lib/python2.7/lib-dynload/gio/unix.so + + hash + + 3fJnxylmDRp8yeNQhIX7FoLHVSU= + + hash2 + + aHht7rfXGQFtFLXwJJBrBe7MLPJeyAbPmn7TghBNo+4= + + + Resources/lib/python2.7/lib-dynload/glib/_glib.so + + hash + + Ke4vnZz9t10yfeG9cuWpefeZFvQ= + + hash2 + + rSLqY8X8UO+v8OnFSdKMaIqaiRA7PNqxA8QTi2TBeuo= + + + Resources/lib/python2.7/lib-dynload/gobject/_gobject.so + + hash + + isSG1WePvfiyAeJq6l14O6GWV6w= + + hash2 + + Dj1nEDEZZ+f5Pp0chja9ELaChgFwy0REGh1QZCOHZQw= + + + Resources/lib/python2.7/lib-dynload/grp.so + + hash + + WfWF5rBf8pbRBL6MDEvIDlIRI5I= + + hash2 + + D+L+uFYGBzfb/n0Cc5kZ59Xwr49pPlky6ShnA4frZnw= + + + Resources/lib/python2.7/lib-dynload/gtk/_gtk.so + + hash + + FU1a5sN9jGGPd27woHEf7+HrH2Q= + + hash2 + + /OY+1y93FZonbCm6knUZVFMzPEB4aMnrSCfpBDlmF6A= + + + Resources/lib/python2.7/lib-dynload/itertools.so + + hash + + Ok7h1Avl4RF0cV9ugiTn3UPk1iw= + + hash2 + + XjYRK6naZE7kecF8pf7DJIrSEDgHmN3KOhaDSZ+cn8c= + + + Resources/lib/python2.7/lib-dynload/math.so + + hash + + cMAdsxdY/XzDJlM4baoYi0TGheo= + + hash2 + + KdyNLziQILLJzhjTGz5kMDCRBCKOR6wwsLO7ShdNq8k= + + + Resources/lib/python2.7/lib-dynload/operator.so + + hash + + v7nfyU3YRQNMgxu99IOTyZ0JjAU= + + hash2 + + lAt/IZ9GYA5g2RT4AQPfVFL8Ye362jISSs3Y0p375gA= + + + Resources/lib/python2.7/lib-dynload/pango.so + + hash + + FDPeJs34SdbiijH4hrtRtjoHZMg= + + hash2 + + ZMBYiI8YcoQu9DG6X+3MxJJLELQUKUAQ0YNoE9B+YOw= + + + Resources/lib/python2.7/lib-dynload/pangocairo.so + + hash + + qqo4zvFBsEPxs8Excxni+u1o1b8= + + hash2 + + y3iRco44WKItaSa8+BXNKL5L7Dxe1xrK0I0kJGPw3po= + + + Resources/lib/python2.7/lib-dynload/parser.so + + hash + + M45EWM1MlhAVetPoM+YKpT3CAJ0= + + hash2 + + uF3jcLlyMiOhDSfB1Icogp//YjVebdb/SaHbgqXENy8= + + + Resources/lib/python2.7/lib-dynload/pyexpat.so + + hash + + PLFJsrJJQwO1U3zYiIwd5VnOwCk= + + hash2 + + +RHeK7C8WW9LhUXbPiiT5ki+b02EyxkGBFU6PuxsZEw= + + + Resources/lib/python2.7/lib-dynload/resource.so + + hash + + 0Wcbdv3DQ0ZtlsFZN9iDC36eKCw= + + hash2 + + VIQdwKSkUD00PTbDNfaAeSB1O/wuPCIVbWG40fbYNRY= + + + Resources/lib/python2.7/lib-dynload/select.so + + hash + + M0hJTgqPM+mg72y8+8Xdv7x3SoY= + + hash2 + + pV/I7R3WDkzLIUX88svyT9gmkYt8sIQX3vvyxd+xE14= + + + Resources/lib/python2.7/lib-dynload/strop.so + + hash + + /EZoZGDhSU4EMZMvtrSveTVBm84= + + hash2 + + iwv5TdgXpciMXF0H5ryCeq0CPrtOurtahhgk/SpRcYA= + + + Resources/lib/python2.7/lib-dynload/termios.so + + hash + + 3lxFhSI4k1JbLMFDE78T6/5GtNY= + + hash2 + + 6sE7vT864e6qJMM/Y6Z5a8d0CEbXuW4izqLDGP7z+ag= + + + Resources/lib/python2.7/lib-dynload/time.so + + hash + + yMeLO1nTWizoB5deQaAPyMYH1I8= + + hash2 + + iUsIwRiiQA98iNFeOj74o+K5djvYAzyXdVjHc4Kufco= + + + Resources/lib/python2.7/lib-dynload/unicodedata.so + + hash + + YHvGiHtEL8BmNx6zQ5jHVSVSZmk= + + hash2 + + mllAwaos26MPv9zmaMC9Qe6ZBE8+bO+jSI+30ypwnmc= + + + Resources/lib/python2.7/lib-dynload/zlib.so + + hash + + F5eP6DJjF0fgvMvq3BhGPHJWKyY= + + hash2 + + bkP1MGLmZKwTQxOX0qLJkMIWHELPd9nJsLl33qKIAkw= + + + Resources/lib/python2.7/site-packages.zip + + hash + + jC64WzVCHX0iRDs/U6cqOsC/J8w= + + hash2 + + qu8AJiDIVVP9ohhMFvupsjnP+uGYgyHkfIZgWmVrgoI= + + + Resources/lib/python2.7/site.pyc + + symlink + ../../site.pyc + + Resources/site.pyc + + hash + + 4ZLT9jnFl7Y4mY/9ky6KxtRXpx4= + + hash2 + + CjCxkJxzdOZ4UyP1p8C4d2MHP0ipCTQqd+pOlom0w5Y= + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/bin/EP-Launch-Lite/codesign.sh b/bin/EP-Launch-Lite/codesign.sh new file mode 100755 index 00000000000..4ad18cb53ab --- /dev/null +++ b/bin/EP-Launch-Lite/codesign.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +APP_NAME=EP-Launch-Lite +IDENTIFIER="org.nrel.EnergyPlus.$APP_NAME" + +function ep_codesign() { + codesign -vvvv -s "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + --force --timestamp \ + --identifier "$IDENTIFIER" \ + --options runtime \ + --entitlements entitlements.xml "$1" +} + +function ep_notarize() { + xcrun notarytool submit --keychain-profile "EnergyPlus" --wait "$1" +} + + +echo "Dealing wiht Python.framework" + +find EP-Launch-Lite.app/Contents/Resources/ -name "*.so" | xargs codesign -vvvv -s "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + --force --timestamp \ + --identifier "$IDENTIFIER" \ + --options runtime \ + --entitlements entitlements.xml + + +codesign -vvvv -s "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + --force --timestamp \ + --identifier "$IDENTIFIER" \ + --options runtime \ + --entitlements entitlements.xml \ + EP-Launch-Lite.app/Contents/Frameworks/Python.framework/Versions/2.7/Python + +codesign -vvvv -s "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + --deep \ + --force --timestamp \ + --identifier "$IDENTIFIER" \ + --options runtime \ + --entitlements entitlements.xml \ + EP-Launch-Lite.app/Contents/Frameworks/Python.framework + +echo "DYlibs" + +find EP-Launch-Lite.app/Contents/ -name "*.dylib" | xargs codesign -vvvv -s "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + --force --timestamp \ + --identifier "$IDENTIFIER" \ + --options runtime \ + --entitlements entitlements.xml + + + +cd EP-Launch-Lite.app/Contents/Frameworks +zip -r ./Python.framework.zip ./Python.framework +ep_notarize ./Python.framework.zip +# xcrun stapler staple ./Python.framework +# xcrun stapler validate ./Python.framework +rm -Rf ./Python.framework.zip +cd ../../.. + +echo "Dealing with EP-Launch-Lite itself" +ep_codesign EP-Launch-Lite.app/Contents/MacOS/EP-Launch-Lite + +# Docs say deep should not be used, but whatever +codesign -vvvv -s "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + --deep \ + --force --timestamp \ + --identifier "$IDENTIFIER" \ + --options runtime \ + --entitlements entitlements.xml \ + $APP_NAME.app + +zip -r ./$APP_NAME.zip ./$APP_NAME.app +ep_notarize ./$APP_NAME.zip +xcrun stapler staple ./$APP_NAME.app + +xcrun stapler validate -v ./$APP_NAME.app +spctl -vvvv --assess ./$APP_NAME.app +rm -Rf ./$APP_NAME.zip diff --git a/bin/EP-Launch-Lite/entitlements.xml b/bin/EP-Launch-Lite/entitlements.xml new file mode 100644 index 00000000000..7b677ae2d97 --- /dev/null +++ b/bin/EP-Launch-Lite/entitlements.xml @@ -0,0 +1,8 @@ + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + + diff --git a/bin/EPMacro/Mac/EPMacro b/bin/EPMacro/Mac/EPMacro index 2f0e3d031da..44d6afb46f1 100755 Binary files a/bin/EPMacro/Mac/EPMacro and b/bin/EPMacro/Mac/EPMacro differ diff --git a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/CodeResources b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/CodeResources new file mode 100644 index 00000000000..79328061063 Binary files /dev/null and b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/CodeResources differ diff --git a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/AppearancePakCocoa.dylib b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/AppearancePakCocoa.dylib index 280904b6050..2eb527f5e94 100644 Binary files a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/AppearancePakCocoa.dylib and b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/AppearancePakCocoa.dylib differ diff --git a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/Crypto.dylib b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/Crypto.dylib index 08eb9f100b4..d4c7b62a575 100644 Binary files a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/Crypto.dylib and b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/Crypto.dylib differ diff --git a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/InternetEncodings.dylib b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/InternetEncodings.dylib index df3888cddc6..0ccb3042f58 100644 Binary files a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/InternetEncodings.dylib and b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/InternetEncodings.dylib differ diff --git a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/Shell.dylib b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/Shell.dylib index 06bfa400458..415b160aad1 100644 Binary files a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/Shell.dylib and b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/Shell.dylib differ diff --git a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/XojoFramework.framework/Versions/A/XojoFramework b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/XojoFramework.framework/Versions/A/XojoFramework index a98402d99d4..6c127766ef5 100644 Binary files a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/XojoFramework.framework/Versions/A/XojoFramework and b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/XojoFramework.framework/Versions/A/XojoFramework differ diff --git a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/libGzip.dylib b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/libGzip.dylib index d480bb59a16..908bd644b38 100644 Binary files a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/libGzip.dylib and b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/Frameworks/libGzip.dylib differ diff --git a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/MacOS/IDFVersionUpdater b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/MacOS/IDFVersionUpdater old mode 100644 new mode 100755 index f62a2a6051d..251749cd212 Binary files a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/MacOS/IDFVersionUpdater and b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/MacOS/IDFVersionUpdater differ diff --git a/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/_CodeSignature/CodeResources b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/_CodeSignature/CodeResources new file mode 100644 index 00000000000..1ba29a2e2b6 --- /dev/null +++ b/bin/IDFVersionUpdater/Run-Mac/IDFVersionUpdater.app/Contents/_CodeSignature/CodeResources @@ -0,0 +1,170 @@ + + + + + files + + files2 + + Frameworks/AppearancePakCocoa.dylib + + cdhash + + 6PdWR5jcBulWDZIQXDNpYkA0/7I= + + requirement + identifier "org.nrel.EnergyPlus.IDFVersionUpdater" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/Crypto.dylib + + cdhash + + wOB0i02vmGFaXDr+h6C2CdAztpw= + + requirement + identifier "org.nrel.EnergyPlus.IDFVersionUpdater" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/InternetEncodings.dylib + + cdhash + + VMP4EfpITHc8meVTCvS+M4jB1FA= + + requirement + identifier "org.nrel.EnergyPlus.IDFVersionUpdater" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/Shell.dylib + + cdhash + + vRTckKzZFnudYufuiUIgDwgkcSs= + + requirement + identifier "org.nrel.EnergyPlus.IDFVersionUpdater" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/XojoFramework.framework + + cdhash + + 3bNX1QuPpX9JYwkzAI/KGzgU6kw= + + requirement + identifier "org.nrel.EnergyPlus.IDFVersionUpdater" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + Frameworks/libGzip.dylib + + cdhash + + RqthY78xHobbVOa2G2iSW+fFdQo= + + requirement + identifier "org.nrel.EnergyPlus.IDFVersionUpdater" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = K7JYVQJL7R + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/bin/IDFVersionUpdater/Run-Mac/codesign.sh b/bin/IDFVersionUpdater/Run-Mac/codesign.sh old mode 100644 new mode 100755 index 29a329ce8cf..f8f2c3a94c2 --- a/bin/IDFVersionUpdater/Run-Mac/codesign.sh +++ b/bin/IDFVersionUpdater/Run-Mac/codesign.sh @@ -1,16 +1,48 @@ #!/bin/bash -OS_VERS=`sw_vers -productVersion` -if [ $? -ne 0 ]; then - echo "this script must be run on macOS!" - exit 1 -fi -APP_PATH="IDFVersionUpdater.app" -if [ -e "${APP_PATH}.tar" ]; then - tar -xf "${APP_PATH}.tar" - rm "${APP_PATH}.tar" -fi -if [ -e "${APP_PATH}" ]; then - /usr/bin/xattr -cr "${APP_PATH}" - /usr/bin/codesign --force --deep -s - "${APP_PATH}" -fi +APP_NAME=IDFVersionUpdater +IDENTIFIER="org.nrel.EnergyPlus.$APP_NAME" + +function ep_codesign() { + codesign -vvvv -s "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + --force --timestamp \ + --identifier "$IDENTIFIER" \ + --options runtime "$1" +} + +function ep_notarize() { + xcrun notarytool submit --keychain-profile "EnergyPlus" --wait "$1" +} + +ep_codesign ./IDFVersionUpdater.app/Contents/Frameworks/XojoFramework.framework + +#cd IDFVersionUpdater.app/Contents/Frameworks/ +#zip -r ./XojoFramework.framework.zip ./XojoFramework.framework +#ep_notarize ./XojoFramework.framework.zip +#xcrun stapler staple ./XojoFramework.framework +#xcrun stapler validate ./XojoFramework.framework +#rm -Rf ./XojoFramework.framework.zip +#cd ../../.. + +ep_codesign ./IDFVersionUpdater.app/Contents/Frameworks/Shell.dylib +ep_codesign ./IDFVersionUpdater.app/Contents/Frameworks/AppearancePakCocoa.dylib +ep_codesign ./IDFVersionUpdater.app/Contents/Frameworks/Crypto.dylib +ep_codesign ./IDFVersionUpdater.app/Contents/Frameworks/InternetEncodings.dylib +ep_codesign ./IDFVersionUpdater.app/Contents/Frameworks/Shell.dylib +ep_codesign ./IDFVersionUpdater.app/Contents/Frameworks/libGzip.dylib + +ep_codesign IDFVersionUpdater.app/Contents/MacOS/IDFVersionUpdater + +codesign -vvvv -s "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" \ + --force --timestamp \ + --identifier "$IDENTIFIER" \ + --options runtime \ + $APP_NAME.app + +zip -r ./$APP_NAME.zip ./$APP_NAME.app +ep_notarize ./$APP_NAME.zip +xcrun stapler staple ./$APP_NAME.app + +xcrun stapler validate ./$APP_NAME.app +spctl -vvvv --assess ./$APP_NAME.app +rm -Rf ./$APP_NAME.zip diff --git a/cmake/CPackSignAndNotarizeDmg.cmake b/cmake/CPackSignAndNotarizeDmg.cmake new file mode 100644 index 00000000000..f8836f1387a --- /dev/null +++ b/cmake/CPackSignAndNotarizeDmg.cmake @@ -0,0 +1,48 @@ +#[=======================================================================[.rst: +CPackSignAndNotarizeDmg +----------------------- + +This file is meant to be used up as a ``CPACK_POST_BUILD_SCRIPTS`` + +It will run only on ``APPLE`` when the generator is ``IFW`` to codesign the resulting .dmg and notarize it. + +To do so, it uses the `CodeSigning`_ functions :cmake:command:`codesign_files_macos` + +It requires that this be set: :cmake:variable:`CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION` + +And it will only notarize if this is set: :cmake:variable:`CPACK_CODESIGNING_NOTARY_PROFILE_NAME` + +#]=======================================================================] +message(STATUS "The message from ${CMAKE_CURRENT_LIST_FILE} and generator ${CPACK_GENERATOR}") +message(STATUS "Built packages: ${CPACK_PACKAGE_FILES}") + +if(APPLE AND CPACK_GENERATOR STREQUAL "IFW") + + message("CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION=${CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION}") + message("CPACK_CODESIGNING_NOTARY_PROFILE_NAME=${CPACK_CODESIGNING_NOTARY_PROFILE_NAME}") + message("CPACK_IFW_PACKAGE_SIGNING_IDENTITY=${CPACK_IFW_PACKAGE_SIGNING_IDENTITY}") + + include(${CMAKE_CURRENT_LIST_DIR}/CodeSigning.cmake) + + if(NOT CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + message(FATAL_ERROR "CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION is required, this should not have happened") + endif() + codesign_files_macos( + FILES ${CPACK_PACKAGE_FILES} + SIGNING_IDENTITY ${CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION} + IDENTIFIER "org.nrel.EnergyPlus.DmgInstaller" + FORCE + VERBOSE + ) + + if(CPACK_CODESIGNING_NOTARY_PROFILE_NAME) + notarize_files_macos( + FILES ${CPACK_PACKAGE_FILES} + NOTARY_PROFILE_NAME ${CPACK_CODESIGNING_NOTARY_PROFILE_NAME} + STAPLE + VERIFY + VERBOSE + ) + endif() + +endif() diff --git a/cmake/CodeSigning.cmake b/cmake/CodeSigning.cmake new file mode 100644 index 00000000000..b1858db23c8 --- /dev/null +++ b/cmake/CodeSigning.cmake @@ -0,0 +1,387 @@ +#[=======================================================================[.rst: +CodeSigning +------------ + +This module defines functions to codesign, notarize and staple macOS files. + +.. cmake:command:: codesign_files_macos + + run ``codesign`` on the files:: + + codesign_files_macos( + SIGNING_IDENTITY + [FORCE] [VERBOSE] + [IDENTIFIER ] + [PREFIX ] + [OPTIONS ...] + FILES ... + ) + + + ``codesign_files_macos()`` will codesign the files + + The options are: + + ``SIGNING_IDENTITY identity`` + Required, this is something like ``Developer ID Application: ()`` + + ``FILES path...`` + The files to codesign + + ``VERBOSE`` + If specified, will append ``-vvvv`` and will print the commands used + + ``FORCE`` + If specified, will append ``--force`` + + ``OPTIONS options...`` + Specifies the options to pass to ``--options``. If not specified, uses ``--options runtime`` + + ``IDENTIFIER identifier`` + Passed as ``--identifier identifier``. + + ``PREFIX`` + What to pass to ``--prefix``. eg 'org.nrel.EnergyPlus.' with a **trailing dot**. Ignored if ``IDENTIFIER`` is passed + + +.. cmake:command:: notarize_files_macos + + Runs ``notarytool``, ``staple`` on the files:: + + notarize_files_macos( + NOTARY_PROFILE_NAME + [VERBOSE] + [STAPLE] + [VERIFY] + FILES ... + ) + + + The options are: + + ``NOTARY_PROFILE_NAME`` + Required, should be set to the name you used during ``xcrun notarytool store-credentials`` + + ``FILES path...`` + The files to notarize + + ``VERBOSE`` + If specified, will print the commands used + + ``STAPLE`` + If specified, will run ``stappler`` after the notarytool submission + + ``VERIFY`` + If specified, will run ``spctl --assess`` to validate proper notarization + +.. cmake:command:: setup_macos_codesigning_variables + + Defines CMake Configure options:: + + setup_macos_codesigning_variables() + + The resulting configure options are: + + * :cmake:variable:`CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION` + + Pre-populated options from ``security-find-identity -v -p codesign``. + This should be a valid "Developer ID Application" + + If set to non-empty, will also: + + * set ``CPACK_IFW_PACKAGE_SIGNING_IDENTITY`` to the same value, so binarycreator signs the .app installer created + * define another ``CPACK_CODESIGNING_NOTARY_PROFILE_NAME`` option + + * :cmake:variable:`CPACK_CODESIGNING_NOTARY_PROFILE_NAME` + + Authenticate using credentials stored in the Keychain by notarytool. + Use the profile name that you previously provided via the ``xcrun notarytool store-credentials`` command + + +.. cmake:command:: register_install_codesign_target + + Given a target and a relative install path, + this will register an ``install(CODE)`` command to codesign the executable or library:: + + register_install_codesign_target( + + ) + + + It is necessary to have issued an ``install(TARGET DESTINATION )`` command before calling this function, + and done any call to ``fixup_executable`` or ``install_name_tool`` that would invalidate the signature. + + This function will therefore run in the CPack staging area, after any rpath adjustments, and ensure the signature sticks. + + It will only do something on ``APPLE`` and if :cmake:variable:`CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION` is defined. + + It requires ``CMP0087`` to be set to ``NEW``. + + Internally, it requires this very file and calls ``codesign_files_macos`` on the target file. + + The required parameters are: + + ``TARGET_NAME`` + A valid target added via ``add_executable``/``add_library`` + Required, should be set to the name you used during ``xcrun notarytool store-credentials`` + + ``DESTINATION`` + The destination for the installed target (eg: ``"."`` or ``lib/``) +#]=======================================================================] + +function(print_cmd_if_verbose cmd VERBOSE) + if(VERBOSE) + list(JOIN cmd "\" \"" cmd_str) + message("\"${cmd_str}\"") + endif() +endfunction() + +#------------------------------------------------------------------------------ +function(codesign_files_macos) + set(prefix "") + set(valueLessKeywords FORCE VERBOSE) + set(singleValueKeywords SIGNING_IDENTITY IDENTIFIER PREFIX) + set(multiValueKeywords FILES OPTIONS) + cmake_parse_arguments( + PARSE_ARGV 0 # Start at one with NAME is the first param + "${prefix}" + "${valueLessKeywords}" + "${singleValueKeywords}" + "${multiValueKeywords}" + ) + + if (_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Extra unknown arguments were passed: ${_UNPARSED_ARGUMENTS}") + endif() + if (_KEYWORDS_MISSING_VALUES) + message(FATAL_ERROR "Keywords missing values: ${_KEYWORDS_MISSING_VALUES}") + endif() + + if(NOT _OPTIONS) + set(options_str runtime) + else() + list(JOIN _OPTIONS "," options_str) + endif() + + if(NOT _FILES) + message(FATAL_ERROR "Cannot sign without FILES passed") + endif() + + find_program(CODESIGN NAMES codesign) + if(NOT CODESIGN) + message(FATAL_ERROR "Cannot sign, could not find 'codesign' executable") + endif() + + set(cmd "${CODESIGN}") + if(_VERBOSE) + list(APPEND cmd -vvvv) + endif() + + if(NOT _SIGNING_IDENTITY) + message(FATAL_ERROR "Cannot sign without a SIGNING_IDENTITY passed in") + endif() + list(APPEND cmd --sign "${_SIGNING_IDENTITY}") + + if(_FORCE) + list(APPEND cmd --force) + endif() + + list(APPEND cmd --timestamp) + list(APPEND cmd --options "${options_str}") + + if(_IDENTIFIER) + list(APPEND cmd "--identifier" "${_IDENTIFIER}") + elseif(_PREFIX) + list(APPEND cmd "--prefix" "${_PREFIX}") + endif() + + foreach(path ${_FILES}) + print_cmd_if_verbose("${cmd};${path}" _VERBOSE) + + if (NOT EXISTS "${path}") + message(FATAL_ERROR "Can't sign ${path}, no file exists at that path.") + endif () + + execute_process(COMMAND ${cmd} "${path}" RESULT_VARIABLE res) + if (NOT res EQUAL 0) + message(FATAL_ERROR "Can't sign ${path}, command '${cmd}' failed") + endif () + endforeach() + +endfunction() +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +function(notarize_files_macos) + set(prefix "") + set(valueLessKeywords VERBOSE STAPLE VERIFY) + set(singleValueKeywords NOTARY_PROFILE_NAME) + set(multiValueKeywords FILES) + cmake_parse_arguments( + PARSE_ARGV 0 # Start at one with NAME is the first param + "${prefix}" + "${valueLessKeywords}" + "${singleValueKeywords}" + "${multiValueKeywords}" + ) + + if (_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Extra unknown arguments were passed: ${_UNPARSED_ARGUMENTS}") + endif() + if (_KEYWORDS_MISSING_VALUES) + message(FATAL_ERROR "Keywords missing values: ${_KEYWORDS_MISSING_VALUES}") + endif() + + if(NOT _NOTARY_PROFILE_NAME) + message(FATAL_ERROR "Cannot notarize without NOTARY_PROFILE_NAME passed, should be set to the name you used during `xcrun notarytool store-credentials`") + endif() + + if(NOT _FILES) + message(FATAL_ERROR "Cannot notarize without FILES passed") + endif() + + find_program(XCRUN NAMES xcrun) + if (NOT XCRUN) + message(FATAL_ERROR "Cannot notarize, could not find 'xcrun' executable") + endif () + + set(cmd "${XCRUN}" notarytool submit --keychain-profile ${_NOTARY_PROFILE_NAME} --wait) + list(JOIN cmd " " cmd_str) + + foreach(path ${_FILES}) + message(STATUS "notarytool: submitting ${path}") + print_cmd_if_verbose("${cmd};${path}" _VERBOSE) + + if (NOT EXISTS "${path}") + message(FATAL_ERROR "Can't notarize ${path}, no file exists at that path.") + endif () + + execute_process( + COMMAND ${cmd} "${path}" + RESULT_VARIABLE res + OUTPUT_VARIABLE out + ECHO_OUTPUT_VARIABLE + ) + string(REGEX MATCH "([0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+)" SUBMISSION_ID ${out}) + set(cmd_get_log "${XCRUN}" notarytool log --keychain-profile ${_NOTARY_PROFILE_NAME} ${SUBMISSION_ID}) + + if (_VERBOSE OR NOT res EQUAL 0) + message(STATUS "notarytool: retrieving the log") + print_cmd_if_verbose("${cmd_get_log}" _VERBOSE) + execute_process( + COMMAND ${cmd_get_log} + ) + endif() + + if (NOT res EQUAL 0) + message(FATAL_ERROR "Can't notarize ${path}, command '${cmd}' failed, perhaps try `${cmd_get_log_str}`") + endif() + + + if(_STAPLE) + set(cmd xcrun stapler staple "${path}") + message(STATUS "stapler: stappling ${path}") + print_cmd_if_verbose("${cmd}" _VERBOSE) + execute_process( + COMMAND ${cmd} + RESULT_VARIABLE res + ) + if (NOT res EQUAL 0) + message(FATAL_ERROR "Can't stapple ${path}, command '${cmd}' failed (${res})") + endif () + endif() + + if(_VERIFY) + message(STATUS "Verifying that .dmg is properly notarized") + get_filename_component(ext ${path} LAST_EXT) + if (ext STREQUAL ".dmg") + set(cmd spctl --assess --type open --context context:primary-signature -vvvv "${path}") + else() + set(cmd spctl --assess -vvvv "${path}") + endif() + print_cmd_if_verbose("${cmd}" _VERBOSE) + execute_process( + COMMAND ${cmd} + RESULT_VARIABLE res + ) + if (NOT res EQUAL 0) + message(FATAL_ERROR "Notarization failed for ${path}, command '${cmd}' failed (${res})") + endif() + endif() + + endforeach() +endfunction() +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +function(setup_macos_codesigning_variables) + # prefix with CPACK_ so it's properly passed to the POST_BUILD_SCRIPTS + set(CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION "${CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION}" CACHE STRING "code signing identity (e.g., \"Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)\") (required for code signing)") + + # Get list of valid codesigning identities from system. + execute_process(COMMAND security find-identity -v -p codesigning + RESULT_VARIABLE res + OUTPUT_VARIABLE lines + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if (CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + list(APPEND idents "${CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION}") + endif () + if (res EQUAL 0 AND lines) + # Split string into list of lines. + string(REGEX REPLACE ";" "\\\\;" lines "${lines}") + string(REGEX REPLACE "\n" ";" lines "${lines}") + # Parse signing cert identity from each line + foreach(line ${lines}) + # eg: 4) C5CE92B14361BF09E55990573DF07FC33B083D22 "Developer ID Application: National Renewable Energy Laboratory (K7JYVQJL7R)" + if (line MATCHES "[0-9]+\\)[ \t]+[0-9a-fA-F]+[ \t]+\"(.+ \\([^ \t]+\\))\"") + list(APPEND idents "${CMAKE_MATCH_1}") + endif () + endforeach() + endif() + # Populate drop-down box in cmake-gui with the list of valid codesigning identities. + set_property(CACHE CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION PROPERTY STRINGS "${idents}") + + if(CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + set(CPACK_IFW_PACKAGE_SIGNING_IDENTITY ${CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION} CACHE STRING "set from CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION" FORCE) + mark_as_advanced(CPACK_IFW_PACKAGE_SIGNING_IDENTITY) + + set(CPACK_CODESIGNING_NOTARY_PROFILE_NAME "" CACHE STRING "Authenticate using credentials stored in the Keychain by notarytool. Use the profile name that you previously provided via the store-credentials command") + + if(NOT CPACK_CODESIGNING_NOTARY_PROFILE_NAME) + message(AUTHOR_WARNING "Cannot notarize without CPACK_CODESIGNING_NOTARY_PROFILE_NAME defined, should be set to the name you used during `xcrun notarytool store-credentials`") + endif() + endif() +endfunction() +#------------------------------------------------------------------------------ + +function(register_install_codesign_target TARGET_NAME DESTINATION) + + if(NOT TARGET ${TARGET_NAME}) + message("${TARGET_NAME} is not a valid target") + return() + endif() + + if(NOT APPLE) + message("Not Apple") + return() + endif() + + if(NOT CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + message("Missing CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION") + return() + endif() + + install( + CODE " + include(\"${CMAKE_CURRENT_FUNCTION_LIST_FILE}\") + codesign_files_macos( + FILES \"\${CMAKE_INSTALL_PREFIX}/${DESTINATION}/$\" + SIGNING_IDENTITY \"${CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION}\" + IDENTIFIER \"org.nrel.EnergyPlus.${TARGET_NAME}\" + FORCE VERBOSE + ) + ") + +endfunction() diff --git a/cmake/Install.cmake b/cmake/Install.cmake index 2fd731286a5..e63f1659f52 100644 --- a/cmake/Install.cmake +++ b/cmake/Install.cmake @@ -596,10 +596,6 @@ elseif(UNIX) install(FILES "${PROJECT_SOURCE_DIR}/doc/man/energyplus.1" DESTINATION "./" COMPONENT Symlinks) endif() -# TODO: Unused now -configure_file("${PROJECT_SOURCE_DIR}/cmake/CMakeCPackOptions.cmake.in" "${PROJECT_BINARY_DIR}/CMakeCPackOptions.cmake" @ONLY) -set(CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/CMakeCPackOptions.cmake") - ########################################################## D O C U M E N T A T I O N ############################################################# if(BUILD_DOCS) @@ -692,6 +688,48 @@ if(WIN32 AND NOT UNIX) endif() endif() +if(APPLE) + + include(${CMAKE_CURRENT_LIST_DIR}/CodeSigning.cmake) + + # Defines CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION and CPACK_CODESIGNING_NOTARY_PROFILE_NAME + setup_macos_codesigning_variables() + + if(CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + set(FILES_TO_SIGN + # Targets are signed already via register_install_codesign_target + #$ + #$ + #$ + + # Bash scripts, not sure if needed or not + "runenergyplus" + "runepmacro" + "runreadvars" + # Copied-verbatim apps: Already signed because just copied from bin to package + # "EPMacro" + # "PreProcess/EP-Launch-Lite.app" + # "PreProcess/IDFVersionUpdater/IDFVersionUpdater.app" + # "PostProcess/EP-Compare/EP-Compare.app" + ) + + # Codesign inner binaries and libraries, in the CPack staging area for the EnergyPlus project, component Unspecified + # Define some required variables for the script in the scope of the install(SCRIPT) first + install(CODE "set(CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION \"${CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION}\")" COMPONENT Unspecified) + install(CODE "set(FILES_TO_SIGN \"${FILES_TO_SIGN}\")" COMPONENT Unspecified) + # call the script + install(SCRIPT "${CMAKE_CURRENT_LIST_DIR}/install_codesign_script.cmake" COMPONENT Unspecified) + + # Register the CPACK_POST_BUILD_SCRIPTS + set(CPACK_POST_BUILD_SCRIPTS "${CMAKE_CURRENT_LIST_DIR}/CPackSignAndNotarizeDmg.cmake") + + endif() +endif() + +# TODO: Unused now +configure_file("${PROJECT_SOURCE_DIR}/cmake/CMakeCPackOptions.cmake.in" "${PROJECT_BINARY_DIR}/CMakeCPackOptions.cmake" @ONLY) +set(CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/CMakeCPackOptions.cmake") + ###################################################################################################################################################### # P A C K A G I N G & C O M P O N E N T S # ###################################################################################################################################################### diff --git a/cmake/codesign_doc/.gitignore b/cmake/codesign_doc/.gitignore new file mode 100644 index 00000000000..89f9ac04aac --- /dev/null +++ b/cmake/codesign_doc/.gitignore @@ -0,0 +1 @@ +out/ diff --git a/cmake/codesign_doc/build_codesign_doc.sh b/cmake/codesign_doc/build_codesign_doc.sh new file mode 100755 index 00000000000..5d81a8ca14d --- /dev/null +++ b/cmake/codesign_doc/build_codesign_doc.sh @@ -0,0 +1,3 @@ +pip install -r requirements.txt +sphinx-build -M html $(pwd) out +sphinx-build -b pdf $(pwd) out diff --git a/cmake/codesign_doc/conf.py b/cmake/codesign_doc/conf.py new file mode 100644 index 00000000000..0c8c9e910d0 --- /dev/null +++ b/cmake/codesign_doc/conf.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python3 +# EnergyPlus, Copyright (c) 1996-2024, The Board of Trustees of the University +# of Illinois, The Regents of the University of California, through Lawrence +# Berkeley National Laboratory (subject to receipt of any required approvals +# from the U.S. Dept. of Energy), Oak Ridge National Laboratory, managed by UT- +# Battelle, Alliance for Sustainable Energy, LLC, and other contributors. All +# rights reserved. +# +# NOTICE: This Software was developed under funding from the U.S. Department of +# Energy and the U.S. Government consequently retains certain rights. As such, +# the U.S. Government has been granted for itself and others acting on its +# behalf a paid-up, nonexclusive, irrevocable, worldwide license in the +# Software to reproduce, distribute copies to the public, prepare derivative +# works, and perform publicly and display publicly, and to permit others to do +# so. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# (1) Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# (2) Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# (3) Neither the name of the University of California, Lawrence Berkeley +# National Laboratory, the University of Illinois, U.S. Dept. of Energy nor +# the names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in +# stand-alone form without changes from the version obtained under this +# License, or (ii) Licensee makes a reference solely to the software +# portion of its product, Licensee must refer to the software as +# "EnergyPlus version X" software, where "X" is the version number Licensee +# obtained under this License and may not use a different name for the +# software. Except as specifically required in this Section (4), Licensee +# shall not use in a company name, a product name, in advertising, +# publicity, or other promotional activities any name, trade name, +# trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or +# confusingly similar designation, without the U.S. Department of Energy's +# prior written consent. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +# from pathlib import Path +# sys.path.insert(0, str(Path(__file__).parent.parent)) +from sphinx.builders.html import StandaloneHTMLBuilder +import subprocess + + +source_suffix = '.rst' +# Doxygen +# subprocess.call('doxygen Doxyfile', shell=True) + +# -- Project information ----------------------------------------------------- + +project = 'EnergyPlus' +author = 'Julien Marrec' +copyright = 'Julien Marrec' +version = '1.0.0' # feature version +release = '1.0.0' # full version string + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.intersphinx', + 'sphinx.ext.autosectionlabel', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.mathjax', + 'sphinx.ext.ifconfig', + 'sphinx.ext.viewcode', + #'sphinx_sitemap', + 'sphinx.ext.inheritance_diagram', + 'sphinxcontrib.moderncmakedomain', + 'rst2pdf.pdfbuilder', +] +pdf_documents = [('index', u'cmake-modules-eplus', u'EnergyPlus CMake Custom Modules doc', u'Julien Marrec'),] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['@conf_path@/templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +highlight_language = 'c++' + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' +html_theme_options = { + 'canonical_url': '', + 'analytics_id': '', # Provided by Google in your dashboard + 'display_version': True, + 'prev_next_buttons_location': 'bottom', + 'style_external_links': True, + + 'logo_only': False, + + # Toc options + 'collapse_navigation': True, + 'sticky_navigation': True, + 'navigation_depth': -1, + 'includehidden': True, + 'titles_only': False +} +# html_logo = '' +# github_url = '' +html_baseurl = '' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +# html_static_path = ['@conf_path@/static'] +# html_style = 'css/cmake.css' +# +# html_js_files = [ +# 'js/version_switcher.js', +# ] + +############################ +# SETUP THE RTD LOWER-LEFT # +############################ +try: + html_context +except NameError: + html_context = dict() +html_context['display_lower_left'] = True + +if 'REPO_NAME' in os.environ: + REPO_NAME = os.environ['REPO_NAME'] +else: + REPO_NAME = '' + +# SET CURRENT_LANGUAGE +if 'current_language' in os.environ: + # get the current_language env var set by buildDocs.sh + current_language = os.environ['current_language'] +else: + # the user is probably doing `make html` + # set this build's current language to english + current_language = 'en' + +# tell the theme which language to we're currently building +html_context['current_language'] = current_language + +# SET CURRENT_VERSION +from git import Repo +repo = Repo( search_parent_directories=True ) + +if 'current_version' in os.environ: + # get the current_version env var set by buildDocs.sh + current_version = os.environ['current_version'] +elif 'CI_COMMIT_REF_NAME' in os.environ: + # get the current_version env var set by buildDocs.sh + current_version = os.environ['CI_COMMIT_REF_NAME'] +else: + # the user is probably doing `make html` + # set this build's current version by looking at the branch + current_version = repo.active_branch.name + +# tell the theme which version we're currently on ('current_version' affects +# the lower-left rtd menu and 'version' affects the logo-area version) +html_context['current_version'] = current_version +html_context['version'] = current_version diff --git a/cmake/codesign_doc/index.rst b/cmake/codesign_doc/index.rst new file mode 100644 index 00000000000..3bd3e5edd48 --- /dev/null +++ b/cmake/codesign_doc/index.rst @@ -0,0 +1,39 @@ +CMake Custom Codesigning Modules documentation +========================================================= + +.. only:: html + + .. contents:: Table of Contents + +Influencial Configuration Variables +************************************* + +Influencial configuration variables on macOS + +.. cmake:variable:: CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION + + This is something like ``Developer ID Application: ()``. + Refer to :cmake:command:`setup_macos_codesigning_variables` which pre-populates it with options from ``security-find-identity -v -p codesign`` + + This will automatically set `CPACK_IFW_PACKAGE_SIGNING_IDENTITY `_ to the same value, so that ``binarycreator`` signs the .app installer it builds as well + +.. cmake:variable:: CPACK_CODESIGNING_NOTARY_PROFILE_NAME + + Should be set to the name you used during ``xcrun notarytool store-credentials`` + +------- + +Codesigning Modules +******************* +.. cmake-module:: ../CodeSigning.cmake + +------- + +Codesigning Scripts +******************* + +.. cmake-module:: ../CPackSignAndNotarizeDmg.cmake + +------- + +.. cmake-module:: ../install_codesign_script.cmake diff --git a/cmake/codesign_doc/requirements.txt b/cmake/codesign_doc/requirements.txt new file mode 100644 index 00000000000..3f06d996ec0 --- /dev/null +++ b/cmake/codesign_doc/requirements.txt @@ -0,0 +1,5 @@ +GitPython==3.1.43 +rst2pdf==0.102 +sphinx-rtd-theme==2.0.0 +sphinx-sitemap==2.6.0 +sphinxcontrib-moderncmakedomain==3.29.0 diff --git a/cmake/install_codesign_script.cmake b/cmake/install_codesign_script.cmake new file mode 100644 index 00000000000..78a671a90f4 --- /dev/null +++ b/cmake/install_codesign_script.cmake @@ -0,0 +1,130 @@ +#[=======================================================================[.rst: +install_codesign_script +----------------------- + +This file is meant to be used up as a ``install(SCRIPT)`` + +Pre-conditions: + +- It requires that you're running on ``APPLE`` + +- **Important: In the scope of this** ``install(SCRIPT)``, you must define + + * :cmake:variable:`CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION` + * You need to also set a variable ``FILES_TO_SIGN`` + +**In the scope** meaning that you have to issue some ``install(CODE ..)`` commands prior to calling it, and they must be: + + * Part of the same ``project()`` + * Using the same CPack ``COMPONENT`` + +This script will codesign the ``FILES_TO_SIGN``, as well as the globbed copied Python .so and the root dylibs (such as ``libintl8.dylib``) + +* ``python_standard_lib/lib-dynload/*.so`` +* ``lib*.dylib`` + +To do so, it uses the `CodeSigning`_ functions :cmake:command:`codesign_files_macos` + +This script will therefore run in the CPack staging area, and should be added after installation of the Python sos and root dylib, +after any rpath adjustments, to ensure the signature sticks. + +Usage:: + + if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + set(FILES_TO_SIGN "fileA" "fileB") + install(CODE "set(CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION \"${CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION}\")" COMPONENT Unspecified) + install(CODE "set(FILES_TO_SIGN \"${FILES_TO_SIGN}\")" COMPONENT Unspecified) + # call the script + install(SCRIPT "${CMAKE_CURRENT_LIST_DIR}/install_codesign_script.cmake" COMPONENT Unspecified) + endif() +#]=======================================================================] + +#------------------------------------------------------------------------------ +# Just a helper +function(print_relative_paths) + set(prefix "") + set(valueLessKeywords NAME_ONLY NEWLINE) + set(singleValueKeywords PREFIX BASE_DIRECTORY) + set(multiValueKeywords ABSOLUTE_PATHS) + cmake_parse_arguments( + PARSE_ARGV 0 # Start at one with NAME is the first param + "${prefix}" + "${valueLessKeywords}" + "${singleValueKeywords}" + "${multiValueKeywords}" + ) + + if (_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Extra unknown arguments were passed: ${_UNPARSED_ARGUMENTS}") + endif() + if (_KEYWORDS_MISSING_VALUES) + message(FATAL_ERROR "Keywords missing values: ${_KEYWORDS_MISSING_VALUES}") + endif() + + if(NOT _BASE_DIRECTORY) + set(_BASE_DIRECTORY ${CMAKE_INSTALL_PREFIX}) + endif() + + foreach(path ${_ABSOLUTE_PATHS}) + if(_NAME_ONLY) + cmake_path(GET path FILENAME rel_path) + else() + cmake_path(RELATIVE_PATH path BASE_DIRECTORY ${_BASE_DIRECTORY} OUTPUT_VARIABLE rel_path) + endif() + list(APPEND rel_paths ${rel_path}) + endforeach() + + if(_NEWLINE) + message("${_PREFIX}") + foreach(path ${rel_paths}) + message(" - ${path}") + endforeach() + else() + message("${_PREFIX}${rel_paths}") + endif() +endfunction() +#------------------------------------------------------------------------------ + +message("Codesigning inner executables and library from ${CMAKE_CURRENT_LIST_FILE}") + +message("CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") +message("CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION=${CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION}") + +if(NOT CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + message(FATAL_ERROR "CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION is required") +endif() + +if(NOT FILES_TO_SIGN) + message(FATAL_ERROR "FILES_TO_SIGN is required") +endif() + +foreach(path ${FILES_TO_SIGN}) + list(APPEND FULL_PATHS "${CMAKE_INSTALL_PREFIX}/${path}") +endforeach() + +file(GLOB _all_root_dylibs "${CMAKE_INSTALL_PREFIX}/lib*.dylib") +foreach(path ${_all_root_dylibs}) + message("${path}") + if(NOT IS_SYMLINK ${path}) + list(FIND FULL_PATHS ${path} _found) + if(_found EQUAL -1) + list(APPEND ROOT_DYLIBS ${path}) + endif() + endif() +endforeach() + +file(GLOB PYTHON_SOS "${CMAKE_INSTALL_PREFIX}/python_standard_lib/lib-dynload/*.so") + +print_relative_paths(PREFIX "FULL_PATHS=" ABSOLUTE_PATHS ${FULL_PATHS}) +print_relative_paths(PREFIX "ROOT_DYLIBS=" ABSOLUTE_PATHS ${ROOT_DYLIBS}) +print_relative_paths(PREFIX "PYTHON_SOS, in ${CMAKE_INSTALL_PREFIX}/python_standard_lib/lib-dynload/=" ABSOLUTE_PATHS ${PYTHON_SOS} NAME_ONLY) + +include(${CMAKE_CURRENT_LIST_DIR}/CodeSigning.cmake) +codesign_files_macos( + FILES ${FULL_PATHS} ${ROOT_DYLIBS} ${PYTHON_SOS} + SIGNING_IDENTITY ${CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION} + PREFIX "org.nrel.EnergyPlus." + FORCE VERBOSE +) + +message("Finished Codesigning inner executables and library") diff --git a/idd/schema/generate_epJSON_schema.py b/idd/schema/generate_epJSON_schema.py index 53e7eb8cc20..f522ebc8952 100644 --- a/idd/schema/generate_epJSON_schema.py +++ b/idd/schema/generate_epJSON_schema.py @@ -98,7 +98,7 @@ def generate_epJSON_schema(source_dir_path: str): p = multiprocessing.Process(target=generate_epJSON_schema, args=(sys.argv[1], )) p.start() - timeout_seconds = 30 + timeout_seconds = 60 p.join(timeout=timeout_seconds) # If thread is still active diff --git a/scripts/dev/verify_signature.py b/scripts/dev/verify_signature.py new file mode 100644 index 00000000000..4edde9aa175 --- /dev/null +++ b/scripts/dev/verify_signature.py @@ -0,0 +1,361 @@ +# EnergyPlus, Copyright (c) 1996-2024, The Board of Trustees of the University +# of Illinois, The Regents of the University of California, through Lawrence +# Berkeley National Laboratory (subject to receipt of any required approvals +# from the U.S. Dept. of Energy), Oak Ridge National Laboratory, managed by UT- +# Battelle, Alliance for Sustainable Energy, LLC, and other contributors. All +# rights reserved. +# +# NOTICE: This Software was developed under funding from the U.S. Department of +# Energy and the U.S. Government consequently retains certain rights. As such, +# the U.S. Government has been granted for itself and others acting on its +# behalf a paid-up, nonexclusive, irrevocable, worldwide license in the +# Software to reproduce, distribute copies to the public, prepare derivative +# works, and perform publicly and display publicly, and to permit others to do +# so. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# (1) Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# (2) Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# (3) Neither the name of the University of California, Lawrence Berkeley +# National Laboratory, the University of Illinois, U.S. Dept. of Energy nor +# the names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in +# stand-alone form without changes from the version obtained under this +# License, or (ii) Licensee makes a reference solely to the software +# portion of its product, Licensee must refer to the software as +# "EnergyPlus version X" software, where "X" is the version number Licensee +# obtained under this License and may not use a different name for the +# software. Except as specifically required in this Section (4), Licensee +# shall not use in a company name, a product name, in advertising, +# publicity, or other promotional activities any name, trade name, +# trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or +# confusingly similar designation, without the U.S. Department of Energy's +# prior written consent. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import argparse +import json +import os +import platform +import re +import subprocess +import warnings +from enum import Enum +from pathlib import Path +from typing import List + + +class Generator(Enum): + IFW = 1 + TGZ = 2 + + +BUNDLED_APPS = [ + "PreProcess/EP-Launch-Lite.app", + "PreProcess/IDFVersionUpdater/IDFVersionUpdater.app", + "PostProcess/EP-Compare/EP-Compare.app", +] + + +def get_cmake_install_prefix_for_generator(build_dir: Path, generator: Generator) -> Path: + cpack_dir = build_dir / f"_CPack_Packages/Darwin/{generator.name}" + if not cpack_dir.exists(): + print(f"Could not find a _CPack_Packages directory for {generator.name}") + return None + cmake_install_root = next(x for x in cpack_dir.glob("*") if x.is_dir() and x.suffix != ".app") + + cmake_install_prefix = next(cmake_install_root.glob("**/energyplus-24.2.0")).parent + return cmake_install_prefix + + +def find_executable_files(root_dir: Path) -> List[Path]: + bundled_apps = [root_dir / x for x in BUNDLED_APPS] + + files = list( + [ + x + for x in root_dir.glob("**/*") + if x.is_file() + and not x.is_symlink() + and os.access(x, os.X_OK) + and not any([x.is_relative_to(bundled_p) for bundled_p in bundled_apps]) + ] + ) + + dylibs = list( + [ + x + for x in root_dir.glob("**/*.dylib") + if x.is_file() + and not x.is_symlink() + and not any([x.is_relative_to(bundled_p) for bundled_p in bundled_apps]) + ] + ) + print(f"In {root_dir} found {len(files)} executable files and {len(dylibs)} dylibs") + + files = list(set(files + dylibs)) + + files = sorted(sorted(files), key=lambda x: len(x.parts)) + + return files + + +def verify_signature(p, verbose=False, root_dir=None): + info = subprocess.run(["codesign", "-dvvv", "--strict", str(p)], stderr=subprocess.PIPE, encoding="utf-8").stderr + if "K7JYVQJL7" not in info: + raise ValueError(f"{p} is not codesigned properly") + if verbose: + if root_dir is not None: + p = p.relative_to(root_dir) + print(f"- {p}: signature OK") + + +def compare_executables(): + cmake_ifw_prefix = get_cmake_install_prefix_for_generator(generator=Generator.IFW) + ifw_files = find_executable_files(cmake_ifw_prefix) + ifw_files_rel = [x.relative_to(cmake_ifw_prefix) for x in ifw_files] + cmake_tgz_prefix = get_cmake_install_prefix_for_generator(generator=Generator.TGZ) + tgz_files = find_executable_files(cmake_tgz_prefix) + tgz_files_rel = [x.relative_to(cmake_tgz_prefix) for x in tgz_files] + extra_ifw_files = set(ifw_files_rel) - set(tgz_files_rel) + if extra_ifw_files: + print(f"Extra IFW files: {extra_ifw_files}") + + extra_tgz_files = set(tgz_files_rel) - set(ifw_files_rel) + if extra_tgz_files: + print(f"Extra TGZ files: {extra_tgz_files}") + + +_OTOOL_ARCHITECTURE_RE = re.compile(r"^(?P.*?)(?: \(architecture (?P\w+)\))?:$") + +LINKED_RE = re.compile( + r"(?P.*) \(compatibility version (?P\d+\.\d+\.\d+), " + r"current version (?P\d+\.\d+\.\d+)(?:, \w+)?\)" +) + +RPATH_RE = re.compile(r"path (?P.*) \(offset \d+\)") + +RESOLVED_PATHS = ["@loader_path", "@executable_path", "@rpath"] + + +def get_linked_libraries(p): + linked_libs = [] + lines = subprocess.check_output(["otool", "-L", str(p)], encoding="utf-8", universal_newlines=True).splitlines() + if "is not an object file" in lines[0]: + return None + lines = [x.strip() for x in lines[1:]] + + for line in lines: + if m := LINKED_RE.match(line): + linked_libs.append(m.groupdict()) + else: + raise ValueError(f"For {p}, cannot parse line: '{line}'") + return linked_libs + + +def get_rpath(p): + rpaths = [] + lines = subprocess.check_output(["otool", "-l", str(p)], encoding="utf-8", universal_newlines=True).splitlines() + lines = [x.strip() for x in lines] + for i, line in enumerate(lines): + if line.startswith("cmd LC_RPATH"): + assert lines[i + 1].startswith("cmdsize") + rpath_line = lines[i + 2] + m = RPATH_RE.match(rpath_line) + assert m + rpaths.append(m["rpath"]) + return rpaths + + +def otool(p, verify_resolve=False, verbose=False): + linked_libs = get_linked_libraries(p) + if linked_libs is None: + return None + + rpaths = get_rpath(p) + + if verbose: + print(f"- Otooling {p}") + + first_time = True + rpath_infos = [{"actual": "implicit", "resolved": str(p.parent)}] + for rpath in rpaths: + rpath_dict = {} + rpath_dict["actual"] = rpath + if not rpath.startswith("@"): + rpath_infos.append(rpath_dict) + continue + + if verbose: + if first_time: + print(" * Resolving Rpaths") + first_time = False + print(f" * Trying to resolve rpath '{rpath}'") + rpath_dict["resolved"] = None + resolved_path = rpath + for resolv in RESOLVED_PATHS: + resolved_path = resolved_path.replace(resolv, str(p.parent)) + resolved_path = Path(resolved_path).resolve() + if resolved_path.exists(): + if verbose: + print(f" - Found {resolved_path}") + rpath_dict["resolved"] = str(resolved_path) + elif verify_resolve: + warnings.warn(f"Could not resolve rpath '{rpath}' for '{p}'") + rpath_infos.append(rpath_dict) + + first_time = True + for linked_lib in linked_libs: + libname = linked_lib["libname"] + if not libname.startswith("@"): + continue + + if verbose: + if first_time: + print(" * Resolving Libraries") + first_time = False + print(f" * Trying to resolve library '{libname}'") + linked_lib["resolved"] = None + found = False + for rpath_info in rpath_infos: + rpath = rpath_info.get("resolved", rpath_info["actual"]) + resolved_path = libname + for resolv in RESOLVED_PATHS: + resolved_path = resolved_path.replace(resolv, str(rpath)) + + resolved_path = Path(resolved_path) + if resolved_path.exists(): + if verbose: + print(f" - Found '{resolved_path}'") + linked_lib["resolved"] = str(resolved_path) + found = True + break + if not found and verify_resolve: + raise ValueError(f"Could not resolve '{libname}' for '{p}'") + + info = { + "linked_libraries": linked_libs, + "rpaths": rpath_infos, + } + + if verbose: + print("-" * 80) + + return info + + +if __name__ == "__main__": + + if platform.system() != "Darwin": + raise OSError("Only supported on Darwin") + + parser = argparse.ArgumentParser(description="Verify codesigning on macOS") + parser.add_argument( + "build_dir", + type=Path, + help="Root of the Build directory where CMakeCache.txt can be found (or the install dir if --install is passed)", + ) + parser.add_argument( + "--install", action="store_true", default=False, help="This is an install dir, not the build_dir" + ) + parser.add_argument( + "--verbose", action="store_true", default=False, help="This is an install dir, not the build_dir" + ) + parser.add_argument("--otool", action="store_true", default=False, help="Output OTOOL info on all executables") + parser.add_argument( + "--otool-out-file", metavar="JSON_FILE", required=False, type=Path, help="Output OTOOL info to JSON file" + ) + + args = parser.parse_args() + + if args.otool_out_file and not args.otool: + raise ValueError("--otool-out-file requires --otool") + + build_dir = args.build_dir.resolve() + if not (build_dir.exists() and build_dir.is_dir()): + raise NotADirectoryError(f"{build_dir} is not a valid directory") + + top_level_otool_infos = {} + if args.install: + if not (build_dir / "energyplus").is_file(): + raise ValueError(f"{build_dir} does not contain energyplus exe") + print(f"Checking Install dir {build_dir}") + executable_files = find_executable_files(root_dir=build_dir) + excludes = ["runenergyplus", "runreadvars", "runepmacro", "maintenancetool"] + executable_files = [x for x in executable_files if not any([n in x.name for n in excludes])] + otool_infos = {} + for p in executable_files: + verify_signature(p, verbose=args.verbose, root_dir=build_dir) + if args.otool: + otool_info = otool(p=p, verify_resolve=True, verbose=args.verbose) + if otool_info is not None: + otool_infos[str(p)] = otool_info + print("Everything is signed correctly") + top_level_otool_infos["install_dir"] = otool_infos + else: + if not (build_dir / "CMakeCache.txt").is_file(): + raise ValueError(f"{build_dir} does not contain CMakeCache.txt, did you forget to build?") + + if not (build_dir / "_CPack_Packages").is_dir(): + raise ValueError( + f"{build_dir} does not contain a _CPack_Packages subfolder, did you forget to build the package?" + ) + + for generator in Generator: + print(f"Checking {generator.name} Generator") + cmake_install_prefix = get_cmake_install_prefix_for_generator(build_dir=build_dir, generator=generator) + if cmake_install_prefix is None: + continue + executable_files = find_executable_files(root_dir=cmake_install_prefix) + otool_infos = {} + for p in executable_files: + verify_signature(p, verbose=args.verbose, root_dir=cmake_install_prefix) + if args.otool: + otool_info = otool(p=p, verify_resolve=True, verbose=args.verbose) + if otool_info is not None: + otool_infos[str(p)] = otool_info + print("Everything is signed correctly") + top_level_otool_infos[generator.name] = otool_infos + print("=" * 80) + + if args.otool: + short_otool_infos = {} + for k, otool_infos in top_level_otool_infos.items(): + short_otool_infos[k] = {} + for libpath, otool_info in otool_infos.items(): + short_otool_infos[k][libpath] = [] + for linked_libs in otool_info["linked_libraries"]: + short_otool_infos[k][libpath].append(linked_libs.get("resolved", linked_libs["libname"])) + + print("Shortened & resolved otool info:") + print(json.dumps(short_otool_infos, indent=2)) + + if args.otool_out_file: + otool_out_file = args.otool_out_file.resolve() + otool_out_file.parent.mkdir(parents=True, exist_ok=True) + otool_out_file_short = otool_out_file.parent / f"{otool_out_file.stem}_short.json" + print(f"Saving full otool infos to {otool_out_file} and short version to {otool_out_file_short}") + otool_out_file.unlink(missing_ok=True) + otool_out_file.write_text(json.dumps(top_level_otool_infos, indent=2)) + otool_out_file_short.unlink(missing_ok=True) + otool_out_file_short.write_text(json.dumps(short_otool_infos, indent=2)) diff --git a/src/AppGPostProcess/CMakeLists.txt b/src/AppGPostProcess/CMakeLists.txt index 8082e09aaeb..e1c753ee178 100644 --- a/src/AppGPostProcess/CMakeLists.txt +++ b/src/AppGPostProcess/CMakeLists.txt @@ -4,6 +4,10 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0012 NEW) # if() recognizes boolean constants +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") @@ -28,3 +32,8 @@ if(NOT ${FORTRAN_STATIC_EXE}) include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/ProjectMacros.cmake") install_target_prereqs(AppGPostProcess PostProcess) endif() + +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(AppGPostProcess PostProcess) +endif() diff --git a/src/Basement/CMakeLists.txt b/src/Basement/CMakeLists.txt index 34c5edacf75..98285f5ae24 100644 --- a/src/Basement/CMakeLists.txt +++ b/src/Basement/CMakeLists.txt @@ -4,6 +4,10 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0012 NEW) # if() recognizes boolean constants +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") @@ -71,3 +75,8 @@ if(NOT ${FORTRAN_STATIC_EXE}) install_target_prereqs(Basement PreProcess/GrndTempCalc) endif() install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../idd/BasementGHT.idd" DESTINATION "PreProcess/GrndTempCalc/") + +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(Basement PreProcess/GrndTempCalc) +endif() diff --git a/src/CalcSoilSurfTemp/CMakeLists.txt b/src/CalcSoilSurfTemp/CMakeLists.txt index 083fba6532c..657865dadbe 100644 --- a/src/CalcSoilSurfTemp/CMakeLists.txt +++ b/src/CalcSoilSurfTemp/CMakeLists.txt @@ -4,6 +4,10 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0012 NEW) # if() recognizes boolean constants +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") @@ -28,3 +32,8 @@ if(NOT ${FORTRAN_STATIC_EXE}) include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/ProjectMacros.cmake") install_target_prereqs(CalcSoilSurfTemp PreProcess/CalcSoilSurfTemp) endif() + +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(CalcSoilSurfTemp PreProcess/CalcSoilSurfTemp) +endif() diff --git a/src/ConvertESOMTR/CMakeLists.txt b/src/ConvertESOMTR/CMakeLists.txt index bef67247a12..2ce1a9c6546 100644 --- a/src/ConvertESOMTR/CMakeLists.txt +++ b/src/ConvertESOMTR/CMakeLists.txt @@ -4,6 +4,10 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0012 NEW) # if() recognizes boolean constants +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") @@ -29,3 +33,8 @@ if(NOT ${FORTRAN_STATIC_EXE}) install_target_prereqs(convertESOMTR "PostProcess/convertESOMTRpgm/") endif() install(FILES "convert.txt" DESTINATION "PostProcess/convertESOMTRpgm/") + +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(convertESOMTR "PostProcess/convertESOMTRpgm") +endif() diff --git a/src/ConvertInputFormat/CMakeLists.txt b/src/ConvertInputFormat/CMakeLists.txt index 5db81f7e132..455b75e5e72 100644 --- a/src/ConvertInputFormat/CMakeLists.txt +++ b/src/ConvertInputFormat/CMakeLists.txt @@ -1,4 +1,9 @@ cmake_minimum_required(VERSION 3.5.1) + +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + project(ConvertInputFormat) if(APPLE OR UNIX) @@ -29,6 +34,11 @@ set_target_properties(ConvertInputFormat PROPERTIES FOLDER Auxiliary) install(TARGETS ConvertInputFormat DESTINATION ./) +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(ConvertInputFormat ".") +endif() + if(BUILD_TESTING) set(TEST_DIR "${PROJECT_BINARY_DIR}/tst") # build/src/ConverInputFormat/tst diff --git a/src/EnergyPlus/CMakeLists.txt b/src/EnergyPlus/CMakeLists.txt index ff4693c57f3..9f4f3565624 100644 --- a/src/EnergyPlus/CMakeLists.txt +++ b/src/EnergyPlus/CMakeLists.txt @@ -1150,3 +1150,9 @@ if(UNIX AND NOT APPLE) ) endif() endif() + +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(energyplus ".") + register_install_codesign_target(energyplusapi ".") +endif() diff --git a/src/ExpandObjects/CMakeLists.txt b/src/ExpandObjects/CMakeLists.txt index b3045d0fe2d..11e16e191d2 100644 --- a/src/ExpandObjects/CMakeLists.txt +++ b/src/ExpandObjects/CMakeLists.txt @@ -4,6 +4,10 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0012 NEW) # if() recognizes boolean constants +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") @@ -34,3 +38,8 @@ if(NOT ${FORTRAN_STATIC_EXE}) include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/ProjectMacros.cmake") install_target_prereqs(ExpandObjects "./") endif() + +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(ExpandObjects ".") +endif() diff --git a/src/HVAC-Diagram/CMakeLists.txt b/src/HVAC-Diagram/CMakeLists.txt index dc4e813b076..1ffd0655758 100644 --- a/src/HVAC-Diagram/CMakeLists.txt +++ b/src/HVAC-Diagram/CMakeLists.txt @@ -4,6 +4,10 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0012 NEW) # if() recognizes boolean constants +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") @@ -32,3 +36,8 @@ if(NOT ${FORTRAN_STATIC_EXE}) include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/ProjectMacros.cmake") install_target_prereqs(HVAC-Diagram PostProcess) endif() + +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(HVAC-Diagram PostProcess) +endif() diff --git a/src/ParametricPreprocessor/CMakeLists.txt b/src/ParametricPreprocessor/CMakeLists.txt index 52283ffbbba..321b655e2fd 100644 --- a/src/ParametricPreprocessor/CMakeLists.txt +++ b/src/ParametricPreprocessor/CMakeLists.txt @@ -4,6 +4,10 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0012 NEW) # if() recognizes boolean constants +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") @@ -28,3 +32,8 @@ if(NOT ${FORTRAN_STATIC_EXE}) include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/ProjectMacros.cmake") install_target_prereqs(ParametricPreprocessor PreProcess/ParametricPreprocessor) endif() + +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(ParametricPreprocessor PreProcess/ParametricPreprocessor) +endif() diff --git a/src/ReadVars/CMakeLists.txt b/src/ReadVars/CMakeLists.txt index 81be6b3973c..7441395ed05 100644 --- a/src/ReadVars/CMakeLists.txt +++ b/src/ReadVars/CMakeLists.txt @@ -4,6 +4,10 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0012 NEW) # if() recognizes boolean constants +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") @@ -28,3 +32,8 @@ if(NOT ${FORTRAN_STATIC_EXE}) include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/ProjectMacros.cmake") install_target_prereqs(ReadVarsESO PostProcess) endif() + +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(ReadVarsESO PostProcess) +endif() diff --git a/src/Slab/CMakeLists.txt b/src/Slab/CMakeLists.txt index e5ef6bb0f74..2e3189d6952 100644 --- a/src/Slab/CMakeLists.txt +++ b/src/Slab/CMakeLists.txt @@ -4,6 +4,10 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0012 NEW) # if() recognizes boolean constants +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") @@ -46,3 +50,8 @@ if(NOT ${FORTRAN_STATIC_EXE}) install_target_prereqs(Slab PreProcess/GrndTempCalc) endif() install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../idd/SlabGHT.idd" DESTINATION "PreProcess/GrndTempCalc/") + +if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target(Slab PreProcess/GrndTempCalc) +endif() diff --git a/src/Transition/CMakeLists.txt b/src/Transition/CMakeLists.txt index c93beec1a38..ea09f45ef64 100644 --- a/src/Transition/CMakeLists.txt +++ b/src/Transition/CMakeLists.txt @@ -4,6 +4,10 @@ cmake_minimum_required(VERSION 3.5.1) cmake_policy(SET CMP0012 NEW) # if() recognizes boolean constants +if(POLICY CMP0087) + cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions. +endif() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../../Products") @@ -74,6 +78,11 @@ foreach(i RANGE 1 ${end}) if(NOT ${FORTRAN_STATIC_EXE}) install_target_prereqs("${LAST_NAME}" PreProcess/IDFVersionUpdater) endif() + + if(APPLE AND CPACK_CODESIGNING_DEVELOPPER_ID_APPLICATION) + include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CodeSigning.cmake") + register_install_codesign_target("${LAST_NAME}" PreProcess/IDFVersionUpdater) + endif() endif() endforeach()