This repository contains basic portions of the restructured Investigative Generic Library (IGLib) in the repository section. The current document also contains information about the complete IGLib in the respective section, which consists of multiple repositories. IGLib is currently undergoing some changes.
Contents:
- Links
- About the Repository - information about the current repository and contained projects
- The Investigative Generic Library (IGLib) - information about IGLib as a whole; see also README-scripts for a quick list of repositories with links
- Repositories - about repositories that constitute IGLib
- IGLib Restructuring
- Legacy IGLib Libraries
- License
- This repository - IGLibCore (readme)
- Container repository (readme) used to clone this and other IGLib repositories, such that dependencies can be handled by a common Visual Studio repository
- Basic Legacy IGLib repository (readme)
- Development Wikis (private repository)
This repository contains the IGLibCore library and other libraries that include common lower-level utilities for IGLib, and other libraries commonly used by more specialized libraries and by applications of both the new and the legacy IGLib, as well as some other libraries and applications. IGLib consists of several other libraries and demo applications. You can find more details below and in the Links Section.
- src/IGLib.Core (readme on GitHub) - basic common utilities for IGLib; may not depend on reflection and libraries that would affect trimming
- src/IGLib.CoreExtended (readme on GitHub) - extended common utilities for IGLib; can use reflection, but should not depend on heavy weight libraries
- src/IGLib.Numerics (readme on GitHub) - basic numerical utilities; depend on Math.Net Numerics
- src/IGLib.WinForms (readme on GitHub) - some common Windows Forms utilities; used e.g. in some 3D graphics projects
- src/IGLib.Transfer (readme on GitHub) - a transient project, mainly for transfer of utilities from (legacy) IGLib Framework or from sandbox environments
- ...
- src/IGLib.Core.Tests (readme on GitHub) - unit tests and low level integration tests for IGLibCore projects
- src/IGLib.TestBase (readme on GitHub) - utilities for test projects, such as base class for XUnit tests, output and loggers for tests, etc.
- src/IGLib.TestBase.ExampleTests (readme on GitHub) - contains some example test classes and methods to look at when creating unit tests (t.g. use of output and loggers, multiple test inputs via method attributes...)
- ...
- src/0InitModules/InitModulesCore (readme on GitHub) - initialization project for more basic projects; automatically runs initialization script for dependent projects (only once for all buiilds between rebuilds)
- src/0InitModules/InitModulesCoreExtended (readme on GitHub) - initialization project for extended projects, automatically runs initialization script for dependent projects
To clone and work with this and other IGLib libraries (build, run, develop), use the new IGLib cotainer repository (iglibmodules). After cloning the repository, run one of the PowerShell scripts within iglibmodules clone for cloning / updating IGLib repositories, such as UpdateRepos_Basic.ps1 or UpdateReposLegacy_Extended.ps1. After cloning, open the solution IGLibCore.sln within the current repository (iglibmodules/IGLibCore/), or one of the common solutions within the iglibmodules/IGLibCore/ directory, such as IGLibCore_All.sln. See also the container repository's readme file for further information.
Project can also be built and run without cloning the iglibmodules repository. Just clone the current repository into IGLibScriptingCs/ directory in the appropriate location in the local file system, open the solution in Visual Studio or other ID, and build and run.
Building will automatically clone some dependency repositories in the directory containing the current repository (side-by-side to the repository), including possibly some repositories in the ../_external/ directory.
Even better, you can manually clone the dependency repositories by runninng the scripts scripts/UpdateDependencyRepos.ps1 and scripts/UpdateDependencyReposExtended.ps1 before opening the solution. Without this preparation step, you may need to reload the dependency projects after running the first build (which will fail). After reloading the dependency projects, subsequent builds should pass.
The legacy IGLib's base library is located at:
https://github.com/ajgorhoe/IGLib.workspace.base.iglib.git. When building the repository using the iglibmodules container repository, the legacy IGLibFramework projects can be build in a similar way as projects in the currend repository; just use the corresponding cloning scripts within the ../iglibmodules/ directory for cloning the legacy IGLib repositories, such as UpdateReposLegacy_Basic.ps1 or UpdateReposLegacy_Extended.ps1.
- IGLibCore (this repository) - a base library containing some common utiities with few dependencies (UI, graphics, reflection dependencies are not allowed).
- iglib - the legacy IGLib's base libraries. Used also by newer applications and new IGLib, will continued to be maintained. Contains documentation for the legacy IGLib.
- Helper Repositories:
- iglibmodules - a container repository used for cloning and building and running locally the IGLib libraries and applications.
- IGLibScripts contains some usful scripts (e.g. for cloning and updating repositories, backups, some Windows utilities, etc.), also used by IGLib for cloning and updating the reoisitories.
- codedoc contains scripts and other tools for generating and viewing code documentation for software projects, including IGLib projects.
- CodeDocumentation contains compiled code documentation for parts of IGLib (experimental), generated via codedoc, then copied to and committed to tge repository.
- IGLibGraphics3D - a 3D graphics library.
- IGLibScripting - Rudimentary scripting utilities; some utiities will be transferred here from legacy IGLib.
- IGLibScriptingCs - C# scripting, dynamic building and execution. Some utilities from legacyLib will be modernized in this repository.
- IGLibSandbox - a private repository for prototyping, experimental, and early development
Legacy IGLib libraries contain lots of useful tools from different areas. Not all of these libraries were made publicly available, as many were developed within corporate environment. Due to complex dependency structure, some of these libraries were not ported to the new open source .NET (Core) when it was introduced by Microsoft in 2014. Some libraries could be ported to .NET but were slowly abandoned because the new .NET ecosystem changed significantly and some of the crucial dependencies were not actively developed or supported any more.
Because of this, many libraries of the legacy IGLib Framework were phased out. Some others are not actively developed, but are used in existing applications. Only the IGLib base library is still used in new applications, but it is also not developed, except for the necessary fixes needed in the applications that use it. The newer libraries were started after the new .NET Core (later renamed to .NET) became stable.
The figure below shows dependencies betweem some IGLib modules, some legacy ones as well as the newer modules developed on the newer .NET Core / .NET (click the image to view searchable version full screen, or click here to open a bitmap version):
Bulding legacy IGLib libraries is a bit more complex due to their dependencies. See the IGLib Framework repo's readme file to learn more about this.
Copyright © Igor Grešovnik.
See LICENSE.md (local version) for license information.
Disclaimer:
The repository owner reserves the right to change the license to any of the permissive open source licenses, such as the Apache-2 or MIT license.
![[Trefoil knot]](https://ajgorhoe.github.io/IGLibFramework/images/Graphics3D/TreFoilKnotRayTracing/TransparentBackground/TrefoilKnot_Blue_RayTracer_BlackBackground_MetallicBSDF_Transparent_1.webp)