AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte ein DevExpressVCL-Compiler
Thema durchsuchen
Ansicht
Themen-Optionen

ein DevExpressVCL-Compiler

Ein Thema von himitsu · begonnen am 17. Aug 2023 · letzter Beitrag vom 21. Aug 2023
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.199 Beiträge
 
Delphi 12 Athens
 
#1

ein DevExpressVCL-Compiler

  Alt 17. Aug 2023, 16:08
Haben bestimmt schon welche gemerkt, dass DevExpress ja offiziell nur mit deren eigenen Tool/Setup (neu)kompiliert werden kann.
Außerdem verschandelt das Setup dann die Registry.

Bei uns liegen alle Fremdkomponenten in einem GitRepo, bzw. darin ein erster privater Fork 'ner Fremdkomponente als SubModule, inkl RemoteAdd zum Original.
Der FinalBuilder richtet die Entwicklungsumgebung des Entwicklers ein, kompiliert alles und registriert die Packages und unsere Projekte im Delphi.
(nur DevExpress weigerte sich)

Fehlt jetzt eigentlich nur, dass man beim Upgrade die Quellcodes ohne Installieren aus aus dem DevExpress-Setup raus bekommt.



Urspünglich hatte ich mal angefangen im FinalBuilder (VBScript) die DevExpress-Packages zu kompilieren.
Der Support meinte mal, das Setup mache spezielle Dinge usw., drum könne man es nicht selbst kompilieren.

Also heimlich abgeguckt, wie die wirklich den DCC aufrufen und diese Settings übernommen. (siehe um die Variable dccoptions herum, im meinem VBS/Delphi)
VBS, weil es im FinalBuilder das am Besten integriert wurde, also hin-&her zwischen Script und FinalBuilder, inkl. Codevervolständigung usw. (für PowerShell und JavaScript fehlte so Einiges und das hauseigene Python sollte man nicht verwenden)
Aber das wurde immer langsamer, vor allem der Umgang mit Arrays ist im VBScript schon fast pervers.

OK, nun alles in ein Programm ausgelagert und noch bissl dran rumgespielt ....
tadaaaaaa, ein DevExpressCompiler.exe


* grundsätzlich kompiliert er in der selben struktur, wie das Original
* nur ich kompiliere permanent mit DebugInfos, aber Diese als Externe TDS, welche standardmäßig in einer ZIP landen
* entpacken und schon kann gedebuggt werden, auch nur einzelne Packages

* für TestComplete brauchten wir eh die DebugInfos, was also ursprünlich im Setup zwei mal Kompilieren und Dateien dazwischen umkopieren hieß,
weil im Delphi will ich (meinstens) nicht beim Debugging in deren Sourcen landen und dort nie wieder raus finden. (Debuggen im DevExpress-Code ist fast so pervers wie im Eurekalog zu langen)


Bei uns im GitReop ist ein DevExpressVerzeichnis mit den Dateien aus den beiden Installationsorten,
C:\Program Files (x86)\DevExpress\VCL
C:\Users\Public\Documents\DevExpress\VCL\Demos
siehe die .\DevExpress\Sources-Update.cmd
da "noch" inkl. dem manuellen Kompilieren der paar Packages für TestComplete


.\DevExpress\VCL\Library\_Debugging ist ein Sammelverzeichnis, damit für den Debugger nicht zweimillionen Sources-Verzeichnis alleine vom DevExpress geristriert werden müssen.

Kompilieren tut das DX-Setups normal ins .\DevExpress\VCL\Library\ (steht im GitRepo auf ignore)
und der FinalBuilder kopiert dann alle Fremdkomponenten in gemeinsame Verzeichnisse für BPL, DCP und DCU/RES/DFM, bzw. was er FB selbst kompiliert, das direkt dahin.

.\DevExpress\VCL\Library\RS**\_DebugInfosDX.zip sind die optionalen DebugInfos (TDS und RSM, zuzüglich MAP und DRC ... mir fällt grade auf, das die D fehlt, aber egal)

In diesen BuildVerzeichnissen in den Zips die Logs usw. (hab hier bissl ausgemiste, also nur teilweise die Sourcen, sowie die Kompilate als 0 Byte)
.\DevExpress\VCL\Library\RS28\_BuildLogsDX.zip (CFG und DCC32-Logs, das eigene Log, weitere Build-/Config-Infos [b]und[b] z.B. _cxBDEAdaptersRS28.error.log "hervorgehoben")


