tincho   23-10-2021, 22:04
#1
Hola amigos.
En otro tema estaban comentando sobre el inconveniente que se presenta con las dependencias de los programas cuando estos corren desde el IDE.
Bien, les propongo un poco de código que, espero, resuelva el problema para las distribuciones que gambas hace paquetes.
Aclaraciones
  1. La forma correcta de indicar las dependencias en en el momento de crear un paquete. Existe la opcion "Mismas dependencias para todos los paquetes" es decir si marcamos Archlinux y Ubuntu, se crearan paquetes para ambas distros y en ellos se especificaran las mismas dependencias pero no lo recomiendo porque en cada distro los paquetes pueden tener nombres diferentes o estar agrupados de otra manera o no existir.
  2. El código que les comparto trabaja en Manjaro y Archlinux, espero que para Ubuntu, derivados y otras distros también lo haga, en caso que no funcione, ya saben pasen el feedback.
  3. Ya saben que al crear paquetes hay distros para las que, desde el IDE, no podrán crearlos, como en mi caso, que uso Manjaro y no está habilitado el checkbox para ubuntu ni para debian.
  4. El código de abajo trabaja con el archivo .project que contiene la información sobre las dependencias, pero solo si crearon al menos una vez un paquete, de lo contrario no tiene esa información.
[Imagen: LbnKj5Y.png][Imagen: vz9H6ln.png]
Código:
Private Function LoadExtras() As Integer

  Dim cData As Collection
  Dim sDistro As String
  Dim sDep As String
  Dim aDepDis As New String[]
  Dim aDepGen As New String[]
  Dim aDep As New String[]
  Dim aPkg As New String[]
  Dim aInstall As New String[]
  Dim aMissing As New String[]
  Dim x As Integer
  Dim sTmp As String
  Dim sPkg As String
  Dim sCheck As String
  Dim sExist As String
  Dim sPakages As String

  cData = Code.ProjInfo(".project")
  aInstall.Clear
  aMissing.Clear

  sDistro = System.Distro()
  sPakages = System.Packages()

  For Each sDep In cData["ExtraDependencies"]
    If InStr(sDep, sPakages & ":") > 0 Then
      sTmp = Replace(sDep, sPakages & ":", "")
      sTmp = Replace(sTmp, "\\n", ":")
      aDepDis = Split(sTmp, ":")
      Break
    Endif
  Next

  ' For Each sDep In cData["ExtraDependencies"]
  '   If InStr(sDep, Chr(42) & ":") > 0 Then
  '     sTmp = Replace(sDep, Chr(42) & ":", "")
  '     sTmp = Replace(sTmp, "\\n", ":")
  '     aDepGen = Split(sTmp, ":")
  '     Break
  '   Endif
  ' Next

  For Each sDep In aDepDis
    aDep.Add(sDep)
  Next

  For Each sDep In aDepGen
    If aDep.Exist(sDep) = False Then
      aDep.Add(sDep)
    Endif
  Next

  For x = 0 To aDep.Max
    aPkg.Add(Split(aDep[x], "\\")[0])
  Next

  If aPkg.Count > 0 Then
    For Each sPkg In aPkg
      sExist = ""
      sCheck = ""

      '¿Exist?
      Select sDistro
        Case "arch", "manjaro"
          Shell "pacman -Ss " & sPkg & " 2>1" To sExist

        Case "fedora"
          Shell "yum search " & sPkg & " 2>1" To sExist

        Case "debian", "ubuntu"
          Shell "apt-cache search " & sPkg & " 2>1" To sExist

        Case "opensuse", "suse"
          Shell "zypper se " & sPkg & " 2>1" To sExist

        Case "gentoo"
          Shell "emerge -S " & sPkg & " 2>1" To sExist

        Case Else
          Message.Info(("Your system is not listed") & gb.NewLine & ("Please contact the developper to imform it"))

      End Select

      '¿Is installed?
      Select sDistro
        Case "arch", "manjaro"
          Shell "pacman -Qs " & sPkg & " 2>1" To sCheck

        Case "fedora", "redhat"
          Shell "rpm -qa | grep " & sPkg & " 2>1" To sCheck

        Case "debian", "ubuntu"
          Shell "dpkg -l | grep " & sPkg & " 2>1" To sCheck

        Case "opensuse", "suse"
          Shell "zypper se -i " & sPkg & " 2>1" To sCheck

        Case "gentoo"
          Shell "emerge -pv " & sPkg & " 2>1" To sCheck

      End Select

      If Len(sExist) > 0 And Len(sCheck) = 0 Then
        ' The package exist in ditro but is not installed
        aInstall.Add(sPkg)
      Else
        If Len(sExist) = 0 Then
          ' The package is missing in the ditro
          aMissing.Add(sPkg)
        Endif
      Endif
    Next
  Endif

  If aInstall.Count > 0 Then
    Message.Info(("You You are using this program from the IDE") &
      gb.NewLine &
      ("You must install these dependencies manually") &
      ":" & gb.NewLine & aInstall.Join("\n"))
  Endif

  If aMissing.Count > 0 Then
    Message.Info(("The following packages do not exist") & "." &
      gb.NewLine &
      ("Please contact to developper") & "." &
      ":" & gb.NewLine & aMissing.Join("\n"))
  Endif

  Return aInstall.Count

End

Saludos.

La siguiente función sera necesaria sPakages = System.Packages()

Código:
'' Shows the packages system according in tha Gambas way. (archlinux, debian, fedora, mageia, slackware, suse, ubuntu )
Public Function Packages() As String

  Dim sVersion As String
  Dim sBase As String
  Dim oPkg As New Collection
  Dim sPkg As String

  oPkg.Add("fedora", "redhat-release")     'Redhat
  oPkg.Add("fedora", "fedora-release")
  oPkg.Add("mageia", "mageia-release")
  oPkg.Add("slackware", "slackware-release")
  oPkg.Add("archlinux", "arch-release")       'Arch *
  oPkg.Add("archlinux", "manjaro-release")    'Manjaro
  'oPkg.Add("emerge", "gentoo-release")     'Gentoo
  oPkg.Add("suse", "SuSE-release")        'Susse
  oPkg.Add("deian", "debian_version")        'Debian *
  oPkg.Add("ubuntu", "os-release")            'Ubuntu ¿Esta correcto así?
  'fedora ??
  '
  sBase = ""
  For Each sBase In oPkg
    If Exist("/etc/" & oPkg.Key) Then
      sPkg = sBase
      Break
    Endif
  Next

  Return sBase

End
Saludos.
Última modificación: 23-10-2021, 22:12 por tincho.

1 Saludo.
Shell   24-10-2021, 13:09
#2
(23-10-2021, 22:04)tincho escribió: En otro tema estaban comentando sobre el inconveniente que se presenta con las dependencias de los programas cuando estos corren desde el IDE.

Enlaza el tema por fa. Wink

Buen trabajo.

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   24-10-2021, 17:18
#3
El tema mentado es éste:
https://gambas-es.org/showthread.php?tid...83#pid3783

Julio reportó un bug y es uno que sólo puede producirse al ejectuar desde el IDE (bueno y desde un ejecutable creado sin paquete de instalación, que es lo mismo).

Saludos

No podemos regresar
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.