Library of Component in Gambas3

1) Libraries

Bron: gambaswiki.org/wiki/doc/library

Library
Een library dient om gemeenschappelijk code tussen verschillende projecten te delen.

Een library is een Gambas programmma (executable), dat gebruikt kan worden in een ander project.

Voor eigen gebruik ga je dus steeds een library gebruiken, en geen component.

Locatie

Als een gambas project een library lib01 nodig heeft, wordt die gezocht op volgende plaatsen
(en ook in deze volgorde):

  • 1) uitvoerbare projectdirectory/lib01.gambas
  • 2) $XDG_DATA_HOME/gambas3/lib/vendorname/lib01:versie.gambas
  • 3) ~/.local/share/gambas3/lib/vendorname/lib01:version.gambas
  • 4) Project-Property_Tab_Library_directory-value/vendorname/lib01:versie.gambas
  • 5) /usr/lib[/multiarch]/gambas3/vendorname/lib01:versie.gambas
  • 6) /usr/bin/vendorname/lib01:versie.gambas

1. is de oudste manier
2./3. hangt af van het bestaan van $XDG_DATA_HOME, en gaat over installatie voor de user (single userwide copy; bv handig tijdens testen).
4. is een instelling in het gebruikend gambasproject (project eigenschappen)
5. is voor gebruik op een meergebruikerssysteem, waar je de library wil delen/gemeenschappelijk (dezelfde) gebruiken.
6. zoals 5., maar bij 6. gaat een gewoon gambas programma gebruikt worden als library (oudere manier).

$XDG_DATA_HOME hoort bij de specificaties van freedesktop.org en veronderstelt een basisdirectory waarin gebruikers-data wordt opgeslagen. Vgl $XDG_CONFIG_HOME voor gebruikers configuratie gegevens.

vendorname: zie Projecteigenschappen, veld “vendor” (of “verkoper” in de NL-talige versie).
Als deze leeg gebleven is bij creatie van de library, krijgt de locatie de mapnaam “(unknown)”:
.local/share/gambas3/lib/(unknown)/myownlib:0.0.1.gambas
Als je de vendorname alsnog invult, komt de lib in de nieuwe directory struktuur -inclusief die vendorname- terecht (en blijft de “unknown” versie bestaan).

Maken

Zie Een eigen Library (maken)

Je kan ze ook op niveau van het systeem installeren (zie boven “Locatie”)

Gebruiken

Het gebruikend project: open Project, Properties. Kies “Libaries” blad. Dan krijg je een venster met het “Runtime library search path”, en een lege lijn plus lege ruimte eronder.
Met “+ Add” knop voeg je er toe.

Je krijgt een venster “Select a Library”; ik zie in mijn geval een library staan – of niet (**)- in de directory waarin dit nieuwe project zit; selecteer, “ok”.

Zichtbaar in de lijst:

vendor > Lib01 0.0.1
Location: /home/naam/.local/share/gambas3/lib/vendor/Lib01:0.0.gambas
Provides: Class1, Class2

Je kan de library hier ook verwijderen, en van plaats veranderen in de lijst.

Nota/Problemen (*)(**)
Ik had nogal eens problemen waarbij ik nadien de library niet kon gebruiken; ik kon ze niet selecteren/vinden vanuit de IDE.
De library in ~/.local/share/gambas3/lib/myvendor bleek ook een gekke naam te hebben met een dubbel versienummer.

Ik heb gemerkt dat ik best:
– Project type : normaal (ipv library)
– Compileren naar .gambas programma ineens in de juiste directory in
~/.local/share/gambas3/lib/myvendor/libprj.gambas
(of de .gambas er naar kopieren).
Library compileren door uitvoeringsbestand te maken. Dat moet voldoende zijn. Maar..
– Als je de Library gebruikt in een project op dezelfde computer, moet je de IDE sluiten en terug starten om de libraries terug te lezen, anders ziet hij de nieuwe versie van de library niet, en kan je ze niet selecteren (momenteel in Gambas 3.14.3).
– opletten met versienummer; get from VERSION of de eigen project nummering kunnen dooreen/uiteenlopen…

Meer
Meer libraries: dan moet je letten op de volgorde in deze lijst; die moet juist zijn.
(volgens documentatie: van bovenaan/eerste tot onderaan/laatste).

