Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Resolver todas las dependencias de nuestros programas, pero en e IDE
#1
Information 

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]
GAMBAS
  1. Private Function LoadExtras() As Integer
  2.  
  3.   Dim cData As Collection
  4.   Dim sDistro As String
  5.   Dim sDep As String
  6.   Dim aDepDis As New String[]
  7.   Dim aDepGen As New String[]
  8.   Dim aDep As New String[]
  9.   Dim aPkg As New String[]
  10.   Dim aInstall As New String[]
  11.   Dim aMissing As New String[]
  12.   Dim sTmp As String
  13.   Dim sPkg As String
  14.   Dim sCheck As String
  15.   Dim sExist As String
  16.   Dim sPakages As String
  17.  
  18.   cData = Code.ProjInfo(".project")
  19.   aInstall.Clear
  20.   aMissing.Clear
  21.  
  22.   sDistro = System.Distro()
  23.   sPakages = System.Packages()
  24.  
  25.   For Each sDep In cData["ExtraDependencies"]
  26.     If InStr(sDep, sPakages & ":") > 0 Then
  27.       sTmp = Replace(sDep, sPakages & ":", "")
  28.       sTmp = Replace(sTmp, "\\n", ":")
  29.       aDepDis = Split(sTmp, ":")
  30.       Break
  31.     Endif
  32.   Next
  33.  
  34.   ' For Each sDep In cData["ExtraDependencies"]
  35.   '   If InStr(sDep, Chr(42) & ":") > 0 Then
  36.   '     sTmp = Replace(sDep, Chr(42) & ":", "")
  37.   '     sTmp = Replace(sTmp, "\\n", ":")
  38.   '     aDepGen = Split(sTmp, ":")
  39.   '     Break
  40.   '   Endif
  41.   ' Next
  42.  
  43.   For Each sDep In aDepDis
  44.     aDep.Add(sDep)
  45.   Next
  46.  
  47.   For Each sDep In aDepGen
  48.     If aDep.Exist(sDep) = False Then
  49.       aDep.Add(sDep)
  50.     Endif
  51.   Next
  52.  
  53.   For x = 0 To aDep.Max
  54.     aPkg.Add(Split(aDep[x], "\\")[0])
  55.   Next
  56.  
  57.   If aPkg.Count > 0 Then
  58.     For Each sPkg In aPkg
  59.       sExist = ""
  60.       sCheck = ""
  61.  
  62.       '¿Exist?
  63.       Select sDistro
  64.         Case "arch", "manjaro"
  65.           Shell "pacman -Ss " & sPkg & " 2>1" To sExist
  66.  
  67.         Case "fedora"
  68.           Shell "yum search " & sPkg & " 2>1" To sExist
  69.  
  70.         Case "debian", "ubuntu"
  71.           Shell "apt-cache search " & sPkg & " 2>1" To sExist
  72.  
  73.         Case "opensuse", "suse"
  74.           Shell "zypper se " & sPkg & " 2>1" To sExist
  75.  
  76.         Case "gentoo"
  77.           Shell "emerge -S " & sPkg & " 2>1" To sExist
  78.  
  79.         Case Else
  80.           Message.Info(("Your system is not listed") & gb.NewLine & ("Please contact the developper to imform it"))
  81.  
  82.       End Select
  83.  
  84.       '¿Is installed?
  85.       Select sDistro
  86.         Case "arch", "manjaro"
  87.           Shell "pacman -Qs " & sPkg & " 2>1" To sCheck
  88.  
  89.         Case "fedora", "redhat"
  90.           Shell "rpm -qa | grep " & sPkg & " 2>1" To sCheck
  91.  
  92.         Case "debian", "ubuntu"
  93.           Shell "dpkg -l | grep " & sPkg & " 2>1" To sCheck
  94.  
  95.         Case "opensuse", "suse"
  96.           Shell "zypper se -i " & sPkg & " 2>1" To sCheck
  97.  
  98.         Case "gentoo"
  99.           Shell "emerge -pv " & sPkg & " 2>1" To sCheck
  100.  
  101.       End Select
  102.  
  103.       If Len(sExist) > 0 And Len(sCheck) = 0 Then
  104.         ' The package exist in ditro but is not installed
  105.         aInstall.Add(sPkg)
  106.       Else
  107.         If Len(sExist) = 0 Then
  108.           ' The package is missing in the ditro
  109.           aMissing.Add(sPkg)
  110.         Endif
  111.       Endif
  112.     Next
  113.  
  114.   If aInstall.Count > 0 Then
  115.     Message.Info(("You You are using this program from the IDE") &
  116.       gb.NewLine &
  117.       ("You must install these dependencies manually") &
  118.       ":" & gb.NewLine & aInstall.Join("\n"))
  119.  
  120.   If aMissing.Count > 0 Then
  121.     Message.Info(("The following packages do not exist") & "." &
  122.       gb.NewLine &
  123.       ("Please contact to developper") & "." &
  124.       ":" & gb.NewLine & aMissing.Join("\n"))
  125.  
  126.   Return aInstall.Count
  127.  



Saludos.

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

GAMBAS
  1. '' Shows the packages system according in tha Gambas way. (archlinux, debian, fedora, mageia, slackware, suse, ubuntu )
  2.  
  3.   Dim sVersion As String
  4.   Dim sBase As String
  5.   Dim sPkg As String
  6.  
  7.   oPkg.Add("fedora", "redhat-release")     'Redhat
  8.   oPkg.Add("fedora", "fedora-release")
  9.   oPkg.Add("mageia", "mageia-release")
  10.   oPkg.Add("slackware", "slackware-release")
  11.   oPkg.Add("archlinux", "arch-release")       'Arch *
  12.   oPkg.Add("archlinux", "manjaro-release")    'Manjaro
  13.   'oPkg.Add("emerge", "gentoo-release")     'Gentoo
  14.   oPkg.Add("suse", "SuSE-release")        'Susse
  15.   oPkg.Add("deian", "debian_version")        'Debian *
  16.   oPkg.Add("ubuntu", "os-release")            'Ubuntu ¿Esta correcto así?
  17.   'fedora ??
  18.   '
  19.   sBase = ""
  20.   For Each sBase In oPkg
  21.     If Exist("/etc/" & oPkg.Key) Then
  22.       sPkg = sBase
  23.       Break
  24.     Endif
  25.   Next
  26.  
  27.   Return sBase
  28.  


Saludos.

1 Saludo.
[-] Los siguientes 4 usuarios dicen gracias a tincho por este post:
  • Grandamakulo, jguardon, Shell, Shordi
    ¡Gracias!
#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 lobo siempre será malo si sólo escuchamos a Caperucita.". El lobo.
    ¡Gracias!
#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
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)