#!/usr/bin/env python3 import os import inspect import subprocess import shutil import glob root = os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) ) ) ) def run(cmd, cwd=None): subprocess.run(cmd, cwd=cwd, check=True) def main(): cli_dir = os.path.join(root, "cli") desktop_dir = os.path.join(root, "desktop") print("○ Clean up from last build") if os.path.exists(os.path.join(cli_dir, "dist")): shutil.rmtree(os.path.join(cli_dir, "dist")) if os.path.exists(os.path.join(desktop_dir, "windows")): shutil.rmtree(os.path.join(desktop_dir, "windows")) print("○ Building onionshare-cli") run(["poetry", "install"], cli_dir) run(["poetry", "build"], cli_dir) whl_filename = glob.glob(os.path.join(cli_dir, "dist", "*.whl"))[0] whl_basename = os.path.basename(whl_filename) shutil.copyfile(whl_filename, os.path.join(desktop_dir, whl_basename)) print("○ Create the binary") run(["briefcase", "create"], desktop_dir) print("○ Delete unused Qt5 DLLs to save space") for filename in [ "plugins/assetimporters/assimp.dll", "plugins/assetimporters/uip.dll", "plugins/audio/qtaudio_wasapi.dll", "plugins/audio/qtaudio_windows.dll", "plugins/bearer/qgenericbearer.dll", "plugins/canbus/qtpassthrucanbus.dll", "plugins/canbus/qtpeakcanbus.dll", "plugins/canbus/qtsysteccanbus.dll", "plugins/canbus/qttinycanbus.dll", "plugins/canbus/qtvectorcanbus.dll", "plugins/canbus/qtvirtualcanbus.dll", "plugins/gamepads/xinputgamepad.dll", "plugins/generic/qtuiotouchplugin.dll", "plugins/geometryloaders/defaultgeometryloader.dll", "plugins/geometryloaders/gltfgeometryloader.dll", "plugins/geoservices/qtgeoservices_esri.dll", "plugins/geoservices/qtgeoservices_itemsoverlay.dll", "plugins/geoservices/qtgeoservices_mapbox.dll", "plugins/geoservices/qtgeoservices_nokia.dll", "plugins/geoservices/qtgeoservices_osm.dll", "plugins/mediaservice/dsengine.dll", "plugins/mediaservice/qtmedia_audioengine.dll", "plugins/mediaservice/wmfengine.dll", "plugins/platforminputcontexts/qtvirtualkeyboardplugin.dll", "plugins/platformthemes/qxdgdesktopportal.dll", "plugins/playlistformats/qtmultimedia_m3u.dll", "plugins/position/qtposition_positionpoll.dll", "plugins/position/qtposition_serialnmea.dll", "plugins/position/qtposition_winrt.dll", "plugins/printsupport/windowsprintersupport.dll", "plugins/qmltooling/qmldbg_debugger.dll", "plugins/qmltooling/qmldbg_inspector.dll", "plugins/qmltooling/qmldbg_local.dll", "plugins/qmltooling/qmldbg_messages.dll", "plugins/qmltooling/qmldbg_native.dll", "plugins/qmltooling/qmldbg_nativedebugger.dll", "plugins/qmltooling/qmldbg_preview.dll", "plugins/qmltooling/qmldbg_profiler.dll", "plugins/qmltooling/qmldbg_quickprofiler.dll", "plugins/qmltooling/qmldbg_server.dll", "plugins/qmltooling/qmldbg_tcp.dll", "plugins/renderers/openglrenderer.dll", "plugins/renderplugins/scene2d.dll", "plugins/scenegraph/qsgd3d12backend.dll", "plugins/sceneparsers/assimpsceneimport.dll", "plugins/sceneparsers/gltfsceneexport.dll", "plugins/sceneparsers/gltfsceneimport.dll", "plugins/sensorgestures/qtsensorgestures_plugin.dll", "plugins/sensorgestures/qtsensorgestures_shakeplugin.dll", "plugins/sensors/qtsensors_generic.dll", "plugins/sqldrivers/qsqlite.dll", "plugins/sqldrivers/qsqlodbc.dll", "plugins/sqldrivers/qsqlpsql.dll", "plugins/texttospeech/qtexttospeech_sapi.dll", "plugins/virtualkeyboard/qtvirtualkeyboard_hangul.dll", "plugins/virtualkeyboard/qtvirtualkeyboard_openwnn.dll", "plugins/virtualkeyboard/qtvirtualkeyboard_pinyin.dll", "plugins/virtualkeyboard/qtvirtualkeyboard_tcime.dll", "plugins/virtualkeyboard/qtvirtualkeyboard_thai.dll", "plugins/webview/qtwebview_webengine.dll", "qml/Qt/labs/animation/labsanimationplugin.dll", "qml/Qt/labs/calendar/qtlabscalendarplugin.dll", "qml/Qt/labs/folderlistmodel/qmlfolderlistmodelplugin.dll", "qml/Qt/labs/location/locationlabsplugin.dll", "qml/Qt/labs/lottieqt/lottieqtplugin.dll", "qml/Qt/labs/platform/qtlabsplatformplugin.dll", "qml/Qt/labs/qmlmodels/labsmodelsplugin.dll", "qml/Qt/labs/settings/qmlsettingsplugin.dll", "qml/Qt/labs/sharedimage/sharedimageplugin.dll", "qml/Qt/labs/wavefrontmesh/qmlwavefrontmeshplugin.dll", "qml/Qt3D/Animation/quick3danimationplugin.dll", "qml/Qt3D/Core/quick3dcoreplugin.dll", "qml/Qt3D/Extras/quick3dextrasplugin.dll", "qml/Qt3D/Input/quick3dinputplugin.dll", "qml/Qt3D/Logic/quick3dlogicplugin.dll", "qml/Qt3D/Render/quick3drenderplugin.dll", "qml/QtBluetooth/declarative_bluetooth.dll", "qml/QtCharts/qtchartsqml2.dll", "qml/QtDataVisualization/datavisualizationqml2.dll", "qml/QtGamepad/declarative_gamepad.dll", "qml/QtGraphicalEffects/private/qtgraphicaleffectsprivate.dll", "qml/QtGraphicalEffects/qtgraphicaleffectsplugin.dll", "qml/QtLocation/declarative_location.dll", "qml/QtMultimedia/declarative_multimedia.dll", "qml/QtNfc/declarative_nfc.dll", "qml/QtPositioning/declarative_positioning.dll", "qml/QtPurchasing/declarative_purchasing.dll", "qml/QtQml/Models.2/modelsplugin.dll", "qml/QtQml/qmlplugin.dll", "qml/QtQml/RemoteObjects/qtqmlremoteobjects.dll", "qml/QtQml/StateMachine/qtqmlstatemachine.dll", "qml/QtQml/WorkerScript.2/workerscriptplugin.dll", "qml/QtQuick/Controls/qtquickcontrolsplugin.dll", "qml/QtQuick/Controls/Styles/Flat/qtquickextrasflatplugin.dll", "qml/QtQuick/Controls.2/Fusion/qtquickcontrols2fusionstyleplugin.dll", "qml/QtQuick/Controls.2/Imagine/qtquickcontrols2imaginestyleplugin.dll", "qml/QtQuick/Controls.2/Material/qtquickcontrols2materialstyleplugin.dll", "qml/QtQuick/Controls.2/qtquickcontrols2plugin.dll", "qml/QtQuick/Controls.2/Universal/qtquickcontrols2universalstyleplugin.dll", "qml/QtQuick/Dialogs/dialogplugin.dll", "qml/QtQuick/Dialogs/Private/dialogsprivateplugin.dll", "qml/QtQuick/Extras/qtquickextrasplugin.dll", "qml/QtQuick/Layouts/qquicklayoutsplugin.dll", "qml/QtQuick/LocalStorage/qmllocalstorageplugin.dll", "qml/QtQuick/Particles.2/particlesplugin.dll", "qml/QtQuick/Pdf/pdfplugin.dll", "qml/QtQuick/PrivateWidgets/widgetsplugin.dll", "qml/QtQuick/Scene2D/qtquickscene2dplugin.dll", "qml/QtQuick/Scene3D/qtquickscene3dplugin.dll", "qml/QtQuick/Shapes/qmlshapesplugin.dll", "qml/QtQuick/Templates.2/qtquicktemplates2plugin.dll", "qml/QtQuick/Timeline/qtquicktimelineplugin.dll", "qml/QtQuick/VirtualKeyboard/qtquickvirtualkeyboardplugin.dll", "qml/QtQuick/VirtualKeyboard/Settings/qtquickvirtualkeyboardsettingsplugin.dll", "qml/QtQuick/VirtualKeyboard/Styles/qtquickvirtualkeyboardstylesplugin.dll", "qml/QtQuick/Window.2/windowplugin.dll", "qml/QtQuick/XmlListModel/qmlxmllistmodelplugin.dll", "qml/QtQuick.2/qtquick2plugin.dll", "qml/QtQuick3D/Effects/qtquick3deffectplugin.dll", "qml/QtQuick3D/Helpers/qtquick3dhelpersplugin.dll", "qml/QtQuick3D/Materials/qtquick3dmaterialplugin.dll", "qml/QtQuick3D/qquick3dplugin.dll", "qml/QtRemoteObjects/qtremoteobjects.dll", "qml/QtScxml/declarative_scxml.dll", "qml/QtSensors/declarative_sensors.dll", "qml/QtTest/qmltestplugin.dll", "qml/QtWebChannel/declarative_webchannel.dll", "qml/QtWebEngine/qtwebengineplugin.dll", "qml/QtWebSockets/declarative_qmlwebsockets.dll", "qml/QtWebView/declarative_webview.dll", "Qt5DBus.dll", "Qt5PrintSupport.dll", "Qt5Script.dll", "Qt5ScriptTools.dll", "Qt5Scxml.dll", "Qt5Sensors.dll", "Qt5SerialBus.dll", "Qt5SerialPort.dll", "Qt5Sql.dll", "Qt5Svg.dll", "Qt5Test.dll", "Qt5TextToSpeech.dll", "Qt5VirtualKeyboard.dll", "Qt5WebChannel.dll", "Qt5WebEngine.dll", "Qt5WebEngineCore.dll", "Qt5WebEngineWidgets.dll", "Qt5WebSockets.dll", "Qt5WebView.dll", "Qt5Xml.dll", "Qt5XmlPatterns.dll", ]: os.remove( os.path.join( desktop_dir, "windows", "msi", "OnionShare", "src", "app_packages", "PySide2", filename.replace("/", "\\"), ) ) print("○ Create the installer") run(["briefcase", "package"], desktop_dir) msi_filename = glob.glob(os.path.join(desktop_dir, "windows", "OnionShare-*.msi"))[ 0 ] print(f"○ Created unsigned installer: {msi_filename}") print("○ Signing installer") run( [ "signtool.exe", "sign", "/v", "/d", "OnionShare", "/a", "/tr", "http://time.certum.pl/", msi_filename, ], desktop_dir, ) print(f"○ Signed installer: {msi_filename}") if __name__ == "__main__": main()