Gevorderd?
De documentatie houdt daar zowat op; niets over:

  • Hierarchie van libaries (upd: beetje uitleg hier)
  • Initialiseren van een library: er wordt een aanzet gemaakt maar dat is nooit/nog niet aangevuld
  • Versie-nummering

Versienummer
Als je in de library code Application.Version gebruikt in een procedure, en je roept die op vanuit een gebruikend programma, dan wordt die zo letterlijk uitgevoerd dat je de versie van je uitvoerend programma te zien krijgt, en niet die van de library.
Je kan het versienummer in een Version.txt bestandje in de Data directory van je library zetten, en de inhoud van die file terugsturen in plaats van Application.Version.
Beter nog, als je het bestand “VERSION” noemt, en in het project het vakje “Get from VERSION file” aanklikt, wordt dat ook automatisch gebruikt binnen je library programma zelf.
Zie ook Versie van je bibliotheek (Library Version)

Update v.d. library
Hoe een library updaten?
TestLib is de library.
TestLib.gambas is de executable daarvan.

De file is ook terug te vinden als:
/home/username/.local/share/gambas3/lib/vendorname/TestLib:0.0.1.gambas

TestProgram op hetzelfde systeem is het programma dat deze lib gebruikt.

Wanneer krijgt TestProgram een “nieuwe versie” van TestLib in gebruik?

  • TestLib code gewijzigd. Run TestLib. – Run TestProgram vanuit IDE. –> Nee
  • TestLib code gewijzigd. Run TestLib. – Refresh TestProgram project vanuit IDE + Run –> Nee
  • TestLib code gewijzigd. Make Executable. – Run TestProgram vanuit IDE. Ja!
    Ook: TestLib:0.0.1.gambas datum/tijd wordt aangepast;
  • TestLib code gewijzigd. Make Executable. – Nog draaiend TestProgram vanuit IDE: –> Nee

De library wordt dus geladen bij het starten van het programma.

2) Componenten

Bron:
How To Program Components In Gambas (gambaswiki.org/wiki/dev/gambas)

Component
Gambas componenten zijn gedeelde bibliotheken die geschreven zijn in C, C++ of in Gambas zelf. Ze voegen nieuwe klassen toe aan de Gambas programmeeromgeving, en vormen een uitbreiding van de Gambas taal. Ze zijn voor algemeen gebruik bestemd, en worden dus verspreid met de gambas broncode.

Component maken

Project type: Component.

Je moet in de code EXPORTEER code gebruiken en de component voorzien van alles wat de IDE nodig heeft (eigenschappen met standaardwaarden, help enz).

Ook interessant: het object model van Gambas gambaswiki.org/wiki/doc/object-model

Gambas2 update(s)

(zie ook Gambas3 updates)

Het is een geruststelling voor wie afhankelijk is van Gambas 2 programma’s; zelfs in een recente distributie als openSUSE Leap 24.3, 15.1,.. komen nog altijd (kleine) updates binnen voor Gambas2: (-)* werkt niet?

2021-06-03
OpenSUSE 15.2
gambas2-2.24.0-lp152.61.8
Foutmelding op omniORB 4.1.4-lp152.6.1
requires libomniDynamic…
… Enkel de rest geïnstalleerd.

2021-04-12
OpenSUSE 15.2
– gambas2 en KDE3 update.

2021-03-11
OpenSUSE 15.1 is EOL, dus datzelfde systeem geüpgrade naar OpenSUSE 15.2, en dan ook de KDE3 repo’s aangepast naar 15.2; er staat dan een update klaar naar een lager sub-nummer:
KDE:KDE3 | gambas2 | 2.24.0-lp151.61.8 | 2.24.0-lp152.61.2 | x86_64
Gaat ook samen met KDE3:
KDE:KDE3 | kdebase3 | 3.5.10.1-lp151.359.4 | 3.5.10.1-lp152.359.1 | x86_64

Bij de updates komt er een foutmelding op omniORB;
omniORB | 4.1.4-lp151.5.1 | 4.1.4-lp152.5.1

2021-02-09
(..)

