Problem compiling my own modified components

I have a set of web core components derived from webEdit, webmemo and others, basically just adding some properties I need. This has worked for years and I have a live application that needs constant improvements or additions.

Today I did the installation with smartsetup, removing all previous installations of FNC and Web Core.

I tried to compile my components, but the previous declaration didn't work:

requires
  rtl,
  vcl,
TMSWEBCorePkgLibDXE15;

contains
  JDTheComponentsTMSa in 'JDTheComponentsTMSa.pas';

Assuming the WebCore package is new, I looked in the directories. As I have done before with previous versions, I changed the TMSWEBCorePkgLibDXE15 to TMSWEBCorePkgLib290, which is the one I found.

For some reason the IDE (Delphi 12.0) keeps saying :
[dcc32 Fatal Error] JDcomponentsTMS_D.dpk(33): E2202 Required package 'TMSWEBCorePkgLib290' not found

Also tried other variations of the package name that I see there but nothing works. All paths in the IDE are configured correctly.

So I better ask, what is the package (or packages) I would have to use there, and where should be the path (relative to smart setup install path)?

My components are of the kind that go in pairs, one for the component library source and the other for the core source, as instructed some years ago by Bruno (not for the web form designer).

When installing with TMS Smart Setup, the package name to reference is TMSWEBCorePkgLib290 instead of TMSWEBCorePkgLibDXE15 , so just change this reference

That was the first one I tried, but upon compiling it keeps failing

[dcc32 Fatal Error] JDcomponentsTMS_D.dpk(33): E2202 Required package 'TMSWEBCorePkgLib290' not found

I guess there is something wrong with the path configuration.

Locate TMSWEBCorePkgLib290.dcp and make sure its folder is in your library path

Problem is, although there is TMSWEBCorePkgLib290.bpl, there is no corresponding
.dcp anywhere on my disk. The .dcp files I found are only TMSWebCorePkgLib.dcp in many of the output directories.

The interesting thing is that if I put that TMSWebCorePkgLib in my uses (instead of the ...DXE15) the compiler accepts it, but then it "does not find" all other units in my component source uses declaration,

requires
  rtl,
  vcl,
  TMSWEBCorePkgLib;
  //TMSWEBCorePkgLibDXE15;

contains
  JDTheComponentsTMSa in 'JDTheComponentsTMSa.pas';

end.

And I quote "does not find" because if I right click-"open file at cursor" over Web or WebLib.controls, for example, the IDE actually opens the file (so it exists in the path) but the compiler says it can't find it. That is what I did and the IDE opened the file in the screenshot.

Am not convinced that it is a path problem in the IDE. I verified all paths in the IDE (with IDE restart after) and both for options-language-delphi and in the options-TMS web core library paths are correct.
(for the IDE component the path points to ... Component library source, and for the Webcore version it points to ... core source )

I even uninstalled all the smartsetup from my usual location and put it in C:\TMS just in case the path grew too large, however there is no change in the problem.

So am almost about to install an older version so I can keep working on the project.

Lastly, all the webcore demo programs I tested seem to run fine, but all show an error-warning saying that JS was compiled with a different compiler version

I guess that when you say

"it "does not find" all other units in my component source uses declaration"

you mean that when you compile your project (with pas2js transpiler), it doesn't find your own custom component units?

If this is the case, the most likely reason is that it is because you haven't added the folder where the runtime source code files for your components was not added to the TMS WEB Core library path. Please try to add under Tools,Options, TMS WEB, Library path.

What it does not find is the source code of the TMS component library source and core source, even though the paths are supposed to be correct. Hard to believe, I know.

The way I am compiling is on the Delphi IDE, menu - project-Compile or build.
The paths are there:

On Tools, options, TMS WEB, library path it has the path to my component "core source".
On Tools, options, language, Delphi, library path, it has the path to my component "Component library source".

In 30 years using Delphi this is the first time I ever have battled on paths but then I was reading the source code. After checking the source code files, my guess is that the new code for 2.9.x has probably some conditional compilation related to the new 64 bit compiler and it does not help. A minimum erorr in that conditionals can produce things like this. I have delphi 12.0 and probably will not update it in a number of years, and it has only the 32 bit compiler.

