syncmoss 0.4.1__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- syncmoss-0.4.2/.gitattributes +3 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.github/workflows/_MacOS.yml +103 -6
- {syncmoss-0.4.1 → syncmoss-0.4.2}/COPYING.txt +7 -1
- syncmoss-0.4.2/NOTICE.txt +120 -0
- {syncmoss-0.4.1/syncmoss.egg-info → syncmoss-0.4.2}/PKG-INFO +39 -3
- {syncmoss-0.4.1 → syncmoss-0.4.2}/README.md +38 -2
- {syncmoss-0.4.1 → syncmoss-0.4.2}/bundle/MacOS.spec +8 -1
- syncmoss-0.4.2/bundle/SYNCmoss.png +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/bundle/Windows.spec +6 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/bundle/bundle.py +5 -0
- syncmoss-0.4.2/bundle/dmg_background.pdf +0 -0
- syncmoss-0.4.2/bundle/licenses/GPL-3.0.txt +674 -0
- syncmoss-0.4.2/bundle/licenses/LGPL-3.0.txt +165 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/bundle/macos_bundle.py +6 -0
- syncmoss-0.4.2/bundle/third_party_licenses.py +82 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Calibration.py +3 -3
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/alpha-Fe (metallic iron, bcc).mdl +1 -1
- syncmoss-0.4.2/syncmoss/bliss_channel.py +82 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/constants.py +5 -0
- syncmoss-0.4.2/syncmoss/error_reporter.py +431 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/fitting_io.py +55 -8
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/instrumental_io.py +6 -7
- syncmoss-0.4.2/syncmoss/license_window.py +201 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/main.py +17 -3
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/model_io.py +244 -87
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/models.py +41 -5
- syncmoss-0.4.2/syncmoss/parameters/Be.txt +1 -0
- syncmoss-0.4.2/syncmoss/parameters/Calibration.dat +513 -0
- syncmoss-0.4.2/syncmoss/parameters/INSth.txt +1 -0
- syncmoss-0.4.2/syncmoss/parameters/KB.txt +1 -0
- syncmoss-0.4.2/syncmoss/parameters/calibr.png +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/parameters/help.md +98 -4
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/parameters/models_description.md +14 -12
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/parameters_table.py +160 -12
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/results_table.py +60 -30
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/sms_theory.py +1 -1
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/spectrum_io.py +11 -3
- syncmoss-0.4.2/syncmoss/spectrum_parameters.py +402 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/spectrum_plotter.py +22 -6
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/supp_menu.py +275 -8
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/syncmoss_main.py +561 -117
- {syncmoss-0.4.1 → syncmoss-0.4.2/syncmoss.egg-info}/PKG-INFO +39 -3
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss.egg-info/SOURCES.txt +23 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss.egg-info/scm_file_list.json +23 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/syncmoss_test.py +51 -3
- syncmoss-0.4.2/tests/test_bliss_channel.py +200 -0
- syncmoss-0.4.2/tests/test_chi2_spread.py +54 -0
- syncmoss-0.4.2/tests/test_contact_author.py +88 -0
- syncmoss-0.4.2/tests/test_error_reporter.py +254 -0
- syncmoss-0.4.2/tests/test_expression_fit_start.py +89 -0
- syncmoss-0.4.2/tests/test_impurity_presets.py +173 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_instrumental_metadata.py +4 -0
- syncmoss-0.4.2/tests/test_interrupt.py +310 -0
- syncmoss-0.4.2/tests/test_license_window.py +131 -0
- syncmoss-0.4.2/tests/test_results_table_image.py +76 -0
- syncmoss-0.4.2/tests/test_save_result_model.py +386 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_search_guards.py +3 -9
- syncmoss-0.4.2/tests/test_spectrum_parameters.py +390 -0
- syncmoss-0.4.2/tests/test_table_marks.py +201 -0
- syncmoss-0.4.2/tests/test_take_result.py +148 -0
- syncmoss-0.4.1/NOTICE.txt +0 -50
- syncmoss-0.4.1/syncmoss/parameters/Be.txt +0 -1
- syncmoss-0.4.1/syncmoss/parameters/Calibration.dat +0 -513
- syncmoss-0.4.1/syncmoss/parameters/INSth.txt +0 -1
- syncmoss-0.4.1/syncmoss/parameters/KB.txt +0 -1
- syncmoss-0.4.1/syncmoss/parameters/calibr.png +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.github/workflows/Tests.yml +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.github/workflows/_PyPI.yml +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.github/workflows/_TagRelease.yml +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.github/workflows/_Tests.yml +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.github/workflows/_UploadRelease.yml +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.github/workflows/_Version.yml +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.github/workflows/_Wheels.yml +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.github/workflows/_WindowsExe.yml +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.github/workflows/release.yml +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.gitignore +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/.vscode/settings.json +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/LICENSE +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/Lib_test/test.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/docs/thick_models.md +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/docs/thick_vs_thin.md +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/pyproject.toml +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/requirements.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/setup.cfg +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Hamiltonian_helper.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Aegirine.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Akaganeite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Almandine.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Antitaenite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Arsenopyrite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Bornite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Bridgmanite (Fe,Al-bearing) @100 GPa.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Bridgmanite (Fe,Al-bearing).mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Celadonite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Cementite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Chalcopyrite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Clinopyroxene (augite).mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Copiapite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Cubanite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Epidote.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Fayalite (Fe-olivine).mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Ferrihydrite (2-line).mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Ferropericlase.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Goethite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Green rust (fougerite, carbonate).mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Haegg carbide.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Hedenbergite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Hematite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Heterosite (FePO4).mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Ilmenite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Iron phosphide.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Isocubanite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Jarosite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Kamacite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Lepidocrocite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Maghemite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Magnetite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Marcasite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Melanterite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Orthopyroxene (enstatite-ferrosilite).mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Prussian blue (ferric ferrocyanide).mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Pyrite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Pyrrhotite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Rhomboclase.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Roemerite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Siderite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Szomolnokite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Taenite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Talnakhite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Tetrataenite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Triphylite (LiFePO4).mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Troilite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Vivianite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library/Voltaite.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library_io.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/Library_window.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/icons/CheckBox.png +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/icons/CheckBox_.png +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/icons/CheckBox_L.png +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/icons/CheckBox_L2.png +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/icons/DU.png +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/icons/Switch.png +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/icons/UD.png +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/icons/icon_r.ico +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/instrumental_window.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/legacy.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/minimi_lib.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/models_description_window.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/models_positions.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/parameters/ABSorber3.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/parameters/GCMS.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/parameters/INS_APS.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/parameters/INSexp.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/parameters/INSint.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/parameters/NFS.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/support_math.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/test_graf.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/test_param.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/theme_dark.json +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss/theme_light.json +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss.egg-info/dependency_links.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss.egg-info/entry_points.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss.egg-info/requires.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/syncmoss.egg-info/top_level.txt +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/conftest.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/data/Distr_corr.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/data/Distr_distr.mdl +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/data/alpha_fe_sms_000.mca +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/data/calibration_000_golden.json +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/data/generate_cal_fixtures.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/data/synthetic_alpha_fe_cms_linear.mca +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/golden_models.json +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_calibration.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_calibration_helpers.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_calibration_path.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_distr_composition.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_distr_expansion.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_distr_mdl.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_distr_targets.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_expression_validation.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_golden_models.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_gui_smoke.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_hamiltonian_texture.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_instrumental_method_choice.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_instrumental_recentre.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_instrumental_window.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_integral_points.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_legacy.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_library_dir.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_library_io.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_model_append.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_model_io.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_model_only_mode.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_nbaseline_results.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_parameter_links.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_polarization.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_recon_composition.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_recon_mdl.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_recon_results.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_reference_shift.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_sdw_grid.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_sms_theory.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_support_math.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_texture_s1.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_theory_search.py +0 -0
- {syncmoss-0.4.1 → syncmoss-0.4.2}/tests/test_thick_gui.py +0 -0
|
@@ -3,7 +3,8 @@ name: _macOS (PyInstaller universal2 app)
|
|
|
3
3
|
# Modelled on crispy's release workflow (github.com/mretegan/crispy):
|
|
4
4
|
# 1. build the app natively on an Apple Silicon AND an Intel runner,
|
|
5
5
|
# 2. fuse the two bundles into one universal2 SYNCmoss.app,
|
|
6
|
-
# 3. sign it (Developer ID + hardened runtime), pack the DMG
|
|
6
|
+
# 3. sign it (Developer ID + hardened runtime), pack the drag-and-drop DMG
|
|
7
|
+
# (window laid out as crispy's create-dmg.sh does), notarize, staple.
|
|
7
8
|
#
|
|
8
9
|
# Signing and notarization run only when the Apple secrets are set (repository
|
|
9
10
|
# Settings -> Secrets and variables -> Actions; release.yml forwards them).
|
|
@@ -136,6 +137,8 @@ jobs:
|
|
|
136
137
|
runs-on: macos-15
|
|
137
138
|
timeout-minutes: 90
|
|
138
139
|
steps:
|
|
140
|
+
- uses: actions/checkout@v6
|
|
141
|
+
|
|
139
142
|
- uses: actions/setup-python@v6
|
|
140
143
|
with:
|
|
141
144
|
python-version: "3.13"
|
|
@@ -377,25 +380,119 @@ jobs:
|
|
|
377
380
|
ditto dist/universal2/SYNCmoss.app "${RUNNER_TEMP}/smoke/SYNCmoss.app"
|
|
378
381
|
"${RUNNER_TEMP}/smoke/SYNCmoss.app/Contents/MacOS/SYNCmoss" --test
|
|
379
382
|
|
|
383
|
+
# The drag-and-drop installer window, built as crispy's
|
|
384
|
+
# package/create-dmg.sh does: a writable image holding the app, a link to
|
|
385
|
+
# /Applications, the background picture (bundle/dmg_background.pdf) and
|
|
386
|
+
# the volume icon; Finder lays the window out (positions match the
|
|
387
|
+
# picture); then it is converted to the compressed read-only DMG.
|
|
380
388
|
- name: Create the DMG
|
|
381
389
|
run: |
|
|
382
390
|
set -euo pipefail
|
|
391
|
+
APP="dist/universal2/SYNCmoss.app"
|
|
383
392
|
STAGING="${RUNNER_TEMP}/dmg"
|
|
384
|
-
|
|
385
|
-
|
|
393
|
+
RW_DMG="${RUNNER_TEMP}/SYNCmoss-rw.dmg"
|
|
394
|
+
rm -rf "${STAGING}" "${RW_DMG}"
|
|
395
|
+
|
|
396
|
+
mkdir -p "${STAGING}/.background" "${STAGING}/.fseventsd"
|
|
397
|
+
ditto "${APP}" "${STAGING}/SYNCmoss.app"
|
|
386
398
|
ln -s /Applications "${STAGING}/Applications"
|
|
387
|
-
|
|
399
|
+
cp bundle/dmg_background.pdf "${STAGING}/.background/background.pdf"
|
|
400
|
+
# The volume shows the app's own icon.
|
|
401
|
+
ICON_FILE="$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIconFile' "${APP}/Contents/Info.plist")"
|
|
402
|
+
case "${ICON_FILE}" in *.icns) ;; *) ICON_FILE="${ICON_FILE}.icns" ;; esac
|
|
403
|
+
cp "${APP}/Contents/Resources/${ICON_FILE}" "${STAGING}/.VolumeIcon.icns"
|
|
404
|
+
touch "${STAGING}/.fseventsd/no_log"
|
|
405
|
+
|
|
406
|
+
# Room for the .DS_Store Finder writes. hdiutil is occasionally
|
|
407
|
+
# "Resource busy" on hosted runners: retry.
|
|
408
|
+
SIZE_MB=$(( $(du -sm "${STAGING}" | cut -f1) + 50 ))
|
|
388
409
|
for attempt in 1 2 3; do
|
|
389
|
-
if hdiutil create -volname SYNCmoss -
|
|
410
|
+
if hdiutil create -format UDRW -fs APFS -volname SYNCmoss -size "${SIZE_MB}m" \
|
|
411
|
+
-srcfolder "${STAGING}" -ov "${RW_DMG}"; then
|
|
390
412
|
break
|
|
391
413
|
fi
|
|
392
414
|
if [ "${attempt}" -eq 3 ]; then
|
|
393
415
|
exit 1
|
|
394
416
|
fi
|
|
395
|
-
echo "hdiutil failed, retrying in 10 s"
|
|
417
|
+
echo "hdiutil create failed, retrying in 10 s"
|
|
396
418
|
sleep 10
|
|
397
419
|
done
|
|
398
420
|
|
|
421
|
+
ATTACH="$(hdiutil attach -readwrite -noverify -noautoopen "${RW_DMG}" | grep '^/dev/')"
|
|
422
|
+
DEVICE="$(echo "${ATTACH}" | head -n 1 | awk '{print $1}')"
|
|
423
|
+
MOUNT_POINT="$(echo "${ATTACH}" | awk -F'\t' '$3 != "" {print $3}' | tail -n 1 | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
|
|
424
|
+
echo "Attached ${DEVICE} at ${MOUNT_POINT}"
|
|
425
|
+
if [ ! -d "${MOUNT_POINT}" ]; then
|
|
426
|
+
echo "::error::could not find where the image was mounted"
|
|
427
|
+
echo "${ATTACH}"
|
|
428
|
+
exit 1
|
|
429
|
+
fi
|
|
430
|
+
SetFile -a C "${MOUNT_POINT}"
|
|
431
|
+
SetFile -a V "${MOUNT_POINT}/.background"
|
|
432
|
+
|
|
433
|
+
LAYOUT="${RUNNER_TEMP}/dmg-layout.applescript"
|
|
434
|
+
cat > "${LAYOUT}" <<'EOF'
|
|
435
|
+
on run argv
|
|
436
|
+
tell application "Finder"
|
|
437
|
+
tell disk (item 1 of argv)
|
|
438
|
+
open
|
|
439
|
+
set current view of container window to icon view
|
|
440
|
+
set toolbar visible of container window to false
|
|
441
|
+
set statusbar visible of container window to false
|
|
442
|
+
set bounds of container window to {200, 120, 700, 420}
|
|
443
|
+
set viewOptions to the icon view options of container window
|
|
444
|
+
set arrangement of viewOptions to not arranged
|
|
445
|
+
set icon size of viewOptions to 96
|
|
446
|
+
set background picture of viewOptions to file ".background:background.pdf"
|
|
447
|
+
set position of item "SYNCmoss.app" to {114, 124}
|
|
448
|
+
set position of item "Applications" to {386, 124}
|
|
449
|
+
close
|
|
450
|
+
open
|
|
451
|
+
delay 1
|
|
452
|
+
update without registering applications
|
|
453
|
+
delay 2
|
|
454
|
+
close
|
|
455
|
+
end tell
|
|
456
|
+
end tell
|
|
457
|
+
end run
|
|
458
|
+
EOF
|
|
459
|
+
# Finder scripting can time out on a busy runner: retry.
|
|
460
|
+
for attempt in 1 2 3; do
|
|
461
|
+
if osascript "${LAYOUT}" "$(basename "${MOUNT_POINT}")"; then
|
|
462
|
+
break
|
|
463
|
+
fi
|
|
464
|
+
if [ "${attempt}" -eq 3 ]; then
|
|
465
|
+
echo "::error::Finder could not lay out the DMG window"
|
|
466
|
+
exit 1
|
|
467
|
+
fi
|
|
468
|
+
echo "Finder layout failed, retrying in 5 s"
|
|
469
|
+
sleep 5
|
|
470
|
+
done
|
|
471
|
+
# Finder saves the layout in .DS_Store when the window closes.
|
|
472
|
+
for _ in $(seq 1 30); do
|
|
473
|
+
[ -f "${MOUNT_POINT}/.DS_Store" ] && break
|
|
474
|
+
sleep 1
|
|
475
|
+
done
|
|
476
|
+
if [ ! -f "${MOUNT_POINT}/.DS_Store" ]; then
|
|
477
|
+
echo "::error::Finder did not save the DMG window layout (.DS_Store)"
|
|
478
|
+
exit 1
|
|
479
|
+
fi
|
|
480
|
+
|
|
481
|
+
sync
|
|
482
|
+
for attempt in 1 2 3 4 5; do
|
|
483
|
+
if hdiutil detach "${DEVICE}"; then
|
|
484
|
+
break
|
|
485
|
+
fi
|
|
486
|
+
if [ "${attempt}" -eq 5 ]; then
|
|
487
|
+
hdiutil detach "${DEVICE}" -force
|
|
488
|
+
break
|
|
489
|
+
fi
|
|
490
|
+
echo "volume still busy, retrying in 5 s"
|
|
491
|
+
sleep 5
|
|
492
|
+
done
|
|
493
|
+
hdiutil convert "${RW_DMG}" -format UDZO -imagekey zlib-level=9 -ov -o dist/SYNCmoss.dmg
|
|
494
|
+
rm -f "${RW_DMG}"
|
|
495
|
+
|
|
399
496
|
- name: Notarize and staple the DMG
|
|
400
497
|
id: notarize
|
|
401
498
|
if: steps.sign.outputs.developer_id == 'true'
|
|
@@ -10,5 +10,11 @@ Third-party components are used under their respective licenses:
|
|
|
10
10
|
- NumPy: BSD 3-Clause
|
|
11
11
|
- SciPy: BSD 3-Clause
|
|
12
12
|
- Matplotlib: BSD-compatible
|
|
13
|
+
- Numba: BSD 2-Clause
|
|
14
|
+
- llvmlite: BSD 2-Clause (contains LLVM: Apache 2.0 with LLVM Exceptions)
|
|
15
|
+
- Bliss (optional, not included; used only if installed separately):
|
|
16
|
+
LGPL v3.0
|
|
13
17
|
|
|
14
|
-
For complete third-party license details, see NOTICE.txt.
|
|
18
|
+
For complete third-party license details, see NOTICE.txt. The Windows and
|
|
19
|
+
macOS bundles also carry the full license text of every third-party package
|
|
20
|
+
they contain, in a "licenses" folder.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
SYNCmoss - Third-Party Software Notices and Information
|
|
2
|
+
=========================================================
|
|
3
|
+
|
|
4
|
+
This project is licensed under the MIT License. See LICENSE for details.
|
|
5
|
+
It uses the following third-party libraries, each distributed under
|
|
6
|
+
their own license terms.
|
|
7
|
+
|
|
8
|
+
The Windows and macOS bundles contain the full license text of every
|
|
9
|
+
third-party package they include -- the libraries below, their own
|
|
10
|
+
dependencies and the Python runtime -- in a "licenses" folder:
|
|
11
|
+
- Windows: _internal/licenses/
|
|
12
|
+
- macOS: SYNCmoss.app/Contents/Resources/licenses/
|
|
13
|
+
In the program, Supp -> License shows this notice and all of those texts.
|
|
14
|
+
|
|
15
|
+
PySide6 (Qt for Python)
|
|
16
|
+
-----------------------
|
|
17
|
+
Licensed under the GNU Lesser General Public License (LGPL) v3.0
|
|
18
|
+
Copyright (C) The Qt Company Ltd.
|
|
19
|
+
https://www.qt.io/licensing/
|
|
20
|
+
|
|
21
|
+
LGPL v3.0 COMPLIANCE NOTICE:
|
|
22
|
+
This software dynamically links to PySide6. Under the terms of the
|
|
23
|
+
LGPL v3.0, you may:
|
|
24
|
+
- Use this MIT-licensed software without your own code becoming LGPL.
|
|
25
|
+
- Replace the PySide6 library with any compatible version.
|
|
26
|
+
- Obtain PySide6 source code at:
|
|
27
|
+
https://code.qt.io/cgit/pyside/pyside-setup.git/
|
|
28
|
+
- Read the full LGPL v3.0 license, and the GNU GPL v3.0 it builds on,
|
|
29
|
+
in the bundles' licenses/LGPL-3.0.txt and licenses/GPL-3.0.txt, or at:
|
|
30
|
+
https://www.gnu.org/licenses/lgpl-3.0.html
|
|
31
|
+
(The PySide6 wheels themselves carry only a Qt commercial-license notice,
|
|
32
|
+
which is why the two texts are shipped separately.) Qt itself contains
|
|
33
|
+
third-party components (FreeType, HarfBuzz, libpng, zlib, ...) under their
|
|
34
|
+
own licenses; The Qt Company lists them at
|
|
35
|
+
https://doc.qt.io/qt-6/licenses-used-in-qt.html
|
|
36
|
+
|
|
37
|
+
NumPy
|
|
38
|
+
-----
|
|
39
|
+
Licensed under the BSD 3-Clause License
|
|
40
|
+
Copyright (c) 2005-2025, NumPy Developers
|
|
41
|
+
https://numpy.org/doc/stable/license.html
|
|
42
|
+
|
|
43
|
+
SciPy
|
|
44
|
+
-----
|
|
45
|
+
Licensed under the BSD 3-Clause License
|
|
46
|
+
Copyright (c) 2001-2002 Enthought, Inc. 2003, SciPy Developers
|
|
47
|
+
https://scipy.org/scipylib/license.html
|
|
48
|
+
|
|
49
|
+
Matplotlib
|
|
50
|
+
----------
|
|
51
|
+
Licensed under the Matplotlib License (BSD-compatible)
|
|
52
|
+
Copyright (c) 2012- Matplotlib Development Team
|
|
53
|
+
Copyright (c) 2002-2011 John D. Hunter
|
|
54
|
+
https://matplotlib.org/stable/users/project/license.html
|
|
55
|
+
|
|
56
|
+
Numba
|
|
57
|
+
-----
|
|
58
|
+
Licensed under the BSD 2-Clause License
|
|
59
|
+
Copyright (c) 2012, Anaconda, Inc.
|
|
60
|
+
https://github.com/numba/numba/blob/main/LICENSE
|
|
61
|
+
|
|
62
|
+
llvmlite
|
|
63
|
+
--------
|
|
64
|
+
Licensed under the BSD 2-Clause License
|
|
65
|
+
Copyright (c) 2014, Anaconda, Inc.
|
|
66
|
+
https://github.com/numba/llvmlite/blob/main/LICENSE
|
|
67
|
+
It contains LLVM, licensed under the Apache License v2.0 with LLVM
|
|
68
|
+
Exceptions (https://llvm.org/LICENSE.txt).
|
|
69
|
+
|
|
70
|
+
Python
|
|
71
|
+
------
|
|
72
|
+
Licensed under the Python Software Foundation License
|
|
73
|
+
Copyright (c) Python Software Foundation; All Rights Reserved
|
|
74
|
+
https://docs.python.org/3/license.html
|
|
75
|
+
The bundles contain the Python runtime; its LICENSE.txt is included as
|
|
76
|
+
licenses/Python/LICENSE.txt. The C libraries built into the runtime
|
|
77
|
+
(OpenSSL, expat, libffi, zlib, libmpdec, ...) and their licenses are
|
|
78
|
+
listed at the address above.
|
|
79
|
+
|
|
80
|
+
Microsoft Visual C++ Runtime (Windows bundle only)
|
|
81
|
+
--------------------------------------------------
|
|
82
|
+
Copyright (c) Microsoft Corporation
|
|
83
|
+
The Windows bundle contains Microsoft's C and C++ run-time libraries
|
|
84
|
+
(VCRUNTIME140*.dll, MSVCP140*.dll, VCOMP140.dll and, where present,
|
|
85
|
+
ucrtbase.dll with the api-ms-win-*.dll forwarders). They are "Microsoft
|
|
86
|
+
Distributable Code", which Microsoft allows to be redistributed unmodified
|
|
87
|
+
with the programs that use them, provided that whoever uses or passes on
|
|
88
|
+
the Windows bundle does not:
|
|
89
|
+
- alter any copyright, trademark or patent notice in Microsoft's
|
|
90
|
+
Distributable Code;
|
|
91
|
+
- use Microsoft's trademarks in their programs' names or in a way that
|
|
92
|
+
suggests the programs come from or are endorsed by Microsoft;
|
|
93
|
+
- distribute Microsoft's Distributable Code to run on a platform other
|
|
94
|
+
than Microsoft operating systems, run-time technologies or application
|
|
95
|
+
platforms; or
|
|
96
|
+
- include Microsoft Distributable Code in malicious, deceptive or
|
|
97
|
+
unlawful programs.
|
|
98
|
+
These conditions apply only to Microsoft's files, not to SYNCmoss or to
|
|
99
|
+
the other components. The full terms are in Microsoft's documentation
|
|
100
|
+
(included in its developer tools and on microsoft.com).
|
|
101
|
+
|
|
102
|
+
Bliss (optional -- NOT included)
|
|
103
|
+
--------------------------------
|
|
104
|
+
Licensed under the GNU Lesser General Public License (LGPL) v3.0
|
|
105
|
+
Copyright (c) Beamline Control Unit, ESRF
|
|
106
|
+
https://gitlab.esrf.fr/bliss/bliss
|
|
107
|
+
SYNCmoss neither contains nor distributes Bliss, and the Windows and macOS
|
|
108
|
+
bundles never include it. Only when Bliss has been installed separately
|
|
109
|
+
(Linux beamline installations) does SYNCmoss import it at run time, to read
|
|
110
|
+
spectra online from a Bliss channel.
|
|
111
|
+
|
|
112
|
+
PyInstaller (bundling only)
|
|
113
|
+
---------------------------
|
|
114
|
+
Licensed under the GPL 2.0 with a special bootloader exception that
|
|
115
|
+
permits distributing non-GPL applications bundled with PyInstaller.
|
|
116
|
+
Copyright (c) 2010-2023, PyInstaller Development Team
|
|
117
|
+
https://pyinstaller.org/en/stable/license.html
|
|
118
|
+
The Windows and macOS bundles are created with PyInstaller. The
|
|
119
|
+
bootloader exception explicitly allows this use without requiring
|
|
120
|
+
the application itself to be GPL-licensed.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: syncmoss
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: SYNCmoss — Mössbauer spectroscopy analysis application
|
|
5
5
|
Author: Sergey Yaroslavtsev
|
|
6
6
|
License: MIT
|
|
@@ -103,6 +103,34 @@ syncmoss
|
|
|
103
103
|
magnetic polar order `Am` on the Faraday-active ones - a random powder,
|
|
104
104
|
a textured foil and a single crystal are the same model at different values
|
|
105
105
|
|
|
106
|
+
## Bug report and Feature request
|
|
107
|
+
|
|
108
|
+
Both are very welcome — SYNCmoss gets better mainly from user feedback.
|
|
109
|
+
|
|
110
|
+
* write to **sergey.yaroslavtsev@esrf.fr** or open an issue: https://github.com/sergey-yaroslavtsev/syncmoss/issues
|
|
111
|
+
|
|
112
|
+
When something goes wrong the program opens a *report a bug* window containing
|
|
113
|
+
the error message.
|
|
114
|
+
|
|
115
|
+
### Reporting a bug
|
|
116
|
+
|
|
117
|
+
Please describe the problem and provide all related material:
|
|
118
|
+
|
|
119
|
+
* **what you did** — which button or action created the problem, and what you
|
|
120
|
+
expected to happen instead;
|
|
121
|
+
* **the error message** — copy it from the *report a bug* window (or from the
|
|
122
|
+
terminal);
|
|
123
|
+
* **the spectrum file(s)** and **the model** (`.mdl`) you were working with —
|
|
124
|
+
without them most problems cannot be reproduced;
|
|
125
|
+
* the SYNCmoss version and your operating system;
|
|
126
|
+
* a screenshot, if the problem is about what is drawn or displayed.
|
|
127
|
+
|
|
128
|
+
### Requesting a feature
|
|
129
|
+
|
|
130
|
+
Please describe what exactly is needed: the physics or the workflow behind it,
|
|
131
|
+
where in the program it should appear, and — if it exists elsewhere — a
|
|
132
|
+
reference, an article or an example file showing the expected result.
|
|
133
|
+
|
|
106
134
|
## Author
|
|
107
135
|
|
|
108
136
|
Yaroslavtsev Sergey (ESRF | ADA and ID14)
|
|
@@ -121,5 +149,13 @@ This software uses third-party libraries that are distributed under their own li
|
|
|
121
149
|
- **NumPy**: BSD 3-Clause License
|
|
122
150
|
- **SciPy**: BSD 3-Clause License
|
|
123
151
|
- **Matplotlib**: Matplotlib License (BSD-compatible)
|
|
124
|
-
|
|
125
|
-
|
|
152
|
+
- **Numba**: BSD 2-Clause License
|
|
153
|
+
- **llvmlite**: BSD 2-Clause License (contains LLVM: Apache License 2.0 with LLVM Exceptions)
|
|
154
|
+
- **Bliss** (optional, not included): LGPL v3.0 — imported only if installed
|
|
155
|
+
separately (Linux beamline installations), to read spectra online from a Bliss
|
|
156
|
+
channel; never part of the bundles
|
|
157
|
+
|
|
158
|
+
For complete third-party license information, see [NOTICE.txt](NOTICE.txt). The
|
|
159
|
+
Windows and macOS bundles also carry the full license text of every third-party
|
|
160
|
+
package they contain, in a `licenses` folder; in the program, **Supp → License**
|
|
161
|
+
shows all of it.
|
|
@@ -70,6 +70,34 @@ syncmoss
|
|
|
70
70
|
magnetic polar order `Am` on the Faraday-active ones - a random powder,
|
|
71
71
|
a textured foil and a single crystal are the same model at different values
|
|
72
72
|
|
|
73
|
+
## Bug report and Feature request
|
|
74
|
+
|
|
75
|
+
Both are very welcome — SYNCmoss gets better mainly from user feedback.
|
|
76
|
+
|
|
77
|
+
* write to **sergey.yaroslavtsev@esrf.fr** or open an issue: https://github.com/sergey-yaroslavtsev/syncmoss/issues
|
|
78
|
+
|
|
79
|
+
When something goes wrong the program opens a *report a bug* window containing
|
|
80
|
+
the error message.
|
|
81
|
+
|
|
82
|
+
### Reporting a bug
|
|
83
|
+
|
|
84
|
+
Please describe the problem and provide all related material:
|
|
85
|
+
|
|
86
|
+
* **what you did** — which button or action created the problem, and what you
|
|
87
|
+
expected to happen instead;
|
|
88
|
+
* **the error message** — copy it from the *report a bug* window (or from the
|
|
89
|
+
terminal);
|
|
90
|
+
* **the spectrum file(s)** and **the model** (`.mdl`) you were working with —
|
|
91
|
+
without them most problems cannot be reproduced;
|
|
92
|
+
* the SYNCmoss version and your operating system;
|
|
93
|
+
* a screenshot, if the problem is about what is drawn or displayed.
|
|
94
|
+
|
|
95
|
+
### Requesting a feature
|
|
96
|
+
|
|
97
|
+
Please describe what exactly is needed: the physics or the workflow behind it,
|
|
98
|
+
where in the program it should appear, and — if it exists elsewhere — a
|
|
99
|
+
reference, an article or an example file showing the expected result.
|
|
100
|
+
|
|
73
101
|
## Author
|
|
74
102
|
|
|
75
103
|
Yaroslavtsev Sergey (ESRF | ADA and ID14)
|
|
@@ -88,5 +116,13 @@ This software uses third-party libraries that are distributed under their own li
|
|
|
88
116
|
- **NumPy**: BSD 3-Clause License
|
|
89
117
|
- **SciPy**: BSD 3-Clause License
|
|
90
118
|
- **Matplotlib**: Matplotlib License (BSD-compatible)
|
|
91
|
-
|
|
92
|
-
|
|
119
|
+
- **Numba**: BSD 2-Clause License
|
|
120
|
+
- **llvmlite**: BSD 2-Clause License (contains LLVM: Apache License 2.0 with LLVM Exceptions)
|
|
121
|
+
- **Bliss** (optional, not included): LGPL v3.0 — imported only if installed
|
|
122
|
+
separately (Linux beamline installations), to read spectra online from a Bliss
|
|
123
|
+
channel; never part of the bundles
|
|
124
|
+
|
|
125
|
+
For complete third-party license information, see [NOTICE.txt](NOTICE.txt). The
|
|
126
|
+
Windows and macOS bundles also carry the full license text of every third-party
|
|
127
|
+
package they contain, in a `licenses` folder; in the program, **Supp → License**
|
|
128
|
+
shows all of it.
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# -*- mode: python ; coding: utf-8 -*-
|
|
2
2
|
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
|
|
3
3
|
import os
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
sys.path.insert(0, SPECPATH) # third_party_licenses.py lives next to this spec
|
|
7
|
+
from third_party_licenses import license_datas
|
|
4
8
|
|
|
5
9
|
# ── Hidden imports ──────────────────────────────────────────────
|
|
6
10
|
# numba/llvmlite/scipy do a lot of dynamic importing, so collect their submodules
|
|
@@ -95,6 +99,8 @@ a = Analysis(
|
|
|
95
99
|
cipher=block_cipher,
|
|
96
100
|
noarchive=False,
|
|
97
101
|
)
|
|
102
|
+
# The license texts of every bundled third-party package, under licenses/
|
|
103
|
+
a.datas += license_datas(a)
|
|
98
104
|
|
|
99
105
|
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
|
|
100
106
|
|
|
@@ -125,6 +131,7 @@ coll = COLLECT(
|
|
|
125
131
|
app = BUNDLE(
|
|
126
132
|
coll,
|
|
127
133
|
name='SYNCmoss.app',
|
|
128
|
-
|
|
134
|
+
# Next to this spec; PyInstaller converts the PNG to .icns (with Pillow).
|
|
135
|
+
icon='SYNCmoss.png',
|
|
129
136
|
bundle_identifier=None,
|
|
130
137
|
)
|
|
Binary file
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# -*- mode: python ; coding: utf-8 -*-
|
|
2
2
|
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
|
|
3
3
|
import os
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
sys.path.insert(0, SPECPATH) # third_party_licenses.py lives next to this spec
|
|
7
|
+
from third_party_licenses import license_datas
|
|
4
8
|
|
|
5
9
|
# ── Hidden imports ──────────────────────────────────────────────
|
|
6
10
|
# numba/llvmlite/scipy do a lot of dynamic importing, so collect their submodules
|
|
@@ -87,6 +91,8 @@ a = Analysis(
|
|
|
87
91
|
cipher=block_cipher,
|
|
88
92
|
noarchive=False,
|
|
89
93
|
)
|
|
94
|
+
# The license texts of every bundled third-party package, under licenses/
|
|
95
|
+
a.datas += license_datas(a)
|
|
90
96
|
|
|
91
97
|
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
|
|
92
98
|
|
|
@@ -122,6 +122,11 @@ def verify():
|
|
|
122
122
|
"COPYING.txt",
|
|
123
123
|
"NOTICE.txt",
|
|
124
124
|
"LICENSE",
|
|
125
|
+
# third-party license texts (Windows.spec -> third_party_licenses.py)
|
|
126
|
+
"_internal/licenses/LGPL-3.0.txt",
|
|
127
|
+
"_internal/licenses/GPL-3.0.txt",
|
|
128
|
+
"_internal/licenses/numba",
|
|
129
|
+
"_internal/licenses/llvmlite",
|
|
125
130
|
]
|
|
126
131
|
ok = True
|
|
127
132
|
for rel in required:
|
|
Binary file
|