Page 1 sur 1

[RESOLU] Paquets pour Logi Options+ (Windows / MacOS)

Publié : 20 nov. 2025 - 12:26
par bastien30
Bonjour,

J'ai fait un paquet pour le logiciel Logi Options+ sous Windows et MacOS, avec update_package() fonctionnel.

Windows

setup.py :

Code : Tout sélectionner

# -*- coding: utf-8 -*-
from setuphelpers import *
from setupdevhelpers import *

installer = r'logioptionsplus_%s.exe'

def install():
    appver = control.version.split('-',1)[0]
    install_exe_if_needed(installer % appver,
        silentflags = '/quiet /analytics no /device-recommendation no /update no',
        name = 'Logi Options+',
        min_version = get_version_from_binary(installer % appver, property_name='ProductVersion')
    )
    remove_desktop_shortcut(r'Logi Options+')

def update_package():
    appname = control.name
    url_dl = control.sources
    appver = control.version.split('-',1)[0]
    installer_dl = r'logioptionsplus_latest.exe'

    # Download installer to check its version
    wget(url_dl, installer_dl)
    installer_dl_version = get_version_from_binary(installer_dl)
    print(r'Latest %s version : %s' % (appname, installer_dl_version))

    if Version(installer_dl_version) > Version(appver):
        os.rename(installer_dl, installer % installer_dl_version)
        # Changing version of the package
        control.version = '%s-%s'%(installer_dl_version, control.version.split('-')[-1])
        control.save_control_to_wapt()
        print('Changing version to: %s in WAPT\\control' % control.version)
        remove_outdated_binaries(installer_dl_version)
    else:
        print("Already up to date")
control :

Code : Tout sélectionner

package           : xxx-logi_options_plus
version           : 1.97.791262-3
architecture      : x64
section           : base
priority          : optional
name              : Logi Options+
categories        : Utilities
maintainer        : XXXX
description       : Enhance your Logitech devices with Logi Options Plus software. Customize settings, create shortcuts, and increase productivity.
depends           : xxx-vcredist2015-2022
conflicts         : 
maturity          : PROD
locale            : all
target_os         : windows
min_wapt_version  : 
sources           : https://download01.logi.com/web/ftp/pub/techsupport/optionsplus/logioptionsplus_installer.exe
installed_size    : 
impacted_process  : logioptionsplus,logioptionsplus_agent,logioptionsplus_appbroker,logioptionsplus_updater,LogiSyncStub
description_fr    : Améliorez vos appareils Logitech grâce au logiciel Logi Options Plus. Personnalisez les paramètres, créez des raccourcis et augmentez votre productivité.
description_pl    : 
description_de    : 
description_es    : 
description_pt    : 
description_it    : 
description_nl    : 
description_ru    : 
audit_schedule    : 
editor            : Logitech, Inc.
keywords          : 
licence           : Proprietary
homepage          : https://www.logitech.com/software/logi-options-plus
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : https://support.logi.com/hc/fr/articles/1500005516462-Logi-Options-Release-Notes
min_os_version    : 10
max_os_version    : 
MacOS

setup.py :

Code : Tout sélectionner

# -*- coding: utf-8 -*-
from setuphelpers import *
from setupdevhelpers import *
import plistlib

installer_name = r'logioptionsplus_installer'

def install():
    appname = control.name
    appver = control.version.split('-',1)[0]
    installer_zip = r'%s_%s.zip' % (installer_name, appver)
    installer = r'./%s_%s/%s.app/Contents/MacOS/%s' % (installer_name, appver, installer_name, installer_name)

    soft = installed_softwares(r'logioptionsplus')
    if soft:
        if soft[0]["version"] >= appver:
            if not WAPT.options.force:
                print(r'%s is already installed with version %s' % (appname, soft[0]["version"]))
                return(0)

    unzip(installer_zip, r'%s_%s' % (installer_name, appver))
    run(r'%s --quiet --analytics no --device-recommendation no --update no' % installer)

def uninstall():
    # Uninstall and clean leftovers
    run(r'sudo /Library/Application\ Support/Logitech.localized/LogiOptionsPlus/logioptionsplus_agent.app/Contents/Frameworks/logioptionsplus_updater.app/Contents/MacOS/logioptionsplus_updater --full --uninstall --quiet')
    uninstall_pkg(r'com.logi.installer.pluginservice.media.package')
    uninstall_pkg(r'com.logi.installer.pluginservice.package')
    if isdir(r'/Library/Application\ Support/Logi/'):
        remove_tree(r'/Library/Application\ Support/Logi/')
    
def update_package():
    appname = control.name
    url_dl = control.sources
    appver = control.version.split('-',1)[0]
    installer_dl = r'%s.zip' % installer_name
    plist_file_name = r'Info.plist'

    # Download installer to check it's version
    wget(url_dl, installer_dl)

    # Check version from plist file
    if isfile(plist_file_name):
        remove_file(plist_file_name)
    unzip_with_7zip(installer_dl, target=basedir, filenames=[r'%s.app/Contents/Info.plist' % installer_name], extract_with_full_paths=False, recursive=False)
    plist_file = get_plist_obj(plist_file_name)
    installer_dl_version = plist_file[r'CFBundleVersion']
    print(r'Latest %s version : %s' % (appname, installer_dl_version))
    remove_file(plist_file_name)

    if Version(installer_dl_version) > Version(appver):
        old_zip_name = r'%s-%s.zip' % (installer_name, appver)
        if isfile(old_zip_name):
            remove_file(old_zip_name)
        os.rename(installer_dl, r'%s_%s.zip' % (installer_name, installer_dl_version))
        # Changing version of the package
        control.version = '%s-%s'%(installer_dl_version, control.version.split('-')[-1])
        control.save_control_to_wapt()
        print('Changing version to: %s in WAPT\\control' % control.version)
    else:
        print("Already up to date")
        
def get_plist_obj(plist_file):
    """ Returns a plist obj when given the path to a plist file. """

    with open(plist_file, 'rb') as fp :
        plist_obj = plistlib.load(fp)
    return plist_obj
control :

Code : Tout sélectionner

package           : xxx-logi_options_plus
version           : 1.97.791262-8
architecture      : all
section           : base
priority          : optional
name              : Logi Options+
categories        : Utilities
maintainer        : XXXX
description       : Enhance your Logitech devices with Logi Options Plus software. Customize settings, create shortcuts, and increase productivity.
depends           : 
conflicts         : 
maturity          : PROD
locale            : all
target_os         : darwin
min_wapt_version  : 
sources           : https://download01.logi.com/web/ftp/pub/techsupport/optionsplus/logioptionsplus_installer.zip
installed_size    : 
impacted_process  : logioptionsplus,logioptionsplus_agent,logioptionsplus_appbroker,logioptionsplus_updater,LogiSyncStub
description_fr    : Améliorez vos appareils Logitech grâce au logiciel Logi Options Plus. Personnalisez les paramètres, créez des raccourcis et augmentez votre productivité.
description_pl    : 
description_de    : 
description_es    : 
description_pt    : 
description_it    : 
description_nl    : 
description_ru    : 
audit_schedule    : 
editor            : Logitech, Inc.
keywords          : 
licence           : Proprietary
homepage          : https://www.logitech.com/software/logi-options-plus
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : https://support.logi.com/hc/fr/articles/1500005516462-Logi-Options-Release-Notes
min_os_version    : 13
max_os_version    :