grundsätzlich, was ich mache
* ein paar Suchpfade zusammensuchen, weil deren Projekte sind einfach nur grauenhaft (gucken die überhaupt selber da mal in ihre Logs )
(ein paar Units in falschen Verzeichnissen, bissl was implizit von sonstwo gezogen, Requires vergessen und Units doppelt einkompiliert .............)
* alle benötigten Packages suchen
* dort die Requires auslesen (jaaaa, böses RegEx ... LLVM wäre mal geil)
* PackageListe nach den Requires sortieren
* und dann kompilieren
* und noch ein paar Dateien zu den erzeugten DCUs kopieren, also vor allem DFM und RES
(klar, man könnte die Packages auch unsortiert kompileren, wenn es knallt, das Package ans Ende der Liste und später nochmal versuchen, bis möglichst alles durch ist)

\DevExpress\VCL\Library\RS28\_BuildLogsDX.zip -> _BuildDX.log das Log, bzw. die Kopie der Konsolenausgabe, des DevExpressCompiler

DevExpressCompiler -?
Code:
DevExpressCompiler -Params...

-ide:   or %_ide%  = 22.0   (missing = latest Delphi-IDE)
-ver:   or %_ver%  = 28     (optional)
-DXVCL: or %DXVCL% = %_extern%\DevExpress\VCL
-DXLIB: or %DXLIB% = %DXVCL%\Library\RS%_ver%   (optional)
-BDS:   or %BDS%   = C:\Program Files (x86)\Embarcadero\Studio\%_ide%   (optional)
-isWin64            = compile only with DCC64 (instead of DCC32+DCC64)
-SearchPath:       = e.q. for AnyDAC_ComI_D15.dcp in XE

-ide:                    = latest Delphi-IDE
-ide:*                    = all Delphi-IDEs
-ide:"20.0 21.0 22.0"    = comma, semicolon, colon or space separated
-notStopOnFail           = do not stop on compile errors
-noDebugDir              = make no %DXVCL%\..\_Debugging  (combined files from all \Sources)
-noWin64                  = %DXLIB%\RS**\Win64
-doRegister              = register packages in delphi-ide
-ShortTest               = handle only the first 5 packages
-Help or -?              = this help

-Param Value    -Param "Value"
-ParamValue     -Param"Value"
-Param:Value    -Param:"Value"
/Param ...






PS:

Vordefinierte Pfade / IDE-Suchfunktion gehn so nur für "neuere" Delphis, also in C:\Program Files (x86)\Embarcadero\Studio.
Ältere Delphis ab 2006 bis 10, wie z.B. XE, oder mit manuell abweichenden InstallationsPfaden, benötigen die Angabe des %BDS%.



aktuellste IDE kompilieren (z.B. wenn %DXVCL% durch DevExpress-Setup als globale EnvironmentVariable vorhanden)
DevExpressCompiler

aktuellste IDE vom Verzeichnis %DXVCL% nach %DXVCL%\Library\RS%_ver% kompilieren
DevExpressCompiler -DXVCL:"%_extern%\DevExpress\VCL"

aktuellste IDE von DXVCL nach DXLIB kompilieren
DevExpressCompiler -DXVCL:"%_extern%\DevExpress\VCL" -DXLIB:"%_extern%\DevExpress\VCL\Library\RS%%_ver%%"

vorgegebene Delphi-Version inkl. Package-Registrierung und nur Win32 kompilieren
DevExpressCompiler -ide:22.0 -DXVCL:"%_extern%\DevExpress\VCL" -doRegister -noWin64

für alle installierten Delphis kompilieren und darin registrieren
DevExpressCompiler -ide:* -DXVCL:"%_extern%\DevExpress\VCL" -doRegister

Beispiele: Delphi XE und 11 (Suchpfad wegen AnyDAC)
DevExpressCompiler -ide:8.0 -ver:15 -BDS:"C:\Program Files (x86)\Embarcadero\RAD Studio\%%_ide%%" -DXVCL:"%_extern%\DevExpress\VCL" -noWin64 -doRegister -SearchPath:"%_dcp%"
DevExpressCompiler -ide:22.0 -DXVCL:"%_extern%\DevExpress\VCL" -doRegister
Miniaturansicht angehängter Grafiken
FinalBuilder-Actions.jpg   DevExpressCompiler-Log.png   DevExpressCompiler-Log2.png   DevExpressCompiler-LogError.png  
Angehängte Dateien
Dateityp: 7z PartOfMyExternalsGithubRepo_undFinalBuilderScripts.7z (1,86 MB, 7x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Aug 2023 um 19:36 Uhr) Grund: Bold-Tag repariert
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz