Ticket UUID: | a77029cdea236d8150edfb64824226f2c8d67ed9 | |||
Title: | MS-VS build system: pckIndex.tcl when building for 9 misses "t" for TCL 8.6 part | |||
Type: | Bug | Version: | 9.0.1 | |
Submitter: | oehhar | Created on: | 2025-02-25 11:01:31 | |
Subsystem: | 53. Configuration and Build Tools | Assigned To: | jan.nijtmans | |
Priority: | 5 Medium | Severity: | Minor | |
Status: | Closed | Last Modified: | 2025-02-27 09:05:45 | |
Resolution: | Fixed | Closed By: | jan.nijtmans | |
Closed on: | 2025-02-27 09:05:45 | |||
Description: |
I have a binary extension which is build for 9.0.1 and 8.6. https://sourceforge.net/projects/zint/, see backend_tcl\win subfolder The pckIndex.tcl file is build identical for both cases, with the difference, that the TCL 9 build does not put the "t" suffix to the DLL. if {[package vsatisfies [package provide Tcl] 9.0-]} { package ifneeded zint 2.15.0 [list load [file join $dir tcl9zint2150.dll]] } else { package ifneeded zint 2.15.0 [list load [file join $dir zint2150.dll]] } The "t" is missing after "zint2150". If I install in the same folder, I get an universal package (TCl 8.6 and 9), but this glitch does not allow to use the 8.6 version. The makefile.vc is as follows: # The name of the package PROJECT = zint PROJECT_REQUIRES_TK = 1 # Generic source is in root build folder (1 up) GENERICDIR = .. # Access the generic backend files BACKEND_DIR = $(ROOT)\..\backend !include "rules-ext.vc" # Define the object files and resource file that make up the extension. # Note the resource file does not makes sense if doing a static library build # hence it is under that condition. TMP_DIR is the output directory # defined by rules for object files. PRJ_OBJS = \ $(TMP_DIR)\zint.obj \ $(TMP_DIR)\2of5.obj \ $(TMP_DIR)\2of5inter.obj \ $(TMP_DIR)\2of5inter_based.obj \ $(TMP_DIR)\auspost.obj \ $(TMP_DIR)\aztec.obj \ $(TMP_DIR)\bc412.obj \ $(TMP_DIR)\bmp.obj \ $(TMP_DIR)\channel.obj \ $(TMP_DIR)\codabar.obj \ $(TMP_DIR)\codablock.obj \ $(TMP_DIR)\code11.obj \ $(TMP_DIR)\code128.obj \ $(TMP_DIR)\code128_based.obj \ $(TMP_DIR)\code16k.obj \ $(TMP_DIR)\code1.obj \ $(TMP_DIR)\code49.obj \ $(TMP_DIR)\code.obj \ $(TMP_DIR)\common.obj \ $(TMP_DIR)\composite.obj \ $(TMP_DIR)\dllversion.obj \ $(TMP_DIR)\dmatrix.obj \ $(TMP_DIR)\dotcode.obj \ $(TMP_DIR)\dxfilmedge.obj \ $(TMP_DIR)\eci.obj \ $(TMP_DIR)\emf.obj \ $(TMP_DIR)\filemem.obj \ $(TMP_DIR)\general_field.obj \ $(TMP_DIR)\gif.obj \ $(TMP_DIR)\gridmtx.obj \ $(TMP_DIR)\gs1.obj \ $(TMP_DIR)\hanxin.obj \ $(TMP_DIR)\imail.obj \ $(TMP_DIR)\large.obj \ $(TMP_DIR)\library.obj \ $(TMP_DIR)\mailmark.obj \ $(TMP_DIR)\maxicode.obj \ $(TMP_DIR)\medical.obj \ $(TMP_DIR)\output.obj \ $(TMP_DIR)\pcx.obj \ $(TMP_DIR)\pdf417.obj \ $(TMP_DIR)\plessey.obj \ $(TMP_DIR)\png.obj \ $(TMP_DIR)\postal.obj \ $(TMP_DIR)\ps.obj \ $(TMP_DIR)\qr.obj \ $(TMP_DIR)\raster.obj \ $(TMP_DIR)\reedsol.obj \ $(TMP_DIR)\rss.obj \ $(TMP_DIR)\svg.obj \ $(TMP_DIR)\telepen.obj \ $(TMP_DIR)\tif.obj \ $(TMP_DIR)\ultra.obj \ $(TMP_DIR)\upcean.obj \ $(TMP_DIR)\vector.obj # Define any additional compiler flags that might be required for the project PRJ_DEFINES = -D_CRT_SECURE_NO_DEPRECATE PRJ_DEFINES = $(PRJ_DEFINES) -DZINT_NO_PNG=1 # PRJ_DEFINES = $(PRJ_DEFINES) -DZINT_VERSION=PACKAGE_VERSION PRJ_DEFINES = $(PRJ_DEFINES) -I$(TMP_DIR) PRJ_DEFINES = $(PRJ_DEFINES) -I$(BACKEND_DIR) # Define the standard targets !include "$(_RULESDIR)\targets.vc" # We must define a pkgindex target that will create a pkgIndex.tcl # file in the $(OUT_DIR) directory. We can just redirect to the # default-pkgindex target for our sample extension. pkgindex: default-pkgindex $(ROOT)\manifest.uuid: copy $(WIN_DIR)\gitmanifest.in $(ROOT)\manifest.uuid git rev-parse HEAD >>$(ROOT)\manifest.uuid $(TMP_DIR)\zintUuid.h: $(ROOT)\manifest.uuid copy $(WIN_DIR)\zintUuid.h.in+$(ROOT)\manifest.uuid $(TMP_DIR)\zintUuid.h # The default install target only installs binaries and scripts so add # an additional target for our documentation. Note this *adds* a target # since no commands are listed after it. The original targets for # install (from targets.vc) will remain. # install: default-install-docs-n # Explicit dependency rules $(GENERICDIR)\zint.c : $(TMP_DIR)\zintUuid.h {$(BACKEND_DIR)}.c{$(TMP_DIR)}.obj:: $(cc32) $(pkgcflags) -Fo$(TMP_DIR)\ @<< $< << The build instructions are as follows: # In MS-VC9 32 bit prompt: nmake -f makefile.vc TCLDIR=C:\myprograms\tcl8.6 TKDIR=C:\myprograms\tcl8.6 nmake -f makefile.vc TCLDIR=C:\myprograms\tcl8.6 TKDIR=C:\myprograms\tcl8.6 INSTALLDIR=..\..\..\zintinstall install # In VS2022 32 bit prompt: nmake -f makefile.vc TCLDIR=C:\myprograms\tcl9.0 TKDIR=C:\myprograms\tcl9.0 nmake -f makefile.vc TCLDIR=C:\myprograms\tcl9.0 TKDIR=C:\myprograms\tcl9.0 INSTALLDIR=..\..\..\zintinstall install I would also love to have one command line switch for TCLDIR and TKDIR, as they are mostly the same. In a more general scope, I am not so happy with an entry in pckIndex.tcl, without a DLL. This is generally the case after the build and install on one target version. This leads to the following miss-behaviour:
Thanks for all, Harald | |||
User Comments: |
oehhar added on 2025-02-27 08:45:00:
This fixes the issue by *assuming* that the TCL 8.6-build will be thread-enabled. I have never seen a non-thread enabled windows build, so this is fine. Nevertheless, for the long run, I would prefer, that a TCL9 build creates a pckIndex.tcl file like this: if {[package vsatisfies [package provide Tcl] 9.0-]} { package ifneeded zint 2.15.0 [list load [file join $dir tcl9zint2150.dll]] } and a TCL 8.6 build would create a pckIndex.tcl file like this: if {[package vsatisfies [package provide Tcl] 8.6]} { package ifneeded zint 2.15.0 [list load [file join $dir zint2150t.dll]] } and if they are installed in the same folder, the pckIndex.tcl files are merged. E.g. the install process of pckIndex.tcl should append the file instead replace it. That would solve all issues at once. Thanks for all, Harald jan.nijtmans added on 2025-02-26 20:39:29: Harald, can you try [14db8eaae08b25ac|this] change? jan.nijtmans added on 2025-02-26 20:04:54: I think I see what the problem is. Stay tuned! jan.nijtmans added on 2025-02-26 19:41:57: If you follow the exact same procedure, but then with the sampleextension, does it have the same problem? If so, it's a TEA problem, if not it's a problem in the zint makefile.vc. Are you using a rules.vc any later than this commit? |
