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()