2021-01-22
OpenSUSE 15.1: gambas 2.24.0-lp151.61.5
Foutmelding op:
gambas2-gb-corba-2.24.0-lp151.61.5.x86_64 requires libomniDynamic4.so.1()(64bit), but this requirement cannot be provided
Kan afgevinkt worden, dan installeert de rest wel..
Nadien met zypper up komt de melding:
/sbin/ldconfig: /usr/lib64/libffi.so.4 is not a symbolic link

2021-01-12
OpenSUSE 15.1: gambas 2.24.0-lp151.61.3
44 bestanden
(waarvan omniORB 4.1.4-lp151.5.1 die hapert met desktop update – lukt wel met zypper – rest gaat wel door)

2021-01-06
OpenSUSE 15.1: gambas 2.24.0-lp151.61.2
50 tal bestanden over gambas en kde
(ook weer met KDE: bv kdebase3-runtime 3.5.10.1-lp151.3)

2020-11-30
OpenSUSE 15.1: gambas 2.24.0-lp151.57.49
Zijnde 43 gambas2 + 6 kde totaal 49 bestanden.
(ook weer met KDE: bv kdebase3-runtime 3.5.10.1-lp151.358.5)

2020-11-17 (ongeveer)
OpenSUSE 15.1: gambas 2.24.0-lp151.57.47
Zijnde 43 gambas* bestanden.
Samen met 6 KDE (kdebase3-runtime 3.5.10.1-lp151.358.3 etc); totaal 49 bestanden.

2020-11-09
OpenSUSE 15.1: gambas 2.24.0-lp151.57.46
Waaronder gambas2 runtime, gb-chart, gb-qt, qb-qt-kde, gb-settings, gb-v4l… In totaal een 43 packages, ook weer samen met kdebase/libs3/..-updates lp151.358.1 (6 packages)

2020-11-02
OpenSUSE 15.1: gambas 2.24.0-lp151.57.44
(samen met kdebase3 3.5.10.1-lp151.357.12 / kdelibs33.5.10-lp151.233.8)
(-)

2020-10-27
OpenSuse 15.1: gambas 2.24.0-lp151.57.43
(-)

2020-10-22* (-) Nota: gambas2 werkt(e) niet op 15.1
OpenSUSE 15.1: gambas 2.24.0-lp151.57.38
(ook kdebase3-runtime (3.5.10.1-lp151.357.5)
(-)

2020-10-19
OpenSUSE 15.1: gambas 2.24.0-lp151.57.37
(zowat alle files; ook samen met een kdebase3,kdelibs3 update)
(-)
Nota: gambas2 werkt(e) niet op 15.1
2020-10-02

OpenSUSE 15.1: gambas 2.24.0-lp151.57.34
Update van 2.24.0-lp151.57.32 KDE:KDE3 / openSUSE_Leap_15.1 openSUSE-Education.

* (-)
Nota: gambas2 werkt(e) niet op 15.1
Op 15.1 werkt(e) gambas2 niet: Segmentation fault (core dumped) (-)
Werkt niet bij een nieuw geïnstalleerde 15.1. Waarschijnlijk ontbreken bibliotheken of links naar de nieuwe versies van bibliotheken die misschien wel gemaakt zijn bij een doorlopend upgraden van versies.
zie ook http://gambas.copyleft.be/blog/archives/2102

2019-12-20
OpenSUSE 42.3: gambas 2.24.0-39.1
Inderdaad nog een update van 2.x build time 14/12!

29-11-2018: er komen nog steeds af en toe updates binnen (openSuse Leqp 42.3), zoals nu, van Gambas2: 2.24.0-33.1 (Gambas 2 blijft hoofd-versie 2.24)


19-4-2018: Er komt een update binnen voor Gambas 2 op openSUSE Leap 42.3.
Op datzelfde moment is er ook een upgrade voor kdebase3, de kernpaketten van kde3, die horen bij deze oude Gambas versie.
Samen zo’n 45 paketten voor Gambas2, 3 paketten voor Kde3.

kdebase gaat naar versie 3.5.10.1-330.3
gambas2 gaat naar versie 2.24.0-29.2


4-4-2018 Er komt een update (45 bestanden) binnen voor Gambas2 op openSUSE Leap 42.3.

Daarmee gaat die van …

2.24.0-24.58
Build Time:
za 03 mrt 2018 19:24:06 CET

naar …

2.24.0-24.59.
Build Time:
vr 30 mrt 2018 13:49:58 CEST