20 June, 2012

EurekaLog 7 files layout and recompilation of EurekaLog

This article will explain files layout for EurekaLog 7 installation and recompilation of EurekaLog (applicable only for Enterprise edition).

Important Note: please see most recent version of this documentation here.

File layout

EurekaLog 7 changes way to manage its files. Now files are organized in typical manner for Delphi libraries:
  • \Bin - compiled executables (tools), 32-bit. Each EurekaLog tool and helper has its .exe/.dll files here (except for EurekaLog itself).
  • \Bin64 - compiled executables, 64-bit. Not all tools have 64-bit counterparts.
  • \Lib - precompiled EurekaLog files (units):
    • \Lib\<platform> - precompiled EurekaLog units (.dcu, .obj, .hpp). Each folder has subfolders for Debug/Release configuration and subfolder for different IDE versions.
    • \Lib\Obj\<platform> - precompiled external source code (non-Delphi). This is location for .obj files of ZLib project. ZLIb is used by EurekaLog to compress injected debug information.
    • \Lib\Common - copy of all resource files.
    \Lib folder is used to compile your projects.
  • \Packages - EurekaLog executables (packages and command-line compiler).
  • \Source - source code of EurekaLog (.pas files). Full source code is available only for Enterprise edition. Other editions have only headers (declarations). Full source code can be used to recompile EurekaLog. By default this folder is not used by your projects.
    • \Source - EurekaLog files. Those are files for your application
    • \Source\Design - files for IDE expert. Used at design-time.
    • \Source\Compiler - files for command-line compiler (ecc32/emake).
    • \Source\Common - common files (includes and resources).

\Lib folder should be mentioned in search paths either in IDE or your project. When you compile your project - precompiled files from \Lib folder are used. EurekaLog itself is not compiled (which is faster, saves original settings for EurekaLog compilation, does not modify files, UAC-friendly).

There are Debug and Release subfolders in \Lib\<platform> folders.
Release contains files which were compiled with "Use Debug DCUs" option unchecked.
Debug contains files which were compiled with "Use Debug DCUs" option checked.
There are no significant differences in other compilation options for these files. Both have debug information included.
Release folder (proper IDE subfolder - see below) should be listed in library search paths for IDE or project.
Debug folder (proper IDE subfolder - see below) should be listed in debug search paths for IDE or project.

If your application has "Use Debug DCUs" option checked - then files from Debug folder will be used (regardless of Debug/Release profile in your application).
If your application has "Use Debug DCUs" option unchecked - then files from Release folder will be used (regardless of Debug/Release profile in your application).

Both Release and Debug folders contain subfolders for various supported IDEs. To map your IDE version to name of folder inside Release and Debug folders - see this article.

Source folder should be added to IDE browsing paths options, so IDE will be able to open and show EurekaLog's .pas files.

Files from Packages folder are copied to \bin folder of your IDE. This is done to avoid altering %PATH% environment variable. I.e. files in Packages folder are not used, they are hold as master-files to restore EurekaLog in \bin folder of IDE.

The entire EurekaLog folder in Program Files contains only read-only files which are not modified for typical usage cases. All files which should be writable (such as Demos, bug reports, profiles, translations, etc.) are installed into %APPDATA%\EurekaLab s.a.s\EurekaLog\ folder.


EurekaLog Enterprise comes with full source code, which you can use to recompile EurekaLog. EurekaLog Enterprise contains additional \Projects folder, which contains project files to compile EurekaLog. There are project files for run-time package, design-time package (IDE expert) and command-line compiler (ecc32/emake). There are no special project for EurekaLog itself, because EurekaLog is not application, but library.

To recompile EurekaLog, you first must delete existing .dcu/.obj files. We recommend to rename all \Lib\<platform> folders (please, keep \Lib\Obj\ and \Lib\Common untouched) to remove them from search path, so IDE will not be able to find and use them. That way you will be able to restore original files at any time.

The next step depends on what you want to recompile.

Packages and compilers

  1. To recompile packages and/or compilers you must either run your IDE under administrator account or to change file permissions for EurekaLog folder in Program Files to allow modifications by limited user accounts.
  2. Then you should open corresponding project file from Projects folder. Please, select project corresponding to your IDE. You can verify it here. You can also open project group to load all 3 projects (run-time package, design-time package and command-line compiler).
  3. (Optionally) Change settings of project(s) as you desire.
  4. Compile projects. Compiled executables will be placed to Packages folder. Compiled units will be placed to corresponding folder under Lib folder (make sure output paths exist).
Note: by default these compiled files will not be used by IDE. That's because IDE use EurekaLog files from \bin folder of IDE, not from Packages folder. To automatically reflect your changes - either copy files from Packages folder to \bin folder of your IDE or change output path setting of compiled projects to \bin folder of your IDE.

EurekaLog files

EurekaLog files which are used for your applications are located in \Source and \Source\Common folders. The simplest way to re-create .dcu/.obj files for these files - is to compile run-time package (EurekaLogCore) as explained above. This will create set of .dcu/.obj files in corresponding subfolder under \Lib folder.

If you do not want one-time recompilation, but want to constantly use actual .pas files, so you recompile EurekaLog each time you compile your project(s) - then you should do this:
  1. Remove existing .dcu/.obj files for EurekaLog (as explained above) and for your project(s).
  2. Add \Source and \Source\Common folders to library search paths of your project or IDE (to make this change global for all projects). You should add these folders to library search paths, not to browsing search path (as it's by default).
  3. Compile your project. This will use .pas files from Source folder. EurekaLog will be recompiled each time you compiled your project. .dcu/.obj files will be placed to units output folder of your project (as set in its options).
This method can be used to constantly recompile EurekaLog when you changes its source code a lot (i.e. you develop your project and make changes in EurekaLog at the same time).

Final notes

EurekaLog does not contain source code for ZLib library. To recompile .obj files from \Lib\Obj folder - you must obtain source code for ZLib library. It's open-source cross-platform freeware library written in C. See official web-site.

EurekaLog contains only Delphi source code (.pas). C++ Builder support is implemented as compilation of Delphi files with C++ Builder. There are no .cpp/.hpp files. All shipped .obj/.hpp/.lib files are auto-generated from .pas files. All EurekaLog projects have "Generate C++ files" option turned on.

EurekaLog Viewer Tool uses DevExpress components. They are not included with EurekaLog. To recompile Viewer you must have DevExpress components installed. Viewer uses Express QuantumGrid, Express Printing System and ExpressBars.

Currently source code for EurekaLog Tools are not included in EurekaLog as it's a separate package (EurekaLog Tools Pack).