@@ -95,88 +95,60 @@ interface
9595// #######################################################
9696
9797type
98- TPythonVersionProp = packed record
98+ TPythonVersionProp = record
9999 DllName : string;
100100 RegVersion : string;
101101 APIVersion : Integer;
102- CanUseLatest : Boolean;
103102 end ;
104103const
105104{ $IFDEF MSWINDOWS}
106105 PYTHON_KNOWN_VERSIONS: array [1 ..10 ] of TPythonVersionProp =
107106 (
108- (DllName: ' python25.dll' ; RegVersion: ' 2.5' ; APIVersion: 1013 ; CanUseLatest: True ),
109- (DllName: ' python26.dll' ; RegVersion: ' 2.6' ; APIVersion: 1013 ; CanUseLatest: True ),
110- (DllName: ' python27.dll' ; RegVersion: ' 2.7' ; APIVersion: 1013 ; CanUseLatest: True ),
111- (DllName: ' python32.dll' ; RegVersion: ' 3.2' ; APIVersion: 1013 ; CanUseLatest: True ),
112- (DllName: ' python33.dll' ; RegVersion: ' 3.3' ; APIVersion: 1013 ; CanUseLatest: True ),
113- (DllName: ' python34.dll' ; RegVersion: ' 3.4' ; APIVersion: 1013 ; CanUseLatest: True ),
114- (DllName: ' python35.dll' ; RegVersion: ' 3.5' ; APIVersion: 1013 ; CanUseLatest: True ),
115- (DllName: ' python36.dll' ; RegVersion: ' 3.6' ; APIVersion: 1013 ; CanUseLatest: True ),
116- (DllName: ' python37.dll' ; RegVersion: ' 3.7' ; APIVersion: 1013 ; CanUseLatest: True ),
117- (DllName: ' python38.dll' ; RegVersion: ' 3.8' ; APIVersion: 1013 ; CanUseLatest: True )
107+ (DllName: ' python25.dll' ; RegVersion: ' 2.5' ; APIVersion: 1013 ),
108+ (DllName: ' python26.dll' ; RegVersion: ' 2.6' ; APIVersion: 1013 ),
109+ (DllName: ' python27.dll' ; RegVersion: ' 2.7' ; APIVersion: 1013 ),
110+ (DllName: ' python32.dll' ; RegVersion: ' 3.2' ; APIVersion: 1013 ),
111+ (DllName: ' python33.dll' ; RegVersion: ' 3.3' ; APIVersion: 1013 ),
112+ (DllName: ' python34.dll' ; RegVersion: ' 3.4' ; APIVersion: 1013 ),
113+ (DllName: ' python35.dll' ; RegVersion: ' 3.5' ; APIVersion: 1013 ),
114+ (DllName: ' python36.dll' ; RegVersion: ' 3.6' ; APIVersion: 1013 ),
115+ (DllName: ' python37.dll' ; RegVersion: ' 3.7' ; APIVersion: 1013 ),
116+ (DllName: ' python38.dll' ; RegVersion: ' 3.8' ; APIVersion: 1013 )
118117 );
119118{ $ENDIF}
120119{ $IFDEF _so_files}
121120 PYTHON_KNOWN_VERSIONS: array [1 ..10 ] of TPythonVersionProp =
122121 (
123- (DllName: ' libpython2.5.so' ; RegVersion: ' 2.5' ; APIVersion: 1013 ; CanUseLatest: True ),
124- (DllName: ' libpython2.6.so' ; RegVersion: ' 2.6' ; APIVersion: 1013 ; CanUseLatest: True ),
125- (DllName: ' libpython2.7.so' ; RegVersion: ' 2.7' ; APIVersion: 1013 ; CanUseLatest: True ),
126- (DllName: ' libpython3.2.so' ; RegVersion: ' 3.2' ; APIVersion: 1013 ; CanUseLatest: True ),
127- (DllName: ' libpython3.3.so' ; RegVersion: ' 3.3' ; APIVersion: 1013 ; CanUseLatest: True ),
128- (DllName: ' libpython3.4.so' ; RegVersion: ' 3.4' ; APIVersion: 1013 ; CanUseLatest: True ),
129- (DllName: ' libpython3.5.so' ; RegVersion: ' 3.5' ; APIVersion: 1013 ; CanUseLatest: True ),
130- (DllName: ' libpython3.6.so' ; RegVersion: ' 3.6' ; APIVersion: 1013 ; CanUseLatest: True ),
131- (DllName: ' libpython3.7.so' ; RegVersion: ' 3.7' ; APIVersion: 1013 ; CanUseLatest: True ),
132- (DllName: ' libpython3.8.so' ; RegVersion: ' 3.8' ; APIVersion: 1013 ; CanUseLatest: True )
122+ (DllName: ' libpython2.5.so' ; RegVersion: ' 2.5' ; APIVersion: 1013 ),
123+ (DllName: ' libpython2.6.so' ; RegVersion: ' 2.6' ; APIVersion: 1013 ),
124+ (DllName: ' libpython2.7.so' ; RegVersion: ' 2.7' ; APIVersion: 1013 ),
125+ (DllName: ' libpython3.2.so' ; RegVersion: ' 3.2' ; APIVersion: 1013 ),
126+ (DllName: ' libpython3.3.so' ; RegVersion: ' 3.3' ; APIVersion: 1013 ),
127+ (DllName: ' libpython3.4.so' ; RegVersion: ' 3.4' ; APIVersion: 1013 ),
128+ (DllName: ' libpython3.5.so' ; RegVersion: ' 3.5' ; APIVersion: 1013 ),
129+ (DllName: ' libpython3.6.so' ; RegVersion: ' 3.6' ; APIVersion: 1013 ),
130+ (DllName: ' libpython3.7.so' ; RegVersion: ' 3.7' ; APIVersion: 1013 ),
131+ (DllName: ' libpython3.8.so' ; RegVersion: ' 3.8' ; APIVersion: 1013 )
133132 );
134133{ $ENDIF}
135134{ $IFDEF DARWIN}
136135 PYTHON_KNOWN_VERSIONS: array [1 ..10 ] of TPythonVersionProp =
137136 (
138- (DllName: ' libpython2.5.dylib' ; RegVersion: ' 2.5' ; APIVersion: 1013 ; CanUseLatest: True ),
139- (DllName: ' libpython2.6.dylib' ; RegVersion: ' 2.6' ; APIVersion: 1013 ; CanUseLatest: True ),
140- (DllName: ' libpython2.7.dylib' ; RegVersion: ' 2.7' ; APIVersion: 1013 ; CanUseLatest: True ),
141- (DllName: ' libpython3.2.dylib' ; RegVersion: ' 3.2' ; APIVersion: 1013 ; CanUseLatest: True ),
142- (DllName: ' libpython3.3.dylib' ; RegVersion: ' 3.3' ; APIVersion: 1013 ; CanUseLatest: True ),
143- (DllName: ' libpython3.4.dylib' ; RegVersion: ' 3.4' ; APIVersion: 1013 ; CanUseLatest: True ),
144- (DllName: ' libpython3.5.dylib' ; RegVersion: ' 3.5' ; APIVersion: 1013 ; CanUseLatest: True ),
145- (DllName: ' libpython3.6.dylib' ; RegVersion: ' 3.6' ; APIVersion: 1013 ; CanUseLatest: True ),
146- (DllName: ' libpython3.7.dylib' ; RegVersion: ' 3.7' ; APIVersion: 1013 ; CanUseLatest: True ),
147- (DllName: ' libpython3.8.dylib' ; RegVersion: ' 3.8' ; APIVersion: 1013 ; CanUseLatest: True )
137+ (DllName: ' libpython2.5.dylib' ; RegVersion: ' 2.5' ; APIVersion: 1013 ),
138+ (DllName: ' libpython2.6.dylib' ; RegVersion: ' 2.6' ; APIVersion: 1013 ),
139+ (DllName: ' libpython2.7.dylib' ; RegVersion: ' 2.7' ; APIVersion: 1013 ),
140+ (DllName: ' libpython3.2.dylib' ; RegVersion: ' 3.2' ; APIVersion: 1013 ),
141+ (DllName: ' libpython3.3.dylib' ; RegVersion: ' 3.3' ; APIVersion: 1013 ),
142+ (DllName: ' libpython3.4.dylib' ; RegVersion: ' 3.4' ; APIVersion: 1013 ),
143+ (DllName: ' libpython3.5.dylib' ; RegVersion: ' 3.5' ; APIVersion: 1013 ),
144+ (DllName: ' libpython3.6.dylib' ; RegVersion: ' 3.6' ; APIVersion: 1013 ),
145+ (DllName: ' libpython3.7.dylib' ; RegVersion: ' 3.7' ; APIVersion: 1013 ),
146+ (DllName: ' libpython3.8.dylib' ; RegVersion: ' 3.8' ; APIVersion: 1013 )
148147 );
149148{ $endif}
150- { $IFDEF PYTHON25}
151- COMPILED_FOR_PYTHON_VERSION_INDEX = 1 ;
152- { $ENDIF}
153- { $IFDEF PYTHON26}
154- COMPILED_FOR_PYTHON_VERSION_INDEX = 2 ;
155- { $ENDIF}
156- { $IFDEF PYTHON27}
157- COMPILED_FOR_PYTHON_VERSION_INDEX = 3 ;
158- { $ENDIF}
159- { $IFDEF PYTHON32}
160- COMPILED_FOR_PYTHON_VERSION_INDEX = 4 ;
161- { $ENDIF}
162- { $IFDEF PYTHON33}
163- COMPILED_FOR_PYTHON_VERSION_INDEX = 5 ;
164- { $ENDIF}
165- { $IFDEF PYTHON34}
166- COMPILED_FOR_PYTHON_VERSION_INDEX = 6 ;
167- { $ENDIF}
168- { $IFDEF PYTHON35}
169- COMPILED_FOR_PYTHON_VERSION_INDEX = 7 ;
170- { $ENDIF}
171- { $IFDEF PYTHON36}
172- COMPILED_FOR_PYTHON_VERSION_INDEX = 8 ;
173- { $ENDIF}
174- { $IFDEF PYTHON37}
175- COMPILED_FOR_PYTHON_VERSION_INDEX = 9 ;
176- { $ENDIF}
177- { $IFDEF PYTHON38}
178- COMPILED_FOR_PYTHON_VERSION_INDEX = 10 ;
179- { $ENDIF}
149+
150+ COMPILED_FOR_PYTHON_VERSION_INDEX = High(PYTHON_KNOWN_VERSIONS);
151+
180152 PYT_METHOD_BUFFER_INCREASE = 10 ;
181153 PYT_MEMBER_BUFFER_INCREASE = 10 ;
182154 PYT_GETSET_BUFFER_INCREASE = 10 ;
@@ -4747,7 +4719,7 @@ procedure TPythonEngine.DoOpenDll(const aDllName : string);
47474719 i : Integer;
47484720begin
47494721 if UseLastKnownVersion then
4750- for i:= Integer(COMPILED_FOR_PYTHON_VERSION_INDEX) to High(PYTHON_KNOWN_VERSIONS) do
4722+ for i:= Integer(COMPILED_FOR_PYTHON_VERSION_INDEX) downto 0 do
47514723 begin
47524724 RegVersion := PYTHON_KNOWN_VERSIONS[i].RegVersion;
47534725 FDLLHandle := SafeLoadLibrary(GetDllPath+PYTHON_KNOWN_VERSIONS[i].DllName);
@@ -4757,8 +4729,6 @@ procedure TPythonEngine.DoOpenDll(const aDllName : string);
47574729 APIVersion := PYTHON_KNOWN_VERSIONS[i].APIVersion;
47584730 Exit;
47594731 end ;
4760- if not PYTHON_KNOWN_VERSIONS[i].CanUseLatest then
4761- Break;
47624732 end
47634733 else
47644734 RegVersion := GetPythonVersionFromDLLName(aDllName);
0 commit comments