Anyway... I needed an urgent change on my live application so I needed a solution to compile it right away. I removed completely everything TMS from my pc again. Wiped all remaining files in all places I could find, cleaned the registry of any TMS reference, and cleaned up paths in the delphi 12.0 IDE.
Then, reinstalled my backup copy of the TMS WebCore 2.8 from april 2025. Thanks god I save backups of my components from time to time.

This time, my component (is just one unit) compiled in an instant and installed in the IDE as expected, in less than a second.

In the meantime am operational again but clearly can not upgrade WebCore until this is fixed, or maybe make another test round in the near future, this time knowing it can be a problem.

I really can't see any difference between v2.8 and v2.9 causing such path issue.
Did you install v2.8 also via Smart Setup or did you use the classic installer this time?

The 2.8 installation I did is with the classic setup in my downloads page, not with smart setup.

But there is more...
For pure scientific reasons, after completing my work, I repeated the procedure (wipe all tms related from my pc, reinstalling again). This time, I used the classic setup specific for Delphi 12 as found in my downloads page. (not the all in one).
What I did spot is a difference between the smartsetup install and the classic install. The smartsetup installs TMSWEBCorePkgLibDXE290 but the classic setup installs TMSWEBCorePkgLibDXE15. The screenshot attached is for version 2.9.3.0 freshly installed in Delphi 12.0.

And the same again, with this 2.9.3.0 version with classic setup, the units are also not found and it does not compile. (not found: web, WEBLIB.controls and others). As I mentioned before, the IDE actually opens the file (say, web.pas) if I "right-click, open file under cursor" over the declaration in the editor. I even made a copy of my component project and rename it, to clean up the possibility of problem with naming.

I was thinking that maybe in this new 2.9.3.0 version the project file source needs some other declaration? This is the source:

package JDcomponents4TMSWEBCORE_D;

{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE RELEASE}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}

requires
  rtl,
  vcl,
  TMSWEBCorePkgLibDXE15;  << from classic 2.9.3.0 setup
// compiled with TMS 2.8.x - version from april 2025
// tested with 2.9.3 smartsetup and classic install, none of them worked

contains
  JDTheComponents4TMSWEBCOREa;

end.

If it helps, I can send you my full component files, which is simply a unit with webbutton, webedit, webmemo and webcheckbox with about four text properties I added, no methods or any fancy stuff.




You should find web.pas in the folder
($TMSWEBCOREinstalldir)\Component Library Source

In order for your component package to compile, the IDE library path should include the folder ($TMSWEBCOREinstalldir)\Component Library Source.
Assuming you use the Win32 IDE, this should be the Win32 library path.
Assuming you use the Win64 IDE, this should be the Win64 library path.

If you installed using the classic installer, your component package requires list should have the reference to TMSWEBCorePkgLibDXE15.dcp
If you installed using TMS Smart Setup, your component package requires list should have the reference to TMSWEBCorePkgLibDXE290.dcp

I would also suggest to search your entire system for other web.pas files. The IDE library point should ONLY point to the latest web.pas under the folder ($TMSWEBCOREinstalldir)\Component Library Source
There should not be other web.pas files in your IDE library path.

I see that I have had everything already defined exactly as you indicate.

There is no environment $TMSWEBCOREinstalldir environment variable defined anywhere that I can find, but the Component Library Source folder is defined in the IDE library path.
The installation path is c:\dev\comp\suit\tms\2020s\TMSWebCoreAthens.
This is the Windows 32-bit library path in the IDE:

The base installation path appears in the TMSWeb options.

I understand that the library path in the first line in TMS WEB options is for the js transpiler and should point to my component core source. It has been so in the working versions (webcore 2.8 and previous).

The installation folder created by the setup (Classic or SmartSetup) does not contain separate versions for 32 or 64 bits Component Library Source and I assume it is like so because my Delphi 12.0 IDE is 32 bits only. My build configuration target platform is Windows 32 bit.
The subfolder "Component Library Source" on disk, does contain the file web.pas, and there is no other file named like that anywhere in my disk. (if the compiler is now internally looking to differentiate 32 / 64 bits subfolders somehow, that could be the culprit)

As I mentioned previously, the IDE can actually find and open the web.pas file. It is the compiler that can't find it on this 2.9.x version.
If I right click, "open file at cursor" over any of the pas files declarations, the IDE opens the file, even though the build process reports it as "Not Found"



You can see that the bcc compiler line contains the path.

And again, this same path configuration in the IDE works for versions 2.8 and priors.

It is beyond my understanding why this is happening.
You are actually compiling a package for install in the IDE with the DCC32 compiler. This is unrelated to the pas2js compiler or TMS WEB Core version. It is a stub package you compile as a VCL component package into the IDE for use with TMS WEB Core just at design-time.
If you would keep the "Component Library Source" folder (on disk and in the library path) and uninstall TMS WEB Core, you should still be able to compile & install this package.
Another thing to try is to change the order of the units in your unit uses list and put for example WEBLib.Controls first and see if it can find this file or not. If it can also not find this file, this would indicate it is an issue with the compiler not seeing the entire "Component Library Source" folder as opposed to not seeing web.pas in this folder.

Actually, per your instructions from some years ago, on Delphi I must use one component for the delphi IDE (The stub) and the other for the pas2js compiler.
Each one has a separate project. The screenshots sent before are from the stub project (component library source), but it fails the same with the project for pas2js project (core source).

I started using webcore with visual studio core, where it was only one package, and when finally updated Delphi to version 11, you explained how to compile both stub and webcore component. It has worked ever since.

I think that what is happening is that the Webcore source somewhere and somehow is forcing internally another path, and that could also be the reason that problem does not happen on WebCore version 2.8 and priors.

What am going to do next is to clean slate again, and install it with smartsetup at the default locations where the installer wants to put it. I always change the install location to my own folders, but maybe the reason it does not fail at your location is because you could be using the installer default locations.

Will report back.

Did you try to create a new package, move the source code file(s) of your components to this new package and try to install this new package into the IDE (to exclude there is not something corrupt with the existing package file)?

Yes, I tried that. I even created a brand new one (webedit) with a simple property just to test.
And results are the same, the compiler reports it can't find the web.pas and other source files.

But yesterday I did something different. I commented the package declaration in the project source, and then, clearly the pascal source code files are found in the path as expected, even though the program of course does not compile because the missing declarations.


That fact brought to my mind that the elephant in the room is that the required package TMSWEBCorePkgLibDXE290.dcp (nor TMSWEBCorePkgLib290).dcp is missing, not included in the installation. Only .bpl is there. (as for the classical 2.9.3 setup, TMSWEBCorePkgLibDXE15.dcp is missing).

I have been including TMSWEBCorePkgLib because the IDE said I have to include it, and I just assumed that on this version that is the package to use, even though you mentioned the one with DXE290 in the name.

Considering that all the Demos work and my own test programs without custom components as well, maybe is just a matter of adding that file to the installation? AFAIK I can not generate it from the sources.

In the previous version I have (2.8) the .TMSWEBCorePkgLibDXE15.dcp file was surely included.

The difference between installing with the classic installer and the smart setup installer is that the classic installer uses packages names with suffix DXE16 for Delphi 13.
When you install with smart setup, the package name is neutral and the compiler itself will generate the version dependent suffix, i.e. 370 for Delphi 13.
If you use smart setup and you have created your own packages that have a dependency to a TMS package, then use a neutral package reference name, i.e. TMSWEBCorePkgLib

Well, that means that I have to give up on any new versions.

Maybe I could try to add my custom components and compile them for the Web Designer. I imagine it should be something similar to the Visual Studio Code way of doing things. But I will open another thread for that topic because I completely ignore how to do it.

In the meantime, for Delphi 12.0, today I left installed FNC suite with smart setup, uninstalled the smartsetup 2.9.3 Webcore version and re installed Webcore 2.8 from April 2025 with classic setup.

Everything compiles immediately for the IDE component stub and for the pas2js compiler. Am sure something is wrong from factory that could be fixed for Delphi 12.0.

I cannot understand how it could be something in TMS WEB Core.I cannot see any of the problem you mention here.
Send the package file so we can reproduce it here.
Also, if you can install TMS FNC Components for TMS WEB Core or any of the additional packages at TMS Software | WEB Partners, this shows all is installing and compiling and there must be really something wrong with your package or IDE setup.

OK, will send you my modified components package via email. It is nothing special, just some basic components with extra properties I need.
It has worked perfectly until WebCore version 2.9.

I have not attempted to compile anything for FNC components for Web Core.
At some point in the past I installed some of the web partners components, but I removed them long ago, as they are not useful in my projects.

We will look into this as soon as we received your email.